目录

昨天——使用3D实时引擎和负责技术支持

初识3D实时引擎——Java 3D

CryEngine 3

OGRE

UE

cocos2d-X

Urho3D

Godot

Unity3D

昨天——自研引擎

自研CrazyEngine 1.0:练手的第一代游戏引擎

自研CrazyEngine 2.0:第二代游戏引擎

自研CrazyEngine 3.0:第三代游戏引擎

自研CrazyEngine 4.0:第四代游戏引擎

昨天——原创的技术

阴影防止边缘抖动

动作缓存进纹理实现同屏百万级别的角色渲染

地形材质层预混合

昨天——其它

截帧工具

分布式纹理压缩

内部技术分享

翻译并出版了《 Vulkan programming guide》

今天——CE 5.0

实时GI

实时光追反射

GPU-driven rendering pipeline

海量角色渲染

其它

今天——其它

GPU烘焙器

在线培训

自媒体

明天

云引擎

引擎5.0时代

元宇宙


不知不觉中,跟游戏引擎的缘分已经将近20年了。最近机缘巧合下整理了下这些年的做过的东西,也展望下未来。希望自己不忘初心,方得始终。也希望借机跟还坚守在这个领域的同行们交个朋友,切磋切磋。

昨天——使用3D实时引擎和负责技术支持

初识3D实时引擎——Java 3D

2005-2007年,就读于北京理工大学,攻读硕士学位。自学轻量级引擎Java3D,完成课题“3D仿真在化工场景动态搭建的应用”。Java 3D是个轻量级游戏引擎,支持网页上运行。

 

CryEngine 3

2012.12 – 2013.5,在畅游使用CE 3.6做《仙剑Online》项目,任引擎接口人的职位。CE是我个人最喜欢的引擎,性能和效率达到了非常好的平衡,在后来的工作中经常研究其渲染算法,获取灵感。只是易用性太差,CryTek一度濒临倒闭。

OGRE

2013.5 – 2015.12,在北京远明山水网络科技有限公司任职引擎部门经理期间,带领10人团队魔改Ogre 1.8,开发“盘古引擎”。

UE

2016.3 – 2016.9,在巴别时代使用UE4做VR和ARPG demo。UE的渲染效果是目前最好的,在后来的工作中经常研究其渲染算法,尤其是PC端的延迟管线,以获取灵感;但性能相较CE低不少。

写过几个插件。例如支持CUDA解码视频流的插件,RTX 2080上能支持47路1080P视频流的解码。

cocos2d-X

2017.3 – 2018.2,在有爱互动使用cocos2d-X做slg项目《红警Online》。cocos2d-X的好处是开源,源码简单易修改。坏处是3D和工具部分是严重短板,官方正在补齐。

Urho3D

个人第四代引擎就是基于这个开源引擎实现的。

Godot

预计个人第五代引擎会基于这个开源引擎实现。

Unity3D

2018.3至今,在手游公司负责Unity3D引擎技术支持,主要的内容有:性能优化,实现渲染效果,解决兼容性问题。

昨天——自研引擎

自研CrazyEngine 1.0:练手的第一代游戏引擎

2007年毕业,到2009进入游戏行业之前,业余时间自己写了一个“麻雀虽小,五脏俱全”的玩具,用于个人练习各种算法和模块。主要的技术点有视差贴图、具有遮蔽功能的镜头光晕、实时合批等。由于当时的图形API还不支持实例化合批,用的技术是寄存器常量合批,很有年代感的技术。

自研CrazyEngine 2.0:第二代游戏引擎

2009年进入游戏行业到2012年,带团队自研了一个3D引擎,用于《圣殿之光》、《希腊神话》等MMO RPG项目

自研CrazyEngine 3.0:第三代游戏引擎

2013.5-2015.12,在北京远明山水网络科技有限公司担任引擎部经理期间带领团队开发。主要的技术特性有全实时光照、Hybrid deferred shading、动态天气、千人同屏、捏脸等,详细内容见:

