零、概述

“盘古引擎”是我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

支持脚部跟地面高度之间的吻合,也支持眼睛凝视的身体姿态调整。

其它

  1. 主角独立的光照系统,保证了不同光线下角色脸部的美观。
  2. 道路。
  3. 延迟贴花。

三、物理

支持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(又名盘古引擎)的技术特性相关推荐

  1. 分布式图处理引擎Graph Engine 1.0 预览版正式发布

    分布式图处理引擎Graph Engine 1.0 预览版正式发布 我们很高兴地宣布,由微软亚洲研究院开发的Graph Engine 1.0预览版正式发布.Graph Engine是一个基于内存的分布式 ...

  2. 分享本周所学——Unreal Engine 5(UE5/虚幻引擎5)安装以及创建项目的常见问题

    大家好,欢迎来到<分享本周所学>第八期.本人是一名人工智能初学者,刚刚大一.最近突发奇想打算跟同学用UE5开发一个小游戏,目前计划是做一个Roguelike卡牌游戏.我之前是有C++算法基 ...

  3. Godot Engine 4.0横空出世,Vulkan大怪兽加持,画质提升简直亮瞎眼

    [CSDN 编者按]经历了漫长的等待,万众瞩目的 Godot Engine 4.0 正式版在其 3.0 版本发布 5 年以后,终于带着海量令人兴奋的新功能横空出世! 整理 | 开发游戏的老王 责编 | ...

  4. 'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯服务器引擎)(预告版)

    关键词: IOKING IOCP TCP  Transmission Server Engine Lock Free Interlocked 云猴完成端口TCP通讯服务器引擎 无锁 原子锁(函数) ' ...

  5. qt5.9.0调试如何查看变量的值_从0开发3D引擎(四):搭建测试环境

    大家好,本文介绍了3D引擎的测试方法,搭建了本地的测试环境. 上一篇博文 wonder-yyc:从0开发3D引擎(三):搭建开发环境​zhuanlan.zhihu.com 下一篇博文 wonder-y ...

  6. 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析

    大家好,本文介绍了Wonder的高层需求和本系列对应的具体功能点. 确定Wonder高层需求 业务目标 Wonder是web端3D开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态. ...

  7. c语言传奇引擎源码,Ei3.0服务端引擎源代码+登陆网关+客户端插件

    Ei3.0服务端引擎源代码+登陆网关+客户端插件 procedure TPANEL.Button3Click(Sender: TObject); var P:integer; mItem:DWORD; ...

  8. AI同传变革性进展:搜狗同传3.0首创语境引擎,让机器具有理解、推理能力

    [导读]近日,在极客公园大会上,搜狗同传最新版本 3.0 首次正式亮相.自 2016 年推出业内首个商用机器同传产品以来,经过数次迭代,搜狗同传 3.0 同样以业内首个"多模态"同 ...

  9. ABBYY FlexiCapture Engine 10.0:创建模板识别的新工具

    实现数据提取快速配置(适用于简单类型的文档)是ABBYY FlexiCapture Engine 10.0这个软件开发工具包的一大特点.为了让用户可以充分使用该功能,ABBYY FlexiCaptur ...

最新文章

  1. sklearn与pandas的缺失值处理
  2. bzoj 4332:JSOI2012 分零食
  3. 程序员面试金典 - 面试题 17.09. 第 k 个数(set优先队列/DP)
  4. pow()函数的应用
  5. .net系统自学笔记——数组
  6. mongo 查询显示字段_MongoDB查询操作限制返回字段的方法
  7. Effective_STL 学习笔记(四十五) 注意 count、find、binary_search、lower_bound、upper_bound 和 equal_range 的区别...
  8. Python实现批量Word转PDF
  9. 输入电容及DCM-CCM-QR变压器计算
  10. kind安装k8s集群
  11. html输入QQ自动获取QQ头像,代码实现WordPress评论框输入QQ号码自动获取QQ头像和昵称...
  12. Nolan的分形分布估计软件Stable使用教程
  13. 微信小程序自定义picker多列选择器
  14. 智力过河游戏c语言,Flash AS代码实现智力过河小游戏
  15. 华为OWS平台和HEC服务浅见
  16. 掌握桌面整理的技巧,让你的桌面更加整洁
  17. aspf ftp_FTP主动模式和被动模式
  18. 分销小程序开发|分销系统开发是怎么裂变的?
  19. Django 之验证码实现
  20. excel怎么一个格子斜分_『在Excel中,把一个格子用线分成三个怎么弄啊』一个单元格怎么斜分两个...

热门文章

  1. ACR2010_现实医疗环境下RA缓解率低是否可以用预测因素解释
  2. windows7下替换记事本
  3. 2010水瓶座年运势
  4. 生产追溯系统方案——Namisoft
  5. 微服务学习总结4(网关和consul结合)
  6. java计算机毕业设计林家餐厅自助点餐管理系统源码+系统+mysql数据库+lw文档
  7. 星期几—YYYY-MM-DD,表示一个日期,你知道是星期几吗?
  8. 客户体验和客户服务的区别
  9. rk3288-linux6.0移植
  10. idea protoc did not exit cleanly. Review output for more information.