出来ました。服や太ももに腕やスカートの影がちゃんと表現されてます。
セルフシャドウの原理はシンプルですが、なるほどとうならされた。
こちらのサイトがとてもわかりやすくまとめられてました。
手短に言うと、まずライトから対象のモデルを眺める。
それによって、ライトから表面の位置の距離をテクスチャのような二次元のバッファに記録しておく。
次にカメラから対象のモデルを眺める。「カメラから見た表面とライトまでの距離」と、先に記録していた「ライトから見た表面の距離」を比較する。
もしライトまでに何もさえぎるものがなければ、二つの距離は一致するはず。
一致しない場合は、つまり「カメラから見た表面とライトまでの距離」>「ライトから見た表面の距離」ってことなんだけど、これはカメラから見た表面がライトから見た表面にさえぎられていることを意味するので、影とみなす。というものです。
じゃあ、これをCG言語でどう表現するか?もっというとShaderForgeでどう表現すればよいか?
実はUnityのカスタムシェーダでは、この原理すら知る必要もなかった、わはは。
Unityのシェーダのパイプラインでは、すでにLIGHT_ATTENUATIONというセマンティクスが割り当てられていて、これにライトの当たり具合が入っていたのでした。
噛み砕いて言うと、あるライトからみてどのくらい影になっているかがあらかじめ計算されていて、LIGHT_ATTENUATIONから参照できるということです。
じゃあ、今度はこれをShaderForgeでどう表現するか?
これは設定画面を貼り付けるのが一番早い。ShaderForgeを使ったことある人ならすぐに理解できる内容だと思う。
ShaderForgeえらい!ありがとうUnity!
Related Posts
カテゴリー: Unity5