零、概述
“盘古引擎”是我2013.4-2015.12年间,在“远明山水网络科技有限公司”担任引擎部部门经理期间,带领9人团队研发的第三代大型3D游戏引擎。
这代引擎使用Ogre 3D作为框架,使用C++、D3D 9.0c、HLSL 3.0、OpenAL、PhysX3.2和MyGUI作为开发语言或者中间件。研发团队研究了大量国际上顶尖的论文,借鉴和吸收了大量的高端算法和设计模式,同时也借鉴了其它世界闻名的游戏引擎,如CryEngine 3和Frostbite。同时,我们也花费了大量时间,研究出了一些自己原创的算法。
一、通用
面向数据的设计模式(DOD)
能大幅减少cache miss,从而大幅提高了引擎的运行性能。
多线程渲染
将图形API的调用全部移到主线程之外的一个线程(称为渲染线程)里,并且这个线程只用于调用图形API。这样就能利用多核CPU的性能,大幅提升帧率。
Job system
将主线程里特别耗时的操作都封装成不同的Job,在主线程之外的线程池里处理。从而提升性能,也能避免主线程帧率不稳定。
内存池和对象池
集中处理小对象的内存申请,能够避免内存碎片,从而提升性能,避免内存申请失败造成的崩溃。
二、图形
渲染效果分级
渲染效果具有可伸缩性(纹理分辨率、采样类型、材质等级、可视距离、渲染算法的分级),支持各种性能的硬件,甚至支持集成显卡流畅的玩游戏。
高性能渲染管线
采用了Hybrid deferred shading,可以达到deferred lighting 的效果,并且和deferred shading 的效率一样。支持数以千计的点光源,并且支持阴影。
进行了深度优化,最小化状态切换,从而减少CPU开销。
材质系统
高性能的材质系统,以及大量材质算法(可以表现任何材质、视差映射和法线贴图、次表面散射、各向异性高光、菲涅尔效果、过程式植被动画)。
全实时的动态光影
由于项目要求实现24小时动态光影、动态天气和场景可破坏,所以不能使用预烘焙Lightmap和Light Probes,场景里的光源全部是实时渲染的。
那么全局光照怎么实现呢?支持了LPV,用于模拟间接光照。
SSDO用于模拟环境遮挡,可以弥补低频的间接光导致的几何细节里的AO效果缺失。https://www.bilibili.com/video/BV1rf4y147cP/
IBL(基于图像的光照)用于模拟镜面反射环境物体,支持环境立方体贴图动态产生。
新手村视频:https://www.bilibili.com/video/BV1av4y1f7md/。
24小时动态光影
太阳方位连续24小时变换,也叫TOD(Time Of Day)。
视频:https://www.bilibili.com/video/BV1qZ4y1P7aR/。
动态天气
在延迟着色的基础上,使用后期处理实现下雨和下雪效果。编辑器里录制的下雨视频:https://www.bilibili.com/video/BV1Ah41117qM/。
上线游戏里的下雨和下雪截图:
开放大世界和超大视距
支持开放式大世界,地图大小不受限制。运行时,资源加载使用异步流式方案,这样就不用在加载场景时一次性加载场景的所有资源了,从而避免了加载时间过长以及内存占用过大的问题;异步加载避免了卡顿。
超大场景视距。地形支持16公里。
远景使用Imposter技术来提升性能。
超大规模角色渲染
支持“千人同屏,万人国战”,在使用不同的模型时,支持同屏渲染1000人左右。如果使用相同的模型,采用了VTF和LOD两个技术,支持渲染10万-100万角色。
捏脸
主角的脸部(包括眼睛、眉毛、瞳孔、胡须、刺青等等)都可以自定义。
抗锯齿(改进的MLAA)
软粒子
HDR(线性光照、Bloom、Tone mapping)和颜色色阶
软阴影(CSM和PCF)
体积雾
体积光
海水渲染
基于FFT。编辑器里录制的视频:https://www.bilibili.com/video/BV1i54y1a7Wx/。
游戏里的截图:
运动模糊
景深
IK
支持脚部跟地面高度之间的吻合,也支持眼睛凝视的身体姿态调整。
其它
- 主角独立的光照系统,保证了不同光线下角色脸部的美观。
- 道路。
- 延迟贴花。
三、物理
支持PhysX 3.2
碰撞
布料
破碎
布娃娃
四、声音
3D声音
环境音效
DSP
材质声音
不同的物体指定不同的材质,用于播放不同的声音。例如人走在或者子弹击中沙地上、雪地上、石板上等的声音是不同的。
五、GUI
支持MyGUI
六、工具链
场景编辑器
角色编辑器
材质编辑器
特效编辑器
过场动画编辑器
质保工具
帧分析工具(GPA plus)
可以强力截取绝大部分加壳的MMO端游。
七、正在开发的技术
基于物理的渲染
流体动力学
Impostor
过程式植被
八、待开发
声音遮挡
声音实时合成
TOY(四季轮回)
3D或者基于flash的UI
嘴唇动作和声音过程式同步
脸部动画
九、注意
公司刚成立时,本打算只做一个传统的MMO项目,画面上过得去就行。所以美术资源制作标准上较老,甚至漫反射贴图里还带有光照信息。后来随着自研引擎的进步,公司打算将美术品质提升到“天刀”和“天谕”的水平,这个两个游戏是当时MMO端游的标杆。但是美术的工作量太大,所以一度法线贴图是使用CrazyBump批量生成的。
后来有一小部分资源是按照标准流程制作,例如,使用ZBrush制作法线贴图,还有高光贴图和材质参数经过了仔细调整等等,才将引擎的渲染能力基本上呈现了出来。
本文里的视频和截图大部分都是从2015年开发的MMO项目《战秦》里面的场景截取的,一小部分是从2014年开发的MMO项目《项羽》里面截取的。正是上述原因,视频和截图里的画面品质会出现跳跃。
如有疑问,请与我联系,QQ:463038758。