2024年5月28日发(作者:)

opengl或directX环境下3D游戏开发经验谈

一个游戏开发者畅谈6年3D游戏开发的相关经验

《如何学好游戏3D引擎编程》

此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战

自我,超越自我,这样才能攀登到游戏技术的最高峰

这篇文章是我一年半前,找工作时候写的,那时是发到学校的BBS上。现在我工作了,想

法和以前也有不同,但对游戏引擎编程理念还是基本差不多。在我没遇到U3以前,一直研究

WILDMAGIC,可以说是GAMEBRYO的前身吧,他们基本框架都差不多,是完全面向对象,

代码容易读,但它发展存在严重的弊端,这个也是它为什么不是牛B引擎的原因。但从渲染和

动画方面来看,U3的MATERIALTREE和ANIMTREEE是2个飞跃的,当我对我自己引擎渲染

材质和光照一筹莫展的时候,MATERIALTREE带来的希望。对比zf某(wildmagic)gamebryo

和ogre还有U3,各有优缺点,而且你可以看到一个引擎发展,从一个以多边形为渲染单元,

变成以meh做为渲染单元(现在很少有引擎场景管理分割多边形来做的我始终喜欢zf某引擎,

它是00-02之间的引擎,完全让你可以理解那时候显卡不是很强的时候,一个引擎应该具备的

特征。对于架构来讲,(wildmagic)gamebryo和ogre做的很好,u3的特点就是架

一个游戏开发者畅谈6年3D游戏开发的相关经验

构乱,没有什么可读性的技术文档,研究起来十分吃力。做为一个商业引擎,对于渲染方

面,我认为(wildmagic)gamebryo输给了ogre,框架设计还有弊端,ogre确实是一个好引擎。

而U3对于渲染过程,光照,阴影,就是一帧的渲染过程,处理的十分得当。动态生成hader

是一个引擎的发展的必然趋势,而往往动态生成最多的,也就是材质和光照,它们不能分开,

分开谈无意义,MATERIALTREE我始终认为是个太好的想法了,任何特效不需要程序员过多参

与,美术可以搞定一切,什么水,反射,折射,这些效果,编写起来易如反掌,还可以实时光

看效果。其他动态生成,也就是根据配置不同,来做处理,动态编译hader弊端太大,不能做

到所有,而且不灵活,如果动态生成和动态编译合起来,简直牛B透顶了。现在我的引擎已经

有了MATERIALTREE这个功能,ANIMTREEE在制作中。

这里面我重点谈的是图形方面,略带些动画方面,一个引擎最基本的是内核,包含内存管

理,文件读写,资源管理等等吧,也十分重要,我的引擎这些写的都很简单,基本都是

wildmagic里面的。

我总结3D引擎编程的4个阶段

第一阶段是了解3D原理和数学基础,大学里面学的线性代数,概率统计和高等数学完全

足够,在3D中都有充分体现。最好自己能做一个软引擎,这样整个3D流水线自己完全可以掌

控,然后在学D某之类的API很容易。

一个游戏开发者畅谈6年3D游戏开发的相关经验

第二阶段不要看引擎,还是应该以实现各种效果和基本算法为基础,包括各种图形特效,

场景管理,剪裁算法,各种动画算法,等等,所有那些单一的算法,如果这些都不是了解很好,

那么做引擎时引擎框架的接口也不会设计好!再添加这些算法和效果时会很困难,效率也不会

很高。

第三阶段,就是看大量的引擎,对引擎有很深刻的概念,3D引擎只是引擎的一部分,引擎