屈折効果をUnityで! Part2

こんばんは、カイです

 

前の話

Screenshot (970)

プレーヤーの後ろに特に見えますが、水面のものを屈折しまうことがあります。これを解決するため、Maskを作ります。

簡単に言うと、水面と水面でない部分を分けます。

(以下は私のやり方で、すべての状況で応用できると保証しません)

 

まず、fragment シェーダーのアウトプットはfloat4ですが、そのa(アルファー)を変更します。0.5にしました。(特に0.5にこだわりはないが、水以外に存在しないaを付けます)

そして、確認のためカメラにアルファーをrgbaに変換させると、

Screenshot (981)

 

水の部分が一目瞭然です。

 

これをGrabPassの前のPassでやると、GrabTextureのaをチェックすれば、変換されたuvの色のaが0.5であれば、もとの色を使います。

Screenshot (973)

よくなりました。

 

(追加)

水は角度が大きいほど水面が白く見えます。これはfresnel効果です。

clamp(dot (i.normal, i.viewD)*_Thresholdみたいなことをします。簡単ですね。

Screenshot (983)

 

以上でした!ちなみにキャラに歯を作ったら、可愛いと自慢していたのでここに置きます

Screenshot (976)

またのご来店をお待ちしております~!

Posted on