【Unity】美しいオープンワールド風景の作り方!アセットを活用して魅力的な風景を生み出そう

美しいオープンワールド風景の作り方Unity

今回は3Dゲームの絵作りに関する話題で、タイトルの通り

美しいオープンワールドゲームの風景の作り方

を具体的にご紹介するという内容になっています。

Unityで3Dゲームを作っている方の中には「美しいオープンワールドゲームを作ってみたいなぁ」と思っている方は少なくないと思うのですが、ネットで調べても具体的なノウハウはほとんど載っていないのが実情です。

そこでここでは(執筆時点で)オープンワールドゲームを5作品完成させた経験のある私が

  • 美しく、かつ広大なフィールドを上手く作るにはどうすればよいか
  • どのようなアセットを使えば楽に作れるか

といった点について、サンプルを交えてなるべく具体的に解説していきますね。


※ちなみに今回はアニメ調に近い風景の作り方をご紹介します。もっとリアル調の風景を作ってみたいという方は下記のページも併せてご覧ください。

【Unity】Terrainで絶景を作る方法!美しいオープンワールドを実現しよう
Unityでオープンワールドゲームなどの3Dゲームを作るときは必ずと言っていいほどTerrainを使うことになると思います。しかし実際にTerrainを作ってみると なかなかリアルな地形を作れない 頑張って作ったけど、なんか...

今回作るオープンワールドのサンプル

まずはじめに今回作るオープンワールド風景のサンプルを載せておきます。

オープンワールドの風景の例

サンプルではURPのプロジェクトを使っています。ビルトインRPやHDRPでは後述するアセットの選定や作業手順を多少変える必要がある点にはご注意ください。

URPについて詳しく知りたい方は下記のページも併せてご覧ください。

【Unity】URP(Universal Render Pipeline)の概要&導入方法
Unityを使っていると、よく「URP」という単語を目にすることがあります。これはざっくり言えばUnityのグラフィックの描画方式の一つなのですが、初心者の方からしてみれば URPって一体何なの? デフォルトのテンプレートと...

使用するアセット・パッケージ

次に今回使用するアセットやパッケージを一通りご紹介しておきます。

アセット

まずはアセットです。今回は次の5つのアセットを使用しました。

  1. Fantasy Adventure Environment
  2. Fantasy Skybox
  3. Procedural Terrain Painter
  4. Terrain Sample Asset Pack
  5. Medieval Castle

Fantasy Adventure Environment

思わず冒険に出かけたくなるようなファンタジー風景用の3Dモデルが揃ったアセットです。収録されているモデルの数はそれほど多くはないのですが、汎用性が高いアートスタイルで使いやすいですし、プレハブもある程度最適化されているので安心して使えるのが特徴。たまにセール対象になっていたりするので見かけたらゲットしておくとお得です。

Fantasy Skybox

ファンタジー風の美しいスカイボックスが欲しいならぜひ購入を検討していただきたいアセット。上のサンプル画像のようなアニメ風の空のほか、もう少しリアル寄りの空も色々と含まれています。これ一つあれば綺麗な空には事欠きません。

Procedural Terrain Painter

面倒な「Terrainのテクスチャ」の塗り作業を自動化してくれる超便利な無料アセットです。条件を入力するとその通りにテクスチャを塗ってくれるほか、ノイズ関数を使ってバラつきのある塗り方をすることもできます。Terrainを使うなら必須と言っても過言ではないくらい便利なので必ず手に入れておきましょう。

Terrain Sample Asset Pack

Terrain用の草・テクスチャ・ブラシが多数含まれた便利なアセットです。Terrainを使うならとりあえずインポートしておくと便利でしょう。

ただしファイルサイズがかなり大きいので、必要なモノだけ選んでインポートすることをお勧めします。ここではブラシ用のアセットだけを使います。

Medieval Castle

お城のアセットです。建造物の無料アセットは貴重なので重宝します。

パッケージ

次はパッケージです。パッケージはTerrain Toolsを使用します。

Terrain Tools | Terrain Tools | 4.0.3

このTerrain ToolsはTerrain編集機能をパワーアップさせるパッケージとなっています。浸食シミュレーション機能や段差を作る機能など、Terrainを作るうえで便利な機能が盛りだくさんなのでTerrainを使うなら必ずインストールしておきましょう

