Nuke的Invert和PS之间有区别的原因
2011-04-17 01:18
239 查看
之前博客已经写过一篇线性工作流的文章,寥寥几句,并没有对色彩空间深入。那篇文章是实现Linear Workflow的最简单描述。
今晚使用Invert时发现和自己想要的结果不一样,查到aboutNuke上有个解释为
“他们根本就是两个软件啊。PS是反相,Nuke是反转通道。”
还有个解释为
“NUKE invert 1-channel PS invert 255-channel”
不得不说这俩解释虽然出自专家,但一个比一个蛋疼。
经过尝试后终于彻底想明白了这个问题,也彻底搞清了各个色彩空间的转换关联。记之。
[左PS,右Nuke]
在处理低亮度图片是更是异常明显:
[左PS,右Nuke]
可以看到在差不多15%亮度的地方经过Nuke的invert之后几乎翻转成了纯白色。而PS则可以很好的像预料的一样"正确"翻转。
而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%。
方法很简单直接,就是在操作节点之前加入ColorSpace节点完成Linear_to_sRGB,之后加入ColorSpace节点完成sRGB_to_Linear。这样这两个ColorSpace之间的节点链就操作在我们所理解的图像上,而不是经过Nuke转换成线性的数据上。
当然这是针对8位和16位等定点存储的图像的,对于openEXR等32位浮点图像则直接invert就行了,因为Nuke在输入和输出时并没有进行色彩空间的转换,所以也不需要我们另行转换了。所以如果想采取线性工作流,32位图像是首选。
今晚使用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位图像是首选。
相关文章推荐
- 大唐之路(1)PE/PP/PS/PVC/PET之间的区别
- ps aux、ps -aux、ps -ef之间的区别
- ps aux、ps -aux、ps -ef之间的区别
- MVC ,Action方法传数据给视图有几种方式?--PS:tempData和Viewbag,还有ViewData之间的区别
- Linux中ps aux、ps -aux、ps -ef之间的区别
- 什么是软件404和404错误 它们之间有什么区别
- 新手须知 C、C++和VC++之间的区别
- JSP中转发与重定向的原理以及它们之间的区别
- UTF-8 GBK UTF8 GB2312 之间的区别和关系
- String,CString,TCHAR,char之间区别和联系
- DIV与SPAN之间的区别
- C#中out和ref之间的区别
- java execute、executeQuery和executeUpdate之间的区别
- (转载)String,CString,TCHAR*,char*之间区别和联系
- static_cast、dynamic_cast、reinterpret_cast和const_cast之间的区别
- Docker,Docker Compose,Docker Swarm,Kubernetes之间的区别
- 网页静态化和网页伪静态化之间的区别与选择
- PV、UV、IP之间的区别与联系
- git,svn,github,码云之间联系区别
- 内存泄露和内存溢出是什么?他们之间的区别是什么?