Onoty3D

Unityに関するメモとか

水面GIFをUnityで作ろう!

先日から、水面GIFというのが話題になっていて、Twitterなどが賑わっております。

nlab.itmedia.co.jp

watereffect.netというサイトのサービスを利用すると、静止画からそれが水面に反射しているかのようなGIFを作成できるようです。

自分もいくつか作ってみましたが、せっかくUnityがあるのでUnityで同じように水面反射表現をやってみます。
Unity4時代は無料版でリアルな水面Assetが使えず涙をのんでいましたが、Unity5からは無料版でも使えます。

やり方。

まずインポート。

ProjectビューでImport Package>Environmentを選びます。

f:id:onoty3d:20151125185710p:plain

ダイアログが表示されるので、Waterを選びます。
f:id:onoty3d:20151125185725p:plain
※Water4という更に色々細かくリアルに表現できる水Assetもあるのですが、パラメータが多いので、簡単なWaterの方を使います。

これでImportボタンを押せば、プロジェクトに水Assetが追加されます。

使い方。

Environment>Water>Water>Prefabs内に
WaterProDaytime(昼間の海)
WaterProNighttime(夜の海)
が追加されているので、WaterProDaytimeを使います。

とりあえずそのままだとこんな感じ。
f:id:onoty3d:20151125190041p:plain

デフォルトだと水面は反射+屈折表現になるので、水面下の足と反射した足から上が見えています。

WaterProDaytimeのWaterコンポーネントのWater ModeをReflectiveに変更すると、屈折が消え、反射のみの表現になります。
f:id:onoty3d:20151125190110p:plain

なおWaterProDaytimeShaderにも色々パラメータがあるので、マニュアルを参考に色々いじってみてください。

docs.unity3d.com

シェーダのパラメータの内、Reflective color(RGB) fresnel(A)というパラメータは、表示角度に基づく反射の表示量に関係します。
デフォルトのテクスチャの場合、真上から覗きこむようなカメラ位置になった場合、水面の色が濃くなり反射は弱くなります。
f:id:onoty3d:20151125190200p:plain

このテクスチャをnoneにするか、黒一色のような一色のテクスチャに返ると、どの角度でも一様な反射が得られるようになります。
f:id:onoty3d:20151125190258p:plain

反射する像が荒く見える場合は、WaterコンポーネントのTexture Sizeプロパティの値を大きくすると、綺麗な反射がされるようになります。
f:id:onoty3d:20151125190351p:plain

細かく波を出している場合などは、像が荒くてもあまり気になりません。

あとは思い思いに、いろいろな構図を楽しんでみましょう!

f:id:onoty3d:20151125190438g:plain

f:id:onoty3d:20151125190517g:plain