鏡面反射Specular

最終更新日17 May 2017 02:03

specular.png

Specularとは?

視野や光によって変化する。
物体に光が当たってピカッと光ってる部位のこと。
物体の表面にある角度から当たった光の反射したところ。いわゆるハイライト。
マットな質感のものはSpecularの値が低く、
ツヤツヤな質感のものはSpecularの値が高い。
面の法線を軸にして鏡のように入射角と同じ角度で反射する光のこと。
「映りこみ」として視認される。
周囲を鏡のように映す光。

Specularには3種類ある

perfect specular
glossy specular プラスチック
retro specular ベルベット

まとめ

シェーディングモデル名 特徴
Phong(1975) 一般的
Blinn(1977) より精密
Cook Torrance(1982) 金属や布地にも向いている。現在主流

概要

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クック・トランスのモデル…金属の鏡面反射に適している


ambient cook-torrance


ファイル

サポートサイト Wikidot.com ambientcook-torrance