zoukankan      html  css  js  c++  java
  • 聊一聊引擎的开发

    昨天和同事无意中聊到开发引擎使不是一件容易的事情。

    我想首先需要搞清楚的是什么是引擎。早在上世纪80,90年代,那时候的游戏开发都是从头来做,没有什么引擎,后来一些聪明的开发者把

    个个游戏中共用的部分独立出来,包装成了一个函数库并提供一组API共二次开发者调用,这边有了引擎。也就是说引擎的本质概念就是一个

    能够在不同游戏项目中,或者至少是同类型游戏中重用函数库而已。

    而今的现代游戏引擎则更加复杂,它融入了游戏开发的各个模块系统,资源管理系统,渲染系统,物理系统,声音系统,等等。这些系统有些

    容易实现一些,有些较为复杂,而且它们之间有时候并不是完全隔绝独立的,更过的是相互交融配合,互为支持。更为重要的是,一个完整的

    引擎还要有完备的工具,什么场景编辑器,特效编辑器,角色编辑器等等。

    现在回过头来说说开发一个引擎使不是件容易的事情。怎么说呢,总的来说还是一件比较有挑战的事情。从两方面说一方面是引擎的架构设计

    前面讲过了引擎是由各个系统组成,它们之间存在着或多或少的关系,这就需要良好的架构设计,使各个系统最大限度保持独立,同时在相互

    调用相互支撑更加自然协调,做到这一点其实并不容易,没有一些年的经验是很难做到的。在有就是实现层面,小到一个函数的定义,变量的

    声明大到工具的易用性等工作量也着实不小。以我的经验,一套3D引擎,不含任何逻辑部分,再加上编辑器代码,大约是15w~20w行左右.

    如果认为开发引擎很容易,我觉得也许只有卡马克才有资格,他能够在短时间内重写一个引擎。而除此之外认为做引擎很容易,要么是一位还

    不为人所知神人,要么就还没从有头到尾写过真正的引擎,或者能够拿得出手的引擎。毕竟现实摆在我们面前全人类牛逼引擎也超不过15个。而大家耳熟能详的quake,unreal, cryengine,这些当代牛逼引擎也经过若干年甚至十几年的不断进化才来的。

    至于说做一些特别玄的效果是很容易的事情,我觉得这个要从几个方面来说,如果是shader实现的特效,比如hdr,那么这当然是很容易的,

    至少有大量现成的shader代码可以使用,你只要加进去就行了。如果是一些算法性比较强的比如一些光影响效果等,如果仅仅是一个单纯的

    展示,写个几千行甚至上万行的程序,就仅仅展示这一项(就像很多论文中的试验程序那样),这时的难度不是如何架构如何编码,而是你

    算法,如果你参考的是别人的论文自己去实现这个demo,那么难度在于你对算法理解能力,当然这些的前提是你的编码不成问题,是一个
    C/C++的老手。

    而真正的引擎考虑的层面要远比这个高,它需要考虑这个特性与引擎其他部分的关系,调用过程,如何设计才能更加合理,什么样的实现方

    式才能更加高效简洁,增加这个特性对引擎的性能带来的影响,对引擎开放的接口会带来哪些变化,对工具制作带来的操作,文件数据格式

    的变化等等等等,一些列问题,使一个通盘的问题。效果的展示仅仅是开始,而不是结束!!!

    那么要制作一个引擎到底需要什么?钱?时间?,呵呵,这些是需要的,毕竟不能饿着肚子干,但仅仅需要这些那岂不是遍地都是牛逼的引擎

    了。最需要的是坚持与韧性!!!在不断的设计编码过程中来完善修正,甚至推翻再来,追求极致的过程。

    要想制作出色的引擎

    1. 对引擎及引擎各个系统深刻的理解,知道他需要做什么,或者说只需要做什么,这个直接决定了你做的是引擎,还是一个大杂烩。

    2. 对引擎及各个系统的结构性设计,这很重要,决定了你引擎的生命力。

    3. 功底还算深厚的C/C++编程

    4. 那就是你的执著与毅力了

    前三条是可以学习,进步,提高的,关键在于第四条!

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Leo1981816/archive/2010/04/27/5532276.aspx

  • 相关阅读:
    触发器
    新登录用户的次日成功的留存率
    获取薪水第二多的
    找到薪水比经理高的员工
    成绩排名
    exists 和 in
    sum+case 计数
    前N个员工的salary累计和
    员工的薪水按照salary进行按照1N的排名,相同salary并列
    洛谷2678 跳石头
  • 原文地址:https://www.cnblogs.com/lancidie/p/1951097.html
Copyright © 2011-2022 走看看