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

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「'''スペキュラー・ライティング'''(英語: specular lighting)とは、3DCGにおいてモデルの表面の輝きを計算するアルゴ...」)
 
imported>Administrator
25行目: 25行目:
 
反射は視線ベクトルvと反射ベクトルrが一致するときに最大になり、反射ベクトルから離れるにつれ急激に減衰する。
 
反射は視線ベクトルvと反射ベクトルrが一致するときに最大になり、反射ベクトルから離れるにつれ急激に減衰する。
 
これは視線ベクトルvと反射ベクトルrの内積を求め、さらに光沢shininessの冪乗を求めればそれらしくなる。乗数(光沢shininess)が大きいほど角度に応じて急速にゼロに近づき、より輝いて見える。
 
これは視線ベクトルvと反射ベクトルrの内積を求め、さらに光沢shininessの冪乗を求めればそれらしくなる。乗数(光沢shininess)が大きいほど角度に応じて急速にゼロに近づき、より輝いて見える。
  float3 intensity =  pow( max( dot( v, r ), 0.0 ), shininess);
+
  float3 intensity =  pow( saturate( dot( v, r ) ), shininess);
  
 
== 関連項目==
 
== 関連項目==
33行目: 33行目:
 
**[[アンビエント・ライティング]]
 
**[[アンビエント・ライティング]]
 
**[[スペキュラー・ライティング]]
 
**[[スペキュラー・ライティング]]
 +
 +
[[category: 3DCG]]

2018年11月14日 (水) 07:34時点における版

スペキュラー・ライティング英語: 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);

関連項目