Crazy Engine 3.0(又名盘古引擎)的技术特性_Crazy Engine的博客-CSDN博客零、概述“盘古引擎”是我2013.4-2015.12年间,在“远明山水网络科技有限公司”担任引擎部部门经理期间,带领9人团队研发的第三代大型3D游戏引擎。这代引擎使用Ogre 3D作为框架,使用C++、D3D 9.0c、HLSL 3.0、OpenAL、PhysX3.2和MyGUI作为开发语言或者中间件。研发团队研究了大量国际上顶尖的论文,借鉴和吸收了大量的高端算法和设计模式,同时也借鉴了其它世界闻名的游戏引擎,如CryEngine 3和Frostbite。同时,我们也花费了大量时间,研究出了一些自己https://blog.csdn.net/CrazyEngine/article/details/114579286?spm=1001.2014.3001.5502

2015.5录制的新手村场景:

见:Crazy Engine 3.0(又名盘古引擎)——新手村_哔哩哔哩_bilibili

全实时光照

见:Crazy Engine 3.0——24小时动态变化光影(Time Of Day)_哔哩哔哩_bilibili

动态天气

见:Crazy Engine 3.0——动态天气_哔哩哔哩_bilibili

千人同屏

捏脸

自研CrazyEngine 4.0:第四代游戏引擎

2016-2020年,业余时间带领一个虚拟团队开发,对标UE4渲染效果,最大特点是画面真实、Lightmap的烘焙速度很快:

引擎截图(视频见:Crazy Engine 4.0 alpha版_哔哩哔哩_bilibili)

2016年之前一直在自研端游引擎,引擎里都是实时光影,因为要支持动态天气。由于没有合适的实时GI算法,室内只能用点光源来模拟GI,效果一直不好。室外没有GI,但是因为支持SSAO和天光/地光算法,效果也还可以。

2016年进入手游游戏行业以后,不论使用Unity还是UE,都需要离线烘焙lightmap。虽然效果好,但是烘焙时间实在太长了,严重影响项目的快速迭代。虽然后来出现了progressive、GPU烘焙等改进方案,但是还是远远达不到实时级别的预览,很影响美术的快速开发。

为了解决这个问题,2019-2020年开发了一个快速的烘焙器,目前已经能将中小场景的烘焙时间控制在3秒以内,下一步优化性能,希望能在大场景下也达到实时级别的预览。

烘焙器演示(视频见:Crazy Bakery Alpha版解说_哔哩哔哩_bilibili)

昨天——原创的技术

阴影防止边缘抖动

2010年左右原创的技术。由于阴影分辨率有限,摄像机移动时,场景里法线方向跟太阳方向接近垂直时总会闪烁地非常厉害,另外,地面上阴影边缘也会疯狂闪烁。搞清楚了问题的根源,解决方案就简单了。只要让物体渲染到阴影上时,像素密度保持不变,并且将起始位置进行圆整就行了。虽然这个方案解决不了运动物体的阴影的边缘闪烁,但是场景里毕竟绝大多数是静态物体,效果改善非常明显。

后来Unity里内置阴影的“Stable Fit”跟这个技术原理完全一样。

动作缓存进纹理实现同屏百万级别的角色渲染

我们在很多资料里看到过这种类似说法:“xxx合批算法,但不支持带骨骼蒙皮的物体”。确实,每个带蒙皮的DC都有自己独特的动作,需要传入矩阵,会破坏合批。而公司的项目主打的特色是“千人同屏,万人国战”,甚至十几万人的攻城战,所以这个问题必须要解决。有的公司尝试过多种方案,例如多线程计算骨骼变换矩阵+SIMD,或者在CUDA上计算,但都只能部分缓解性能压力,不能从根本上解决。我们原创了将骨骼变换矩阵缓存到RT上的方案,这样既避免了运行期间大量的骨骼变换矩阵的更新,又不破坏合批,再加上模型LOD,支持同屏渲染1000个角色很轻松。再配合imposter等技术,渲染百万级别的角色理论上是完全可行的。

2015年底项目和公司解散,随着引擎团队各分东西,这个技术在业界得到了广泛地应用。后来还有人将这个技术进行了改进,直接存储变换好的顶点,更加适合手游这种算力有限、顶点数量也较少的应用场景。

后记:后来无意中翻看GPU Gems 3里的一篇文章,发现跟这个技术实现几乎完全一样。按照实现的时间来说,这个技术不属于我们团队的原创。但确实是我们自己在面对千人同屏这个需求时琢磨出来的。

地形材质层预混合

2017年支持“红警Online”手游项目时首次提出的,渲染地形时,能大幅度减少过多的纹理读取造成的带宽和算数指令的开销。

