赞
踩
一般在混合细节贴图的时候会用到
这个值在Gamma Color Space时为2,在Linear Color Space时为4.594(2的2.2次方)。而透明通道在两个空间下都是2.
对于这个值可以这样来理解。一般在Gamma Color Space中将两个Color值相乘后,为了避免颜色变得很暗,会在后面乘以2。”
也就是说,为了避免颜色变暗,应该扩大两倍,但同时因为是在线性空间下,所以这个2要变成4.594。
例子:
纹理颜色:color = 0.8
细节贴图颜色:detailColor = 0.5(为什么细节贴图颜色是0.5,因为细节贴图是通过变亮或变暗改变纹理亮度,0.5恰好不改变亮度,大于0.5则增亮,小于0.5则变暗。细节纹理贴图往往用于产生细微的色彩偏移,所以这里以不改变亮度为例子)
当纹理贴图与细节贴图颜色融合的时候,即:color * detailColor,因为颜色值在0~1范围内,在Gamma空间下颜色相乘,亮度会降低一半,所以结果需要乘2才能的到正确结果。即:0.8 * 0.5 * 2 = 0.8
但是在Linear空间下读取纹理贴图颜色和细节贴图颜色的时候都会移除伽马矫正,读取到的颜色值:0.8 => 0.8 ^ 2.2 = 0.612,0.5 =>0.5^2.2 = 0.218 颜色值变小了,想要不改变原本的亮度,0.218需要转换回0.5才行,即0.218 * 0.5/0.218 = 0.5。所以融合之后不再是乘以2,而是乘以2 * 0.5 / 0.218 = 4.594
所以无论在伽马空间还是线性空间,融合之后只要乘Unity_ColorSpaceDouble就能得到正确结果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。