全新内容
虚幻引擎 4.14 版本包含一个针对 VR 进行优化的全新前向着色渲染器,在游戏中启用清晰的多重采样抗锯齿。全新的接触阴影(Contact Shadows)功能可渲染出复杂物体的美丽阴影细节。此版本中还加入了一个全新静态网格体自动 LOD 生成(automatic LOD generation)功能。此功能不需要第三方库。
我们还简化了动画工具,以便提高生产效率,为Sequencer(UE4 的非线性动画工具)添加了诸多新功能,并对载具、布料和动画进行了改良。
移动开发者的好消息:现在可以在兼容的安卓设备上使用 Vulkan!此外我们还添加了多项全新移动渲染功能,如从场景色彩和深度进行读取,以及在 UI 上绘制 3D 物体。
Windows 平台上的 C++ 程序员现可使用 Visual Studio "15” 进行开发。仍然支持 Visual Studio 2015。
主要功能
新鲜出炉:带 MSAA 的前向着色渲染器
全新的前向着色渲染器结合了高精度 UE4 灯光功能和多重采样抗锯齿(MSAA)支持!前向渲染器拥有 MSAA 和启用每个材质优化的选项,非常适用于 VR。
前向渲染器的工作原理是将灯光和反射捕捉剔除到一个视锥空间网格。前向通道中的每个像素在对其产生影响的灯光和反射捕捉上迭代,对它们带有的材质进行着色。静态光照的动态阴影为提前计算,并被打包到屏幕空间阴影遮罩的通道中,以便高效利用多个阴影投射功能。启用 Rendering Project 设置中的“Forward Shading”并重启编辑器即可使用前向渲染器。
支持的前向渲染功能包括:
- 完整支持静态光照。包括来自可移动物体的动态阴影,此阴影将和预计算环境阴影混合
- 混合的多个反射捕捉(带视差矫正)
- 部分场景的平面反射,将合成到反射捕捉中
- D-Buffer 贴图
- 预计算光照和天光
- 无阴影的可移动光照
- 胶囊体阴影
- 兼容实例化立体
前向着色暂不支持以下功能:
- 屏幕空间技术(SSR、SSAO、接触阴影)
- 投射阴影的可移动光照
- 动态阴影半透明度
- 从静态光照获取环境阴影的半透明度
- 光照函数和 IES 配置文件
- 透明覆盖
- D-Buffer 贴图上的 MSAA、动态模糊、动态阴影和胶囊体阴影
前向渲染器支持多重采样抗锯齿(MSAA)和随机采样抗锯齿(TAA)。在多数情况下 TAA 更为可取,因为它能移除几何体锯齿和反射锯齿。在 VR 项目中,头部追踪引起的恒定亚像素运动会造成不必要的模糊。MSAA 方为更佳选择。
选择使用 MSAA 的项目将需要编译内容,以减轻反射锯齿。“Normal to Roughness”功能有助于弱化细节法线贴图上的反射锯齿。静态网格体的自动 LOD 生成可抹平远处模型上的特征,有助于弱化小三角形导致的锯齿。
在我们的测试中,使用 MSAA(替代 TAA)提高了约 25% 的 GPU 帧时。实际开销将依内容而定。
在 Rendering 项目设置中设置默认抗锯齿方法即可使用 MSAA:
控制台变量“r.MSAACount”控制每个像素计算的 MSAA 采样数。“r.MSAACount 1”拥有特殊含义并可返回随机采样抗锯齿,便于在抗锯齿方法之间切换。
性能
进行一些渲染时,前向渲染器的速度比延迟渲染器更快。可在每个材质上禁用的功能可以实现最大的性能提升。默认情况如下:只有最近的反射捕捉应用时不带视差矫正,除非材质使用高精度反射、高度雾按每个顶点计算、平面反射只应用到启用的材质上。
在 Epic 最新的 VR 游戏《Robo Recall》上平衡这些选项。在使用 NVIDIA 970 GTX 显卡的情况下,前向渲染器比延迟渲染器的速度快约 22%。
新鲜出炉:接触阴影
接触阴影(Contact Shadows)可在物体上实现高细节动态阴影。
下图中的常春藤只是一些扁平的片,但由于材质中输出的 Pixel Depth Offset,其自身形成的阴影十分真实。
接触阴影功能针对深度缓冲在屏幕空间中添加一个短光线投射,了解像素是否从给定光照被遮挡。这能够在几何体的连接点处形成锐化的细节阴影。通过其他算法所形成阴影的接触点可能出现缺失或模糊,存在多种原因。通常这是由于缺乏分辨率或深度偏差。无论原因如何,全新的接触阴影功能能够以较小的开销填补空缺。
接触阴影可用于设置光照上的 Contact Shadow Length 属性。此属性控制屏幕空间中光线投射的长度。如设为 1,则光线投射将穿过屏幕。如设置的值较大,精度和性能将会下降。因此在实现需要的效果时请尽量将长度保持在最短。
接触阴影的另一个使用情况是从任意光照的视差遮蔽映射获得自阴影。这需要在材质中输出像素深度偏移。此动画显示了一个视差遮蔽映射的表面,接触阴影的长度设为 0.1。
新鲜出炉:自动 LOD 生成
虚幻引擎最新版本可以自动减少静态网格体的多边形数量来创建 LOD!
上面的动画显示了自动生成的五个 LOD。每个 LOD 的三角形数量均为上一个的一半。
自动 LOD 生成使用名为二次网格体简化的功能。网格体简化器将把生成的两个顶点合并,以计算与边缘发生重叠的视觉差的量。它将选取视觉影响量最小的边缘,然后与之重叠。执行此操作时,它将选取最佳位置放置新合并的顶点,并移除沿边缘重叠的三角形。它将继续以此方式重叠边缘,直到达到所要求的三角形目标数量。
此网格体简化器将维持 UV,包括生成的光照图 UV、法线、切线和顶点颜色。UV 被维持后,则可使用相同的材质,且所有 LOD 均可共享相同的光照图。
控制所生成 LOD 的高级设置在静态网格体查看器中的 LOD Settings 下。
“LOD Group”包含预设列表。可根据项目在 BaseEngine.ini 文件的 [StaticMeshLODSettings] 下进行修改。我们建议为项目设置好类别并尽量使用 LOD 群组,而不对每个 LOD 的细节进行控制。
需要注意一个重要设置:“Auto Compute LOD Distances”。因为算法了解每个边缘重叠所添加的视觉差量,所以它可以用此信息决定可接受的距离误差量。这意味着它也将自动为每个 LOD 计算所使用的屏幕尺寸。
如需了解每个 LOD 自动生成的细节,可在 Reduction Settings 中进行查看。请注意:此功能当前只可用于静态网格体,尚不支持网格体代理 LOD 生成。
新鲜出炉:预计算光照情景
最新版本现支持同一几何体在多个光照设置下的预计算光照!这在 VR 和建筑视觉表现的使用实例中尤为重要,因为这些项目要求尽量高的精度和性能。
在上例中,定向光照、天空光照和天空盒已放置到一个名为 DayScenario 的光照情景关卡中。街灯已被放置到 NightScenario 中。
使用光照情景的方法:
- 右键点击 Levels 窗口中的子关卡并将其改为 Lighting Scenario。当光照情景关卡为可见时,其光照图将被应用到世界场景。
- 在光照情景关卡上变更到蓝图的关卡流送方法
- 将网格体和灯放置到此关卡中并构建光照
- 在不变关卡的关卡蓝图的 BeginPlay 中,在需要激活的光照情景关卡上执行一个 Load Stream Level。
限制:
- 在游戏中一次只存在一个可见光照情景关卡。
- 光照情景关卡出现后,来自所有子关卡的光照图数据均会被放置在其中,因此白天时只加载 DayScenario 光照图。所以,光照图将不再由子关卡进行流送。
- 让光照情景关卡出现时将强制进行反射捕捉更新,将导致加载时间变长。
新鲜出炉:逐像素半透明光照改良
在延迟渲染器中,全新的前向着色功能现可用于半透明表面,从多个灯光处获得反射高光、从视差矫正反射捕捉获得基于图像的反射。
新鲜出炉:全分辨率皮肤着色
UE4 现支持下表面轮廓着色模型的全分辨率皮肤着色。这可生成表面细节(如毛孔和皱纹)的高保真度光照。
棋盘格渲染皮肤(左图)、全分辨率皮肤(右图)(注释:头部模型由 Lee Perry-Smith 创建)
表面细节 - 棋盘格(左图)、全分辨率(右图)
之前,皮肤上的光照使用棋盘格图案展示,一半像素包含弥散光照、另一半像素包含反射光照。光照在最终的下表面轮廓全屏通道中重组。此方法可生成下表面光照的良好效果(原始即为低频),但它可能导致表面细节光照的保真度较低。
新方法将把包含弥散和反射光照信息的每个像素打包到 RGBA 编码中。利用它可在最终的下表面轮廓全屏通道中重建全分辨率光照,通过随机采样抗锯齿获得表面细节的更佳效果和更稳定的表现。