オープンワールド風景の作り方

ではここからオープンワールドの作り方をご説明していきます。主な手順は次のとおりです。

  1. スカイボックスとライティングを決める
  2. Terrain Toolsの機能で地形を作る
  3. Terrain Painterでテクスチャを自動的に塗る
  4. ランドマークになる建物などを配置する
  5. 木や草・岩などのゲームオブジェクトを配置する
  6. ポストプロセス(URPのVolume)で映えるグラフィックにする
  7. ライティングをベイクする

一つずつ詳しく見ていきましょう。

手順1:スカイボックスとライティングを決める

まずはスカイボックスとライティングを決めます。ライティング設定ウィンドウ(メニューバーの「ウィンドウ」→「レンダリング」→「ライティング」)からスカイボックスを変更し、環境ライティングの項目を変更します。

環境ライティングの設定

環境ライティングの強さが1だと少し弱めなので1.5くらいにしておきます。ちなみにここではスカイボックスを環境光のソースとして使っていますが、もしシーンが青っぽくなるのが嫌な場合はソースを「色」にして好きな色を指定するとイメージ通りになると思います。

また、シーンのディレクショナルライトの設定も変更します。

ディレクショナルライトの設定

手順2:Terrain Toolsの機能で地形を作る

次はTerrainを作っていきます。新しいTerrainを作り、サイズを2048m四方に設定したらTerrain Toolsの機能を使って地形を作っていきましょう。

手順2‐1:スタンプ機能で大まかな地形を作る

Terrainを手軽に作りたいときは、手動でペイントするのではなく「Stamp Terrain」機能を使うと便利です。先ほどインポートしてもらった「Terrain Sample Asset Pack」によって使えるスタンプの種類が大幅に増えているので、好きなスタンプを選んで地形をポンポンと型押ししていきましょう。

スタンプ機能を使ってTerrainの大まかな形を作った場合の例

ちなみにオープンワールドは基本的に

  • 盆地

のいずれかになるためTerrainの周囲を山で囲むか、中央を盛り上げるかの2択になると思います。スタンプを上手く使っていずれかの形になるように調整してください。サンプルでは盆地型の地形を採用しています。

あと水辺の部分は、巨大な平面を作ってそこに「Fantasy Adventure Environment」の水マテリアルを適用するだけです。

手順2‐2:その他の便利機能で地形を整える

大まかな地形ができたらTerrain Toolsのその他の機能を使って地形を整えましょう。ポイントは次のとおり。

  • スタンプを使うと「やたらトゲトゲした地形」ができる場合があるので、Smooth HeightやErosionを使って地形を滑らかにするとよいかと思います。なおErosion機能は浸食をシミュレーションする機能です。リアルな地形を作る場合にも活躍します。
  • Sculpt/Terraceを使うと、棚田のような段差のある地形を作れます。
  • Sculpt/Bridgeを使うと二点間をつなぐ傾斜を簡単に作れます。

手順3:Terrain Painterでテクスチャを自動的に塗る

TerrainができたらTerrain Painterを使って自動でテクスチャを塗ります。次の作業を行ってください。

  1. 空のゲームオブジェクトにTerrain Painterコンポーネントをアタッチする
  2. Settingsタブで必要な設定を行う
  3. Layersタブに必要なTerrainレイヤーを登録し、設定を行う

手順3-1:空のゲームオブジェクトにTerrain Painterコンポーネントをアタッチする

まずは空のゲームオブジェクトを作り、そこに「Terrain Painter」コンポーネントをアタッチしましょう。

手順3-2:Settingsタブで必要な設定を行う

次にTerrain PainterコンポーネントのSettingタブで必要な設定を行います。「Terrains」欄に先ほど作ったTerrainを登録してください。

Terrain Painterの設定タブ

手順3-3:Layersタブに必要なTerrainレイヤーを登録し、設定を行う

そうしたらLayersタブに必要なTerrainレイヤーを登録して設定を行います。まずはベースとなるレイヤー「FAE_Grass」(※Fantasy Adventure Environmentに含まれているもの)を登録します。

