UNITYシェーダ研究 Ambient
コード
https://github.com/YukiMiyatake/UnityLesson/tree/Shader_5
前回のシェーダ
ディフューズとスペキュラを実装し、だいぶライティングができた
テクスチャマッピングもしている
でも、Ambientも与えていません
Ambientの設定
UNITYのバージョンにより違うけど
最近のバージョンでは
Window-Lighting-Setting から行う
Environment Lightingのあたり
Ambientの取得
Ambinetカラーの取得は定数が用意されているので簡単だ
UNITY_LIGHTMODEL_AMBIENT.rgb;
これを計算式に加えるが
テクスチャ * Ambientの値を今までのものに足せばよいので最終的には
最終カラー = Ambientテクスチャ + Diffuseテクスチャ + スペキュラ
= (Ambient+Diffuse) * テクスチャ + スペキュラ
にした
float3 frag(v2f i) : SV_Target { float3 L = normalize(_WorldSpaceLightPos0.xyz); float3 V = normalize(_WorldSpaceCameraPos - i.vertexW.xyz); float3 N = i.normal; float3 H = normalize(L + V); //Ambient float3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb; // texture albedo float4 tex = tex2D(_MainTex, i.uv); // Diffuse(HalfLambert) float3 NdotL = dot(N, L); float3 diffuse = (NdotL*0.5 + 0.5) * _LightColor0.rgb; // Speculer // float3 specular = pow(max(0.0, dot(reflect(-L, N), V)), _Spec1Power) * _Spec1Color.xyz; // reflection float3 specular = pow(max(0.0, dot(H, N)), _Spec1Power) * _Spec1Color.xyz; // Half vector return (ambient + diffuse) * tex + specular; }