【Unity】Phongの反射モデル


環境

  • Unity 2021.2.11f1
  • Build-in Rendering Pipline

Phongの反射モデルとは

ランバート反射と鏡面反射、環境光を合わせた反射モデルのことです。
今までの記事をあわせたシェーダーを作成し、実装してみます。

【ShaderLab】環境光を実装する
【ShaderLab】ランバート拡散反射を実装する
【ShaderLab】鏡面反射を実装する

PhongReflectionModel.shader

https://gist.github.com/went5/253f30af083e4df834c983a7f00637ae

拡散反射光と鏡面反射光と環境光を組み合わせる

const fixed4 specularColor = pow(saturate(dot(viewDir, reflectDir)), _Shininess) * _LightColor0;
const fixed4 diffuseColor = _LightColor0 * nDot * _Color;
const fixed4 ambient = UNITY_LIGHTMODEL_AMBIENT * _Color;
const fixed4 color =  diffuseColor + specularColor+ambient;

各光の求め方は以前の記事で書いたため、省略します。
以前と違うところとして、カラーの乗算計算が入っています。

拡散反射光と環境光は、物質が持つ色に影響を受けるため光の色と物質が持つ色を乗算する必要があります。

鏡面反射は、物質の色に左右されないため(一部例外あり)乗算をしていません。

最後に、拡散反射光・鏡面反射光・環境光を加算することで最終的なカラーが出力されます。

Table of contents


©️ 2026 went5. blog icon by

icons8