Nuke的Invert和PS之间有区别的原因

来源:互联网 发布:对抗网络 知乎 编辑:程序博客网 时间:2024/04/29 11:01

之前博客已经写过一篇线性工作流的文章,寥寥几句,并没有对色彩空间深入。那篇文章是实现Linear Workflow的最简单描述。

 

今晚使用Invert时发现和自己想要的结果不一样,查到aboutNuke上有个解释为

他们根本就是两个软件啊。PS是反相,Nuke是反转通道。

还有个解释为

NUKE  invert  1-channel PS       invert  255-channel

不得不说这俩解释虽然出自专家,但一个比一个蛋疼。

 

经过尝试后终于彻底想明白了这个问题,也彻底搞清了各个色彩空间的转换关联。记之。

 

 

 

 


 

对比

 

可以做一个实验,将一副图像在ps中翻转,同一副图像在Nuke中翻转,对比会发现迥然不同。

 

   

[左PS,右Nuke]

 

在处理低亮度图片是更是异常明显:

 

   

[左PS,右Nuke]

 

可以看到在差不多15%亮度的地方经过Nuke的invert之后几乎翻转成了纯白色。而PS则可以很好的像预料的一样"正确"翻转。

 

 

 


 

原因

设C为原色彩值,PS的确是更期待的结果,因为其结果为:1-C

而Nuke在换算时要复杂一些,Nuke是工作在线性空间的。普通的8位色深图会默认当成sRGB空间的图像来对待,一般而言也是正确的,除非像Maya等计算出来的数据,只需要指定其空间为Linear,Nuke则会当成Linear而不是sRGB来处理。

 

也就是说普通的8位图,在你看到之前要经历如下几步:

 

所以Nuke中的一个Invert后你看到的值是这样的:Linear_to_sRGB(1 - sRGB_to_Linear(C))

 

所以回想上面的对比,一个图片的暗部本来就暗(比如15%亮度),在sRGB_to_Linear后会变换的更暗(2%左右),这时候的图像是适合Nuke处理的线性数据了,经过反相得到一个非常亮的值(98%),这还不算完,线性数据要经过LUT显示转换到sRGB空间,这时图像会进一步提亮(99%以上)!

 

相信这么一说就很容易理解了。其本质原因就是变换不是线性的,本来我们需要1-15% = 85%的,但是却得到的99%。

 

 


 

正确操作

如果我们想得到适合人类理解的invert,就需要让invert直接对图像本身操作。

 

方法很简单直接,就是在操作节点之前加入ColorSpace节点完成Linear_to_sRGB,之后加入ColorSpace节点完成sRGB_to_Linear。这样这两个ColorSpace之间的节点链就操作在我们所理解的图像上,而不是经过Nuke转换成线性的数据上。

 

 

当然这是针对8位和16位等定点存储的图像的,对于openEXR等32位浮点图像则直接invert就行了,因为Nuke在输入和输出时并没有进行色彩空间的转换,所以也不需要我们另行转换了。所以如果想采取线性工作流,32位图像是首选。

 

 

 

原创粉丝点击