鏡面反射Specular

specular.png

Specularとは?

物体に光が当たってピカッと光ってる部位のこと。
物体の表面にある角度から当たった光の反射したところ。いわゆるハイライト。
マットな質感のものはSpecularの値が低く、
ツヤツヤな質感のものはSpecularの値が高い。

まとめ

シェーディングモデル名 特徴
Phong 一般的
Blinn より精密
Cook Torrance 金属や布地に向いている

概要

solidsphere.png
  • 光源の一方向
  • 物体面の向き
  • 面の反射特性
そして、視線方向に応じて強度が変化する。
鏡面反射の計算にはフォンのモデルがよく用いられる。
この手法は、
視線と正反射方向のなす角度γに応じて鏡面反射による明るさIを決定する。
正反射方向に近づくほど反射光は強くなる
面を見る方向によって輝度が変化する。
specular-exp.png(1)
\begin{align} I=W(\alpha)I_i \cos^n\gamma \end{align}
W(α)
鏡面反射率。通常は一定値(W(α)=Ks)が用いられる。
Ii
入射光の強さ。
n
ハイライトの特性を制御するパラメータ nを大きくしていくと、鈍い反射から鋭い反射になっていく。

ゴールはこの数式である。

(2)
\begin{align} max\{ \vec{r} \cdot \vec{n} ,0\}^{shininess}*specular_{light}*specular_{material} \end{align}

GLSLのコードで表現するとこうなる

vec3 reflection = normalize(lightpos+viewvec);//正反射方向ベクトル
float specularLight=pow(max(dot(reflection,normal),0),shininess);

鏡面反射項は
光が頂点に直接当たるか、そうでないかによって決まる。
もし
光の方向ベクトル・法線の内積
が0以下だったら、
鏡面反射は発生しない。
もし光の方向ベクトル・法線の内積が負の値だった場合、
それは光が面の裏側にあることを意味する。
光の方向ベクトル・法線の内積が0以下じゃないという前提で次に、鏡面反射光の計算の仕方を説明する

近似モデル

  • Phong illumination modelフォンのモデル….最も良く使用される
  • Blinn model for specular reflectionブリンのモデル…より精密
  • Cook-Torrance illumination modelクック・トランスのモデル…金属の鏡面反射に適している

Bibliography

ambient

サポートサイト Wikidot.com ambient