聊一聊引擎的开发

作者: 梁跃 (1 篇文章) 日期: 五月 4, 2010 在 10:06 上午

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

我想首先需要搞清楚的是什么是引擎。早在上世纪80、90年代,那时候的游戏开发都是从头来做,没有什么引擎,后来一些聪明的开发者把个个游戏中共用的部分独立出来,包装成了一个函数库并提供一组API共二次开发者调用,这边有了引擎。也就是说引擎的本质概念就是一个能够在不同游戏项目中,或者至少是同类型游戏中重用函数库而已。

而今的现代游戏引擎则更加复杂,它融入了游戏开发的各个模块系统,资源管理系统,渲染系统,物理系统,声音系统,等等。这些系统有些容易实现一些,有些较为复杂,而且它们之间有时候并不是完全隔绝独立的,更过的是相互交融配合,互为支持。更为重要的是,一个完整的引擎还要有完备的工具,什么场景编辑器,特效编辑器,角色编辑器等等。

现在回过头来说说开发一个引擎使不是件容易的事情。怎么说呢,总的来说还是一件比较有挑战的事情。从两方面说一方面是引擎的架构设计前面讲过了引擎是由各个系统组成,它们之间存在着或多或少的关系,这就需要良好的架构设计,使各个系统最大限度保持独立,同时在相互调用相互支撑更加自然协调,做到这一点其实并不容易,没有一些年的经验是很难做到的。在有就是实现层面,小到一个函数的定义,变量的声明大到工具的易用性等工作量也着实不小。以我的经验,一套3D引擎,不含任何逻辑部分,再加上编辑器代码,大约是15w~20w行左右.

如果认为开发引擎很容易,我觉得也许只有卡马克才有资格,他能够在短时间内重写一个引擎。而除此之外认为做引擎很容易,要么是一位还不为人所知神人,要么就还没从有头到尾写过真正的引擎,或者能够拿得出手的引擎。毕竟现实摆在我们面前全人类牛逼引擎也超不过15个。而大家耳熟能详的quake,unreal, cryengine,这些当代牛逼引擎也经过若干年甚至十几年的不断进化才来的。

至于说做一些特别玄的效果是很容易的事情,我觉得这个要从几个方面来说,如果是shader实现的特效,比如hdr,那么这当然是很容易的,至少有大量现成的shader代码可以使用,你只要加进去就行了。如果是一些算法性比较强的比如一些光影响效果等,如果仅仅是一个单纯的展示,写个几千行甚至上万行的程序,就仅仅展示这一项(就像很多论文中的试验程序那样),这时的难度不是如何架构如何编码,而是你算法,如果你参考的是别人的论文自己去实现这个demo,那么难度在于你对算法理解能力,当然这些的前提是你的编码不成问题,是一个C/C++的老手。

而真正的引擎考虑的层面要远比这个高,它需要考虑这个特性与引擎其他部分的关系,调用过程,如何设计才能更加合理,什么样的实现方式才能更加高效简洁,增加这个特性对引擎的性能带来的影响,对引擎开放的接口会带来哪些变化,对工具制作带来的操作,文件数据格式的变化等等等等,一些列问题,使一个通盘的问题。效果的展示仅仅是开始,而不是结束!!!

那么要制作一个引擎到底需要什么?钱?时间?,呵呵,这些是需要的,毕竟不能饿着肚子干,但仅仅需要这些那岂不是遍地都是牛逼的引擎了。最需要的是坚持与韧性!!!在不断的设计编码过程中来完善修正,甚至推翻再来,追求极致的过程。

要想制作出色的引擎

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

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

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

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

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

分类: 博客征文专栏, 图形和视觉计算, 游戏
标签:, ,

如需了解英特尔软件产品相关的性能和优化选项,请参阅优化注意事项.

 评论 (54)

2010年05月04日 21:57

Wang Ping 王平 (Intel)
Wang Ping 王平 (Intel)总分:
7,926
社区经理
很好的文章。看得出之所以叫游戏引擎,是因为它的重要性就像汽车引擎在汽车上的地位那样重要。
2010年05月04日 23:32


zhao4zhong1
做一个汉堡——演示一个效果
做麦当劳——开发一个引擎
2010年05月04日 23:34


zhao4zhong1
有执著与毅力做不出麦当劳——有执著与毅力也做不出引擎
2010年05月05日 00:10


partner4java
IT行业无论做什么,哪有说很简单就搞出来的啊。不过就目前能力而言,C对俺还是太难了
2010年05月05日 02:36


flyfox
好多错别字……
2010年05月05日 02:38

yybing
yybing总分:
5
注册用户
好多错别字……
2010年05月05日 05:57


rrreee333
好多错别字……
2010年05月05日 06:23


wangguanghui
呵呵,看了下,觉得自己要走到那一步还有很长的路要走.坚持下去.
2010年05月05日 08:28


mySingleLive
不错,但还少一条,那就是充满创造性的智慧
2010年05月05日 08:29


sss
好在哪里?通篇废话.哪个软件架构不是如此
2010年05月05日 08:54


Bajnokw
好,让我这个菜鸟知道什么事引擎了!
2010年05月05日 09:32


g_cofa
字数是不是太小了吧,写得很诚恳。
2010年05月05日 10:31


ZhiYue Sun
有些错别字很正常,但是还是能够看的懂的,我发现我们更多的是在别人的基础之上做开发,至于写引擎那是很遥远的事。
2010年05月05日 20:31


Ken
好多错别字……
2010年05月05日 21:09


IM_V_V
支持,支持,写的很朴实。大实话,哈哈
2010年05月05日 21:37

kiweenjain
kiweenjain总分:
10
注册用户
不错~!支持下~!
2010年05月06日 01:42