2020年底又用于公司3D MMO RPG手游中的地形优化。在iPhone上实测,有30%的帧率提升,在带宽相对来说不友好的安卓机器上会有更好的表现。

2019年9月4日发布的UE 4.23开始的支持Run Time Virtual Texture(RVT)跟这个技术原理一样,但是做的要复杂和强大的多,毕竟是国际一流的引擎团队。之后4.24进行了改进优化,4.25对手机进行了支持。

昨天——其它

截帧工具

2015年,美术提出需求,想借鉴一下行业标杆型端游的美术制作标准,例如模型面熟、捏脸模型怎么布线和绑定等。但是像天刀、天谕这种大作都有防截帧的功能,GPA等工具都不能截取。正好这时自研引擎经过两年开发也比较成熟了,所以有时间去开发一个“强力”截帧工具,取名“GPA plus”。经过半年时间里断断续续地开发,最终几乎能截取市面上的所有基于D3D 9开发的32位端游。

分布式纹理压缩

使用Unity开发跨平台项目的人都知道,Build Settings里切换平台时,会根据每个纹理指定的对应平台的压缩格式去压缩纹理,并根据mipmap相关的设置自动生成纹理的mipmap。这两个过程非常慢,并且打包机器上的CPU性能不同会有不同的时间占比。公司里的项目反映会占用总时间的一多半,我在自己2017年春购买的Macbook pro上测试一个工程,目测占据了95%的时间。

所以2018年写了个技术demo,使用分布式压缩技术实现了平台的快速切换,见:

Unity里加速纹理压缩_Crazy Engine的博客-CSDN博客使用Unity开发项目的人都知道,Build Settings里切换平台时,会根据每个纹理指定的对应平台的压缩格式去压缩纹理。压缩纹理非常慢,会占用总时间的一多半。那能不能把这个时间降下来呢?2018年秋就接到了公司的这个需求。网上看到有人之前尝试着解决这个问题,说白了就是把压的工作从烂CPU(作者指的主要是Mac)转移到强大的CPU上(主频高、核多),见https://blog.codingnow.com/2016/12/unity3d_remote_pvrtextool.html。这个方案至少打开了https://blog.csdn.net/CrazyEngine/article/details/114238760?spm=1001.2014.3001.5502

内部技术分享

技术分享。平均每个月面向全公司举行一次正式的技术分享,引擎团队内部的技术分享几乎每周都有。

翻译并出版了《 Vulkan programming guide》

今天——CE 5.0

经过2年技术调研和demo验证,2021.12.21正式启动,希望能完成从技术追随者到引领者的转变。主要特性有:

1、综合利用传统光栅化、计算着色器、光追的优势。

2、深入挖掘GPU-driven的性能优势。

3、主要面向云渲染和XR,实时渲染效果预计能达到3A级影视的级别。

实时GI

移动端上效果基本正常,已经打包到各个主流平台上进行测试,中小场景下iPad Pro上能流畅运行。下一步继续改善效果,并集中进行性能优化,预计在大场景(500米 x 500米)下,中档手机(例如iPhone 8 plus)下的实时GI开销控制在1-3毫秒。

实时光追反射

GPU-driven rendering pipeline

对于大场景,基本上消除了CPU上的性能开销:

海量角色渲染

华为Mate 30 Pro(4096角色+4.4百万三角形)

RTX 2080(100万角色+364.6百万三角形)

还有巨大的优化空间,预计华为Mate 30 Pro下可以实现百万角色渲染,并且达到30FPS以上;RTX 2080上可以在100万角色+364.6百万三角形的情况下达到60FPS。

其它

FSR、DLSS等。

今天——其它

GPU烘焙器

正在实现一款极速GI生成器,支持Unity和UE,希望在超大型场景里,也能达到实时的preview全局光照效果,基于Lightmap或者Probe。

在线培训

这些年一直在带引擎团队,招人和培养团队就是一项重中之重的工作内容。但是引擎程序员一直很难招聘,尤其是最近两年北京游戏人才外流严重,加上商用引擎的普及也让引擎方面的人才出现断崖式的下降,感觉更难招聘。一直以为只有中小型公司存在这种现象,但后来跟几个大厂的朋友聊,也是很难招。

