「環境光」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
13行目: | 13行目: | ||
* [[定数バッファ]]で環境光の「色」と「明るさ」を送り込んで、 | * [[定数バッファ]]で環境光の「色」と「明るさ」を送り込んで、 | ||
* [[ピクセルシェーダー]]で単純に全[[ピクセル]]に加算する。 | * [[ピクセルシェーダー]]で単純に全[[ピクセル]]に加算する。 | ||
+ | |||
+ | <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> | ||
+ | |||
もう少し上を目指す場合は[[アンビエントオクルージョン]]という手法を使う。途端に複雑になるぞ。 | もう少し上を目指す場合は[[アンビエントオクルージョン]]という手法を使う。途端に複雑になるぞ。 |
2020年6月16日 (火) 05:31時点における最新版
環境光(英語: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);
}
もう少し上を目指す場合はアンビエントオクルージョンという手法を使う。途端に複雑になるぞ。