计算机世界中颜色混合与叠加的理解与实现
个人理解:
我是这样认为的,RGB归一化后所有的数值都在[0,1]范围内,相乘只会让数字变的更小,相加也不可能变暗。所以颜色相乘 往往会使原颜色变淡,这相当于一个混合的过程,在PhotoShop中相当于是正片叠底。颜色相加则会使原颜色更亮,相当于一个线性叠加的过程。
理解了以上概念之后,我们再来看环境中光照的颜色信息是如何处理。在计算环境中的光照信息我们也会经常会对两个颜色进行这两个操作。首先我们要知道我们眼睛是如何看到最终的颜色的,我们能看到物体颜色,是由于光源发射光线照射到物体上,产生了散射和吸收两种结果,最后再进入到我们的眼里。光源发出的光是有颜色的,而物体自身会有自身的颜色。光照射到物体上一部分会产生散射或反射,而另一部分会被物体吸收后再反射,改变了照射到物体表面的光的密度和颜色。这些被物体吸收的光,之所以颜色会被改变,是因为我们光照射在物体上没有发生反射,导致物体自身的颜色跟这个光颜色产生了混合。那么为什么会又有反射又有吸收呢,这其实是因为不同的物体材质的反射率不同,比如金属的反射率往往比粗糙的物体表面反射率高,所以反射的光线数量也多。那么简单来说其实放到材质球上我们物体自身的颜色就是这个材质的反射率,根据颜色值的范围也确实满足反射率范围。这里只是简单的举个例子,实际上不同的光照模型会进行不同的颜色合并和混合操作,往往很多,比如金属材质,要考虑漫反射和高光反射以及金属的光泽度和金属表面含量等等,这些都会影响反射情况,影响表面光的颜色。
总而言之,被物体表面吸收的光会改变光的颜色和密度,吸收意味着它是一个混合的过程,而不是线性叠加,所以我们这个过程实际上就是 光颜色 * 自身颜色或反射率;而当物体被多个光照射时,实际上就是将这些被反射的光的颜色叠加。想象一下你每次增加你现在所在地方的灯泡,观察周围环境是不是会越来越亮。所以这个过程就是 所有反射的光颜色的总和,如漫反射 + 环境光 + 高光反射 + 自发光。
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/unity/3793/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!