(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



3Dで波の動きや水のしぶきを表現 Simple Interactive Water for URP VR【Unity】【アセット】【VR】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2019.3.7f1


はじめに

Simple Interactive Water for URP VR

という3Dで波の動きや水のしぶきを表現するアセットが発売されたので、

今回はそれを試してみようという感じの記事です!


Simple Interactive Water for URP VR | 2D Water | Unity Asset Store


イメージとしては以下のような感じ。



なお、2Dで水の表現をしたい場合は以下のアセットがオススメです。

f:id:kan_kikuchi:20200211181326g:plain




導入

導入は他のアセットと同様、Unity Asset Storeからインストールするだけですが、

対応するUnityのバージョンが2019.3以上なのには注意が必要です。


また、インストール時に以下のようなウィンドウが表示されたら、Install/Upgradeを押しましょう。

f:id:kan_kikuchi:20200408073421j:plain


インストール後、とりあえずサンプル(SimpleInteractiveWaterSample)を動かしてみると、

f:id:kan_kikuchi:20200410073543j:plain


最初はシェーダーが機能していませんが、

f:id:kan_kikuchi:20200410073551j:plain


Project Settings

f:id:kan_kikuchi:20200410074005j:plain


GraphicsにあるScriptable Render Pipeline SettingsUniversalRP-HighQuality等を設定すれば、

f:id:kan_kikuchi:20200410074023j:plain


正常に機能するようになります。

f:id:kan_kikuchi:20200410074552g:plain


なお、Scriptable Render Pipelineについては以下の記事を参照のこと。



ちなみにドキュメントは残念ながら全部英語ですが、

f:id:kan_kikuchi:20200408073739j:plain


文章は簡潔かつ画像付きなのでそこまで困ることもないと思います。

f:id:kan_kikuchi:20200410072923j:plain



構成と使い方

次にこのアセット(サンプル)の構成ですが、大きく分けて2つのオブジェクトで構成されています。


1つ目はサンプルでいうWater Quadで、水を表現するオブジェクトです。


各スクリプトの役割は以下のような感じ。

  • Wave Refraction Changer : 設定したMain Cameraカメラが水面の上にあるか下にあるか判定する。
  • Quad Mesh Subdivider : メッシュを細分化する。Sub Div Countで解像度を設定可能。
  • Wave Simulator : 波のマップテクスチャを更新する。Wave Speedで波の速度を変更可能。


なお、MeshRendererとColliderも必要です。

f:id:kan_kikuchi:20200413101350j:plain


2つ目はサンプルでいうIntaractionRigidBodyで、水にぶつかるオブジェクトです。


各スクリプトの役割は以下のような感じ。

  • Wave Interferer : Wave Simulatorを持つオブジェクトと衝突すると波を起こすWater DropやWater Splashに衝突時に発生するエフェクトを設定可能。


こちらはColliderとRigidbodyが必要です。

f:id:kan_kikuchi:20200413101611j:plain


この2つを配置すればどこでも波を発生させられるので、ざっくり使い方を説明すると

「Water Quadで水面を設置し、

ColliderとRigidbodyを持つオブジェクトにWave Simulatorを付けてWater Quadにぶつける」

みたいな感じになります。


VRでの使い方

アセットのタイトルにVRと付いてるように、VR上でも使えるようなので、それも試してみました。


まず、このアセットはシングルパスでないと上手く機能しないので

Project SettingsのPlayerにあるStereo Rendering ModeをSingle Passにします。

f:id:kan_kikuchi:20200413104529j:plain


次にUnityでSteam向けのVRゲームを開発する用のアセットSteamVR Pluginをインストールします。

SteamVR Plugin | Integration | Unity Asset Store


なお、SteamVR Pluginの導入については以下の記事を参照の事。



SteamVR Pluginを導入後、サンプル(Interactions_Example)を開くと、

f:id:kan_kikuchi:20200413101907j:plain


最初はシェーダーが機能していません。(SRPに対応しているシェーダーではないため)

f:id:kan_kikuchi:20200413101916j:plain


なので、シェーダー置き換え用の処理を実行します。

これでほとんどシェーダーがSRPに対応しているものになりますが、

いくつかは置き換え出来てないので、手動でシェーダーを変更します。

f:id:kan_kikuchi:20200413102109j:plain


シェーダーの変更が終わったら、WaterQuadを配置し、Scaleでサイズ調整をします。

f:id:kan_kikuchi:20200413104449j:plain


あとはRigidbodyが付いてるオブジェクトを検索し、全てにWater InterfererをAddするだけ。

f:id:kan_kikuchi:20200413104503j:plain


これで冒頭のような状態に出来ます。





おわりに

かなり簡単に使える上にキレイな水の表現が出来る神アセットでした……!

ただしSRP前提なので今までのシェーダーが使えなかったり、VRはシングルパス前提だったりと、

使える場面が限られている事には注意が必要です。

Simple Interactive Water for URP VR | 2D Water | Unity Asset Store