cranehovers
额 嗯,关于引擎的定义有些经典,一语点破,呵呵
2010年05月06日 09:10


Wang WenFei
"做一个汉堡——演示一个效果
做麦当劳——开发一个引擎"

很赞同这个说法。
2010年05月06日 09:49


travelhenry
直接点就是:
要想制作出色的引擎
1. 软件工程的思想;
2. 功底还算深厚的编程语言;
3.个人能力。

2010年05月08日 00:31


mdejtod
错别字一堆,可别误导了人家,呵呵
2010年05月08日 01:49


weihongcsu
"最需要的是坚持与韧性!!!在不断的设计编码过程中来完善修正,甚至推翻再来,追求极致的过程。"
深有体会,支持,强烈支持!!!!!!!!!!!
2010年05月08日 02:56


wwwcloudy
说的很好。
2010年05月08日 02:57


guiyu_2008@163.com
说的很对
2010年05月09日 00:53


sf
典型的技术人员,放大技术人员的作用,卡马克很牛逼吗?
2010年05月09日 02:02


fantuan2009
坚持,不是随便说说
2010年05月09日 10:03


xpoy
好在哪里?通篇废话.哪个软件架构不是如此
2010年05月10日 08:57


猫猫
GameInitialize() GameStart() GameEnd() GameActivate() GameDeactivate() GameCycle() 基本时间函数?!

游戏引擎类?Class GameEngine{}.... 等等....是不是哦?!
2010年05月10日 11:06


阿杜
原来这就是引擎
2010年05月10日 20:40


ityouyou99
都要记得看这篇文章!告诉你一个小秘密,有时间记得去http://www.ityouyou.com看看,期待您光临哦
2010年05月11日 09:31


是呀,坚持是最重要的.
2010年05月13日 20:41


maihong
明白了,什么是引擎.
2010年05月18日 23:18


lemonmk2
卡马克不牛逼吗?
2010年05月28日 02:34


Dell
明白了 就是MFC?
2010年06月13日 10:42


CMlr
LZ 讲得不错
2010年06月13日 23:34


wzj2775
看得出楼主有渊博的知识,学习了。
2010年06月15日 20:53


asdfasd
qiang
2010年06月16日 06:43


Cjy
我也是做了多年的游戏引擎开发,你说得我非常认同,写得也不错,就是错别字多了些。
2010年06月17日 18:54


Jte
写得不错,看得出搂主功力不潜,学习了
2010年06月23日 17:49


kalcaddle
嗯,小明白了。
C++高手,我的目标
2010年06月27日 00:54


RJJ
IT业太神秘了!
2010年07月30日 01:47


IT教父
写的太烂,太肤浅了!废话一堆!
2010年08月19日 21:58


梁承祝
呵呵,,支持
2010年08月20日 01:14


hywood
有什么难的,和其它编程有什么区别,根本就不难
2010年08月20日 02:45


晓宇
这一看,才知道开发引擎是这么一个浩大的工程.我原来还以为有些directx基础的就OK了.
那,有的招聘单位,招3D引擎开发人员,要的文凭是大专以上(含大专).那是咋回事啊?
本人小白,飘走~免挨打~
2010年08月20日 05:15


s4gg
此文可用以教育下一代.
2010年08月20日 05:35


魅族M9
楼主太厉害了。。
2010年08月20日 19:43


陈翔飞
通篇废话 大道理谁不晓得
2010年09月01日 19:56


反复反复反复发
通篇废话
而且还不少错误的认识,比如开头就是一句:“早在上世纪80、90年代,那时候的游戏开发都是从头来做,没有什么引擎”
错别字一大堆
2010年09月10日 19:54


huobof
我很赞同博主的说法。

另外我看那些反对者可能就一个人来捣乱的
2010年09月10日 20:00


huobof
尤其赞同这两段:

至于说做一些特别玄的效果是很容易的事情,我觉得这个要从几个方面来说,如果是shader实现的特效,比如hdr,那么这当然是很容易的 ,至少有大量现成的shader代码可以使用,你只要加进去就行了。如果是一些算法性比较强的比如一些光影响效果等,如果仅仅是一个单纯的 展示,写个几千行甚至上万行的程序,就仅仅展示这一项(就像很多论文中的试验程序那样),这时的难度不是如何架构如何编码,而是你算法,如 果你参考的是别人的论文自己去实现这个demo,那么难度在于你对算法理解能力,当然这些的前提是你的编码不成问题,是一个C/C++的老 手。

而真正的引擎考虑的层面要远比这个高,它需要考虑这个特性与引擎其他部分的关系,调用过程,如何设计才能更加合理,什么样的实现方式才能更 加高效简洁,增加这个特性对引擎的性能带来的影响,对引擎开放的接口会带来哪些变化,对工具制作带来的操作,文件数据格式的变化等等等等, 一些列问题,使一个通盘的问题。效果的展示仅仅是开始,而不是结束!!!

2010年12月21日 17:09

yuanjh2001
yuanjh2001总分:
5
注册用户
好文章!获益匪浅!
2010年12月24日 00:14


学毛标兵
写的不错,不过国内的人也就写写这类文章,很笼统。细的东西不愿意说,很保密。
2011年02月11日 00:02


pantian
在软件业,引擎这个概念在似乎也只是在游戏行业比较常见。

在其它软件行开发业,一般是统称为开发平台,或者架构,或者直接称呼为SDK包的,很少使用引擎这个概念。
2011年04月22日 06:56


shyandsy
谢谢楼主。一直都搞不清楚到底什么是游戏引擎,一方面是没有机会接触,另一方面也没有多少时间。谢谢普及。

 引用 (0)


 写评论  

欲获得技术支持,请访问软件支持页面.
姓名 (必填)*

电子邮件 (必填,不在本页面显示)*

您的 URL (可选)


评论*