Crazy Engine 3.0(又名盘古引擎)的技术特性
零、概述
“盘古引擎”是我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。
Crazy Engine 3.0(又名盘古引擎)的技术特性相关推荐
- 分布式图处理引擎Graph Engine 1.0 预览版正式发布
分布式图处理引擎Graph Engine 1.0 预览版正式发布 我们很高兴地宣布,由微软亚洲研究院开发的Graph Engine 1.0预览版正式发布.Graph Engine是一个基于内存的分布式 ...
- 分享本周所学——Unreal Engine 5(UE5/虚幻引擎5)安装以及创建项目的常见问题
大家好,欢迎来到<分享本周所学>第八期.本人是一名人工智能初学者,刚刚大一.最近突发奇想打算跟同学用UE5开发一个小游戏,目前计划是做一个Roguelike卡牌游戏.我之前是有C++算法基 ...
- Godot Engine 4.0横空出世,Vulkan大怪兽加持,画质提升简直亮瞎眼
[CSDN 编者按]经历了漫长的等待,万众瞩目的 Godot Engine 4.0 正式版在其 3.0 版本发布 5 年以后,终于带着海量令人兴奋的新功能横空出世! 整理 | 开发游戏的老王 责编 | ...
- 'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯服务器引擎)(预告版)
关键词: IOKING IOCP TCP Transmission Server Engine Lock Free Interlocked 云猴完成端口TCP通讯服务器引擎 无锁 原子锁(函数) ' ...
- qt5.9.0调试如何查看变量的值_从0开发3D引擎(四):搭建测试环境
大家好,本文介绍了3D引擎的测试方法,搭建了本地的测试环境. 上一篇博文 wonder-yyc:从0开发3D引擎(三):搭建开发环境zhuanlan.zhihu.com 下一篇博文 wonder-y ...
- 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析
大家好,本文介绍了Wonder的高层需求和本系列对应的具体功能点. 确定Wonder高层需求 业务目标 Wonder是web端3D开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态. ...
- c语言传奇引擎源码,Ei3.0服务端引擎源代码+登陆网关+客户端插件
Ei3.0服务端引擎源代码+登陆网关+客户端插件 procedure TPANEL.Button3Click(Sender: TObject); var P:integer; mItem:DWORD; ...
- AI同传变革性进展:搜狗同传3.0首创语境引擎,让机器具有理解、推理能力
[导读]近日,在极客公园大会上,搜狗同传最新版本 3.0 首次正式亮相.自 2016 年推出业内首个商用机器同传产品以来,经过数次迭代,搜狗同传 3.0 同样以业内首个"多模态"同 ...
- ABBYY FlexiCapture Engine 10.0:创建模板识别的新工具
实现数据提取快速配置(适用于简单类型的文档)是ABBYY FlexiCapture Engine 10.0这个软件开发工具包的一大特点.为了让用户可以充分使用该功能,ABBYY FlexiCaptur ...
最新文章
- sklearn与pandas的缺失值处理
- bzoj 4332:JSOI2012 分零食
- 程序员面试金典 - 面试题 17.09. 第 k 个数(set优先队列/DP)
- pow()函数的应用
- .net系统自学笔记——数组
- mongo 查询显示字段_MongoDB查询操作限制返回字段的方法
- Effective_STL 学习笔记(四十五) 注意 count、find、binary_search、lower_bound、upper_bound 和 equal_range 的区别...
- Python实现批量Word转PDF
- 输入电容及DCM-CCM-QR变压器计算
- kind安装k8s集群
- html输入QQ自动获取QQ头像,代码实现WordPress评论框输入QQ号码自动获取QQ头像和昵称...
- Nolan的分形分布估计软件Stable使用教程
- 微信小程序自定义picker多列选择器
- 智力过河游戏c语言,Flash AS代码实现智力过河小游戏
- 华为OWS平台和HEC服务浅见
- 掌握桌面整理的技巧,让你的桌面更加整洁
- aspf ftp_FTP主动模式和被动模式
- 分销小程序开发|分销系统开发是怎么裂变的?
- Django 之验证码实现
- excel怎么一个格子斜分_『在Excel中,把一个格子用线分成三个怎么弄啊』一个单元格怎么斜分两个...
热门文章
- ACR2010_现实医疗环境下RA缓解率低是否可以用预测因素解释
- windows7下替换记事本
- 2010水瓶座年运势
- 生产追溯系统方案——Namisoft
- 微服务学习总结4(网关和consul结合)
- java计算机毕业设计林家餐厅自助点餐管理系统源码+系统+mysql数据库+lw文档
- 星期几—YYYY-MM-DD,表示一个日期,你知道是星期几吗?
- 客户体验和客户服务的区别
- rk3288-linux6.0移植
- idea protoc did not exit cleanly. Review output for more information.