美文网首页
一、Shader基础:8、像素片元里的基本操作总结

一、Shader基础:8、像素片元里的基本操作总结

作者: GameObjectLgy | 来源:发表于2021-04-02 23:37 被阅读0次
    一、对最终像素颜色进行叠加,混合等并输出。
    二、计算光照。

    通常情况下关照的计算也会在这部分进行计算,虽然在顶点部分进行计算也可以,但是在这里计算的话效果能更好,当然也更加消耗性能。前面的文章有介绍过。

    • 1、光照准备
      float3 nDir = i.nDirWS; // 获取世界空间下法线方向
      float3 lDir = _WorldSpaceLightPos0.xyz; // 获取光照方向
      float nDotl = dot(i.nDirWS, lDir); // nDir点积lDir
      float halfLambert = nDotl * 0.5 + 0.5; 获得兰伯特光照

    float3 vDir = normalize(_WorldSpaceCameraPos.xyz - i.posWS.xyz); //获得观察方向
    float3 hDir = normalize(vDir + lDir);//获得半角方向,光照方向和观察方向的中间角方向
    float ndoth = dot(nDir, hDir);//获得反射光照
    float blinnPhong = pow(max(0.0, ndoth), _SpecularPow);//获得blinnPhong 反射

    float3 rDir = reflect(-lDir, nDir);//获得反射方向
    float vdotr = dot(vDir, rDir);//获得反射光照
    float phong = pow(max(0.0, vdotr), _SpecularPow);

    -2、采样
    // 采样Occlusion贴图
    float occlusion = tex2D(_Occlusion, i.uv);

    • 3、增加投影
      float shadow = LIGHT_ATTENUATION(i);

    相关文章

      网友评论

          本文标题:一、Shader基础:8、像素片元里的基本操作总结

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