Choose your operating system:
Windows
macOS
Linux
可在Epic Games Launcher的 学习(Learn) 选项卡中下载此示例项目。
Archviz室内渲染示例展示了虚幻引擎4(UE4)逼真的渲染技术。以下提供了一个可供探索的小型公寓场景,已事先进行了设置,可以提供各情境下的最佳效果,因此你可以自学各种技巧,甚至在自己的作品中使用其中的元素。
该场景运用了以下可供学习的技巧:
使用基于物理的材质。
设置自己的主材质和实例。
使用和优化带光纤追踪的动态光照技术。
了解定义不同光线追踪设置集的方法,以实现高质量渲染输出和交互式场景查看。
材质
本示例的文档包含部分虚幻引擎材质功能的高级视图。因此,建议阅读材质文档以了解本章节所述概念和功能的更多相关信息。
虚幻引擎采用基于物理材质系统。因此能够估算出光源的实际作用,而非预期作用。最终结果将更准确且外观更自然。同时,这也代表着此类类型的材质在所有光照环境下均同样适用,拥有的值也更简单且独立。
重要的是许多材质外观和对光照的反应都很真实,尤其是在此示例项目中。为了确保更高的一致性和准确性,材质采用层级父子关系。利用此关系可获得"主"材质,其拥有许多可控参数,只需将它传递到子实例并更改或覆盖,便可调整材质中不同的属性或值。利用此子实例或材质实例可更改和覆盖公开值,以创建其父材质任意数量的变体。
以下为可调整的部分公开属性范例:
属性名称 |
示例 |
说明 |
---|---|---|
底色(Base Color) |
此属性是对象材质的基础颜色。虽然纹理均可用作底色,但为了遵循基于物理的光照,底色不应含有光照信息。底色应该是底层材质的原色。(如需示例,请查看此项目中任意漫反射纹理。) |
|
金属感(Metallic) |
此属性控制材质表面的金属感。调整此值可使材质更具金属感,以便控制周围环境影响对象自身底色的程度。 |
|
粗糙度(Roughness) |
此属性控制镜面反射的漫反射。它将在整个表面应用"微表面(microfaceting)"效果。值越低代表表面越平滑,越高则越粗糙。可以想象一下镜面铬和拉丝铝二者在反射中的区别。 |
材质实例化
如果要在项目中创建大量使用拥有类似属性的类似材质的对象,建议创建将此类对象公开为参数和值的主材质(这些参数和值可在名为材质实例的子实例中设置)。
该场景中大多数对象使用的类似属性已被参数化,将用于创建主材质的简单变体或现有材质实例。这意味着可控制简单值的属性,或切换用于材质的纹理类型。另外,场景中不一定所有对象都需要单独的基础材质。此设置不仅对项目有效,对GPU的性能也有效。由于多数情况下更改此类参数和属性无需额外编译,因此此设置将使着色器编译需求降到最低。
|
|
|
---|---|---|
主材质(默认值) |
材质实例:底色着色变更 |
材质实例:漫反射和法线纹理切换 |
主材质使用
设置和使用主材质是虚幻引擎中的高级工作流。在深入了解这一内容之前,先看看本页的"材质实例使用"部分,或通过以下文档了解UE4中材质的更多信息:
你也可以访问虚幻在线学习门户课程材质 - 探索基本概念。
设置主材质时,务必提前考虑项目需求。这意味着要考虑对于设计师和美术师来说,需要将哪些属性公开为材质实例中的参数。你们可以使用通用的主材质快速修改项目,这样便无需擦除父材质中设置的默认值或属性,并将快速修改带来的影响降到最低。
设置项目的主材质时注意以下几点:
此材质将应用于什么类型的对象?
建议按 混合模式(Blend Mode) 区分主材质类型,例如透明、不透明、遮罩等。
同时建议将可平铺纹理用于底色、粗糙度、法线等等。此类对象的唯一纹理贴图不通用,可能需要额外操作。
需公开哪些属性和值?
若使用不透明或透明混合模式,哪些属性和/或值需用于定义特定对象的外观,同时使美术师和关卡设计师能够灵活有效地进行更改。
了解在主材质 M_MasterMaterial 中,如何设置部分通用参数以提供使用子实例的任意数量的变体。一起来看 BaseColor 路径:
名为 BaseColor 的纹理参数用于指定纹理资产。在材质实例中覆盖时,可将纹理资产与可兼容纹理类型(例如法线或漫反射纹理)交换。
在材质实例中启用时,名为 BaseColorTint 的Vector4参数将用于更改纹理资产的颜色。需要稍微或大幅更改对象颜色而非其纹理时,此参数十分有用。
名为 UseBaseColorTint? 和 UseBaseColorTexture? 的切换参数用于启用设置底色和/或其色调的不同路径。启用或禁用其中部分参数将公开或删除此材质中显示的参数。
此特定主材质提供附加控制,以指定纹理、纹理顶部的颜色着色等。我们并不一直需要此类灵活性。你可以根据项目需求及美术师和关卡设计师的要求,做出最佳判断。
材质实例使用
使用要公开的参数和默认值设置主材质后,可创建自己的材质资产实例,此实例将创建材质实例资产。
在内容浏览器中右键点击材质资产,然后在快捷菜单中选择 创建材质实例(Create Material Instance),即可完成该操作。
打开实例时,你可以在视口中找到材质预览(1)。右侧包含所有公开属性和值,可在右右侧面板的 参数组(Parameter Groups) 中覆盖(2)。
在 一般(General) 类别下,父(Parent) 指定框包含此材质实例资产的父材质。父材质可以是材质或材质实例资产。
注意:父材质不固定为是主材质,也可能为另一实例。例如,创建织物或木质材质并要创建不同颜色的变体时适用该材质。
在 Content\Materials
文件夹中可找到本项目中使用的材质和材质实例,以便进行探索。
如需了解创建实例的更多信息,参见材质实例页面。
场景光照
该室内架构场景的 外观和感觉 主要由光照的设置方式以及光照与场景中使用的对象和材质的交互方式定义。该特殊场景大量使用了最新虚幻引擎光线追踪功能,用于进行柔和区域投影、画面外对象的精准反射以及实时全局光照。
设置注意事项
为在该场景中获得光照,我们进行了部分额外光照设置,通过多种类型的光源和设置创建出逼真的视觉效果。
该场景包含下列类型的光源和设置:
作为主光源的定向光源。
用于模拟从天空射出并透过窗户的漫反射贡献的多个矩形光源。
与物理光照强度匹配的后期处理体积的曝光值。
光线追踪功能
光照
该室内场景仅使用动态光照和光线追踪功能模拟使用具有天空环境光照的单一太阳光源进行光照的效果。该设置在整个场景中提供均匀的光线分布,减少了过度投影的区域。利用光线追踪阴影,能获得具有良好区域衰减的明显接触面,可在公寓中的许多地方进行柔和投影。
为使该设置生效,我们采用了下列方法:
用作太阳的单一定向光源。
区域光源提供柔和的光照来模拟光线透过窗户照射进来,光线不一定是阳光。
反射
整个室内场景中拥有许多不同粗糙度的反射面。其中一些模拟镜面表面、半高光表面或地板漆面磨损效果。如果没有使用光线追踪,则无法在场景中实现此类反射。
若无光线追踪功能,通常使用仅反映画面上显示物的有限画面空间效果,或使用以非动态方式采集房间图像的静态立方体贴图来产生反射。利用光线追踪反射,可查看各个表面反射的整个场景,并拥有创建内反射的多个反射(即反射中的反射)。
反射优化
在该场景中设置反射时,务必在质量损失最小的情况下降低反射开销。你可以使用以下部分提供的建议和优化,在自己的项目中实现类似效果。
光泽和反射表面
优化光线追踪反射的第一步是考虑场景中材质的平滑度或粗糙度。了解此类信息可帮助更快决定优化场景中反射的方式。此操作可提供早期性能优势,而无需后期取得。
如果你的场景将使用大量高反射表面,
应考虑采用两种途径:
控制材质等级的粗糙度/光泽度 执行该工作流,可通过指定到场景中对象的材质更好地进行控制。使用良好主材质可简化工作流,但必须在需要特定粗糙度的材质或材质实例中手动调整。
后期处理中控制粗糙度/光泽度 通过将粗糙度限制为后期处理体积中 最大粗糙度(Max Roughness) 属性设置的指定阈值,该工作流可影响场景中的所有对象。
上述两种工作流不互斥,可轻松结合使用。本示例中拥有需要准确代表场景的大量反射面。这意味着应在该项目早期使用材质级粗糙度控制以获得最大灵活性。之后在优化场景时,若场景使用材质合理,能够便于在性能与质量间取得平衡。
多次反射回弹和降噪
在场景中(尤其是类似这样的建筑可视化场景),反射的准确性对于创建逼真的效果极为重要。然而,在反射内使用多次反射回弹会导致实时渲染的开销十分高昂。
首先可在主材质中使用 RayTracingQualitySwitchReplace 表达式进行材质级的简单优化作为开始。该节点可以在材质中启用光线追踪功能的单独路径,以进行更简单的材质输出。本项目仅使用底色、金属感和粗糙度输入。创建用于光线追踪效果的这种更加简单的材质路径意味着可以节约部分成本,对质量的影响也最小。
若观察地板材质 MI_Floor
在电视中的反射,可以发现它在材质实例中使用较低分辨率纹理mip,该材质实例由材质资产中 Mip偏差(Mip Bias) 控制。若不使用镜面材质或某些调试视图模式,则难以发现材质中的光线追踪反射进行了这种优化。
对于地板、墙壁、天花板等大表面,可使用这种优化获得部分帧时间。打开材质 M_RTMasterMaterial
以查看使用 RayTracingQualitySwitchReplace 的图表的工作方式。
该对比中启用了视口的 反射(Reflections) 视图,可清晰查看关卡中表面的反射。这意味着使用所有mip级别(0)时,可在场景中使用全分辨率纹理。地板纹理为4k纹理。使用mip级别5时,纹理的显示分辨率为128。在该特殊场景中,此设置比全分辨率的效率更高,且质量损失最小。
若想要查看纹理可用的mip级别,打开纹理资产并在工具栏中启用 Mip级别(Mip Level) 复选框。然后使用加号、减号或滑块设置mip级别的预览。
UE4的光线追踪可用的另一优化是退却选项,光线追踪反射可利用该选项以将反射采集用作最后回弹。此设置适用于通过减少使用光线追踪反射回弹和限制表面上的黑色相互反射来降低开销。若项目涉及运行时性能,则多次反射反弹的开销为指数级增长,高得令人望而却步。
通过以下控制台命令启用反射捕获退却:
r.RayTracing.Reflections.ReflectionCaptures 1
利用该组合可减少瑕疵,例如仅使用光线追踪反射时产生的黑色反光。如果将退却和2个回弹及与此类似且拥有大量相互反射的对象结合使用,可获得更好结果。
反射的此类优化和工作流还可减少使用多次反射回弹时在发射中生成的噪点程度。在场景中,尤其是有大量高度反射表面的区域,提高反射的 逐像素采样(Samples Per Pixel) 设置可减少噪点,但将牺牲性能。以下方法也可用于在反射中减少噪点:
使用RayTracingQualitySwitchReplace节点降低材质及其纹理的复杂性。通过计算材质输入来减少反射中的噪点,此类输入使用光线追踪材质路径而非完整材质路径。在光线追踪反射中,如法线和平滑表面之类的纹理易生成噪点。
使用纹理取样的Mip偏差属性来控制纹理细节级别。与具有大量纹理细节的较高质量纹理相比,较低质量纹理产生噪点的几率更低。
全局光照
利用光线追踪全局光照(RTGI),光线的动态回弹可利用光源照亮场景。该项目采用了多种光照方法和部分优化来提升性能。
光照方法
虚幻引擎提供了两种光线追踪全局光照的方法,用于在场景中进行动态间接光照:
强力(Brute Force) 使用较慢但更准确的方法。该方法需要多次回弹和增加采样数来减少瑕疵,并会牺牲性能提高质量。
最终收集(Final Gather) 使用较快但准确性较低的方法。该方法仅使用拥有大量逐像素采样的间接光照单次回弹。它可以将开销分摊到多个帧上,并恢复运行时性能。
在该项目中查看静止图像时,质量上并无明显差异。但两种方法在性能上有显著差异。
样本中均以某种形式使用这两种方法。在编辑器中操作并实时渲染场景时,将使用最终聚集(Final Gather)法,并在关卡内的后期处理体积中默认设置该方法。使用Sequencer渲染出高质量电影时,将使用强力(Brute Force)法渲染场景。(参见下方的"过场动画"章节,了解更多信息。)
画面百分比和逐像素采样
提升场景中的性能和光照的方法之一就是调整RTGI的画面百分比(r.RayTracing.GlobalIllumination.ScreenPercentage
)和用于逐像素采样的后期处理体积的光照追踪属性。
此方法背后的含义是当提高样本数减少瑕疵的同时,降低RTGI的画面百分比,并以最小质量损失增加场景中的光照一致性。但当此权衡不再有效时,将出现断点。例如,将RTGI画面百分比设为50并将逐像素采样设为16,该设置相当于RTGI画面百分比为100、逐像素采样为4。
使用全局光照优化光源
以下提供了一些建议,可以用于提高该项目中RTGI性能:
各光源Actor应拥有可禁用其对RTGI的贡献的选项。光源造成额外GI噪点时,可利用该选项移除GI贡献中的该光源,以减少此类瑕疵并提高性能。使用 影响光线追踪全局光照(Affect Ray Tracing Global Illumination) 属性来切换光源GI贡献。
若光源的路径中拥有大型遮挡物,将便于在场景中生成更多噪点。
逐光源禁用其GI贡献。
调整光源半径或移动光源以免遮挡。
移除或调整此类光源前方造成较大遮挡的大型物体。
使用RTGI和光线追踪环境光遮蔽(RTAO)
在项目中做出对最终渲染更有价值的决定。若正在使用RTGI,禁用后期处理体积中的RTAO,并将环境光遮蔽遮挡类别下的 强度(Intensity) 设为0。
若场景中大量对象的几何体上有孔洞,光线追踪降噪器解算时更为困难。在某些情况下,使用 RayTracingQualitySwitchReplace 表达式(参见上述"反射"部分)可帮助减少噪点。
其他优化、提示和技巧
RayTracingQualitySwitchReplace表达式与材质Mip偏差
各个 纹理取样(Texture Sample) 表达式都有自己的 Mip偏差(Mip Bias) 输入。此操作将利用简单浮点值,以控制正在使用的纹理使用哪个mip。mip是纹理的给定细节级别;mip值越低,质量越高;值越高,质量越低。与 RayTracingQualitySwitchReplace 节点配合使用时,利用Mip偏差属性可指定在光线追踪效果中使用的最大质量mip等级。
此操作有助于减少mip质量花费的GPU时间(极短不易察觉)。例如,在材质 M_RTMasterMaterial
中,将反射率 Mip偏差(Mip Bias) 的参数设为-1。由于此材质仅用于地板、天花板和墙壁,因此此类材质实例使用较高Mip偏差,质量损失最小。地板使用为5的Mip偏差。
这种技巧并不适用于所有材质或表面,但在优化项目时,最好尽量恢复性能。同时也可能会减少部分反射中可见噪点量,尤其是在类似镜面的物体上时。
常量颜色值与纹理
建议在创建主材质时包含 Vector4 表达式,以适应需要简单颜色而非使用纹理的情况。根据纹理及其大小,若为不必要纹理,特别是在无需纹理便可获得相同的外观的情况下,将大量消耗GPU资源。此操作还有额外益处,即无需增加项目负担便可轻松维护。因此,如果以后需要调整此特殊材质,在材质实例中作为参数进行此类修改比管理纹理资产更加容易。
过场动画渲染的Sequencer和后期处理使用
本示例提供多种利用光线追踪查看内容的方法。根据具体用例,可以使用各种设置来平衡质量和性能。我们找到了三个使用案例,并在该项目中展示,分别是:
使用最终渲染的功能和质量代表在编辑器内工作,同时维持实时帧数。
在编辑器中实时运行Sequencer中的过场动画,牺牲最少质量换取稳定性能。
以非实时设置渲染出Sequencer中的过场动画。
在编辑器中工作或运行编辑器内过场动画或非实时过场动画时,将在后台更改部分设置以平衡所处模式的质量和性能。
在下列不同模式之间切换时,使用控制台变量进行设置,以利用光线追踪全局光照和光线追踪反射在质量和性能之间控制平衡。注意:将下列控制台变量设为-1以外的值时,其将覆盖后期处理体积(Post Process Volume)设置中设定的值。例如,若将命令 r.RayTracing.GlobalIllumination
设为2,在重新将控制台变量值设回-1前,将忽略后期处理体积设置 光线追踪全局照明类型(Ray Tracing Global Illumination Type) 选定方法。
编辑器内设置
编辑器内设置代表加载项目时及在场景中工作时使用的设置。此类值为编辑器主要使用的默认值,或关卡中后期处理体积中设置的值。它们代表使用实时光线追踪功能时质量与性能之间的良好平衡。
设置 |
值 |
注释 |
|
---|---|---|---|
r.RayTracing.GlobalIllumination |
2 |
此设置将设置最终聚集GI法。 |
|
r.RayTracingGlobalIllumination.ScreenPercentage |
未设置(默认值:50) |
||
r.RayTracing.GlobalIllumination.SamplesPerPixel |
16 |
||
r.RayTracing.GlobalIllumination.RenderTileSize |
未设置(默认值:0) |
||
r.RayTracing.Reflections.MaxRoughness |
未设置(默认值:0.6) |
||
r.RayTracing.Reflections.SamplesPerPixel |
未设置(默认值:1) |
||
r.RayTracing.Reflections.Shadows |
2 |
此值设置反射以使用区域阴影。 |
在后期处理体积中,可找到部分此类设置,例如逐像素RTGI采样(RTGI Samples Per Pixel)、反射最大粗糙度(Reflections Max Roughness)和反射阴影类型(Reflections Shadows type)。
运行时过场动画Sequencer设置
使用Sequencer运行运行时过场动画,将改变下方列出的属性值。使用的值代表此场景和过场动画中所用不同镜头间的良好平衡。
设置 |
值 |
注释 |
|
---|---|---|---|
r.RayTracing.GlobalIllumination |
2 |
此设置将设置最终聚集GI法。 |
|
r.RayTracingGlobalIllumination.ScreenPercentage |
100 |
将RTGI画面百分比设为100%。 |
|
r.RayTracing.GlobalIllumination.SamplesPerPixel |
4 |
||
r.RayTracing.GlobalIllumination.RenderTileSize |
未设置(默认值:0) |
||
r.RayTracing.Reflections.MaxRoughness |
0.4 |
设置最大粗糙度以增加反射阈值,从而在增加运行时性能时减少反射量。 |
|
r.RayTracing.Reflections.SamplesPerPixel |
2 |
设置逐像素采样以减少样本使用。此设置将在增加运行时性能时减少反射样本数。 |
|
r.RayTracing.Reflections.Shadows |
未设置(默认值:1) |
此值设置反射以使用硬阴影。 |
我们对此类设置进行了部分变更,以提高编辑器内过场动画的质量。以下为变更项目和变更理由的说明:
增加了RTGI屏幕百分比,同时降低逐像素RTGI采样。如上一部分所述,将编辑器内设置的RTGI屏幕百分比设为50,逐像素采样设为16时,则与此变更相同。不同之处在于,在运行时成本大致相同时可以略微提升质量。
更改了反射最大粗糙度阈值,以减少场景中反射数。此操作可将帧率保持在每秒24帧(FPS)的预算之内。由于略微减少了反射数,因此反射无需过多逐像素采样。因此对于运行时过场动画,此设置已从4 spp减半到2 spp,进行这类变更时即可再次获得性能平衡。
启动运行时过场动画
在主工具栏中,选择 过场动画(Cinematics) 并选中 archviz_cine_MASTER 轨道。
将打开Sequencer窗口。在左侧 镜头(Shots) 轨道旁,点击 摄像机(Camera) 图标。
对于运行时过场动画,此操作可将视口锁定到摄像机。
在 关卡视口 的主工具栏中,点击 运行(Play) 按钮以在编辑器中运行。
在 Sequencer 窗口中,点击 运行(Play) 按钮以在关卡视口中启动过场动画。
非运行时过场动画Sequencer设置
运行过场动画Sequencer会将值更改为不适合实时的值。此处的值适用于渲染动画过场的燃尽效果,根据使用的显卡和设置,可能需要几个小时或更长时间进行渲染。
在使用了NVIDIA Quadro RTX 8000的Epic开发者配置的计算机上,此类设置渲染过场动画大约需要8小时。
设置 |
值 |
注释 |
---|---|---|
r.RayTracing.GlobalIllumination |
1 |
此设置将设置强力GI法。 |
r.RayTracingGlobalIllumination.ScreenPercentage |
100 |
将RTGI画面百分比设为100%。 |
r.RayTracing.GlobalIllumination.SamplesPerPixel |
16 |
使用RTGI逐像素16采样,牺牲性能以提高质量。 |
r.RayTracing.GlobalIllumination.RenderTileSize |
64 |
设置提交到GPU的像素图块大小。对于高质量渲染,它无需触发超时检测即可防止驱动程序崩溃。 |
r.RayTracing.Reflections.MaxRoughness |
0.8 |
设置最大粗糙度以减少反射阈值,从而在降低运行时性能时增加反射量。 |
r.RayTracing.Reflections.SamplesPerPixel |
4 |
设置逐像素采样以增加样本使用。此设置将在降低运行时性能时增加反射中的样本数。 |
r.RayTracing.Reflections.Shadows |
未设置(默认值:1) |
此值设置反射以使用区域阴影。 |
运行编辑器内Sequencer可能会锁定UE4编辑器。此类设置本应利用Sequencer的 渲染电影设置(Render Movie Settings) 渲染视频。(参见下一章节。)
将过场动画序列渲染为影片
在关卡视口的主工具栏中,选择 过场动画(Cinematics) 下拉菜单并选中 archviz_cine_MASTER_MaxQuality 轨道。
将打开Sequencer过场动画窗口。在工具栏中,选择 楔形板(Clap Board) 图标以打开 渲染影片设置(Render Movie Settings) 窗口。
该窗口包括渲染该Sequencer过场动画的所有设置。
在下拉菜单中选择要使用的 图像输出格式(Image Output Format)。
对于视频,我们使用了 图像序列(bmp)(Image Sequence (bmp)) 和专业视频软件将其编译到渲染出的最终视频中。
还有许多其他选项可用于渲染视频。例如,选择渲染所用的 分辨率 和保存此类图像的目录等。
准备就绪后,点击底部的 捕获视频(Capture Movie) 按钮。将打开预览窗口。
在渲染视频/图像过场动画时,使用控制台命令 r.ScreenPercentage
将画面百分比设为较高值(如150),以此牺牲时间提升质量。本页面顶部的动画便利用此方法渲染而成。图像序列的分辨率设为1920x1080,然后随着屏幕百分比变化进行超级采样。
控制Sequencer中的值
在主工具栏的关卡视口中,选择 过场动画(Cinematics) 下拉菜单,并在 编辑现有过场动画(Edit Existing Cinematic) 列表中选择序列。
将打开选定Sequencer过场动画窗口。在工具栏中,选择 扳手(wrench) 下拉菜单并选择 打开导演蓝图(Open Director Blueprint)。
在该SequenceDirector蓝图中,可找到以下内容:
其中包含用于设置和重置该序列的RTGI设置的选项卡。
变量(Variables) 类别包含具有控制台变量的数组变量,及之前在"运行时过场动画Sequencer设置"和"非运行时过场动画Sequencer设置"部分中概述的值。
选择数组变量后,其数组元素和值将显示在 默认值(Default Value) 类别下。例如,若在选中 RTGI_CVars_On 变量时查看Sequencer过场动画"archviz_cine_MASTER",该处的值将与本页"运行时过场动画Sequencer设置"部分中表格所列出的值匹配。
致谢
感谢www.sciontidesign.com的Pasquale Scionti主导本场景的设计工作,并营造其情境和氛围。自从最早版本发布以来,Pasquale一直是虚幻引擎及光线追踪实现的忠实用户,同时也为引擎开发提供了大量帮助。你可以在他的网站专区浏览他使用虚幻引擎打造的更多作品。