Substance Painter使用OCIO匹配Unreal Engine的显示色彩

UnrealEngine , Other906 字

Substance Painter和Unreal Engine两者的显示是有差异的,主要原因是Unreal Engine使用的是ACES1.0.3,并且UE还对其进行了一些修改,而Substance Painter默认sRGB的渲染输出。
其实之前也有两种方法来实现两者的匹配,一个是利用第三方的ACES的材质来实现,另外一个是利用LUT来实现,之前我有篇文章中也提到了具体方法

不过在去年adobe终于全部支持了OCIO,包括Substance Painter在内的工具,都可以完整的使用OCIO流程来达到与其它平台的颜色统一管理及渲染效果的一至性。

使用OCIO来进行颜色管理的优势在于它的流程上是更加完善科学的,并不会像使用LUT那样只是做为最后的渲染进行转换,ACES是个完整的系统(或者叫说工作流),它也包括了输入时的IDT,中间会全部转为ACEScg的色彩空间,之后渲染显示进行了RRT,最后输出贴图再进行ODT,因此从你加载进一张贴图,到指定一个颜色,再到修改某个参数的强度的时候,它就已经开始了ACES的转换工作,缺失了前面的步骤,得到的材质效果会是有差异的,虽然它非常微小,但是为了严谨,应当保证整个工作流的完整性,才能在不同平台上显示同样的结果。
尤其在制作贴图时,如果是LUT的工作流程里,进行拾取颜色或者输入颜色,你不管是从视口中取到的颜色,还是从色板上取的颜色,都并非最终显示的颜色,这对于编辑制作时是有割裂感的,而采用OCIO,能保证你在统一的色彩空间中工作。

所以此篇文章就讲一下在Substance Painter中如何利用OCIO来与UnrealEngine进行颜色的匹配。

最简的办法就是将Substance Painter的项目设置中将颜色管理切换为OCIO,可以使用ACES1.0.3或者更高级版本的配置文件(UE4 使用的是ACES 1.0.3),其实这里用哪个版本都可以(1.0.3之后的版本主要是针对HDR显示设备的支持更新)。

在输出设置中可以修改,也可以不修改,如果极为严谨,应该使用Output-sRGB,因为UE4输入的所有纹理应当是sRGB的(UE并没有完全遵循ACEScg的流程,应该是UE考虑到易用性,不过不影响结果,只是流程上不够优雅,它其实是使用的是sRGB—>ACES2065-1—>RRT—>ODT。在UE5中已经可以手动添加纹理的颜色配置了)。

这个时候输出贴图,那么会发现在UE中显示的结果还是有些差异。是因为UE虽然是使用ACES,可是进行了些修改,最大的出入是UE在曝光上乘了1.45,其次是在蓝光抑制(blue correction)。因而你必须在SP的后处理中加大曝光值。

因此,并不能直接使用默认的ACES的配置文件,如果使用OCIO,那就需要对其进行修改,
以下是官方论坛中给的示例:

- !<ColorSpace>
     name: ACES sRGB ODT
     family: View
     equalitygroup: ""
     bitdepth: 32f
     isdata: false
     allocation: uniform
     allocationvars: [0, 1]
     to_reference: !<GroupTransform>
       children:
         - !<FileTransform> {src: InvRRT.sRGB.Log2_48_nits_Shaper.spi3d, interpolation: tetrahedral}
         - !<FileTransform> {src: Log2_48_nits_Shaper_to_linear.spi1d, interpolation: linear}
         - !<ColorSpaceTransform> {src: Colourspace - ACES 2065-1, dst: Model - Reference}
     from_reference: !<GroupTransform>
       children:
         - !<ColorSpaceTransform> {src: Model - Reference, dst: Colourspace - ACES 2065-1}
         - !<FileTransform> {src: Log2_48_nits_Shaper_to_linear.spi1d, interpolation: linear, direction: inverse}
         - !<FileTransform> {src: Log2_48_nits_Shaper.RRT.sRGB.spi3d, interpolation: tetrahedral}
 
- !<ColorSpace>
     name: UE4
     family: View
     equalitygroup: ""
     bitdepth: 32f
     isdata: false
     allocation: uniform
     allocationvars: [0, 1]
     to_reference: !<GroupTransform>
       children:
         - !<ColorSpaceTransform> {src: ACES sRGB ODT, dst: Model - Reference}
         - !<CDLTransform> {slope: [1.45, 1.45, 1.45], direction: inverse}
     from_reference: !<GroupTransform>
       children:
         - !<CDLTransform> {slope: [1.45, 1.45, 1.45]}
         - !<ColorSpaceTransform> {src: Model - Reference, dst: ACES sRGB ODT}

更简单的办法是直接使用UE5的OCIO插件中所带的OCIO文件。
位置在\Engine\Plugins\Compositing\OpenColorIO\Content\OCIO\simple.config.ocio
只要SP直接加载此文件就可以。

具体设置如下:

正确加载OCIO后,在3D视口中就可以切换sRGB-UE,现在将会得到与UE一模一样的结果。

最终显示对比:

注意,需要关闭两个平台上的主光源照明及shadow和后处理,SP中可以关闭AO效果,两个平台可以调整相当相机的FOV以及HDR环境照明贴图的旋转做到匹配一至

admin
博学之,审问之,慎思之,明辨之,笃行之。
OωO
开启隐私评论,您的评论仅作者和评论双方可见