有感于此,2021年春天开始,利用业余时间组建了个虚拟的工作室,专门出引擎相关的收费在线视频教程。主打的特色是:讲操作,更讲原理。这一点比绝大多数教程里只是讲操作要好很多,毕竟引擎程序员和TA都要知其然还要知其所以然。想的也比较简单,就是方便自己培养和招聘引擎相关的人才。经过不到一年时间摸索,我们出了将近十套教程。老师有了不少收入,也有了一些名气。欢迎想分享的朋友们加入我们,一起为行业做些贡献。目前我们教学群里也有了几百人,有点“天下英才尽入吾彀中”的感觉。并且也顺便开通了自媒体账号,专注于引擎技术方面的科普。

在线视频教程目前都在About CG网站上,网址是:ABOUTCG讲师|CrazyEngine,欢迎惠顾。

自媒体

定位引擎类的科普,见CrazyEngineCo的个人空间_哔哩哔哩_Bilibili。

明天

总体上,希望从跟随者转变成引领者。

云引擎

由于手机硬件性能和电池技术进入瓶颈期,玩家要想有更好的游戏体验,手机是做不到。随着5G的普及,以及流量的费用降低,云游戏是目前可预见的唯一解决方案。

目前的云游戏还处于初级发展阶段,说白了就是将存量游戏放到云端,终端只是个“视频播放器”。并且现有的引擎都还是单机运行模式。云引擎是真正的分布式引擎,我认为这是未来的发展方向。详细信息见:

云游戏的1.0和2.0_Crazy Engine的博客-CSDN博客纵观历史,基础科学和基础设施的发展都会开创新的时代。比如说造纸技术的发明,直接大幅提升了知识的传播速度;指南针的发明开启了大航海时代;瓦特改良了蒸汽机,直接将人类带入了蒸汽时代;法拉利发明了发电机,把人类带入了电气时代;计算机和互联网的出现,又将我们带入了信息化时代。那么接下来又会出现哪些改变人类社会的新技术和基础设施呢?公认的有3个:5G、云计算和人工智能。而云游戏正是同时利用了5G和云计算,所以前途不可限量。目前绝大部分游戏公司都在开发移动端游戏,那么为什么要发展云游戏呢?痛点主要有两方面:手机https://blog.csdn.net/CrazyEngine/article/details/112910076?spm=1001.2014.3001.5502

引擎5.0时代

随着UE 5.0 EA版本的发布,标志着引擎渲染技术进入了一个新时代。最核心的技术包括实时GI和模型支持超多的三角形,见官方的“古代山谷”这个场景。但是,这个demo对硬件的要求太高了。

我个人未来一两年的愿望是,能进一步优化,或者选型新的技术,把这个场景塞到手机上跑。详情见:

Crazy Engine 5.0 (Plan on first stage)_Crazy Engine的博客-CSDN博客Main target: distributed game engineSecondary target: new rendering pipeline on mobile.Feature:1. Hybrid rendering pipeline, make the best of rasterization, compute pipeline and raytracing unit.2. Physically-based realtime GI,3.昨天正式启动,忘了发。先..https://blog.csdn.net/CrazyEngine/article/details/122070175?spm=1001.2014.3001.5502

元宇宙

我知道,很多做技术的朋友一看到这个就想吐,说这又是资本的骗钱游戏。我亲身也经历过前两年的VR泡沫,对资本过度炒作一个新兴的业态也很反感。但是我们抛开这些外部的噪音,技术人员应该有自己理性的判断。首先我认为这个业态一定是未来,并且对我们当今社会的重构可能远超我们今天的预想,就像互联网。但这远远不会像资本热钱期待的那么快。

这个方向值得我用剩下的职场生命去深耕。

