今天看到风火连城胸写的一篇博客,谈到改进的线性工作流,前段时间我刚因为这个而困惑在CGS发帖http://forums.cgsociety.org/showthread.php?f=87&t=982101 一些自己日思夜想的东西总是会“恰巧”遇到。
先谈谈背景,在第一次接触Linear Workflow(LWF)之后感觉自己瞬间比别人多知道个东西,然后开始以为不用LWF的WF都是错误的WF,然后在每个可能的情况下我都是用了LWF,得到的效果的确明亮起来,也漂亮了。这更坚定了我“不是LWF的WF都不是好WF”的观点。
可是后来在写RSL的过程中逐渐开始怀疑,shader所输出的值真的需要校正吗?这个怀疑的起因在于两点:
1.既然贴图需要一个0.455的gamma节点来变暗后才打到“正确”的空间,那么所有shader的颜色值是不是需要校正呢?
毫无疑问,是需要的,一张纯色灰度0.5的贴图和一个纯色0.5效果理论上是一样的,贴图需要"变暗"才能正确的话纯色也必须需要"变暗".
这么一想之后,你所面对的不只是贴图前挂个gammaCorrect节点了,而是必须把所有的shader的所有有关color的输入(ambColor,diffColor,specColor,sssColor...)进行校正!这样才能保证和贴图一样是“正确”的。
这样就导致一个杯具的流程,你所设置的一切颜色参数,假如未经校正,最终渲染出来都是过亮的(gamma 2.2),而如果想在调整时和渲染后得到的效果一样,那就需要在渲染时把所有