昨天和同事无意中聊到开发引擎使不是一件容易的事情。
我想首先需要搞清楚的是什么是引擎。早在上世纪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