美文网首页
Unity Shader 光照模型公式

Unity Shader 光照模型公式

作者: 洒一地阳光_217d | 来源:发表于2020-03-04 10:38 被阅读0次

    Unity Shader系列文章:Unity Shader目录-初级篇

    Unity Shader系列文章:Unity Shader目录-中级篇

    1、兰伯特漫反射光公式:
    C_{diffuse}=(C_{light}⋅M_{diffuse})max(0,\hat{n}⋅\hat{I})
    C_{light}:入射光颜色;
    M_{diffuse}:漫反射颜色;
    \hat{n}:单位法向量;
    \hat{I}:单位光向量;

    2、半兰伯特漫反射公式:
    C_{diffuse}=(C_{light}⋅M_{diffuse})((\hat{n}⋅\hat{I})*0.5+0.5)
    C_{light}:入射光颜色;
    M_{diffuse}:漫反射颜色;
    \hat{n}:单位法向量;
    \hat{I}:单位光向量;
    原理:由于兰伯特光照模型计算出模型背面的颜色为负数,模型背面会变成黑色,
    改进为将[-1, 1]映射到[0, 1]上,即乘以0.5,再加上0.5。

    3、Phong高光反射公式:

    Phong模型
    C_{specular}=(C_{light}⋅M_{specular})max(0,\hat{v}⋅\hat{r})^{mgloss}
    C_{light}:入射光颜色;
    M_{specular}:高光反射颜色;
    \hat{v}:单位视线向量;
    \hat{r}:单位反射向量,可以由表面法线\hat{n}和光源方向\hat{I}计算而得:
    \hat{r}=\hat{I}-2(\hat{n}⋅\hat{I})\hat{n} ,CG中可直接使用reflect获得;
    mgloss:反射系数;

    4、Blinn-Phong高光反射公式:

    Blinn模型

    C_{specular}=(C_{light}⋅M_{specular})max(0,\hat{n}⋅\hat{h})^{mgloss}
    C_{light}:入射光颜色;
    M_{specular}:高光反射颜色;
    \hat{n}:单位法向量;
    \hat{h}:单位半角向量,由光线和视线夹角一半方向上的单位向量计算得出:
    \frac{\hat{V} + \hat{L}}{\left | \hat{V} + \hat{L} \right |}(shader中计算:normalize(V + L))
    mgloss:反射系数;

    相关文章

      网友评论

          本文标题:Unity Shader 光照模型公式

          本文链接:https://www.haomeiwen.com/subject/oiaplhtx.html