メインメニューを開く

差分

環境光

894 バイト追加, 2020年6月16日 (火) 05:31
このため[[平行光源]]と環境光は「ふたつでひとつ」として扱われることが多い。たとえば[[MonoGame]]のBasicEffectも[[平行光源]]と環境光のセットとなっている。同様に[[Unity]]も初期状態のライトが「Directional Light(平行光源)」という名称であるが、これにも環境光が一緒に内蔵されている。
 
== 主なアルゴリズム ==
環境光の実装は非常に簡単なものが多い。
だいたいこれ。
* [[定数バッファ]]で環境光の「色」と「明るさ」を送り込んで、
* [[ピクセルシェーダー]]で単純に全[[ピクセル]]に加算する。
 
<source lang="cg">
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);
}
</source>
 
 
もう少し上を目指す場合は[[アンビエントオクルージョン]]という手法を使う。途端に複雑になるぞ。
==関連項目==