「ディフューズ・ライティング」の版間の差分

imported>Administrator
ページの作成:「'''ディフューズ・ライティング'''(英語:diffuse light、拡散光)とは、3DCGにおいてモデルの表面に当たった光が均一に反射...」
 
imported>Administrator
6行目: 6行目:
ある点([[頂点]]や[[ピクセル]])は「光源への方向(s)」と「[[法線]](n)」という2つの[[ベクトル]]を持つとする。この2つのベクトルは[[ベクトルの正規化|正規化]]されたものとする。
ある点([[頂点]]や[[ピクセル]])は「光源への方向(s)」と「[[法線]](n)」という2つの[[ベクトル]]を持つとする。この2つのベクトルは[[ベクトルの正規化|正規化]]されたものとする。


このとき拡散反射する光の強さは「方向」と「法線」の角度の[[コサイン]]に比例する。法線と同一方向(角度ゼロ度)の場合は最大値に、法線に垂直(角度90度、真横から光が当たった)の場合はゼロになる。
[[file: ディフューズ・ライティング.png|none]]
 
このとき拡散反射する光の強さは「方向」と「法線」の角度の[[コサイン]]に比例する。法線と同一方向(角度ゼロ度)の場合は最大値に、法線に垂直の場合はゼロになる。真上から当たれば強く、真横から当たれば弱いというのは小学生でも感覚的にわかるだろう。


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