ディフューズ・ライティング

提供: MonoBook
2018年11月12日 (月) 03:04時点におけるimported>Administratorによる版 (ページの作成:「'''ディフューズ・ライティング'''(英語:diffuse light、拡散光)とは、3DCGにおいてモデルの表面に当たった光が均一に反射...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

ディフューズ・ライティング英語:diffuse light、拡散光)とは、3DCGにおいてモデルの表面に当たった光が均一に反射拡散するものとして計算するアルゴリズムである。

いわゆる「ライティング」におけるもっとも単純な実装であり、プログラミングシェーダー界隈のハローワールドである。

概要

ある点(頂点ピクセル)は「光源への方向(s)」と「法線(n)」という2つのベクトルを持つとする。この2つのベクトルは正規化されたものとする。

このとき拡散反射する光の強さは「方向」と「法線」の角度のコサインに比例する。法線と同一方向(角度ゼロ度)の場合は最大値に、法線に垂直(角度90度、真横から光が当たった)の場合はゼロになる。

角度のコサインは2つのベクトルの内積に比例する。つまり拡散反射する光の強さは「sとnの内積の積」として表現できるので、いちいち自前でコサインを計算せずともプログラマブルシェーダーによくあるdot関数に2つのベクトルを突っ込んでやればよい。

    float3 intensity = max( dot( s, n ), 0.0 );

もう少しまともに計算するときは減衰(ディフューズ係数)を掛け合わせる。

関連項目