Loading...
墨滴

SimFg

2021/10/19  阅读:42  主题:全栈蓝

刚刚开始,我就碰壁了

公众号:SimFG,期待与你相遇

近期在开始学习Shader Graph,因为看到互联网上有很多比较好看的游戏效果,自己有点心动,于是搓搓小手,说学就学。在开始学习第一个节点的时候,我就碰壁了。

Channel Mixer

含义:通道混合,通俗理解就是矩阵A(3*1)与矩阵B(3*3)相乘运算

Channel Mixer示例
Channel Mixer示例

上面图中的输入Color值是(0.1, 0.2, 0.3),然后通道权重矩阵RGB分别为(2, 1, 1)/(0, 2, 0)/(0, 0, 1),计算得到的结果应该是(0.7, 0.4, 0.3),于是我新建一个Color节点对比。

节点对比
节点对比

然后我就... 20211015-164422 这这这,我应该没有记错吧,是这样计算呀!

原因分析

第一次遇到的时候我其实没太明白,看了很久也不知道为啥,今天在回过头看发现个问题,这里面有个前提是看到后面颜色空间转换节点的一些知识点明白。

查看节点源码,打开方式

Channel Mixer 生成代码
Channel Mixer 生成代码

注意看被红色方框选中的文字,通过函数名称大概可以知道:是否是Gamma空间,整个的输入颜色值的含义就是:如果是Gamma空间,那么就是输入的颜色值,否者会先调用SRGBToLinear函数。可见,问题应该就是导致的不一样。

原因确认

设置项目为Gamma空间 然后在回来看之前的对比节点,发现一样了

Gamma与Linear空间

查看两张渐变的图片

Gamma
Gamma
Linear
Linear

Linear空间下是真实渐变的过程,人眼查看的过程中会发现黑色部分占比少,白色部分占比多,有点不太符合人的直觉,所以就有一个Gamma空间,使得白色和黑色部分占比差不多。那么,Linear空间到Gamma空间的转换过程,被称为Gamma校验,计算过程就是进行pow(2.2)算术运算。

参考文章:聊聊Unity的Gamma校正以及线性工作流

SimFg

2021/10/19  阅读:42  主题:全栈蓝

作者介绍

SimFg