差分

ナビゲーションに移動 検索に移動

スペキュラー・ライティング

1,643 バイト追加, 2018年11月14日 (水) 06:40
ページの作成:「'''スペキュラー・ライティング'''(英語: specular lighting)とは、3DCGにおいてモデルの表面の輝きを計算するアルゴ...」
'''スペキュラー・ライティング'''([[英語]]: specular lighting)とは、[[3DCG]]において[[モデル]]の表面の輝きを計算する[[アルゴリズム]]である。

== 概要==
サーフェイスに光沢があるとき、その光はサーフェイスで鏡のように反射される。

; 反射光ベクトル
* n = 法線
* s = 光源に対する方向(-sで入射光ベクトル)
* r = 反射光ベクトル
* v = 視線ベクトル
* shininess = 光沢(=減衰率)
とすると反射光ベクトル(r)は以下の式で計算できる。

r = -s + 2 ( s ・ n) n

ちなみに[[HLSL]]にも[[GLSL]]にも反射光ベクトルを求めるreflect関数があるので難しいことを考えずに入射光ベクトルと法線をブチ込んでやれば一発で計算してくれる。

[[HLSL]]
float3 r = reflect(-s, n);

[[GLSL]]
vec3 r = reflect(-s, n);

; 減衰
反射は視線ベクトルvと反射ベクトルrが一致するときに最大になり、反射ベクトルから離れるにつれ急激に減衰する。
これは視線ベクトルvと反射ベクトルrの内積を求め、さらに光沢shininessの冪乗を求めればそれらしくなる。乗数(光沢shininess)が大きいほど角度に応じて急速にゼロに近づき、より輝いて見える。
float3 intensity = pow( max( dot( v, r ), 0.0 ), shininess);

== 関連項目==
*[[プログラマブルシェーダー]]
*[[フォン・ライティング]]
**[[ディフューズ・ライティング]]
**[[アンビエント・ライティング]]
**[[スペキュラー・ライティング]]
匿名利用者

案内メニュー