屈折効果をUnityで! Part1

こんばんは、カイです。初めての投稿です。

 

 

先週京アニのアニメ見て、水の効果に惚れました。

Screenshot (967)

(甘ブリです)

そこで、水の効果を作らないかとED先輩に相談しようとしたら、みんなラッキー☆に夢中していつの間にか合宿終わりましたorz

結局はこのページを参考に作りました。英語なんですが。

>> http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter19.html

 

具体的の流れは以下です

 

1.透過しても透明じゃない?!

オブジェクトを透明にするのはいいが、屈折は得られません。透過した画像(光)を編集する必要があります。なので、

GrabPass という特別なPassを使いました。

Unity Docsで検査すると出てきますが、GrabPass{“GrabTexture”}はGrabTextureに今の画面を保存する。そして、普通のMVPでなく、Screen Spaceでuv検査をし、Tex2D(GrabTexture, i.uv2)をすればいいです。

Screenshot (982)

透明シェーダーと同じですね

 

2.仮屈折

屈折の計算をすると無駄に計算量が増えるので、ごまかせるぐらい近似なものを作ります。

まず、水のテクスチャを用意。

fountain normal

位置での明暗により、GrabTextureのuvをずらせばいいです。

中略

Screenshot (970)

こんな感じになりました。

しかし、水面の上にあるのに、映されるところがあります。解決方法はPart2で!

Posted on