「ディフューズ・ライティング」を編集中
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
4行目: | 4行目: | ||
== 概要 == | == 概要 == | ||
− | ある点([[頂点]]や[[ピクセル]])は「光源への方向(s)」と「[[法線]](n)」という2つの[[ベクトル]] | + | ある点([[頂点]]や[[ピクセル]])は「光源への方向(s)」と「[[法線]](n)」という2つの[[ベクトル]]を持つとする。この2つのベクトルは[[ベクトルの正規化|正規化]]されたものとする。 |
− | |||
[[file: ディフューズ・ライティング.png|none]] | [[file: ディフューズ・ライティング.png|none]] | ||
11行目: | 10行目: | ||
このとき拡散反射する光の強さは「方向」と「法線」の角度の[[コサイン]]に比例する。法線と同一方向(角度ゼロ度)の場合は最大値に、法線に垂直の場合はゼロになる。真上から当たれば強く、真横から当たれば弱いというのは小学生でも感覚的にわかるだろう。 | このとき拡散反射する光の強さは「方向」と「法線」の角度の[[コサイン]]に比例する。法線と同一方向(角度ゼロ度)の場合は最大値に、法線に垂直の場合はゼロになる。真上から当たれば強く、真横から当たれば弱いというのは小学生でも感覚的にわかるだろう。 | ||
− | + | 角度のコサインは2つのベクトルの[[内積]]に比例する。つまり拡散反射する光の強さは「sとnの内積の積」として表現できるので、いちいち自前でコサインを計算せずともプログラマブルシェーダーによくあるdot関数に2つのベクトルを突っ込んでやればよい。 | |
<source lang="hlsl"> | <source lang="hlsl"> | ||
− | float3 intensity = | + | float3 intensity = max( dot( s, n ), 0.0 ); |
</source> | </source> | ||
21行目: | 20行目: | ||
== 関連項目 == | == 関連項目 == | ||
* [[プログラマブルシェーダー]] | * [[プログラマブルシェーダー]] | ||
− | * [[ | + | * [[ライティング]] |
** [[ディフューズ・ライティング]] | ** [[ディフューズ・ライティング]] | ||
** [[アンビエント・ライティング]] | ** [[アンビエント・ライティング]] |