Back
Featured image of post UE5的黑科技探寻

UE5的黑科技探寻

2020年5月13日,知名游戏引擎公司Epic发布了一条令无数影视从业者、游戏从业者甚至玩家都激动不已的视频 ——《初探虚幻引擎5》,视频通过逼真的场景和代入感超强的实时动画将一款次时代游戏引擎的强大体现的淋漓尽致

虚幻5初体验

虚幻5的抢先体验版已经发布到了Epic Game Launcher上,对应的源码工程也可以在官方的Github网站上拿到。

虚幻引擎5中文技术文档: https://docs.unrealengine.com/5.0/zh-CN/

虚幻引擎5源码地址: https://github.com/EpicGames/UnrealEngine/tree/ue5-early-access

虚幻引擎5官方入门课程链接: https://www.unrealengine.com/zh-CN/onlinelearning-courses/ue5-early-access-quickstart

此外,官方还免费给用户提供了视频演示中的Demo,方便大家快速体验新的功能与特性。(备注:工程98GB,最低系统要求为NVIDIA GTX 1080/AMD RX Vega 64或以上显卡,8GB显存、32GB系统内存)

打开编辑器,会发现虚幻5的界面有了较大的改动。扁平化的设计使界面看起来更为清晰和简洁,很大程度地改善了用户的预览体验。

当然,虚幻5的重头戏主要在新发布的两个核心技术上,Nanite和Lumen。我们可以通过Demo预览一个拥有数亿个三角形的场景,也可以动态调整光源参数来实时预览全局光照效果。

除了渲染上的变化,还有很多新的功能:

  • 引擎内置集成了Quxiel的Bridge工具,可以直接将扫描的高清资产拖入到引擎中使用.
  • 提供了全新的关卡加载系统WorldPartition,可以实时灵活地加载地图数据
  • 全新的关卡协作编辑方式,支持多人合作编辑关卡,提供工作效率
  • 提供了新的GameplayFeaturePlugin,可以迅速设计玩法原型
  • FullBodyIK、Root Motion Warpping等新的动画系统,可以自适应地形的实时调整骨骼位置
  • ControlRig得到完善,可以在编辑器内自定义调整骨骼动画,动画工作流程得到进一步优化
  • MetaSound,可以在编辑器内对音频做更为丰富的操作
  • Perforce插件支持Change list版本管理
  • 支持Python脚本


技术

如果有朋友和我一样一直在关注着虚幻5,就会发现它早已不像最初那般神秘,各路大佬的深挖也让我们能更客观地看待这个引擎和相关的技术。

虚幻5最具代表性和影响力的核心技术有两项 :Nanite和Lumen

Nanite

Nanite,中文翻译为虚拟微多边形体几何体技术,简单来说就是引擎可以在运行时支持包含几乎无限个三角面的模型,即美术们可以将拥有数以亿计的多边形的模型直接导入到虚幻引擎中使用。如果这项技术真的能在工业界广泛应用,对游戏和影视行业的影响可以说是颠覆性的。

科普一下,我们常见的三维游戏世界(或CG场景)一般都是由三角面构成的,计算机通过对三角面逐个渲染从而展示出整个画面。一个3A游戏场景往往由数千万个三角面构成(包括人物、地形、建筑等),而一个科幻电影更是夸张到需要对数亿甚至数十亿的三角面进行渲染。

显然,三角面的数量越多,渲染的速度就越慢(虽然现在的显卡越来越强大),所以对于需要实时渲染的游戏来说,除了想尽办法剔除不展示的三角面,减少可见的三角面也是一个不得不做的妥协。

那么如何减少可见的三角面呢?技术上我们可以采用LOD动态减少三角面的数量(边坍缩技术)。但工业界常用的手段是在一开始就限制主模型的面数,一般会先在Zbrush里制作高模,然后烘焙置换贴图或法线贴图到低模上(保存更多的细节信息用于渲染流程中的光照计算),这样一个面数很低的模型也能表现出接近高模的效果。

显然这是为了性能的不得已而为,关注点集中在艺术效果的美术们必然不喜欢这冗余而繁杂的流程。如果虚幻5真的可以支持近乎无限的三角面数量,那么一定会大大解放艺术家们的生产力,这套高模烘焙低模的方式也会随着历史的推进逐渐被掩埋。

模型制作流程
模型制作流程

相比画面效果,程序们当然更关注技术细节。从名字“虚拟微多边形”的“虚拟”二字,我们就很容易联想到操作系统中的虚拟内存技术。“虚拟内存”技术的核心思想是将硬盘虚拟为内存,通过动态替换的方式解决内存空间不足的问题(当然还有其他很多方面的意义)。

虚拟内存示意(简化版)
虚拟内存示意(简化版)

同理,渲染领域也有一个原理类似的技术称为“虚拟纹理”,由于GPU的显存有限,无法将一个复杂大场景的纹理全部存储,因此可以将这些纹理合成之后再存储到硬盘中。在渲染时根据屏幕上用到的资源索引进行实时更新,图形大神卡马克在2000年左右就成功地将纹理虚拟化技术应用在了游戏毁灭战士3(Doom 3)中。

