2011年10月23日日曜日

法線とカメラ方向の角度をシェーディングに使用する

カメラから見た各フェースの向き情報をシェーディングに利用する方法。



Rimlight_00





1.HyperShadeなどから、
 [Utilities]→[Sampler Info]ノードを作成
 [2DTexture]→[Ramp]ノードを作成
 [Surface]→[Surface Shader]ノードを作成



 Rimlight_01

 Sampler Infoノードのアトリビュート[Facing Ratio]は法線とカメラ間の角度によって
 0~1の値を生成する(法線とカメラが正対=1、法線とカメラが直角以上=0)





2.[Sampler Info]ノードの[Facing Ratio][Ramp]ノードの[V Coord]に接続。
 [Ramp]ノードのカラーを任意に設定する
 [Ramp]ノードの[Out Color]を[Surface Shader]ノードの[Out Color]に接続。



 Rimlight_02





以上で、カメラと法線の向きによって色が変化するマテリアルが完成。
これを基本として接続先や設定を工夫することで色々な効果に応用できる。
以下はこれを利用してリムライトを付加したLambertマテリアル。
上が通常のLambert、中がリムライト付加版。下がそのノード構成。



Rimlight_04



Rimlight_05_2



Rimlight_03_2





欠点として、[Facing Ratio]はサーフェイス法線の向きしか扱えないので、
バンプやノーマルマップによる法線変化の効果は反映されない。
それを可能にする方法もあるが、ちょっと複雑になったので次回以降に記載予定。