「スペキュラー・ライティング」の版間の差分

提供:MonoBook
imported>Administrator
編集の要約なし
 
5行目: 5行目:


; 反射光ベクトル
; 反射光ベクトル
* n = 法線
* n = [[法線ベクトル]]
* s = 光源に対する方向(-sで入射光ベクトル)
* s = 光源に対する方向(-sで入射光ベクトル)
* r = 反射光ベクトル
* r = 反射光ベクトル
14行目: 14行目:
  r = -s + 2 ( s ・ n) n
  r = -s + 2 ( s ・ n) n


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


[[HLSL]]
[[HLSL]]

2020年4月28日 (火) 03:54時点における最新版

スペキュラー・ライティング英語: 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( saturate( dot( v, r ) ), shininess);

関連項目[編集 | ソースを編集]