「ディフューズ・ライティング」の版間の差分
imported>Administrator |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| (他の1人の利用者による、間の1版が非表示) | |||
| 11行目: | 11行目: | ||
このとき拡散反射する光の強さは「方向」と「法線」の角度の[[コサイン]]に比例する。法線と同一方向(角度ゼロ度)の場合は最大値に、法線に垂直の場合はゼロになる。真上から当たれば強く、真横から当たれば弱いというのは小学生でも感覚的にわかるだろう。 | このとき拡散反射する光の強さは「方向」と「法線」の角度の[[コサイン]]に比例する。法線と同一方向(角度ゼロ度)の場合は最大値に、法線に垂直の場合はゼロになる。真上から当たれば強く、真横から当たれば弱いというのは小学生でも感覚的にわかるだろう。 | ||
角度のコサインは2つの[[ベクトル]]の[[内積]]に比例する。つまり拡散反射する光の強さは「sとnの内積の積」として表現できるので、いちいち自前でコサインを計算せずとも[[プログラマブルシェーダー]] | 角度のコサインは2つの[[ベクトル]]の[[内積]]に比例する。つまり拡散反射する光の強さは「sとnの内積の積」として表現できるので、いちいち自前でコサインを計算せずとも[[プログラマブルシェーダー]]によくあるdot関数に2つのベクトルを突っ込んでやればよい。数値を0-1に丸め込む[[saturate関数]]を呼んでいるのはマイナス値(裏面)の場合はゼロとするためである。 | ||
<source lang="hlsl"> | <source lang="hlsl"> | ||
float3 intensity = | float3 intensity = saturate( dot( s, n ) ); | ||
</source> | </source> | ||