環境光
環境光(英語:Ambient Light, Environment Light)とは、シーン全体を照らすライトのことである。
概要[編集 | ソースを編集]
環境光は「照らす」というよりは「シーン全体の明るさを底上げする」感じである。
平行光源だけでは光の当らない裏側の部分が真っ黒になってしまうので、そこを補助すべく環境光は 裏表なくシーン全体を照らし明るさを底上げする。
このため平行光源と環境光は「ふたつでひとつ」として扱われることが多い。たとえばMonoGameのBasicEffectも平行光源と環境光のセットとなっている。同様にUnityも初期状態のライトが「Directional Light(平行光源)」という名称であるが、これにも環境光が一緒に内蔵されている。
主なアルゴリズム[編集 | ソースを編集]
環境光の実装は非常に簡単なものが多い。 だいたいこれ。
float AmbientStrength;
float3 AmbientColor;
struct VSOutput {
float4 Position: SV_POSITION;
float4 Color : COLOR0;
};
float4 PSFunc(VSOutput input) : SV_TARGET
{
// 強さと色を掛けて
float3 ambient = AmbientStrength * AmbientColor;
// 頂点色と掛ける(テクスチャを使う場合はサンプリング色と掛ける)
float3 result = input.Color * ambient;
return float4(result,1);
}
もう少し上を目指す場合はアンビエントオクルージョンという手法を使う。途端に複雑になるぞ。