文章目录
前言
-
介绍:
UE5.5版本路径追踪渲染器已经成熟,无论功能支持,稳定性和效果和效率都已经比较可靠可以用于产品的制作。今天和大家一起聊聊,内容主要讨论延迟渲染和路径追踪之间的效果差别有哪些,如何尽量统一效果,以及使用上如何对路径追踪效果及效率的提升。
-
延迟渲染和路径追踪效果区别(左延迟,右pt):主要是眼神光细节、眉毛胡子gi、双眼皮褶皱、面部光影等提升质感的细节区别
-
效率区别:
比渲染速度当然是延迟渲染更快,但是延迟渲染如果结合高品质时域空间抗锯齿、再使用多层遮罩深度等,效率就极大的被影响,一旦流程复杂就会有效率瓶颈;而pt的效率可以通过合理使用来提升,比如混合pt与df、参数设置等。
-
内容制作流程:调整df匹配pt,尽量靠近pt
PT与DF的效果差别与对齐
一、直接光
- 直接光面光源的高光/反射遮蔽不同,PT的更加精准
- DF有时有大面积漏光(比如在复杂窗子外边用面光源模拟天光),如图左,因为Lumen里无法被lumenscene遮挡,并且暂时难以规避
- 如果面光源面积大,那在df里的RTS半影会被遮挡,使面光本身显得更暗一些(不算bug,只算局限,制作上也难以避免)
- PT不支持面光源柔化参数:如图左给df点光源增加soft angle/radius参数,但pt不支持;但pt可以在制作上避免,比如使用矩形面光,但是增加贴图控制光源柔和程度
- PT有更精准的Nanite光追阴影:在DF的Nanite模式下,渲染模型和投影模型有一定差别(开启r.raytracing.nanite.mode会好一些,但离远了还是有问题),pt的阴影精度高很多;为了解决可以在df下使用vsm虚拟阴影贴图制作阴影。
- PT默认开启transmission效果,而df还需要在灯光中进行设置;比如树叶、皮肤、双面材质等情况
- PT开启灯光颜色功能设置:r.PAthTracing.LightFunctionColor 1;df开启需配置r.LightFunctionAtlas.Format 1,并重启。
- PT不支持直接光的Light Shaft(也叫God ray\Light beam,丁达尔光?),在df中通过后处理效果实现,参数很多是非物理来模拟的。如果要统一两边效果,建议使用体积光结合投影实现
二、 间接光
- DF下umen GI的间接光比PT暗一些:如果要提升Lumen的亮度,可以调节间接光强度(pt无效)、后期Diffuse Color Boost、或者把GI的mode从surface cache改为hit lighting。
- Lumen对动态对象的局限,动态对象不会生成surface cache,因此无法贡献gi和反射,使用hit lighting搭配屏幕空间反射可以减少差距,但动态物体离开屏幕时还是不行,不如pt的二次反射效果好。
- Lumen对复杂材质BSDF、BTDF的反射和gi表现不足,需要用hit lighting搭配材质中Raytracing quality Switch节点尽量接近
- Lumen屏幕空间效果有时保真度不足,由于ScreenTrace的反射高光有方向性,摄像机角度肯呢个看不到,这时候关闭ScreenTrace并且调高反射Bounce次数可以使效果更真实。
- PT中Decal有反射但不贡献GI,,Lumen里也只支持ScreenTrace。因此应该尽量避免使用自发光Decal,如果非要使用,可以用一个正常材质+ 隐藏模型和其阴影的方式来缓解,让它贡献gi(不推荐),又或者直接不用Decal做这种事。
- Lumen对齐PT时在间接光上的设置:
- 项目设置使用HWRT(硬件光追),GI和反射开启hit lighting
- 关闭ScreenTrace的GI和反射(有时与hit lighting冲突)
- 反弹次数需要3
- Lumen Reflection Max Roughness 设置为1
- Diffuse Color Boost设置为1-2提高gi亮度(可选)
三、天光和天空
-
天光有重点采样(重要性采样?)优化,因此最好使用天光而不是自发光的天空球
-
天光设置参考
- 用Skylight Realtime Capture,包括Sky dome、Sky atmosphere、Fog和Cloud
- 使用自定义HDRI作为Skylight照明,并且关闭Affect Dynamic Indirect Lighting避免双重照明
- 谨慎使用Reference Atmosphere,会使很多功能失效,还需要特殊配置
- 材质中的is Skylight:开启后不不渲染自身、不贡献gi、可以被天光捕获;
-
DF有精度限制,如果天空有特别亮的像素时会有损失,如下图。因此在LookDev下做有方向性的光时,最好用直接光
四、雾,体积雾,体积光
-
PT雾需要使用体积雾,精度高,并且雾效会受光源radius影响(右图),df下取决于tex精度,并且使用时序历史帧的数据因此会有抖动的情况(左图)。
-
Exponential fog(高度雾)的Falloff的参数不物理,因此pt和df很难效果统一。如果体积雾距离数值大能相对接近一些。
-
Lumen对体积光反射有局限,默认不反射雾气,设置r.Lumen.SampleFog 可以有一点点效果,但与pt差别大
-
PT中带颜色贴图的面光源会影响和体现到体积雾上,但df不会(上图)。如果设置r.VolumetricFog.RectLightTexture 为1,则df可以有一定程度的颜色影响,但效果与pt不一样;如果再设置r.VolumetricFog.InjectRaytracedLights 1,两边效果会相对一致。(下图)
-
PT的Fog不支持lighting channel,所有channel总是工作;而df中也只支持channel 0。
-
如果使用Reference Atmosphere,pt的Volumetric Fog也可以支持;但不支持新功能LocalFogVolume(用来在某些无法使用体积雾的设备上产生局部雾的功能)
五、材质
-
头发着色模型:主要区别是对散射的支持,df下不支持真实散射功能,(散射让头发更加通透自然,在只有间接光情况下差别明显);
-
头发:在Groom下,df支持的input有BaseColor\Specular\Roughness\Tangent\Backlit,而PT不支持其中的Tangent和Backlit;在Card头发下,df支持的input有BaseColor\Scatter\Specular\Roughness\Tangent,PT不支持Tangent
-
PT默认支持皮肤Transimission,效果比较好;df需要单独在灯光设置中开启,但效果相差明显(右边PT),甚至不好看,所以有时还会专门关掉此功能
-
PT不支持Volumetric Fog 材质(在开发计划中)
-
PT可以自动计算半透折射(需要开启Refraction)、厚度(有厚度用Asorption Medium-吸收介质 节点来染色;没有厚度用Thin Translucent)、焦散,(设置r.PathTracing.ApproximateCaustics 0质量更高)等效果。DF有很大差别,可以对比文档查看。
-
PT尚不支持Pixel Depth Offset。所以尽量使用Nanite高精度模型,来适应两个模型穿插时需要的丰富细节;并且因此PT也只能用Groom
-
PT中WPO(世界位置偏移,vs里实现)默认不起效,需要开启Enable WPO in Raytracing(PT);并且材质动画在pt里会有残影的情况,需要关掉r.Test.OverrideTimeMaterialExpressions停掉材质动画效果,避免运动模糊
-
Lumen在硬件光追中不支持材质使用DDX、DDY节点,因此会在Hitlighting中的LumenScene中有异常,如上图左。比如上图图左材质使用了HeightToNormalSmooth节点,里边用到了DDX和DDY,效果就有问题,如果替换成RayTracingQualitySwitchReplace节点,效果就会好些,变成下图图左。
-
目前PT还不支持Nanite Tessellation
六、粒子
- Niagara Fluids在PT下精度不够高,会有马赛克问题,这是因为r.HeterogeneousVolumes.FrustumGrid.ShadingRate 默认是4(控制多少像素做一个shading),调成2就好了。另外两个相关参数是r.HeterogeneousVolumes.FrustumGrid.MaxBottomLevelMemoryInMegabytes 512,和r.PathTracing.MaxRaymarchSteps 1024.
七、Denoise 降噪
- 视口降噪方式切换参数r.PathTracing.SpatialDenoiser.Type,其中0是使用openImage的Denoise,表现柔和、降噪力度强大、但会失去一些细节(上图右);1是NVIDIA的optiXDenoise,细节保留比较多(上图左)
八、后期
- PT中需要关闭自动曝光,因为自动曝光在输出的时候需要预热时间使曝光正确,PT下渲染慢会有问题
- PT中没有TSR,df中因为开启了TSR(时序超分)画面会比PT模糊一点
- motion blur:建议PT使用Reference Motion Blur,这样就不用后期制作MB效果了(但参数Shutter Angle等还是去后期的MB面板上设置)。TemporalAA的数值决定光滑度。
- PT里的后期无法采样SceneTextures,它有自己一套采样的buffer
九、其他
- PT中想渲染长条模型的话,需要开启r.PathTracing.Geometry.SplineMeshes 1,其他各种各样的模型设置是否能在PT中渲染也是类似
- PT中不支持世界分区的HLOD,因此不会渲染,也不会反应在其他反射中。(影视渲染要避免使用HLOD)
对PT速度的影响因素
-
PT基本工作原理:Importance sampling、反弹次数、Sample数量、逃逸
Path Tracing是Raytracing的一种,但使用了一些优化采样算法,可以使用更少的射线产生比较好的效果。基本原理是从摄像机发射射线,反向对每个像素进行信息追踪,射线经过一定次数反弹直到追到光源或者逃逸。最后用收集到的信息进行着色。每个像素有多次射线(SPP),路径有一定随机性(根据材质属性和灯光信息会对方向有指向),着色使用结果的平均值。
-
MRO输出的Reference Motion Blur必须开,会快很多
-
像素数量包含分辨率和分层的像素(局部PT),renderLayer数量也影响性能
-
光线无法逃逸的环境就慢,比如封闭室内,可以用最大反弹次数限制
-
植被是否Nanite、面数多少、是否WPO对速度影响不大,可以忽略
-
Volumetric Fog的浓度越大和可视距离越远 速度越慢,----体积雾可以控制在一定区域内(区域光源的区域雾效)
-
Reference Atmosphere和Reference Cloud速度会慢
-
材质影响:
- 材质BaseColor越亮就越慢(尽量不要接近1),因为反弹终结需要用到蒙特卡洛方法,但基础色太亮终止的机会就越小。---可以通过降低最大反弹次数缓解,或者材质里单独设置"贡献PT的Albedo"低一点,不贡献的可以高一点
- 反射粗糙度越低就越慢(其实就是越反弹越难终止越慢)
- 复杂材质慢。比如SSS皮肤、散射的毛发、植被-双面foliage的Subsurface、半透- Color的Transmission
-
灯光影响:
- 灯光数量对速度影响不大
- 但灯光面积Radius(光源面积)和照明半径越大速度越慢
-
Tips:可以使用后处理Volume里的Lighting Component的Toggle 设置来Profile到影响速度的主要因素
比较分层PT和全部DF的速度差别
- Slay(室外) 4K,64Sample 分两层:全DF 20s;背景DF人物PT 22s;全PT 29s
这个室外场景方便光线逃逸,并且光源主要是直接光,可以看到局部pt增加的时间并不多;全部pt多9s主要是像素多和体积雾pt不友好等原因
- ArchViz(室内) 4K,64Sample 分两层:全DF 21s;背景DF人物PT 31s;全PT 34s
这个室内照明使用pt就会变慢很多,这是因为角色照明主要来自环境GI或者反弹光,即使分层计算也很复杂