UE4颜色管道基础
在 Unreal 中使用颜色和颜色空间时,重要的是要了解这些颜色在通过渲染管道时会发生什么。我们将回顾一下,何时以及如何将值从 sRGB 转换为线性,在后处理中会发生什么,以及当我们到达最终像素时会发生什么。一些颜色术语
颜色空间- 将为红色、绿色、蓝色和白色生成的特定颜色。可以定义不同的颜色空间,这将导致 1,0,0(例如)在一个颜色空间中比另一个颜色空间更饱和。示例包括 Rec709、Rec2020、sRGB、ACES 2065-1 等。
颜色编码- 值如何以数字表示,以及该表示应产生多少光。示例包括线性、sRGB、Gamma、PQ (ST 2084) 和各种供应商特定的日志编码。
Gamma - 用于对亮度值进行编码的非线性颜色编码。该等式可以表示为 OutValue = A * InputValue ^ Y。其中 A 通常是常数 1.0,而 Y 值就是我们认为的“Gamma Correction”值。
色域- 可以由颜色空间或输出设备表示的颜色子集,或在给定时间在图像中找到的颜色集。
线性颜色空间- 具有线性颜色编码的颜色空间。表示的光量与存储的值成正比。因此,数字加倍将产生两倍的亮度。
sRGB - 在计算机图形(和虚幻引擎)中,sRGB 指的是特定的颜色空间,也是特定的颜色编码。可以有线性 sRGB,也可以有 sRGB 编码的 sRGB。如果尚未明确上下文是关于颜色空间还是颜色编码,则该术语可能会引起混淆。
渲染管线,简化
渲染通常有四个阶段:
[*]获取纹理输入并将其带入线性编码颜色空间
[*]确定原始可见性,光线如何与表面相互作用,将结果放入场景颜色
[*]然后,对场景颜色中的所有内容进行后处理
[*]最后,将其显示到视口设备中
典型的颜色转换
引擎的隐式工作空间是 Linear sRGB。通过从纹理中存在的编码进行转换,将纹理导入工作空间。这目前由纹理上的 sRGB 复选框处理,这表明纹理文件已经是线性(标志关闭)或文件具有 sRGB 编码(标志打开)。
渲染和后处理都在线性空间中进行,直到我们达到胶片色调曲线(色调映射器的一部分)。色调曲线将场景的大动态范围压缩到 0.0-1.0 范围。
最后,我们从线性(应用了外观)转换回 sRGB 编码像素以进行显示。
纹理 sRGB 到线性转换
因此,给定一个以 sRGB 编码的 PNG 文件,我们有一个从 0 到 255 的渐变(这里用这条蓝线表示)。
当读取这些值时,它们会通过 sRGBToLinear 函数进行转换,该函数会降低这些值。
这意味着输入值 128(或 0.5)变为线性值 0.214。
这反过来又允许我们表示许多非常暗的值,即使我们的输入文件的位数很少。当数据变为线性时,需要更多的位来表示线性值。我们在场景渲染期间使用 16 位浮点数,这使我们能够同时表示非常小的暗值和非常高的亮值。
RGB 中的线性渲染
如果您正在查看诸如 RenderDoc 或 GPU Visualizer 之类的各种渲染阶段,我们将在线性空间中进行所有这些操作。当我们说“RGB 中的线性渲染”时,我们指的是此处突出显示的所有内容:
这就是我们可以移交给后处理之前必须发生的所有事情。这意味着就在我们开始后处理之前,在无光照、不透明、自发光材质中指定的颜色值正是 SceneColor 缓冲区中的值。
后处理是一系列阶段或过程。在本次讨论中,我们将色调映射器与前面的一组后期处理通道分开,这些通道包括时间抗锯齿、景深、运动模糊等操作。这些通道操作并产生线性像素值。Tonemapper 将线性场景转换为可以发送到显示设备的信号。
Tonemapper 是修改输出像素的一系列步骤。它们是对通常发生在相机镜头及其成像传感器中的操作的模拟。下面列出的步骤都是 Tonemapper 的一部分。
有时我们会想要关闭色调映射器的“外观”。但是,如果我们使用控制台命令 showflag.tonemapper 0 关闭色调映射器,我们剩下的就是输出设备转换步骤,这可能是不可取的,特别是因为这也会影响诸如绽放、晕影和色彩校正之类的东西.
但是,我们可以在体积或相机的后处理设置中控制每个单独特征的贡献或效果。
注意:在 4.26 之前,无法在后期处理设置中控制色调曲线。
色调曲线可以通过将其贡献设置为 0.0 来禁用。通常,想要关闭色调曲线的用户可能也想要关闭“扩展色域”颜色校正。该操作通过增加已经有些饱和的颜色的饱和度来与色调曲线协调。这使它们在应用色调曲线后看起来更好。
Filmic Tone Curve 有改变曲线整体效果的参数,但我们没有直接替换色调曲线的参数。如果您需要完全不同的色调曲线,则应考虑使用 OCIO,如下所述。
带有 UE 的 HDR 显示
目前,UE 有两个 HDR 显示目标,ACES1000nits 和 ACES2000nits。在“输出设备”步骤中处理输出到 HDR 显示器。当这些目标被激活时(通过 r.HDR CVars),电影色调曲线被关闭,并应用不同的色调曲线,以及不同的设备输出编码。
OCIO 色彩管理
在 4.26 中,我们还在引擎中实现了对 OCIO 颜色管理的支持。您可以在我们的文档中阅读有关如何设置和使用它的更多信息。但这如何适合我们目前讨论的颜色管道呢?
OCIO 颜色管理的作用是在各种供应商工具中提供一致的颜色转换。在 UE 的情况下,OCIO 接管了色调曲线和输出设备的责任。启用后,如下图所示,色调曲线和输出设备会自动禁用。
需要注意的是,虽然OCIO被描绘在Tonemapper旁边,但它是独立于Tonemapper的。如果您选择通过 Showflag 禁用 Tonemapper,OCIO 仍然会发生,并且会收到线性 SceneColor。如果您选择使用 ReplaceTonemapper 的后期处理材料,OCIO 将在之后发生,您需要仔细管理 PPM 的结果,因为它将成为 OCIO 的输入。
OCIO 和后期处理材料
当您使用 AfterTonemapper 的后期处理材质时,它会在 Tonemapper 处理完像素后调用。这意味着 PPM AfterTonemapper 将在显示像素上运行。它们不再是线性的,因为它们将输出设备编码到值中。
当 OCIO 使能时,PPM 同样在 OCIO 之后。因此,PPM 仍然在显示像素上运行,这将是由 OCIO 转换产生的显示像素。
重要提示:
Unreal软件电脑配置的要求是比较高的,特别是实时渲染,前期的硬件成本是比较高的,这里有一个简单的节省硬件成本的方法,使用呆猫云工作站,即使本地普通的电脑也能运行Unreal软件,且普通电脑也能享受行业最高端的CPU和GPU,极大提高制作效率和使用体验,且使用方便快捷,全面支持3D应用软件插件运行,随时调用百余款软件插件,高效作业。
呆猫云桌面可以为UNREAL 用户提供云端制作输出方案,提高工作效率。为Unity用户提供灵活、高效、低成本的云端烘焙服务,享受游戏制作的乐趣。用户在全国各地通过呆猫直接连接服务器,共享一套资产, 可以直接在呆猫上制作 / 修改工程文件,减少数据传输成本,高性能云办公选呆猫!
页:
[1]