虚拟纹理示意
虚拟纹理示意

按照这个思路,几何模型似乎也可以做“虚拟化”。其实类似的技术很早就出现了,上世纪80年代初,卢卡斯影业图形学部门几位大师做出的REYES渲染架构,把参数化曲面动态细分成微多边形,再用算法筛选出接近1像素大小的微表面并进行渲染。卡马克后来尝试了这种方案,但是由于几何体存储方式特殊、GPU管线性能等原因,该方案在很长一段时间没有达到预期的效果,毕竟硬件基础决定上层建筑。

Reyes Rendering on the GPU
Reyes Rendering on the GPU

不过很快,随着Computer shader的出现,显卡可以做更多通用的计算,原来复杂且效率较低的渲染管线也可以通过Mesh Shader的方式进行优化,Billion级别的三角形绘制似乎变得可能。

Compute Shaders: Optimize your engine using compute,AMD
Compute Shaders: Optimize your engine using compute,AMD

Epic作为长期研究各种引擎技术(CEO Tim 就曾将REYES和光追定位成为了两大GPU的发展方向)并不断落地工业界的领军者,在Computer shader出现的第一时间就抓住了机会,公开了虚幻5的虚拟微多边形体几何体技术的演示Demo,轰动了整个行业。从官方透漏的信息来看,出于对通用性的考虑,他们并没有使用英伟达提供的Meshshader技术而是直接利用ComputerShader做软光栅,同时配合自定义的算法做像素级别的三角面剔除,真正的实现了无限制的“LOD”。

很巧的是,最近网易雷火工作室在虚幻5正式公布前发布了类似Nanite的“无矩渲染技术”,同样也是采用3D扫描技术+ComputerShader(确切的说是MeshShader,与虚幻5不同)的方式来实现高精度模型的渲染,从而能够支持面数高达二十一亿的游戏场景。而且他们已经将场景发布到了逆水寒的周版本更新包,足以看出几何模型虚拟化技术已经部分应用到实际生产环境中,前景也逐渐明朗起来。

3D扫描建模技术在《逆水寒》端游中的落地应用
3D扫描建模技术在《逆水寒》端游中的落地应用

说了这么多,Nanite真的能立刻颠覆游戏行业么?当然不能。首先从技术上讲,Nanite很明显还有诸多限制,比如目前不支持骨骼模型(即人物模型)的渲染、比如Demo中展示的高精度场景需要用3D扫描技术,而很多物体的材质难以扫描(比如大气、水体或是非真实感渲染的对象等)。虽然虚幻通过收购Quixel给用户提供了大量免费高精度资产,但实际生产环境相当复杂,使用过程中必然会暴露出诸多方面的问题。

其次,如此复杂且高精度的模型还有对应的高精度贴图很快就会将你的硬盘塞满,导入导出操作对机器的带宽也是一个考验。经过今天对Demo的测试,我发现不配一台1T SSD+2080ti显卡的机器真的没办法流畅地使用。

最后,任何一项技术从出现到广泛使用都是一个漫长的过程,哪个公司做产品会立刻使用新技术而放弃当前稳定的流水线呢?就算可以,新工作流的磨合是不是也需要一段时间?人员的学习和培养是不是也要时间?所以大家还是要理性看待,根据实际情况决定是否使用Nanite。但是不管怎么说,单从支持几乎无限的模型面数这一成果来说已经足够了,可以预见未来Nanite将促进3D扫描技术在相关行业中的应用,扫描建模和美术资产制作流程的结合也许会逐渐成为业内的主流方案。

Lumen

Lumen,是一个全动态全局光照解决方案,可以实时对场景和光照变化做出反应而无需专门的光线追踪硬件。因为光线的反射,在现实环境中你很难看到一个物体没有任何颜色(即使他处于一个很暗的角落里)。全局光照(GI)简单来说就是模拟真实环境中光线可以近乎无限次反射到各个地方的效果,实现全局光的核心思想就是光线追踪,也就是需要正确计算光线会击中哪些三角面。然而实际情况中我们往往会采用光照贴图预先烘焙的方式,在避免大量实时计算的同时实现质量相对较高的效果,因此你会发现很多游戏的场景中光照效果都是几乎不变的。

cornell box
cornell box

左边是照片,右边是全局光照的渲染效果

GI技术其实一直在被研究和使用,主要从硬件和软件两个方面进行优化。硬件方面主要使用RTX技术做加速计算,软件方面主要使用各种自定义的加速结构来简化计算,比如基于体素(voxel)和基于屏幕空间的的全局光照算法。Lumen就是一个结合了软件层面的多个全局光照算法的方案,对于远处的场景使用体素计算,近处的使用屏幕空间的光线追踪修正。

