【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
      • 屬於非真實渲染的着色方式
      • 基於冷色和暖色調的渲染,採用一些光照模型,並將明暗與色調相結合
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章