“ 感知技术 · 感触CG · 感受艺术 · 感悟心灵 ”
中国很有影响力影视特效CG动画领域自媒体
你可能对影片渲染队列中的采样充满疑惑,不过在这篇文章中,我将用通俗易懂的语言解释如何在引擎中正确地设置采样,从而获得高效美观的渲染效果,消除你的一些困惑。
延迟或混合光线追踪渲染(非路径追踪)
时间采样数
如果你发现运动模糊的效果并不平滑,就应该提高这个数值。它很像Arnold中的像素采样,只要单看alpha值,你几乎就能确定相应的数值。或者换个角度想,如果你看的是一个快速旋转的对象,那么时间采样越多,运动模糊就会越平滑圆润。
如果你发现了任何抗锯齿方面的问题,比如你看到有锯齿状的线条在努力地合成一条直线,那就需要更改这个数值。但前提是你的抗锯齿方法设置为“无(None)”,否则就还是用抗锯齿的方法来控制比较好。更多详情请见下文。
最好是先从较小的数值开始,然后逐步提高。运镜快的镜头会运镜比慢的镜头需要更多的时间采样。
在这种渲染方法中,混合使用时间采样和空间采样并没有任何优势。如果将抗锯齿方法设置为“无(None)”,在增加时间采样的同时增加空间采样,虽然这样也可以提高抗锯齿质量,但会失去额外的运动模糊混合效果。最好不要混合使用延迟渲染路径。要么全部使用时间采样,要么全部使用空间采样。
默认情况下,引擎会使用“帧中心(Frame Center)”的快门时间来渲染运动模糊。因此最好将采样数保持为奇数,这样就能在关键帧上为任何动画效果或方向变化做好采样,也有助于在渲染中更清晰地呈现出运动的效果。
空间采样数
- 与时间采样类似,只是它不会tick引擎的向前渲染。因此,只有当你不希望渲染中出现运动模糊时才会使用。不过也可以用同样的方法来清除任何锯齿,但前提同样是抗锯齿方法要设置为“无(None)”。
抗锯齿方法
默认情况下,虚幻引擎4会使用TAA,而虚幻引擎5会使用TSR(或者你在项目偏好中设置的方法)。这些抗锯齿的方法虽然不够完美,但在很多情况下都很好用。TSR是TAA的一次飞跃,建议只有在你出于视觉效果考量并觉得很有必要的情况下,才在MRQ中禁用这些功能。事实上,有很多渲染功能会在启用这些功能时获得最佳效果。
TAA/TSR适用于GPU返回的每个采样。
就TAA而言,如果你的总采样点不超过8个,那一般应该开启TAA。在采样点较少的情况下,比起让引擎抖动摄像机、循环播放序列,TAA会有更好的效果。如果超过8个采样点,MRQ就会弹出相关的警告了。而一旦达到12个左右的时间采样点,TAA的收益就会随之减少,这时你就可以考虑把它关掉了(TSR并非如此,因为它会自动选择最佳的抖动采样点数量,并考虑到更多的使用情况)。基本上,TAA/TSR拥有前一帧的图像历史记录(实际上是渲染过的每一帧图像的历史记录,不过最近的帧会占很大比重)。TAA会对图像采样8次,然后与当前帧合成。你可以使用cvar r.TemporalAA.NumSamples来控制抖动位置的数量。默认值为8。TSR很智能,它可以自行决定并为你提供最佳的结果。虽然在我自己的测试中,超过12个采样点的效果并不明显,所以我前面说了收益会递减,并且你还是应该考虑将AA方法设置为“无(None)”。相关信息还请参阅下面的内容。不过还是那句话,建议只有在你出于视觉效果考量并觉得很有必要的情况下再做出修改,否则最好还是不要乱动。其实有很多渲染功能都需要用到TSR,比如Lumen。
当抗锯齿方法设置为“无(None)”时,摄像机的位置将遵循Halton序列,并为输出帧中的每个时间/空间采样点选择独特的子像素抖动。因此,如果你出于运动模糊的考虑,必须使用非常多的时间采样来进行渲染,那么还不如使用每个时间采样,通过它获得的摄像机位置来做抗锯齿。你不妨测试一下,看看哪种方法能获得最好的效果。
作为练习,我鼓励各位尝试渲染MRQ中的各个采样,并使用不同的抗锯齿方法和采样类型来完成渲染。这样可以让你更好地理解渲染时到底发生了什么,也有助于你理清所有的问题。如果你对时间与空间采样有疑问,对AA、TSR、None等反锯齿方法有困惑,这些练习可以给你呈现直观的视觉效果。将AA方法设置为“无(None)”时你会看到每个采样上的抖动,而使用TAA/TSR时,你又不会看到抖动了,但它们都在努力创造出稳定的图像,你都可以启用试试看。
至于关闭TAA/TSR的原因,举个例子,假如你有一块非常杂又非常薄的几何体,而且轮廓线又很难理清(见上图),或者从摄像机的Z轴向后看,有许多走线相互堆叠在一起;这些都是TAA难以处理的问题,你可能不得不靠空间/时间采样来清理这些线条。
路径追踪的渲染采样
路径追踪器相较于时间和空间采样又有些不同。在路径追踪器中,你需要混合和匹配采样类型,而时间采样的混合是在CPU上进行的,空间采样则是在GPU上进行的,因此情况有所不同。降噪会在最后一个空间采样上,而时间采样则会采用混合降噪。此外,路径追踪器会关闭任何TAA或TSR,并只根据采样进行回复,因此你需要比延迟渲染器更多的采样。
有一种很好的办法可以为路径追踪渲染调整采样,那就是增加空间采样,直到获得可接受的抗锯齿图像。然后用空间采样数除以时间采样数,就能在降噪过程中获得干净的运动模糊和/或较少的闪烁。
也就是说,如果需要1024个空间采样点才能获得清晰细腻的图像,需要4个时间采样点才能获得清晰的运动模糊图像,那么空间采样点和时间采样点的最终设置应该分别为256(1024/4)和4。
虽然对于快速移动的场景,你需要更多的时间采样来解析,但将时间采样增加到8个以上会对渲染时间产生极大的影响。
光线追踪/Lumen/光追阴影采样
很多人一遇到噪点就会都会增加MRQ的采样,但效果并不理想。在MRQ中增加空间或时间采样的原因有两个。第一是你发现运动模糊的质量很差,这就需要增加时间采样。请记住,空间采样不会tick引擎。第二是为了抗锯齿质量。如果你想要运动模糊那就选时间采样。如果不需要,则选空间采样。同样地,前提还是你将抗锯齿方法设置为“无(None)”。
任何其他的噪点问题都需要从源头解决。如果你在阴影中看到噪点,而你又正在做光追阴影,那就需要处理有问题的光线。如果你在反射、折射、GI或AO中发现噪点,则需要在PPV(而不是MRQ)中解决。这是为最常见的错误,只会不必要地增加渲染时间。
依靠“时间采样”来清除渲染帧中的噪点也是可行的,但会浪费大量的渲染时间。在许多情况下,你可以在有问题的相应区域内,解决每个像素点的光追/Lumen采样中的问题。
如果你发现阴影中有抖动,请考虑提高光照的SPP。如果阴影看起来过于柔和,则应考虑将数值提高到1以上,尤其是区域光照。
如果你在反射中看到噪点,请查看PPV中的设置,包括Lumen、光线追踪/屏幕空间,它们都有各自的采样/质量。
这些采样会让你的GPU在追踪时更加高效,会比只使用时间/空间采样更有效率。
TDR - 使用高采样数有时会导致TDR超时。虚幻引擎5在方面的表现应该比虚幻引擎4好很多,但你也可以设置延迟来尝试缓解该问题。
https://docs.substance3d.com/spdoc/gpu-drivers-crash-with-long-computations-128745489.html
https://docs.microsoft.com/en-us/windows-hardware/drivers/display/timeout-detection-and-recovery
预热
这里我就转述一下开发人员Matt Hoffman关于预热的绝妙解释。
要深入了解预热,请参靠dev Hub的这篇文章:
https://dev.epicgames.com/community/learning/tutorials/l4OR/unreal-engine-movie-render-queue-warmup-and-first-frame-issues
序列预热要取决于用户的内容。要实现“真正的”预热,序列必须在摄像机镜头开始前就拥有数据,但很多情况下用户并没有拥有这些数据,因此有几个选项是围绕模拟已经拥有数据(实际上并不存在)而设计。
引擎预热(Engine Warm Up)是指在开始渲染之前,我们在一个镜头的起始位置会经过多少引擎tick。任何基于CPU的东西(如布料、CPU粒子等)都需要一段时间段来沉淀/预热;而它的工作原理就是,我们会评估序列的第1帧(回放范围内的起始帧,但为了便于理解,这里的讨论中就将其称为第0帧),然后在序列暂停的情况下运行引擎,进行引擎预热计数(Engine Warm Up Count)。
然后经过了一定的引擎tick之后,我们就会评估第1帧,然后再次跳回到第0帧,这次我们会将渲染预热计数(Render Warm Up Count)采样提交给GPU进行渲染(不会改变世界场景)。这样是为了让TAA/TSR有一些图像历史记录来用于第1帧的抗锯齿处理。而我们之所以要从0->1->0这样跳转,是为了模拟运动模糊,使第1帧具有运动模糊效果。
概括一下这两种方法,我们就不难明白:引擎预热可以为任何基于CPU的工作进行预热,而渲染预热将为任何基于GPU的工作进行预热。
开启渲染预热帧(Render Warm-Up Frames ON)会让系统在引擎预热计数(Engine Warm-Up Count)期间进行渲染。出于性能方面的考量,我们一般不会启用,但如果你有基于GPU的粒子效果,就可以启用。
比较“正确的”方法是使用“使用摄像机剪辑预热(Use Camera Cuts for Warm Up)”功能。这样就可以查看镜头内多余的摄像机剪辑轨道。如果你的回放范围是从[0, 50)开始,而摄像机剪辑部分是从[-75, 50)开始,那么就会创建75个预热帧。它和引擎预热帧的不同之处在于,它会对每一帧的序列都进行实际评估,因此它会从-75、-74、-73帧开始。而这对于某些类型的特效来说又是必须的,例如:如果角色身后有布料尾迹,或者角色在奔跑过程中发出了粒子效果,那就需要实际评估第1帧之前的一些动画数据,这样粒子才会在角色身后留下尾迹,而不是在第1帧就卡住不动了。这个功能可以与“开启渲染预热帧”结合使用,从而无需使用额外的渲染预热计数帧。这个功能在布料模拟中也很有用,它可以将角色的T型姿势混合到第1帧中。因为有些情况下第1帧的动画(与参考姿势相比)差异过大,可能会导致布料位于碰撞器错误的一侧,而解决方法就是在预热帧中将参考姿势柔和地混合到第1帧动画中。你还需要将变换轨道、粒子激活轨道等扩展到镜头开始前的一段时间。你可以使用序列器工具栏中的“隔离评估子序列(Evaluate Sub-Sequence in Isolation)”来预览评估结果。
CVARS
除非有什么充分的理由,否则我一般都会移除所有的cvar重载。虽然降噪器还不够完美,但很多时候效果已经够好了。这样你就不用严格按照采样来解决所有的噪点问题。
如果你发现了严重的低频噪点,那应该就是降噪器的问题,你可以把它关掉,然后去找到合适的降噪器(AO、GI、反射等……)。但这种只是特例,并不常见。
很多人可能都不知道,MRQ中“游戏重载(Game Overrides)”部分的所有内容都会对渲染产生影响,即便你并没有在GUI中将其激活。因此,很多“高质量”的可扩展性设置和cvar可能都是默认设置,而且可能就在你的眼皮底下。最好的办法就是查看这些设置,然后决定自己是否需要调整。如果你禁用了除草地光亮之外的所有设置,那就能尽可能接近你在编辑器视口中看到的效果,当然前提是你没有在MRQ中重载任何cvar。这里的几何体LOD设置不会覆盖任何Nanite设置,并且仅适用于非Nanite的Actor。
你还可以自定义MRQ UI的默认状态,要了解更多信息请参考这里:
https://dev.epicgames.com/community/learning/tutorials/Kw1l/unreal-engine-customize-the-default-ui-setting-for-movie-render-queue
非常感谢Matt Hoffman、Jonathan Litt以及Nathaniel Morgan对本文的贡献。
全文完
UE5在Sequencer中使用Image plane组件
碰瓷宝可梦的《幻兽帕鲁》,疑似应届毕业生AI量产?团队人员竟是20岁CG零基础的青少年?
干翻横店和好莱坞!?非洲小哥600块拍出“百万级”特效大片?!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.