「環境光」の版間の差分
Administrator (トーク | 投稿記録) ページの作成:「'''環境光'''(英語:Ambient Light, Environment Light)とは、シーン全体を照らすライトのことである。 == 概要 == 環境光は「照ら…」 |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の1版が非表示) | |||
| 7行目: | 7行目: | ||
このため[[平行光源]]と環境光は「ふたつでひとつ」として扱われることが多い。たとえば[[MonoGame]]のBasicEffectも[[平行光源]]と環境光のセットとなっている。同様に[[Unity]]も初期状態のライトが「Directional Light(平行光源)」という名称であるが、これにも環境光が一緒に内蔵されている。 | このため[[平行光源]]と環境光は「ふたつでひとつ」として扱われることが多い。たとえば[[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> | |||
もう少し上を目指す場合は[[アンビエントオクルージョン]]という手法を使う。途端に複雑になるぞ。 | |||
==関連項目== | ==関連項目== | ||