Terrain Painter テクスチャ登録

次に水辺の砂浜のレイヤー「FAE_Sand」を登録し、「Modifier Stack」欄を次のように設定してください。

  • Height, Multiply, 100
  • 最小0,最大10
  • Min Falloff1, Max Falloff10

Terrain Painterのレイヤー設定の例

詳しい理屈はTerrain Painterのマニュアルをご覧いただきたいのですが、簡単に説明するとモディファイアはTerrainレイヤーの適用条件のようなものであり、ここでは高さによってSandレイヤーを10m以下の高さに限定して適用するようにしています。

あとは同じ要領で他のお好みのレイヤーを追加してもよいでしょう。ここまでの作業が完了すると次のような感じになります。

Terrainにテクスチャを適用した場合の例

手順4:ランドマークになる建物などを配置する

次はシーンにゲームオブジェクトを配置していきます。まず最初にやるべきなのはランドマークになる建物などの配置です。先にこの部分を決めておかないとメリハリがなくつまらないオープンワールドになってしまいますので、まずは目印となるモノを最優先で配置するようにしましょう。

ランドマークとなるゲームオブジェクトの例

ここでは最初にインポートしてもらったお城をランドマークとして配置しました(※そのままでは色が地味だったので、明るい色に変更してあります)。

手順5:木や草・岩などのゲームオブジェクトを配置する

重要なゲームオブジェクトの配置が済んだら、木や草・岩などの小物を配置していきます。順番としては岩→木→草という風に大きなものから配置するようにしてください。

配置が一通り済むと次のようになります。

Terrainに草木を配置した場合の例

手順6:ポストプロセス(URPのVolume)で映えるグラフィックにする

次に味付けとして、ポストプロセス(=画面効果)を使ってより映えるグラフィックにします。

URPでポストプロセスを使うには「Volume」というコンポーネントを使います。URPのVolumeの使い方については下記の記事で詳しくご紹介していますので、そちらも併せてご覧頂ければと思います。

【Unity】URPのVolume(=ポストプロセス)の使い方!ゲームの見た目をワンランクUPさせよう
今回はゲームの絵作りに関する話題で、タイトルのとおり URPのVolumeを使ってゲームの見た目を良くする方法 について解説するという内容になっています。 URPはUnity2021以降は十分すぎるほど実用的になっており、従来のビ...

ここではプロファイルを次のように設定にしました。

ボリュームプロファイルの例

手順7:ライティングをベイクする

最後にライティングをベイクします。Terrainを使ったシーンは広大になりがちでライティングのベイクに時間がかかる場合があるため、最初はサンプル数や解像度を落としてベイクし、納得いかなければ後で調整する…という感じに作業するとよいと思います。

なおライティングのベイクでは問題が発生する場合があるのですが、その時の対処法は下記の記事で詳しく説明しています。併せてご覧ください。

【Unity】ライトマップのベイクが上手くいかない・時間がかかるときの対処法まとめ
今回はUnityでのライティング(=照明)に関する話題で、タイトルの通り ライトマップのベイクが上手くいかないときの対処法 を一通りまとめてみるという内容になっています。 Unityで3Dゲームを作っていると、シーンのライティング...

おわりに

以上、美しいオープンワールド風景の作り方を具体的にご紹介しました。

オープンワールドゲームはゲーム開発者の憧れだと思うので、それを個人で作れるとなるとなかなか感動するものがあります。ぜひ皆さんにもオープンワールドづくりを体験していただければと思います。

なお、ここではフィールドの作り方と絵作りに関してのみご説明したのですが、オープンワールドゲームは非常に奥が深く

  • 最適化
  • レベルデザイン

などもとても重要になってきます。その辺についての話は下記の記事に詳しく書いてあるので、併せてご覧いただければ更に理解を深めて頂けるでしょう。

【Unity】オープンワールドゲームの作り方まとめ
今回はタイトルの通りで「Unityを使ったオープンワールドゲームの作り方」のまとめをしていく記事です。 私は(執筆時点で)小規模なオープンワールドゲームを5作品完成させているのですが、その中で「このジャンルのゲームを作るうえでこの知識...

この記事がUnityでのゲーム開発のお役に立てば幸いです。