【Unity Shader】光照模型

  • 光照模型
    • Lambertian
      • 各向同性的光照模型,与视角无关,效率高,用于低模的情况较多,属于 Unity 内置光照模型,使用时只需要声明 #pragma surface surfFunc Lambertian 即可,不需要额外方法
      • 光照强度,即该表面顶点处的颜色的相关性: I = NdotL = dot (normal, lightDir)
    • 简单的自定义光照模型,#pragma surface surfFunc modelFunc,然后声明一个方法 Lighting + modelFunc 即可,会自动调用,参数为 (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
      • atten 是光照的衰减量
    • Phong
      • I = Ia Ka + Id Kd + Is Ks
        • N = normal
        • L = lightDir
        • V = viewDir
        • R = reflect(N, L) = normalize(2.0 * normal * NdotL - lightDir)
        • Kd = NdotL
        • Ks = pow(max(RdotV, 0), power) 
    • Blinn Phone
      • 与 Phone 不同之处在于 Ks,原因是 RdotV = |R||V|cos(a),当 a 超过九十度的时候变黑丢失细节了,视角与光源在被照射物体同一侧时很容易发生,所以需要改善
      • H = normalize(V + L)
      • Ks = pow(max(NdotH, 0), power)
    • Toon Shader
      • 属于非真实渲染的着色方式
      • 基于冷色和暖色调的渲染,采用一些光照模型,并将明暗与色调相结合

猜你喜欢

转载自blog.csdn.net/weixin_42561030/article/details/82227212