当前位置:   article > 正文

Unity_ColorSpaceDouble解析

unity_colorspacedouble

一般在混合细节贴图的时候会用到

这个值在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就能得到正确结果。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/108445
推荐阅读
相关标签
  

闽ICP备14008679号