赞
踩
目录
早在2020年5月,虚幻官方放出了一个展示虚幻5代渲染特性的视频Lumen in the Land of Nanite,视频展示了基于虚拟微多边形几何体的Nanite和实时全局光照的Lumen技术,给实时游戏带来了影视级的视听体验。
当时的虚幻官方承诺在2021年上半年放出UE5预览版,果然守信如斯没有食言,在2021年5月下旬成功发布预览版UE5 Early Access(EA)。于是,我们可以研究UE5的编辑器、工具链、新的渲染特性,以及对应的UE5 EA版源代码和随同发布的资源工程AncientGame。
UE5编辑器一览,主场景是随同UE5 EA发布的工程AncientWorld。
本篇主要根据UE5 Early Access(EA)版本阐述UE5的以下内容:
为了限制篇幅的长度,将分为两部分,第一部分讲述编辑器、新特性和Nanite技术,第二部分讲述Lumen、其它渲染技术和总结。
本篇涉及的部分渲染基础概念及解析如下表:
概念 | 缩写 | 中文译名 | 解析 |
---|---|---|---|
Lumen | - | 流明 | UE5的实时全局光照技术。 |
Nanite | - | 纳米机器人 | UE5的虚拟微多边形技术。 |
本节将阐述UE5的安装、编辑器,以及与UE4不一样的新特性。
第一步,更新Epic Game Launcher,重启它。
第二步,点击UE5页面,点击“下载抢先体验版”。
第三步,在“库”页面,找到5.0.0按钮,点击下载。
切到UE5页面,往下拉倒最底,点击演示UE5新功能的示例项目中的获取示例按钮:
打开UE5页面,点击“访问源代码”按钮:
或者直接打开页面5.0 Early Access,下载Source Code(zip)或Source Code(tar.gz),解压之后就可以按照UE4的流程进行设置和编译。
利用下载好或者编译好的UE5编辑器打开AncientGame工程,若顺利启动,会出现如下提示页面:
按Ctrl+Space弹出Content Drawer,进入AncientContent/Maps,打开AncientWorld的地图:
打开关卡后,屏幕会出现一片黑,不要慌,正常现象,那是因为UE5在正常渲染场景前需要执行很多数据预处理:
等待漫长的数据处理结束后,就可以预览到AncientWold的主场景了:
UE5的编辑器主界面相较UE4,排版和UI风格都有了明显的变化。UI风格变得扁平化,更像DCC工具,排版上突出了关卡编辑区域,缩小如组件、内容浏览器等区域的占用:
如上图,每个区域的功能如下:
1、菜单栏,和UE4类似。
2、组件添加、内容搜索、关卡蓝图、Sequence等工具组件。
3、地图笔刷编辑模式。
4、播放和预览。
5、设置,包含世界、工程和插件等设置。
6、世界分区(World Partition)、数据层(Data Layer)等页面。
7、关卡Actor列表及属性面板,和UE4类似。
8、后台任务状态和版本控制。
9、内容浏览器和命令行工具。内容浏览器通过快捷键Ctrl+Space可以快速显示、隐藏。命令行不需要像UE4那样需要按~键了,更加方便设置控制台变量,提升调试效率。
10、关卡编辑主窗口,它的具体功能和UE4类似,但也有不一样的地方。比如Lit增加了Nanite可视组,用以显示虚拟微多边形技术的相关信息:
关卡编辑的Lit模式增加了Ninite可视化组,背景的噪点不是bug,是显示了Nanite的三角形模式。
本小节将阐述UE5的新渲染特性。
Nanite意为纳米机器人,UE5用它来作为新一代的网格处理着色技术命名,意图明显,就是替换和升级传统以网格LOD为粒度的剔除和光栅化着色技术,利用极小粒度处理网格和三角形。
UE5的Nanite全称是Nanite Virtualized Geometry(Nanite虚拟微几何,Nanite虚拟微多边形),它支持自动化处理高精度的网格模型,支持像素级别的三角形的高细节表面和海量物体。它只会在合适的层级处理需要且仅需的数据,防止表面细节丢失,或者处理过多的数据。Nanite在渲染前会对网格、纹理、动画等数据执行很多预处理,保存在高度压缩和细粒度的二进制流中,并且自动处理它们的LOD。
AncientGame示例工程的Nanite微多边形技术一览。左上:AncientGame的神庙;右上:左上对应的微多边形可视化;左下和右下分别是工程的Boss和山体细节。
UE5种开启网格的Nanite技术有3种方式:
导入静态网格时,可在设置界面开启。
可在网格编辑器的网格属性面板设置。
通过资源浏览器的右键菜单可批量开启。
启用Nanite技术后,可获得诸多益处:
Nanite网格和传统的静态网格类似,本质上仍然是一个三角形网格,但其核心不同点是大量的细节和高度的数据压缩。最重要的是,Nanite使用了一个全新的系统,以一种极其有效的方式渲染数据格式。
传统的静态模型需要设置标记去启用Nanite技术。Nanite网格可以支持多组UV和顶点色。材质被分配到网格的一部分,因此这些材质可以使用不同的着色模型和动态效果(可在shader中执行)。材质分配可以被动态交换,就像任何其它静态网格,Nanite不需要额外处理来烘焙材质。
由于Nanite有着更好的渲染性能,更少的内存和硬盘占用,所以尽可能地开启静态网格的Nanite属性。静态网格为了更好地利用Nanite技术,最好满足以下几点:
目前版本,Nanite支持以下组件类型:
Nanite【不】支持的带动画的类型包括但不限于:
此外,Nanite还【不】支持以下特性:
需要注意的是,Nanite网格的逐顶点切线并不是像传统静态网格那样存储在网格数据中(官方文档解释是为了减少数据尺寸),因此,切线是在像素着色器动态计算出来的。Nanite由于切线空间和传统方式存在着使用上的差异,可能会导致边缘处的不连续。
Nanite也【不】支持有着以下配置的材质:
Nanite无法正常渲染使用了以下特性的材质(可能会消失):
Nanite【不】支持以下渲染特性:
使用了以下视图相关的物体过滤:
前向渲染
VR模式的Stereo渲染
分屏
MSAA
灯光通道
针对拥有完整细节的Nanite网格的光线追踪
部分可视化模式
Nanite支持拥有最新驱动的以下GPU的PlayStation 5、Xbox Series S|X、PC等平台:
Nanite为了监测性能,需关注以下几点:
聚合几何体(Aggregate Geometry):Aggregate Geometry将许多微小的、不相连的东西在远处合成一个体积(Volume),比如头发、叶子、草。它会影响LOD和遮挡剔除技术。
紧密堆积的表面(Closely Stacked Surfaces):Nanite会将那些靠近视图最顶层表面的物体合并起来,会将堆积在一起的物体都绘制出来,而不考虑它们之间的遮挡和隐藏关系。
上图是AncientGame的正常画面,下图是对应的使用了Closely Stacked Surfaces的实例可视化。黑色部分是因为Nanite不支持动态角色导致。
大多数情况下,Closely Stacked Surfaces会降低绘制调用,但某些情形可能带来相反效果。移动摄像机在Overdraw可视化模式下可以显示这些堆叠的表面是如何被渲染的:
分面和硬边法线(Faceted and Hard-edge Normals):理想情况下,网格的顶点数应少于三角形数。如果顶点数和三角形的比率为 2:1 或更高,则可能存在问题,尤其是在三角形计数很高的情况下。比率为 3:1 意味着网格是完全分面的,其中每个三角形都有自己的三个顶点,没有一个与另一个三角形共享,通常这是因为它们没有平滑导致的法线不相同。下面两图展示了多面和平滑法线的异同:
上图左侧使用了分面法线,上图右侧使用了平滑组法线。
上图左侧使用了分面法线的Nanite三角形可视化,上图右侧使用了平滑组法线的Nanite三角形可视化。由此可知使用平滑组的法线会采用更少的三角形绘制。
除了以上提到的几种可视化模式,UE5还提供了其它多种可视化方式,通过Overview模式可以统览所有数据:
UE5提供了Nanite的多种可视化模式,分别显示不同数据。
开启Nanite的Overview会显示所有可视化模式缩略图。
利用控制台变量Nanitestats
可以实时查看当前画面的Nanite统计数据:
右侧显示了Nanite的裁剪数据和几何数据。
Lumen是UE5的全动态全局光照和反射系统,它是UE5的默认全局光照和反射方式。Lumen可以在从毫米级到公里级的大范围、带细节的环境中呈现无限反弹和间接镜面反射的漫反射。
为了开启Lumen,需要在工程设置中开启以下选项(默认都已开启):
开启Lumen之后,Lumen GI会代替SSGI和DFAO,Lumen反射会代替SSR,并且静态光照会被禁用,所有光照图都被隐藏。
Lumen支持的渲染特性如下:
Lumen GI解决的是场景物体的非直接光照部分,例如直接光的像素会影响附近的像素,这种现象也被称为色彩溢出(Color Bleeding)。同时,由于网格会遮挡和吸收部分非直接光,Lumen也能正确处理非直接光的阴影遮挡。
Lumen全局光照能够实时动态地处理非直接光的光照和阴影效果。
Lumen实现了全分辨率的法线细节,同时用较低分辨率计算间接照明以达到实时渲染的目的。
Lumen在Final Gather阶段解决天空光照,使得户内和户外的天空光有着明显的区别,户内更暗。此外,Lumen的天空光还支持低质量的透明光照和体积雾的GI效果。
发光材质通过Lumen的Final Gather完成光照传播,而没有额外的消耗。但也对发光材质的辐射区域大小和亮度都有限制,否则会引起噪点瑕疵。
Lumen为所有范围粗糙度的材质解决了间接镜面反射效果。
此外,Lumen也支持清漆材质的反射。
在EA版本,Lumen对光源特性的支持说明如下:
在工程设置和后处理体积中,可以设置Lumen的诸多参数,如软光追模式、细节追踪模式、全局追踪模式、硬件追踪模式以及GI和反射。
虚拟阴影图(VirtualShadowMap,VSM)是一种新的阴影投射方法,用于提供一致的、高分辨率的阴影、与电影质量的资产和大型开放世界的动态照明。
在工程设置中的阴影图方法中开启VSM(默认已开启):
VSM开启后,会替换传统的阴影技术,包含固定预计算阴影、距离场阴影、预览阴影、逐物体阴影、级联阴影、移动动态阴影等。
VSM开启后,阴影图光线追踪(Shadow Map Ray Tracing ,SMRT)便可以利用其来实现很多更精准和清晰的阴影及相关特性,包含半影、软阴影、接触硬阴影等。
利用SMRT技术,点光源实现了软阴影和接触硬阴影的特性。
左:PCF会模糊并删除表面重要细节;右:SMRT提供更可信的软阴影和接触硬阴影。
我们都知道,在传统的渲染中,为了优化定向光的阴影,会采用CSM。与之类似,UE5会为定向光采用剪辑图(clipmap)技术。
一个单独的虚拟阴影贴图并不能提供足够的分辨率来覆盖更大的区域。定向光使用了围绕摄像机扩展范围的剪辑图结构,每个剪辑图级别都有自己的16K VSM。每个剪贴图级别的分辨率是相同的,但覆盖的半径是前一个级别的两倍。
左:剪辑图可视化;右:VSM页可视化。
聚光灯采用了单个16k带mip链的VSM处理阴影的LOD,而不是clipmap;点光源使用了cube map,每个面拥有16k VSM,共6个。
上:聚光灯效果;下:对应的单个VSM可视化。
为了阴影渲染性能优化,UE5采用了缓存、粗糙页(Coarse Pages)等技术。
时间超分辨率(Temporal Super Resolution,TSR)是新一代的时间抗锯齿算法,用来替换传统的TAA。它支持的特性如下:
时间超分辨率可以在工程配置中开启或关闭,默认情况下,UE5已经开启了此技术。
左:4K原生分辨率渲染,帧率是20.57;右:利用时间超分辨率技术将1080p输出4K画质,帧率提升至44.22。
UE5针对移动端改进了部分渲染模块,包含:
世界分区(World Partition)是一种新的数据管理和流式系统,在编辑器和运行时都可以使用,它完全消除了手动将世界划分成无数子级别来管理流数据和减少数据争用的要求。
使用世界分区,世界作为一个单一的持久关卡存在。在编辑器中,世界被分割成一个个格子,可以根据感兴趣的区域部分地加载地图数据。当烘焙或启动PIE时,世界被划分为针对运行时流优化的网格单元,从而成为独立的流关卡。
可以在菜单栏Window/World Partition打开世界分区编辑器,拖动左键快速选择指定范围的所有格子,右击可弹出操作菜单,包含加载选中的格子、卸载选中的格子、移动摄像机到当前格子:
此外,世界还支持数据层(Data Layer)、HLOD(Hierarchical Level of Detail)、关卡实例化(Level Instancing)、一个Actor一个文件(One File Per Actor)等功能。
UE5的动画模块增加了全身IK(Full Body IK)、控制绑定(Control Rig)、运动变形(Motion Warping)、动画工具脚本以及在Sequencer方面的支持。
Full Body IK示意图。
Control Rig效果示意图。
Motion Warping效果示意图。
UE5的物理效果在新特性中也非常抢眼,主要有以下特性:
Chaos是UE5的轻量级物理模拟解决方案,是为了满足下一代游戏的需求而从头开始建造的。它支持的主要特性有:
1、动态刚体(Rigid Body Dynamics)
2、刚体动画节点和布料物理(Rigid Body Animation Nodes and Cloth Physics)
3、破坏(Destruction)
4、布娃娃物理(Ragdoll Physics)
5、车辆(Vehicles)
6、物理场(Physics Fields)。物理场系统使用户可以在运行时在特定的空间区域直接影响Chaos物理模拟。这些场可以配置为以各种方式影响物理模拟,例如对刚体施加力,破坏几何集合簇(Geometry Collection Clusters),锚定或禁用断裂的刚体。
7、流体模拟(Fluid Simulation)
8、头发模拟(Hair Simulation)
GamePlay框架增加了游戏和模块逻辑、数据注册表(Data Registries)、增加的输入系统。
数据注册表编辑器。
UE5通过Unreal Insights的Memory Insights模块改进了内存追踪和调试支持。可支持以下特性:
1、查看会话期间任意给定时间内所有已分配内存的快照。
2、在两个不同的时间比较所有已分配内存的快照。
3、查看每个内存分配的调用堆栈。
4、鉴定长期和短期(或临时)的内存分配。
5、查找内存泄漏。
Unreal Insights的Memory Insights编辑器一览。
提高了mac上iOS远程构建过程的可靠性,并添加了一个跨平台库,以提高通过USB与iOS设备交互的可靠性。
此外,还有增加的音频音效、重新设计的VR模板、Unreal Turnkey等等。
本章将对比UE4.26版本的源码,系统地阐述UE5 EA版本源码和UE4.26的不同。为了方便对比,使用Beyond Compare的文件夹对比功能:
两个版本的源码差异还蛮大,不过本章后续章节将专注在基础模块、渲染体系、Shader等方面的差异,主要集中在以下文件夹:
由此可见,在核心和基础模块,基本上都做了大量的改动和重构,涉及方方面面。
RHI:
RHICore:
增加实例化裁剪模块:InstanceCulling、InstanceCullingManager等,包含FInstanceCullingRdgParams、EInstanceCullingMode、FInstanceCullingContext、FInstanceCullingManager等类型,主要用于Nanite技术。
虚拟纹理增加或完善了数据读写和FVirtualTextureFeedbackBuffer、RenderPages、RenderPagesStandAlone等接口。
全局距离场数据(FGlobalDistanceFieldParameterData)增加了Mipmap和VT数据和接口。
HairStrand增加EHairBindingType、EHairInterpolationType、FHairStrandsInstance等类型。
增加或完善FVertexFactoryShaderPermutationParameters的类型。
MeshPassProcessor:
FDynamicPassMeshDrawListContext的FinalizeCommand阶段增加了NewVisibleMeshDrawCommand.Setup阶段。
摒弃SetInstancedViewUniformBuffer、SetPassUniformBuffer、GetInstancedViewUniformBuffer等UniformBuffer接口。
新增Nanite模块:
新增Lumen模块:
替换传统Shader绑定接口到RDG,如SHADER_PARAMETER_TEXTURE改成SHADER_PARAMETER_RDG_TEXTURE。
增加或完善RuntimeVirtualTextureProducer、FSceneTextureExtracts、EMobileSceneTextureSetupMode、Strata地层。
增强后处理效果,如增加了Temporal Super Resolution(TSR)。
增强了光照追踪模块,如RTGI、RTAO、RTR、RTShadow、RTSkyLight等。
DeferredShadingRenderer:
增加或增强了BasePass、DepthPass、SDF、GPUScene、GlobalDistanceField、BVH、GenerateConservativeDepthBuffer、LightRendering、InrectLightRendering、MeshDrawCommands、Shader、ScreenSpace、Shadow、MobileRender等等渲染模块。
从UE4.26到5.0EA,重要和基础的渲染模块都做了大大小小的修改。
新增Nanite:
新增Lumen:
新增Strata:
新增VirtualShadowMap:
新增InstanceCulling:
增强了HairStrands模块,如HairCards、HairScatter、BsdfPlot、ClusterCulling、Shadow、DeepShadow、EnvironmentLighting、GBuffer、Material、Visibility、Voxel等模块。
增强PathTracing、RayTracing、SSD、SSRT、TAA等模块。
删除了LPV模块。
完善基础、材质、着色、光照、阴影、专用Pass等模块,如AnisotropyPass、BasePass、MobileBasePass、BRDF、BurleySSS、CapsuleLigh、RectLight、TranslucentLighting、ClusteredDeferredShading、LightGrid、ForwardLighting、DeferredLight、DiffuseIndirect、DistanceFieldAO、DistanceFieldLighting、DistanceFieldShadow、GlobalDistanceField、Math、Decal、GpuSkin、Halton、MonteCarlo、HZB、LocalVertexFactory、MaterialTemplate、Particle、PlanarReflection、PostProcess、Reflection、SceneData、ShadingCommon、ShadingModels、Shadow、Volumetric等。
从前面几个小节可以看出来,最大的改变在于增加了Nanite、Lumen、VSM、InstanceCull、LevelInstance等模块和技术,同时修改了Engine、Render模块的相关类型和接口。
RHI层的变动主要在于将各种顶点、索引Buffer统一成了FRHIBuffer。
Renderer层增强了光线追踪,特别是屏幕空间的光线追踪,加强了距离场的各种应用,同时删除了LPV。
Engine层主要围绕着RHI、Renderer层的变动做了相应修改和调整。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。