我看未来游戏引擎的几大特性

一直从事渲染引擎的开发,也经常会去关注其他游戏引擎的发展。其实开发做了很久,才会发现有 一些问题需要去考虑:怎样才能算作引擎、怎样才算是优秀的引擎?我想引擎应该不只是能做出一款商业游戏就能算作称职的。再看看现在著名的几款商业引擎都有 各自的特色,不妨设想一下未来的游戏引擎都会有哪些特性:

1. Multi-Threading

记得大概还在一两年前的时候,很多人还在感慨多线程对游戏没有多大的加速效果。但是转眼间,我们已经进入了四核甚至八核流行的年代,我想众核离我们 也未必远矣。最初游戏中对多线程的使用还仅限于将渲染线程独立到一个单独的线程中执行,来达到CPU和GPU运算的同步执行,但是进入了多核年代这肯定已 经不能发挥出CPU的全部实力。随便设想一下其他可能并行加速的运算:骨骼动画、粒子系统、AI、甚至Scene Graph的遍历,想象的空间还很大呢。

2. GPU通用计算(Cuda、Direct Compute、 OpenCL)

同上类似,骨骼动画、粒子系统都可采用GPU通用计算进行加速,DX11通过Direct Compute提供了更好的OIT等效果, 相信其他的应用也不难挖掘。

3. 更全面的支持各种渲染API(DX9,DX10,DX11,OpenGL,OpenGL ES!)

能全面支持DX9, DX10,DX11,OpenGL图形API,并且用统一的接口提供所有API提供的特性,恐怕没几个引擎能做到。在这里我想强调的是OpenGL ES, 现在移动设备大有取代PC的趋势,支持OpenGL ES可能是未来引擎不可或缺的功能。不过考虑到某些平台对开发环境有特别的要求,比如WM7只支持.Net开发,这对我们开发通用的跨平台引擎带来了更大 的难度。

4. 更好的场景管理加速

目前看来k-d tree是一种较优的Scene Graph。 为了达到更好的加速效果,往往要结合其他加速方式:统一的LOD机制(Geometry LOD、Shader LOD、Texture LOD); 遮挡剔除算法;渲染状态的管理,减少状态的切换;场景零碎物体的合并(Geometry combine),减少draw call;Instancing, 同样减少draw call;甚至把零碎的小图合并到一张大的Texture atlas里面,等等。。。

5. 更好的材质、光照

目前统一的Blinn-Phong光照早晚有被替代的一天,Ward可能是下一个常见的光照模型。再加上不同的材质,石头、陶瓷、玻璃、布料等等,都会有不同的运算,这里改进的空间还有很大。

6. 更好的Shader系统

传统上有很成熟的shader tree\shader graph系统,现在Dx11带来了Dynamic Shader Linkage特性,期待在这一方面会有所突破。

7. 更拟真的动画系统

Animation可能是最被国内开发团队所忽视的一个领域,这里并不是说我们没有投入足够的美术资源去完成动画,而是在前沿的动画技术上落后了很 多。现在Kinect都来了,motion capture还会远么。想做到人物动作的拟真,不只是要有真实的动作数据,更重要的是人物动作和周围环境的交互,不管是跨越障碍还是飞檐走壁都离不了和 环境的交互。如果只是简单的播放动画,只能给人木偶一样的感觉。

8. 更广泛的使用脚本语言,带来更多的动态特性

脚本绝不是只能用在UI系统内部,AI甚至对渲染管线的控制都可以让脚本语言接管,LUA应该是最佳候选。有人可能会说用脚本语言控制渲染管线效率 太低了,不可否认这个缺点,但是它也带来很多好处,实时编辑运行甚至在Editor中使用图形化的手段进行控制都可以带来更大的易用性。我大胆的提出一个 设想,可以实现一个系统在游戏发布之前将LUA脚本语言编译成C++代码,再使用其他C++的编译器(比如ICC、GCC)将C++代码生成为目标的 DLL库。这看似让我们走了一个圈回到了原地,但是中间环节仍然带来了很多的收益。

9. 更智能的AI

不用多说了。

更具体的Feature

1. Mega Texture(SVT)

对无限大贴图的支持会带来什么,看看ID Tech5就知道了,它的重要性不言自明,另可参考Sparse Virtual Texture。

2. Real-Time GI(Cascaded Light Propagation Volumes、SSGI、...)

其他具体的地形、shadow、tessellation等等细节的技术就不赘述了。

暂时先想到这些,随时可能再增减。但是不是做到这些就足够了呢?

这个。。会不会有一天rasterization被real-time ray tracing所取代了?这。。。。

你可能感兴趣的:(多线程,游戏,数据挖掘,脚本,lua)