一名“老”引擎程序员的昨天、今天和明天相关推荐

  1. 如何使用搜索技巧来成为一名高效的程序员

    没有人是完全独立的孤岛,每个人都是整体的一部分.-- 约翰·多恩 对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序.如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码.即使是经验丰 ...

  2. java 代码换行_作为一名资深的程序员,你见过哪些很想吐槽的代码

    作为一名入行很多年的老程序员肯定会见到一些让人想吐槽又想笑的代码,很多程序员说:最想吐槽的是多年以前自己写的代码,现在看着这些代码就会特别想问一句,这是什么鬼,就好想删.但是呢,有些代码咋们不得不吐槽 ...

  3. 写给还在迷茫中的朋友,一名6年程序员的工作感悟!!!

    前言 很多年前,刚刚从大学毕业的时候,很多公司来校招.其中最烂俗的一个面试问题是:"你希望你之后三到五年的发展是什么?".我当时的标准回答是(原话):"成为在某一方面能够 ...

  4. 如何成为一名游戏开发程序员

    一.游戏程序开发的工作主要包括哪些方面 游戏开发中的程序开发主要由如下几个方面组成: 1.图形引擎 2.声音引擎 3.物理引擎 4.游戏引擎 5.人工智能或游戏逻辑 6.游戏GUI界面(菜单) 7.游 ...

  5. 如何使用搜索技巧来成为一名高效的程序员(很好的总结)

    没有人是完全独立的孤岛,每个人都是整体的一部分.-- 约翰·多恩 对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序.如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码.即使是经验丰 ...

  6. [转] 金山CEO求伯君今退休 老一代程序员时代结束

    10月24日消息,金山软件创始人求伯君今日起辞去其在金山软件所有执行性职务,正式退休.原微软亚洲工程院院长.亚太研发集团首席技术官张宏江博士接替求伯君正式为金山软件首席执行官(CEO).有观点指出,求 ...

  7. 程序员中一些老的程序员去哪了

    程序员中一些老的程序员去哪了 一.总结 一句话总结: 身边 老师 改行 发展 升职 公司 文中对应内容: 我的回答:就在您的身边.我迅速在脑子里过了一遍,成都SAP研究院每个敏捷开发小组都有至少两到三 ...

  8. unity3d引擎程序员养成

    unity3d引擎程序员养成 http://www.cnblogs.com/rentianlong/p/3806536.html 标准流程: 1. c++ Primer 英文版(第四或第五版) 全部看 ...

  9. 游戏引擎程序员养成计划

    说的很好,和我走的道路有点不谋而合,文章中提到的书本我基本都知道,很多都看过或者浏览过,英雄所见略同?O(∩_∩)O~ 游戏引擎程序员养成计划 三维图形学:  搞三维图形学首先还是要扎扎实实的先看解析 ...

  10. 作为一名成年人的程序员,如何刻意去结交朋友,结交什么样的朋友?

    相关阅读:作为一名成年人的程序员,没必要刻意去交朋友 笔者十几年前曾经看过一本书 <<My Job Went to India>>, 这本书里面提到过,要跟优秀的人一起工作. ...

最新文章

  1. 英语语法---介词短语详解
  2. php mysql 查询 区分大小写_MySQL查询字符串时区分大小写
  3. Android中GC的触发时机和条件
  4. SpringBoot2.0 基础案例(14):基于Yml配置方式,实现文件上传逻辑
  5. Requests+正则爬取猫眼电影TOP100
  6. python 软件开发_python到底能不能用于软件开发
  7. python列表转化为元组、集合_如何在Python中将元组列表更改为集合?
  8. 没革哪有新?看云计算在医疗行业的版图
  9. linux 内存坏了,Linux的缓存内存 Cache Memory详解
  10. python pyz_python-3.x – 如何在Alpine Linux容器上安装pyz...
  11. 开发流程与管理--华为硬件开发
  12. 基于STM32的串口通信详解
  13. 阿铭Linux_公有云学习笔记20190117
  14. 手机vnc连接云服务器,云服务器管理终端(VNC连接)说明
  15. win10 office提示‘VBE6EXT.OLB不能被加载‘怎么办
  16. 微信小程序学习(二)党费计算实例
  17. textlive、sublime和SumatraPDF配置
  18. css grid布局中的minmax()函数的使用
  19. java 定义别名_为java类起别名
  20. 【建议收藏】一文了解FPC柔性电路板(5.29更新)

热门文章

  1. 台式计算机把硬盘换了怎么进系统,联想台式机怎么进bios设置硬盘启动
  2. java resource文件_利用java如何实现读取resource目录下文件
  3. Mex HDU - 4747(dp)
  4. Win10 删除默认共享文件夹
  5. python鼠标移动到网页上、获取网页信息_python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法...
  6. 模拟人生4 Mac(经营模拟游戏)全DLC可无限金币版
  7. 使用IIS Live Smooth Streaming技术搭建流媒体直播系统
  8. c++中DLL文件的编写与实现——三步走
  9. 2015/7/28(总结昨天抄底操作失败-割肉自保)
  10. 在未来税制下个人所得税信息管理系统建设设想