游戏引擎科普:以开发者的名义如何做好一款3D引擎

时间:2017-04-19 http://www.longtuedu.com.cn 作者:龙图教育

赛车引擎作为一辆赛车的心脏部件,它的性能决定着整个赛车的性能、稳定性、速度、操纵感等。游戏也同样,游戏引擎是整个游戏的核心部件,它直接控制着玩家所接触到的剧情、关卡、角色、音乐、GUI界面等游戏元素,通过它可以将游戏中的所有元素联系在一起。

笔者所在的项目组最近正与一家科研机构合作研发一款地形渲染3D引擎,它可以创建超过10*10公里的特大虚拟现实场景,以真实GIS地理坐标数据1:1模拟超大场景的虚拟世界。并且在飞行视角中,可呈现超长可视距离和复杂错落的地形表现。我们旨在不同的光照场景中或动态气象环境中,以精细的pbr物理着色渲染,逼真表现对象在相应场景下应有的材质、反射与粗糙度,塑造细腻逼真的照片感画质。

1.jpg

研发期间,我们也对业界知名引擎做了深入研究,Unity、Unreal这样的实力大厂无需赘言,不过也有意外发现,国内引擎也在默默发力。一家名为C2engine的3D引擎公司引起了我的兴趣。最开始了解它是通过百度贴吧的一篇吐槽贴“揭开国产游戏引擎C2engine的真面目”。尽管该引擎目前还处于起步阶段,但是笔者比较看好其“无编程”和“HTML5”的发展理念,也算是顺应趋势了。相信国内多多少少的开发者对这款国产引擎也有所期待。

回到正题,要开发一款3D引擎,首先你要了解最基本的3D知识,如可编程流水线,固定流水线,骨骼动画,3D模型结构等知识,并能够用Dirct3D、OPENGL或OPENGLES图形库中任何一个做简单的Demo。通过Demo了解程序运行的原理后,再尝试封装一些简单算法、常用函数,利用这个简单封装做一款小的游戏Demo。在以上基础上再研究GPU编程比如CG、HLSL语言后,学习大型游戏开发中的常用算法,如Bloom算法、PSSM实时阴影算法等这些与Shader编程紧密相关的后处理渲染算法。

然而开发一款高品质3D引擎并不简单,笔者曾参与过国内知名IT游戏公司的3D游戏引擎开发项目,利用业余时间也开发过3D游戏引擎,从底层算法到架构设计都是一个人完成的,当然开发周期也比较长。那么除了3D知识还有哪些必备技能要掌握?


首先,像C、C++、Java或C#这样的主流编程语言,至少要拿下一门。编程和数据结构密不可分,它在游戏开发中主要用来存储数据及管理内存。开发3D引擎常用的数据结构有链表、数组、哈希表等常用的查找算法:二叉树查找,快速排序,二分查找等,这些常用的数据结构要重点掌握。

其次,开发者不能忽视线性代数的重要性。线性代数可以帮助开发者灵活运用向量、矩阵、四元数以及欧拉角这些基本的数学运算解决问题。运算主要涉及游戏开发中的物体移动、缩放、旋转以及点乘和差乘等。

另外,现在的3D游戏引擎渲染都是基于DirectX或OPENGL、OPENGLES这些图形库完成的,这就要求开发者能够熟练使用图形库的接口开发程序,在当前移动端跨平台异常火热的情况下,更建议大家学习OPENGL图形库。3D引擎的核心功能就是对游戏场景的渲染和物体的材质渲染。场景渲染使用的是后处理渲染效果,比如Bloom、Blur、Ssao、Pssm等。C2engine引擎交流群:189087351这些效果实现与GPU编程息息相关,因此要求大家至少掌握GLSL、HLSL或CG这些基于显卡GPU编程语言的一种。

最后是图形学算法,游戏要实现逼真效果离不开算法支持,比如柔体的模拟,刚体碰撞效果以及曲线插值算法等。学习图形学算法,建议大家阅读《算法导论》这本经典书籍。

另外在框架设计方面,需要掌握设计模式里常用的工厂模式,单件模式,状态模式,MVC模式等。初学者在使用设计模式时容易出现一个误区:为了使用设计模式而使用设计模式。记住过度的使用会适得其反,凡事要把握好度。真正的用剑高手,可以做到手中无剑,心中有剑的境界。




在线咨询

返回顶部