GaiaとCTS2019で作る、オープンワールド1時間クッキング

本稿は[Unity #3 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/unity3)における12月12日の記事です。
#はじめに
家庭用ゲーム機やPCゲームなどで、オープンワールドと呼ばれるフィールドシステムが広く採用され始めています。オープンワールドとは、プレイヤーがゲーム世界を自由に歩き回ることができるレベルです。最近ではゼルダの伝説ブレスオブザワイルド（こちらはオープンエアーと呼称されていますが）やグランドセフトオートⅤ、アサシンクリードシリーズなどが存在します。

![ゼルダの伝説ブレスオブザワイルド](https://sm.ign.com/t/ign_jp/screenshot/default/zeldamura-zgka_1m5c.960.png "ゼルダの伝説ブレスオブザワイルド, IGNJapanより引用")
ゼルダの伝説ブレスオブザワイルド

これらのようなフィールドを手作業で作成するのは、とても時間がかかります。そこで、Unityというゲームエンジンと、Gaia, CTS2019の2つのアセットを使用して、1時間でオープンワールドを作成してみようと思います。

#導入
Unity：https://unity3d.com/jp/get-unity/download
・本記事ではUnity2019.1.14f.1を使用しています
Gaia：https://assetstore.unity.com/packages/tools/terrain/gaia-terrain-scene-generator-42618
CTS2019：https://assetstore.unity.com/packages/tools/terrain/cts-2019-complete-terrain-shader-140806

#Gaiaを使ったオープンワールド制作
参考動画：[Gaia 1.9 Quick Start Guide - Procedural Terrain Generation For Unity 3D](https://www.youtube.com/watch?v=WSGKF-_43KI)

###アセットストアからGaiaをダウンロード
まずはアセットストアに入り、以下の画像のImportボタンから、Gaiaをインポートします。
[![Screenshot from Gyazo](https://gyazo.com/cdeeee4f47d647c3febecb304c09f813/raw)](https://gyazo.com/cdeeee4f47d647c3febecb304c09f813)
インポートが終了した後、Window>Procedural WOrlds>Gaia>Show Gaia Managerを選択します。
[![Screenshot from Gyazo](https://gyazo.com/e26aea5e4286f2de7e830077b7e4abe7/raw)](https://gyazo.com/e26aea5e4286f2de7e830077b7e4abe7)
ここで`Missing Gaia Dependenices`というポップアップが出現した際には、Installを選択します。

###地形作成
GaiaManagerの`1. Create Terrain&Show Stamper`をクリックします。すると、Unityのシーンに地形が生成されます。
[![Screenshot from Gyazo](https://gyazo.com/d06f4f22078e90decb06d9e94e4523e5/raw)](https://gyazo.com/d06f4f22078e90decb06d9e94e4523e5)
続いて、ヒエラルキーでGaia>Stamperを選択し、StamperコンポーネントのOperations>Stamp Previewに画像を入れます。この画像に基づいて地形が生成されます。ProjectウィンドウのAssets>Gaia>Stamps配下に適当な画像類がありますので、そちらから好みの画像を選択すると良いです。今回はValleys>Chumash Valleyを選択します。
[![Screenshot from Gyazo](https://gyazo.com/46de8b722bddafb5a93c14237de27c6f/raw)](https://gyazo.com/46de8b722bddafb5a93c14237de27c6f)
すると、それっぽい地形が作成されました。Stamperコンポーネントの`Position, Rotate and Scale`を変更することで、地形に変化を加えることができます。地形の高さ（Y軸）を変えたいときは、GroundBaseのチェックを外し、PositionYを変更します。
最終的にStampControllerコンポーネントのStampボタンを押すことで、Terrainに対して変更が焼き付かれます。

また、地形にさらにスタンプを重ねたいときは、上記の作業を繰り返し、Terrainにスタンプを焼き重ねていきます。なお、UndoとRedoは1つ前後しか戻れないため注意が必要です。

###テクスチャ作成
GaiaManagerの`2. Create Spawners`を選択します。すると、ヒエラルキーに~Spawnerというものが5つ作成されます。
まずは、Coverage Texture Spawner>Spawn Controller>Spawnをクリックします。
[![Screenshot from Gyazo](https://gyazo.com/7922069d6535579bdb217590288ce980/raw)](https://gyazo.com/7922069d6535579bdb217590288ce980)
すると、地形にテクスチャが貼られます。

###オブジェクト作成
テクスチャ作成の際と同様に、`Coverage GameObject Spawner`, `Coverage Tree Spaner`, `Clustered Tree Spawner`, `Coverage Tree Spawner`, `Coverage Detail Spawner`でSpawnボタンを選択していきます。
この時点で、だいぶそれらしいオープンワールドになってきます。
[![Screenshot from Gyazo](https://gyazo.com/335bdce9401c4503d6bb19ffe75fba78/raw)](https://gyazo.com/335bdce9401c4503d6bb19ffe75fba78)

###その他細部の作成
GaiaMangerのControllerを`First Person`に変更します。
[![Screenshot from Gyazo](https://gyazo.com/aceae4fcabe7d2704b613ed1407571a2/raw)](https://gyazo.com/aceae4fcabe7d2704b613ed1407571a2)
そして、`3. Create Player, Post FX, Screenshotter, Skies, Water & Wind`をクリックします。
[![Screenshot from Gyazo](https://gyazo.com/6844ebdeb3dbd002d337bb6b8309dc89/raw)](https://gyazo.com/6844ebdeb3dbd002d337bb6b8309dc89)
すると、キャラクターと海等が生成されます。この際、ヒエラルキーのFPSControllerは地面に接地する場所に移動しましょう。
実行を行うと、以下のようになります。
[![Screenshot from Gyazo](https://gyazo.com/9e224688d4a1f1727068842ef9906f36/raw)](https://gyazo.com/9e224688d4a1f1727068842ef9906f36)

#CTSを使ったシェーディング
参考動画：[Enhance Gaia Terrains with CTS](https://www.youtube.com/watch?v=WSGKF-_43KI)

###アセットストアからCTS2019をインポート
アセットストアに入り、CTS2019をインポートします。特段の注意事項はありません。

作成したTerrainを選択し、Component>CTS>Add CTS To Terrainをクリックします。
[![Screenshot from Gyazo](https://gyazo.com/1f63a9fe4e81f6e3082505788e54f312/raw)](https://gyazo.com/1f63a9fe4e81f6e3082505788e54f312)
Window>Procedural Worlds>CTS>Create And Apply Profileを選択します。（上の動画ではComponent>CTS>Create And Apply Profileとなっていますが、現在この方法はできないようです。）
[![Screenshot from Gyazo](https://gyazo.com/b35db3f9fd77c02377d32e0d64650223/raw)](https://gyazo.com/b35db3f9fd77c02377d32e0d64650223)
Assets>Procedural Worlds>CTS>Profile配下に、CTS_Profile_~というファイルが作成されます。こちらを、先ほどのTerrainにあるComplete Terrain ShaderコンポーネントのProfileにドラッグアンドドロップします。

###CTS Profile設定
#####Global Settings
[![Screenshot from Gyazo](https://gyazo.com/d5fb4232e0b7131b263b02f0febb7c85/raw)](https://gyazo.com/d5fb4232e0b7131b263b02f0febb7c85)
Global Settings>Shader Typeは5種類存在します。
`Unity`はUnityデフォルトのシェーダーです。
[![Screenshot from Gyazo](https://gyazo.com/df3f800fc10c114519b30fb37a54793f/raw)](https://gyazo.com/df3f800fc10c114519b30fb37a54793f)
`Basic`はCTSでの一般的なシェーダーです。
[![Screenshot from Gyazo](https://gyazo.com/f8a8e8115967d8905a6478e88eb2b162/raw)](https://gyazo.com/f8a8e8115967d8905a6478e88eb2b162)
`Advanced`はHeight Map BlendingやAmbient Occlusionなどが適用されるシェーダーです。
[![Screenshot from Gyazo](https://gyazo.com/99dfa61cbf5b46258f771c0d4c0fb128/raw)](https://gyazo.com/99dfa61cbf5b46258f771c0d4c0fb128)
`Tessellation`は高度なテセレーションが可能なシェーダーです。Draw Instancedに対応していないため、画像は用意していません。
`Light`は最も軽量なシェーダーです。
[![Screenshot from Gyazo](https://gyazo.com/bfd9ae7a6381112fc2c03d3a78458d42/raw)](https://gyazo.com/bfd9ae7a6381112fc2c03d3a78458d42)

Shader Typeを決定したら、Bake Terrainsボタンを押し、焼き付けましょう。
Global Mixingは、シェーダーを反映させる距離を決定します。Mix Sharpnessでシェーダーの混合具合を調整できます。

#####Texture Settings
Texture Settingsでは、地面や岩のテクスチャの調整が行えます。サイズや色、反射率などの変更が可能です。
[![Screenshot from Gyazo](https://gyazo.com/62b3c98d657fcf5d44a5f190b0316bdb/raw)](https://gyazo.com/62b3c98d657fcf5d44a5f190b0316bdb)
Triplanarでは、崖などY軸方面での変化が強くテクスチャが伸びてしまう現象を、修正できます。

#####Detail Settings
Detail Settingsでは、地形に細かい凹凸を付けることができます。Close Powerで凹凸の強度を調整し、Far Powerで適用距離を設定します。

#####Geological Settings
Geological Settingsでは、地形全体の模様を付けることが可能です。Albedoで模様のテクスチャを選択し、Close Powerで強度を設定します。
[![Screenshot from Gyazo](https://gyazo.com/d7947df7a95ac86a900e5063f39c1ee3/raw)](https://gyazo.com/d7947df7a95ac86a900e5063f39c1ee3)

#####Snow Settings
Snow Settingsでは、地形に雪を降らせることが可能です。Snow Amountの値で雪の量を調整します。Minimum Heightで雪の降り始める高さ（Y軸の値）を決めます。Texture Settings>各テクスチャのSnow Powerで、それぞれのテクスチャにおける雪の積もり方を設定できます。
[![Screenshot from Gyazo](https://gyazo.com/5d09d3e126ba7e9330c9cefd72c288c2/raw)](https://gyazo.com/5d09d3e126ba7e9330c9cefd72c288c2)

#####Optimization Settings
Optimization Settingsではテクスチャサイズや圧縮率の変更が行えます。Runtime Optimization>LOD DistanceでLODの距離を設定できます。

#Post Efefct
最後に全体の見栄えをよくするため、ポストエフェクトをかけます。Gaia ManagerからGX>Procedural Worlds>Ambient Skies SamplesやAmbient Water Samplesを設定します。
[![Screenshot from Gyazo](https://gyazo.com/07171629cf50a15ffb0159e52079626f/raw)](https://gyazo.com/07171629cf50a15ffb0159e52079626f)
これにより、空と水の見た目を変更することができます。

[![Screenshot from Gyazo](https://gyazo.com/af04810be6105736a0d18bbb4ac32bea/raw)](https://gyazo.com/af04810be6105736a0d18bbb4ac32bea)
Post Processingなし

[![Screenshot from Gyazo](https://gyazo.com/5389ee7273bffa00341f2b9baaf3e41f/raw)](https://gyazo.com/5389ee7273bffa00341f2b9baaf3e41f)
Default Evening

#おわりに
[![Screenshot from Gyazo](https://gyazo.com/387b3025e8078e96ce0211f2c08af1c4/raw)](https://gyazo.com/387b3025e8078e96ce0211f2c08af1c4)
完成品

1時間ほどで手軽にオープンワールドを作れてしまうGaiaとCTS2019、いかがでしたでしょうか。今回はデスクトップ用のハイクオリティなワールド生成を行いましたが、モバイル用のローポリでのワールド生成も行うことができます。興味を持った方は、ぜひお試しください。