今回はアセットの紹介をしていきます。
紹介するのはCrest Ocean System URP。
高度な海洋シミュレーションアセットです。
お得なセール情報
現在アセットストアでは、サマーセールが開催中!
7週間にわたってテーマ別にセール対象アセットが変わります!
今週のテーマはファンタジーゲーム開発向けアセットです。
詳しくは↓のバナーからどうぞ!
今回紹介する「Crest Ocean System URP」もセール対象です!
セールのスケジュール
4週目の終了時間は日本時間で7月20日15:59までです。
どんなアセット?
とても高度な海洋シミュレーションアセットです。
波の表現、物理演算、水中エフェクトなど本格的な海を表現できます。
クレストは、PCおよびコンソールプラットフォームを対象とした、技術的に高度な機能豊富な海洋システムです。
ドキュメントはこちら
注意点
Render Pipeline
URP専用アセットです。HDRP用は別売りになっています。
Built-inで使いたい場合はGithubで公開されているものを自由に使えます。
対応プラットフォーム
PCとコンソールを対象にしたアセットです。
高機能なモバイル端末なら動くかもしれないようですが。
Compute Shader
ComputeShadersに依存したアセットです。
コンピューティング互換性のあるプラットフォームのみサポートしています(WebGLでは動かない)
対象プロジェクト
高度な水のシミュレーションを必要とするプロジェクトを対象にしています。
技術的設定・構成が必要なので、「手っ取り早く海を作りたい」といった場合には向いてません。
複数カメラの同時レンダリング
(現在)複数カメラの同時レンダリングをサポートしていません
開発環境
Unity 2020.3.14f1
Universal RP 1.5.1
Crest Ocean System URP ver4.12
インポートの確認
インポート前の準備
RenderPipelineAssetの設定
まずはRenderPipelineAssetを設定します。
これはレンダーパイプライン全体のグラフィックスを構成するアセットで、SRPでは必須です。
URPプロジェクトを作成した段階で自動的にセットされていますが、
Depth TextureとOpaqueTextureを有効にする必要があります。
Color Spaceの設定
ProjectSettingsからColorSpaceをLinearに設定します。
ここまでできたらアセットをインポートします。
デモシーンの確認
アセットインポート完了時はこんな感じです。
Crest-Examplesにデモシーンが含まれています。
BoatDev
ボートがあるシーンです。
プレイヤーが操作できるボートと、AIで走り回っているものがあります。
Main
シンプルなTerrainと海のシーン
PirateCove
海賊の入り江。島と船があります。
Whirlpool
ボートが渦潮に引き寄せられるシーン。
実際に試してみる
実際に海を作ってみます。
各コンポーネントのパラメータについてはドキュメントをどうぞ。
海の作成
Materialの作成
「OceanWater」という名前で新しいMaterialを作成します。(デフォルトのOceanマテリアルを使ってもいいですが)
ShaderはAssets/Crest/Crest/Shaders/Oceanを使用します。
Normal MapにはAssets/Crest/Crest/Textures/WaveNormals/WaveNormalsを割り当てます。
FoamのFoamにはAssets/Crest/Crest/Textures/Foam2を割り当てます。
CausticsにはAssets/Crest/Crest/Textures/Caustics/Caustics_tex_colorを割り当てます。
Oceanの作成
空のゲームオブジェクトを作成し名前を「Ocean」に変えます。
OceanにCrestOceanRendererコンポーネントをアタッチします。
Ocean ParamsにMaterialにOceanマテリアルが自動的に割り当てられていますが、
これを先ほど作ったOceanWaterマテリアルに差し替えます。
ゲームをプレイしてみると海ができているのが確認できます。
波を作る
海面はできたので波を発生させます。
空のゲームオブジェクトを作り名前を「OceanInput」に変えます。
OceanInputの子にさらに空のゲームオブジェクトを作り名前を「Waves」に変えます。
WavesにCrestShapeGerstnerBatchedコンポーネントをアタッチします。
ゲームを実行してみると海面が波打っているのが確認できます。
泡を発生させる
海面に泡を発生させます。
Projectビューの適当な所にCreateからFoamSimSettingsを作成します。
作成したらOceanRendererのSimSettingsFoamに割り当てます。
これで海面に泡が発生します。
SimSettingsFoamのパラメータから泡の強さと範囲を変えるとよりわかりやすくなります。
動的な波の発生
オブジェクトの移動や回転に合わせて波が発生するようにしてみます。
マテリアルの作成
Assets/Crest/Crest/Shaders/OceanInputs/DynWavesObjectInteractionを使ったマテリアルを作成します。
オブジェクトの作成
波を発生させるコライダー専用オブジェクトを作成します。
今回はCapsuleを使います。名前を「WaterObjectInteraction」に変えておきます。
これにCrestObjectWaterInteractionコンポーネントとCrestRegisterDynamicWavesInputコンポーネントをアタッチ。
このWaterObjectInteractionを動くオブジェクトの子オブジェクトにしておきます。
CrestOceanRendererの設定
CrestOceanRendererのCreateDynamicWaveSimにチェックを入れる
これでオブジェクトの動きに合わせて波が発生します。
オブジェクトを海に浮かべる
Cubeを浮かべてみます。
Cubeを作成し、RigidbodyとCrestSimpleFloatingObjectをアタッチします。
これで完成です。簡単!
パラメータで浮力を調整できます。
まとめ
・Crest Ocean System URPを本格的な海を作ることができる
今回実際に作った部分はほんの一部です。
流れを制御したり、海の一部分だけ変化をつけたり、水中エフェクトをつけたりととても多機能なので、
ドキュメントやビデオチュートリアルを元にいろいろ遊んでみてください。
以上です。
参考資料
HDRP版はこちら!
他のアセットの紹介記事はこちら↓
※本記事にはAssetStoreアフィリエイトリンクが含まれています。
他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。