Lumen的优越之处在于它每次更新光源时不需要等待贴图的烘焙和频繁地修改光照贴图UV,从而大幅度提高美术的工作效率。同时,配合Nanite技术,可以实现非常精细和逼真的反射效果。

说到这里,发现一个很有意思的点,为了高效地实现理想的渲染效果,人们一直在三维空间着色和屏幕空间着色中反复横跳。三维模型太多?那我们拿到屏幕空间去统一处理(Pixel shader)。GPU性能上来了但屏幕空间效果不完美?要不再回去优化一下模型的着色逻辑。拓展一下,其实我们经常遇到类似的问题,运行速度太慢?先把数据缓存到内存里。内存占用太大?那我实时去计算结果。很多时候,我们就是在对各种方案做取舍,而且随着技术(比如硬件)的发展,之前很老的方案可能就会再次被利用起来(实时光追,深度学习等)。

其他相关的技术比如Chaos物理与破坏系统、Niagara、动态IK、卷积混响和环境立体声渲染等,其实在19年就已经陆续地添加到虚幻4引擎了,不过一直在完善,这里就不再赘述。

图片里面的人物都是由Niagara粒子实现的
图片里面的人物都是由Niagara粒子实现的


谈谈游戏引擎

关于虚幻引擎,其实接触的多了,就会发现Unreal是一个结果导向的引擎,用户想要什么功能我们就做什么。由于Epic的团队本身也是游戏开发者,所以他们同时也是虚幻引擎最为忠实的用户,可以从用户的角度考虑大家的需求,我想这也是Unreal备受广大美术和策划喜爱的原因。相比之下,Unity看起来更追求架构上的完美以及技术上的革新,他们会实时地更新各种前沿的技术和设计(如深度学习框架),不断调整和优化代码框架(DOTS)。虽然也在努力提供各种工具支持,但毕竟精力有限,短期内容易造成各项工具链功能不完善、使用体验差的问题。

当然虚幻引擎的结果导向不代表他们不在意系统架构,Epic的CEO TimSweedey早在2005年就已经构思出了虚幻引擎未来的发展方向,比如引擎的计算架构分层

  • 图形层:利用GPU处理并行数据
  • 计算密集层(物理,碰撞检测,场景遍历,寻路):线程并行 (TaskGraph + ISPC, ISPC为数据并行)
  • 业务逻辑层:软件事务 STM

The Next Mainstream Programming Language: A Game Developer’s Perspective
The Next Mainstream Programming Language: A Game Developer’s Perspective

现在的虚幻也确实是这个思路,管线、数据密集计算等已经交给ISPC(物理模拟),也会用类似ECS的思想做一些插件的设计,这些和Unity的Burst+Job系统是相似的,只不过虚幻引擎以UObject为中心构成的整个系统(特别是Actor)过于臃肿,很多上层系统有点强制用户使用的意思,这算是历史遗留问题。

了解过二者发展历史和未来的Roadmap的朋友都可以理解,哪有什么各方面都无敌的引擎,不过是数十年来无数从业者一点点的积累和优化罢了。

虚幻引擎的RoadMap(发展路线规划)
虚幻引擎的RoadMap(发展路线规划)


未来

目前来看,对于游戏行业,如果真的能放弃贴图和UV这种为了提高性能而做出的妥协,那么高质量游戏的成本会大大降低(注意,主要针对高品质高画质的游戏)。和虚幻4带来的影响相似,小团队的作品天花板会不断提高,更多意想不到的优秀作品会涌现出来。

对于成熟的商业项目来说,渲染只是其中一环,最终的呈现与很多方面有关,因此Nanite和Lumen等技术对项目整体带来的提升非常有限。不过好在UE5的关注点不是只在渲染上,动画、音频、Gameplay、协作等方面的新功能也会给开发者带来巨大的帮助。

对于影视行业来说,对其产生最大冲击的并不是虚幻5本身,而是拥有高质量渲染效果和配套工具流的实时游戏引擎(包括虚幻4和Unity,以及各个大公司自研的引擎或工具)。鉴于实时渲染技术的不断革新,现在已经有不少企业使用虚幻引擎了(国内动画公司用的比较多)。我们可以在Daz里面找到合适的数字人,在Quixel的Megascan找到合适的扫描模型(UE用户免费使用),再花钱买点表情捕捉和动作捕捉的方案,而且未来的虚拟影片制作成本一定是会进一步降低,创作影片好像也没那么难了。

美剧《曼达洛人》使用虚幻4做场景
美剧《曼达洛人》使用虚幻4做场景

技术不断发展,画质仍会提升,但人们可能不会再局限于对画质的无限追求了,那渲染技术的尽头是什么呢?

期待虚幻5的进一步表现,也期待数字时代的真正到来。我相信我们正身处信息革命的浪潮,既是历史的见证者,也是历史的参与者。


原文

Image Share

Photo by Florian Klauer on Unsplash
Photo by Florian Klauer on Unsplash
Photo by Luca Bravo on Unsplash
Photo by Luca Bravo on Unsplash

相册语法来自 Typlog

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy