当前位置 博文首页 > 0向往0:剖析虚幻渲染体系(06)- UE5特辑Part 1(特性和Nanite

    0向往0:剖析虚幻渲染体系(06)- UE5特辑Part 1(特性和Nanite

    作者:0向往0 时间:2021-06-24 18:41

    目录
    • 6.1 本篇概述
      • 6.1.1 本篇内容
      • 6.1.2 基础概念
    • 6.2 UE5新特性
      • 6.2.1 UE5编辑器
        • 6.2.1.1 下载编辑器及资源
        • 6.2.1.2 启动示例工程
        • 6.2.1.3 编辑器功能区
      • 6.2.2 新渲染特性
        • 6.2.2.1 Nanite虚拟微多边形
        • 6.2.2.2 Lumen全局动态光照
        • 6.2.2.3 虚拟阴影图
        • 6.2.2.4 时间超分辨率
        • 6.2.2.5 移动端渲染
      • 6.2.3 其它新特性
        • 6.2.3.1 世界分区
        • 6.2.3.2 动画
        • 6.2.3.3 物理
        • 6.2.3.4 GamePlay
        • 6.2.3.5 性能和平台管理
    • 6.3 UE5渲染体系变化
      • 6.3.1 Core和CoreUObject
      • 6.3.2 RHI和RHICore
      • 6.3.3 Renderer
      • 6.3.4 Engine
      • 6.3.5 Shaders
      • 6.3.6 UE5渲染体系总结
    • 6.4 Nanite
      • 6.4.1 Nanite基础
        • 6.4.1.1 FMeshNaniteSettings
        • 6.4.1.2 StaticMesh
        • 6.4.1.3 NaniteResource
        • 6.4.1.4 Cluster, ClusterGroup, Page
      • 6.4.2 Nanite数据构建
        • 6.4.2.1 BuildNaniteFromHiResSourceModel
        • 6.4.2.2 BuildNaniteData
        • 6.4.2.3 ClusterTriangles
        • 6.4.2.4 FGraphPartitioner
        • 6.4.2.5 BuildDAG
        • 6.4.2.6 BuildCoarseRepresentation
        • 6.4.2.7 NaniteEncode
        • 6.4.2.8 FImposterAtlas::Rasterize
        • 6.4.2.9 Nanite数据构建总结
      • 6.4.3 Nanite渲染
        • 6.4.3.1 Nanite渲染概述
        • 6.4.3.2 Nanite渲染基础
        • 6.4.3.3 Nanite渲染流程
        • 6.4.3.4 Nanite裁剪
        • 6.4.3.5 Nanite光栅化
        • 6.4.3.6 Nanite BasePass
        • 6.4.3.7 Nanite光影
      • 6.4.4 Nanite总结
    • 特别说明
    • 参考文献

     

     

    6.1 本篇概述

    早在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。

    6.1.1 本篇内容

    本篇主要根据UE5 Early Access(EA)版本阐述UE5的以下内容:

    • UE5基础和入门。
    • UE5新特性。
    • UE5渲染体系变动。
    • Nanite虚拟微几何技术。
    • Lumen实时全局动态光照技术。
    • 其它UE5相关的技术。

    为了限制篇幅的长度,将分为两部分,第一部分讲述编辑器、新特性和Nanite技术,第二部分讲述Lumen、其它渲染技术和总结。

    6.1.2 基础概念

    本篇涉及的部分渲染基础概念及解析如下表:

    概念 缩写 中文译名 解析
    Lumen - 流明 UE5的实时全局光照技术。
    Nanite - 纳米机器人 UE5的虚拟微多边形技术。

     

    6.2 UE5新特性

    本节将阐述UE5的安装、编辑器,以及与UE4不一样的新特性。

    6.2.1 UE5编辑器

    6.2.1.1 下载编辑器及资源

    • 下载UE5引擎

    第一步,更新Epic Game Launcher,重启它。

    第二步,点击UE5页面,点击“下载抢先体验版”。

    第三步,在“库”页面,找到5.0.0按钮,点击下载。

    • 下载AncientGame工程

    切到UE5页面,往下拉倒最底,点击演示UE5新功能的示例项目中的获取示例按钮:

    • 下载EA源码

    打开UE5页面,点击“访问源代码”按钮:

    或者直接打开页面5.0 Early Access,下载Source Code(zip)或Source Code(tar.gz),解压之后就可以按照UE4的流程进行设置和编译。

    6.2.1.2 启动示例工程

    利用下载好或者编译好的UE5编辑器打开AncientGame工程,若顺利启动,会出现如下提示页面:

    按Ctrl+Space弹出Content Drawer,进入AncientContent/Maps,打开AncientWorld的地图:

    打开关卡后,屏幕会出现一片黑,不要慌,正常现象,那是因为UE5在正常渲染场景前需要执行很多数据预处理:

    等待漫长的数据处理结束后,就可以预览到AncientWold的主场景了:

    6.2.1.3 编辑器功能区

    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的三角形模式。

    6.2.2 新渲染特性

    本小节将阐述UE5的新渲染特性。

    6.2.2.1 Nanite虚拟微多边形

    Nanite意为纳米机器人,UE5用它来作为新一代的网格处理着色技术命名,意图明显,就是替换和升级传统以网格LOD为粒度的剔除和光栅化着色技术,利用极小粒度处理网格和三角形。

    UE5的Nanite全称是Nanite Virtualized Geometry(Nanite虚拟微几何,Nanite虚拟微多边形),它支持自动化处理高精度的网格模型,支持像素级别的三角形的高细节表面和海量物体。它只会在合适的层级处理需要且仅需的数据,防止表面细节丢失,或者处理过多的数据。Nanite在渲染前会对网格、纹理、动画等数据执行很多预处理,保存在高度压缩和细粒度的二进制流中,并且自动处理它们的LOD。

    AncientGame示例工程的Nanite微多边形技术一览。左上:AncientGame的神庙;右上:左上对应的微多边形可视化;左下和右下分别是工程的Boss和山体细节。

    UE5种开启网格的Nanite技术有3种方式:

    • 导入静态网格时,可在设置界面开启。

    • 可在网格编辑器的网格属性面板设置。

    • 通过资源浏览器的右键菜单可批量开启。

    启用Nanite技术后,可获得诸多益处:

    • 相比UE4,支持实时处理和渲染多了数量级的几何体复杂性、更高的三角形和物体数量。
    • 实时的帧性能不再受多边形数、绘制调用和网格内存使用的限制。
    • (可能)支持直接导入从ZBrush等DCC软件制作的高精度模型。
    • 直接使用高精度的网格,而不是使用预先烘焙的法线贴图。
    • LOD自动化处理,不再需要手动额外设置和处理网格LOD。
    • LOD过渡中,不存在或仅少量的质量损失。

    Nanite网格和传统的静态网格类似,本质上仍然是一个三角形网格,但其核心不同点是大量的细节和高度的数据压缩。最重要的是,Nanite使用了一个全新的系统,以一种极其有效的方式渲染数据格式。

    传统的静态模型需要设置标记去启用Nanite技术。Nanite网格可以支持多组UV和顶点色。材质被分配到网格的一部分,因此这些材质可以使用不同的着色模型和动态效果(可在shader中执行)。材质分配可以被动态交换,就像任何其它静态网格,Nanite不需要额外处理来烘焙材质。

    由于Nanite有着更好的渲染性能,更少的内存和硬盘占用,所以尽可能地开启静态网格的Nanite属性。静态网格为了更好地利用Nanite技术,最好满足以下几点:

    • 包含海量三角形或者三角形在屏幕占着很小的尺寸。
    • 在同一场景中拥有很多实例。
    • 可以作为遮挡其它Nanite几何体的遮挡体。

    目前版本,Nanite支持以下组件类型:

    • 静态网格(Static Mesh)
    • 实例化静态网格(Instanced Static Mesh)
    • 层级实例化静态网格(Hierarchy Instanced Static Mesh)
    • 几何数据集(Geometry Collection)

    Nanite【不】支持的带动画的类型包括但不限于:

    • 骨骼动画(Skeletal animation)
    • 形变目标(Morph Targets,Blend Shape)
    • 带世界位置偏移的材质(World Position Offset in materials)
    • 样条网格(Spline meshes)

    此外,Nanite还【不】支持以下特性:

    • 自定义深度模板(Custom depth or stencil)
    • 绘制实例顶点数据(Vertex painting on instances)

    需要注意的是,Nanite网格的逐顶点切线并不是像传统静态网格那样存储在网格数据中(官方文档解释是为了减少数据尺寸),因此,切线是在像素着色器动态计算出来的。Nanite由于切线空间和传统方式存在着使用上的差异,可能会导致边缘处的不连续。

    Nanite也【不】支持有着以下配置的材质:

    • 除Opaque之外的Blend Mode。
      • Masked和半透明的都不支持。
    • 延迟贴花。
    • 线框模式。
    • 像素深度偏移。
    • 世界位置偏移。
    • 自定义逐实例数据。
    • 双面的材质。

    Nanite无法正常渲染使用了以下特性的材质(可能会消失):

    • Vertex Interpolator节点。
    • 自定义UV。

    Nanite【不】支持以下渲染特性:

    • 使用了以下视图相关的物体过滤:

      • 最小屏幕半径
      • 距离裁剪
      • FPrimitiveSceneProxy::IsShown()的过滤
      • 带有以下特性的场景捕捉(Scene Capture):
        • 隐藏组件
        • 隐藏Actor
        • 仅显示的组件
        • 仅显示的Actor
    • 前向渲染

    • VR模式的Stereo渲染

    • 分屏

    • MSAA

    • 灯光通道

    • 针对拥有完整细节的Nanite网格的光线追踪

    • 部分可视化模式

    Nanite支持拥有最新驱动的以下GPU的PlayStation 5、Xbox Series S|X、PC等平台:

    • NVIDIA: Maxwell或更新的显卡
    • AMD: GCN或更新的显卡

    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的裁剪数据和几何数据。

    6.2.2.2 Lumen全局动态光照

    Lumen是UE5的全动态全局光照和反射系统,它是UE5的默认全局光照和反射方式。Lumen可以在从毫米级到公里级的大范围、带细节的环境中呈现无限反弹和间接镜面反射的漫反射。

    为了开启Lumen,需要在工程设置中开启以下选项(默认都已开启):

    开启Lumen之后,Lumen GI会代替SSGI和DFAO,Lumen反射会代替SSR,并且静态光照会被禁用,所有光照图都被隐藏。

    Lumen支持的渲染特性如下:

    • Lumen全局光照

    Lumen GI解决的是场景物体的非直接光照部分,例如直接光的像素会影响附近的像素,这种现象也被称为色彩溢出(Color Bleeding)。同时,由于网格会遮挡和吸收部分非直接光,Lumen也能正确处理非直接光的阴影遮挡。

    Lumen全局光照能够实时动态地处理非直接光的光照和阴影效果。

    Lumen实现了全分辨率的法线细节,同时用较低分辨率计算间接照明以达到实时渲染的目的。

    • Lumen天空光照

    Lumen在Final Gather阶段解决天空光照,使得户内和户外的天空光有着明显的区别,户内更暗。此外,Lumen的天空光还支持低质量的透明光照和体积雾的GI效果。

    • Lumen发光材质

    发光材质通过Lumen的Final Gather完成光照传播,而没有额外的消耗。但也对发光材质的辐射区域大小和亮度都有限制,否则会引起噪点瑕疵。

    • Lumen反射

    Lumen为所有范围粗糙度的材质解决了间接镜面反射效果。

    此外,Lumen也支持清漆材质的反射。

    在EA版本,Lumen对光源特性的支持说明如下:

    • 支持所有光源类型,包含定向光、点光源、聚光灯、矩形光、天空光。
    • 【仅】支持定向光的光照函数。
    • 【不】支持光源的静态属性,因为开启Lumen后会禁用静态光和光照图。

    在工程设置和后处理体积中,可以设置Lumen的诸多参数,如软光追模式、细节追踪模式、全局追踪模式、硬件追踪模式以及GI和反射。

    6.2.2.3 虚拟阴影图

    虚拟阴影图(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)等技术。

    6.2.2.4 时间超分辨率

    时间超分辨率(Temporal Super Resolution,TSR)是新一代的时间抗锯齿算法,用来替换传统的TAA。它支持的特性如下:

    • 利用1080p的低分辨率输入,输出接近原生4K渲染质量,允许更高的帧率和更好的渲染保真度。
    • 在高频背景下更少的鬼影。
    • 减少高复杂性几何物体上的闪烁。
    • 支持运行于Shader Model 5兼容的硬件: D3D11、D3D12、Vulkan、PS5、XSX,Metal暂未支持。
    • 着色器专门为PS5和XSX的GPU架构进行优化。

    时间超分辨率可以在工程配置中开启或关闭,默认情况下,UE5已经开启了此技术。

    左:4K原生分辨率渲染,帧率是20.57;右:利用时间超分辨率技术将1080p输出4K画质,帧率提升至44.22。

    6.2.2.5 移动端渲染

    UE5针对移动端改进了部分渲染模块,包含:

    • 移动端渲染器采用了RDG(渲染依赖图)。
    • 支持了Distance Field Ambient Occlusion(距离场AO)和Global Distance Fields(全局距离场)。
    • DirectX Shader Compiler(DXC)成为安卓Vulkan的默认shader编译器。此外,还增加了对OpenGL ES的DXC支持。
    • 加强了移动端延迟渲染器。改进了部分模块的稳定性和性能,包括IBL、延迟贴花、IES光照,以及其它匹配PC级别品质的光照特性。此外,使用了更少的着色器排列。

    6.2.3 其它新特性

    6.2.3.1 世界分区

    世界分区(World Partition)是一种新的数据管理和流式系统,在编辑器和运行时都可以使用,它完全消除了手动将世界划分成无数子级别来管理流数据和减少数据争用的要求。

    使用世界分区,世界作为一个单一的持久关卡存在。在编辑器中,世界被分割成一个个格子,可以根据感兴趣的区域部分地加载地图数据。当烘焙或启动PIE时,世界被划分为针对运行时流优化的网格单元,从而成为独立的流关卡。

    可以在菜单栏Window/World Partition打开世界分区编辑器,拖动左键快速选择指定范围的所有格子,右击可弹出操作菜单,包含加载选中的格子、卸载选中的格子、移动摄像机到当前格子:

    此外,世界还支持数据层(Data Layer)、HLOD(Hierarchical Level of Detail)、关卡实例化(Level Instancing)、一个Actor一个文件(One File Per Actor)等功能。

    6.2.3.2 动画

    UE5的动画模块增加了全身IK(Full Body IK)、控制绑定(Control Rig)、运动变形(Motion Warping)、动画工具脚本以及在Sequencer方面的支持。

    Full Body IK示意图。

    Control Rig效果示意图。

    Motion Warping效果示意图。

    6.2.3.3 物理

    UE5的物理效果在新特性中也非常抢眼,主要有以下特性:

    • Chaos

    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)

    6.2.3.4 GamePlay

    GamePlay框架增加了游戏和模块逻辑、数据注册表(Data Registries)、增加的输入系统。

    数据注册表编辑器。

    6.2.3.5 性能和平台管理

    • Memory Analysis Tools for Unreal Insights

    UE5通过Unreal Insights的Memory Insights模块改进了内存追踪和调试支持。可支持以下特性:

    1、查看会话期间任意给定时间内所有已分配内存的快照。

    2、在两个不同的时间比较所有已分配内存的快照。

    3、查看每个内存分配的调用堆栈。

    4、鉴定长期和短期(或临时)的内存分配。

    5、查找内存泄漏。

    Unreal Insights的Memory Insights编辑器一览。

    • 平台工具链

    提高了mac上iOS远程构建过程的可靠性,并添加了一个跨平台库,以提高通过USB与iOS设备交互的可靠性。

    此外,还有增加的音频音效、重新设计的VR模板、Unreal Turnkey等等。

     

    6.3 UE5渲染体系变化

    本章将对比UE4.26版本的源码,系统地阐述UE5 EA版本源码和UE4.26的不同。为了方便对比,使用Beyond Compare的文件夹对比功能:

    两个版本的源码差异还蛮大,不过本章后续章节将专注在基础模块、渲染体系、Shader等方面的差异,主要集中在以下文件夹:

    • Engine\Source\Runtime\Core
    • Engine\Source\Runtime\CoreUObject
    • Engine\Source\Runtime\D3D12RHI
    • Engine\Source\Runtime\Engine
    • Engine\Source\Runtime\MeshDescription
    • Engine\Source\Runtime\Renderer
    • Engine\Source\Runtime\RHI
    • Engine\Source\Runtime\RHICore
    • Engine\Shaders

    6.3.1 Core和CoreUObject

    • Core:
      • 修改和增加Algo、IO、Async、Hash、Memory、Math、Container、String、Serialization、UObject等基础模块。
      • 修改FileCache、HAL、Logging、Misc、Modules、Stats等支持模块。
      • 修改Android、Apple、IOS、HoloLens、Mac、Unix、Windows等系统模块。
    • UObject:
      • 大量修改和完善了UObject的各个属性模块,包含Class、Obj、Package、Property及关联模块。
      • 增加ObjectHandle、ObjectPathId、PackageResourceManager、PropertyClassPrt、PropertyObjectPrt等等模块。
    • AssetRegistry:
      • 修改了AssetData的部分逻辑。
      • 改进AssetBundle相关的逻辑,增加AssetDataTagMap概念。
      • 增加AssetDataTagMapSerializationDetails。
    • Package:
      • 增加或完善PackageName的部分接口。
      • 增加PackageAccessTracking、PackageAccessTrackingOps、PackagePath等模块逻辑。
    • Serialization:
      • 修改了序列化的BulkData、ArchiveUObject、Json读写等基础模块。
      • 大量修改了加载、异步加载、写入文档等模块。
      • 增加FilePackageStore、MappedName等模块。

    由此可见,在核心和基础模块,基本上都做了大量的改动和重构,涉及方方面面。

    6.3.2 RHI和RHICore

    • RHI:

      • 增加部分渲染特性的标记及支持,包含移动端的若干特性。
      • 增加MSAA、BufferUsageFlags、RHIPipeline、EResourceTransitionFlags、Transition等概念和接口。
      • 删除FRHIVertexBuffer、FRHIIndexBuffer和FRHIStructuredBuffer类型,统一成FRHIBuffer,修改相关接口。
      • 增加Texture2DArray相关接口,删除旧的RHI各类资源创建接口,统一使用RHICreate。
      • 完善光线追踪类型和接口,如RayTraceDispatchIndirect、IsRayTracingShaderFrequency等。
      • GlobalUniformBuffer改成了StaticUniformBuffer。
      • ERHIFeatureLevel增加SM6,完善平台相关的检测或数据接口。
      • 增加PCD3D_SM6的ShaderPlatform,删除部分ShaderPlatform,如PS4、XBOXONE_D3D12、OPENGL_ES31_EXT等。
      • FGenericDataDrivenShaderPlatformInfo增加了很多标记及对应的获取接口。
      • 增加EShaderCodeResourceBindingType、EUniformBufferBindingFlags、FRHITextureCreateInfo、ERHITextureMetaDataAccess、ERHITextureSRVOverrideSRGBType、FRHITextureSRVCreateInfo、FRHITextureUAVCreateInfo、FRHIBufferCreateInfo、FRHIBufferSRVCreateInfo、FRHIBufferUAVCreateInfo等类型和接口。
      • 完善FRHIGraphicsPipelineState、FRHITextureReference、RHIValidation等类型的接口。
      • 增加RHITransientResourceAllocator、RHIValidationTransientResourceAllocator等资源转换模块。
      • 修改或增加FTransientState、FGlobalUniformBuffers、FPipelineState等类型。
    • RHICore:

      • 新增的模块,包含了RHICoreShader、RHICoreTransientResourceAllocator、RHIPoolAllocator等模块。

    6.3.3 Renderer

    • 增加实例化裁剪模块:InstanceCulling、InstanceCullingManager等,包含FInstanceCullingRdgParams、EInstanceCullingMode、FInstanceCullingContext、FInstanceCullingManager等类型,主要用于Nanite技术。

    • 虚拟纹理增加或完善了数据读写和FVirtualTextureFeedbackBuffer、RenderPages、RenderPagesStandAlone等接口。

    • 全局距离场数据(FGlobalDistanceFieldParameterData)增加了Mipmap和VT数据和接口。

    • HairStrand增加EHairBindingType、EHairInterpolationType、FHairStrandsInstance等类型。

    • 增加或完善FVertexFactoryShaderPermutationParameters的类型。

    • MeshPassProcessor:

      • EMeshPass增加VSMShadowDepth、LumenCardCapture、EditorLevelInstance等专用通道。
      • 增加EFVisibleMeshDrawCommandFlags、FCompareFMeshDrawCommands、FMeshPassProcessorRenderState等类型。
      • 增加FSimpleMeshDrawCommandPass类型,用于处理不需要并行处理绘制命令的地方,减少开销。
      • FVisibleMeshDrawCommand增加EFVisibleMeshDrawCommandFlags以及用于GPUCull的FMeshDrawCommandSortKey、InRunArray等。
    • FDynamicPassMeshDrawListContext的FinalizeCommand阶段增加了NewVisibleMeshDrawCommand.Setup阶段。

    • 摒弃SetInstancedViewUniformBuffer、SetPassUniformBuffer、GetInstancedViewUniformBuffer等UniformBuffer接口。

    • 新增Nanite模块:

      • 新增NaniteRender:FNaniteCommandInfo、ENaniteMeshPass、FNaniteDrawListContext、FCullingContext、FRasterContext、FRasterResults、FNaniteShader、FNaniteMaterialVS、FNaniteMeshProcessor、FNaniteMaterialTables、ERasterTechnique、ERasterScheduling、EOutputBufferMode、FPackedView等等类型及处理接口。
      • FPrimitiveFlagsCompact增加bIsNaniteMesh标记。
      • FPrimitiveSceneInfo增加NaniteCommandInfos、NaniteMaterialIds、LumenPrimitiveIndex以及CachedRayTracingMeshCommandsHashPerLOD、bRegisteredWithVelocityData、InstanceDataOffset、NumInstanceDataEntries实例化和光追相关的等数据和处理接口。
    • 新增Lumen模块:

      • 涉及的模块非常多,总结起来有DiffuseIndirect、Scene、HardwareRayTracing、Mesh、Probe、Radiance、Radiosity、TranslucencyVolume、Voxel以及数据结构、工具箱等。
    • 替换传统Shader绑定接口到RDG,如SHADER_PARAMETER_TEXTURE改成SHADER_PARAMETER_RDG_TEXTURE。

    • 增加或完善RuntimeVirtualTextureProducer、FSceneTextureExtracts、EMobileSceneTextureSetupMode、Strata地层。

    • 增强后处理效果,如增加了Temporal Super Resolution(TSR)。

    • 增强了光照追踪模块,如RTGI、RTAO、RTR、RTShadow、RTSkyLight等。

    • DeferredShadingRenderer:

      • 增加Lumen、IndirectLightRender、SSRT、TranslucencyLightingVolume等相关的模块、类型和步骤。
      • 增加FLumenCardRenderer、TPipelineState、EDiffuseIndirectMethod、EAmbientOcclusionMethod、EReflectionsMethod、FPerViewPipelineState、FFamilyPipelineState等类型。
    • 增加或增强了BasePass、DepthPass、SDF、GPUScene、GlobalDistanceField、BVH、GenerateConservativeDepthBuffer、LightRendering、InrectLightRendering、MeshDrawCommands、Shader、ScreenSpace、Shadow、MobileRender等等渲染模块。

    从UE4.26到5.0EA,重要和基础的渲染模块都做了大大小小的修改。

    6.3.4 Engine

    • 新增IRenderCaptureProvider、NaniteResources、NaniteStreamingManager等模块。
    • 新增LevelInstance模块,用于处理关卡实例化的数据读写、打包、渲染、编辑器等。
    • 新增ActorReferencesUtils、AssetCompilingManager、AsyncCompilationHelpers、CanvasRender、ComputeKernelCollection、DerivedMeshDataTaskUtils、InstancedStaticMeshDelegates、InstanceUniformShaderParameters、MeshCardRepresentation、NaniteSceneProxy、ObjectCacheContext、StaticMeshCompiler、TextureCompiler等模块,涉及各类资源编译、实例化、Buffer、Mesh、Nanite等。
    • PrimitiveSceneProxy:
      • 增加LevelInstance、bLevelInstanceEditingState、TranslucencySortDistanceOffset、MeshCardRepresentation等数据和接口。
      • 增加SupportsNaniteRendering、IsNaniteMesh、bSupportsMeshCardRepresentation、IsAlwaysVisible、GetPrimitiveInstances、RayTracingGroupId、RayTracingGroupCullingPriority等数据和接口。
    • SceneInterface和SceneManagement:
      • 增加FInstanceCullingManagerResources等类型,使用FGPUScenePrimitiveCollector代替FPrimitiveUniformShaderParameters。
      • 增加HairStrand、PhysicsField、LumenSceneCard、ComputeFramework等操作接口。
    • SceneView:
      • 增加ComputeNearPlane、GetScreenPositionScaleBias等接口。
      • 增加FViewShaderParameters、GeneralPurposeTweak2、PrecomputedIndirectLightingColorScale、GlobalDistanceField、VirtualTexture、PhysicsField、Lumen、Instance、Page等shader绑定。