【问题标题】:Why the final color value is the product of two other color values in shader program?为什么最终颜色值是着色器程序中其他两个颜色值的乘积?
【发布时间】:2015-08-03 15:11:59
【问题描述】:

在漫射照明模型或其他模型中,一个像素的最终颜色值应该是其他两个光颜色值的乘积,我不太明白。 像这样:

float4 c;
c.rgb = (s.Albedo * _LightColor0.rgb*diff);

【问题讨论】:

    标签: unity3d shader cg


    【解决方案1】:

    这是因为您还需要考虑灯光的颜色以及从周围反射的颜色。

    在您提交的代码中,s.Albedo 是对象本身的颜色,_LightColor0.rgb 提供主光的颜色(即场景中的定向光)。作为一个实验,首先尝试将主光的颜色从白色变为红色再变为蓝色,您会注意到会发生什么。

    同样,如果没有 _LightColor0.rgb * diff 相乘,该对象将提供纯色并且看起来更像一个 2D 对象。

    【讨论】:

    • 感谢您的回复。这是否意味着当我组合不同的颜色时,我只是简单地将它们相乘?
    • 您还可以通过对颜色进行加减或其他数学运算来获得不同的结果。但是当你需要给一些光照效果时,你需要将它相乘。
    • 但是我认为multiply意味着在大多数情况下最终的颜色比任何其他源颜色都更暗。两种颜色结合起来不应该更亮吗?
    • 看看下面的链接。它对着色器中的颜色数学有很好的解释。 laurenscorijn.com/articles/colormath-basics
    • 非常感谢,你帮了我很多。
    猜你喜欢
    • 2012-04-26
    • 2019-05-02
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多