Unity で自然な感じの地形・建物モデルを作成するには
以前に練習した Blender で建物や人物モデルを作成してから取り込むようにしていたが、やはり違うファイル形式への変換などで制約は多そうなので、直接 Unity で編集する方法を試すことにした。
利用するツールを Unity に追加する
- Unity に標準装備 Built-in されている Terrain パッケージ
大まかにいって土木 - 建築向きの 3D Objects の多少は用意されている ProBuilder
大まかにいって建築、標準ではないので Package Manager から追加
追加すると [Tools] メニューが出現する
- 地物をグリッドに規則正しくスナップ配置させる ProGrids
まだ開発途中 Preview のものであり、高度な設定 Advanced Settings で合意しないと利用できない
- 標高マップの色数を256色に落としRAW形式に変換するために GIMP2
色数8bitか16bitのRAW形式ファイルしか受け付けないらしいので...
標準装備の Terrain で地形 GameObject を生成する
3D白地図のような地勢/地形を作成する
-
Unity で地形 Terrain という種類のGameObject を追加する
-
どこかからグレースケール画像で作成された標高マップ height map を調達する
すると等高線だけの白地図のような地形が1ピクセル 2m 換算で生成される。
取り込んだ後に編集ツールでレタッチすると楽ちんらしい。-
作成するのが面倒なので grayscale height map image mars で検索して、火星の標高マップを探して入手した。
解像度は720×360 と小さめだが、深度は24ビット(16,777,216)のようだ。
https://attic.gsfc.nasa.gov/mola/images/shade_med.jpg - 色数が多すぎるので GIMP2 で 256色に減色した
画像サイズが逆に増えたので、やる必要はなかったかもしれない。
-
Terrain オブジェクトの Inspector - Terrain Settings ボタン(右端)を押し、インポート Import Raw ...
取り込みの際にサイズを X: 720, Y: 2000, Z: 360 に指定したが、洗濯板のように平坦なまま。どうやら失敗したらしい。 -
調べると、火星のデータは標高マイナスがあるなど癖があるらしかった。
楽するつもりが余計に面倒なことになりそうだったので今は諦めた。
-
- どこからかフリーの標高マップを調達する
解像度も1025×1025と判明しているし、出来あがりも示されているので、分かりやすい。但しファイル形式がPNGなので、変換する必要はありそう。
Landscape Height Maps - Motion Forge Pictures
- GIMP2 で RAW画像形式に変換して保存した
やはりPNG形式のままでは、うまく取り込めなかった。 - メッシュ解像度を1025×1025にして取り込んだ
標高の倍率を制御するパラメタの設定が違っていたらしく、中国の老名峰のような尖った地形になってしまった。
-
さきほどはYを2,000で取り込んでいたが、256に変更して取り込み直したところ、なだらかになった。同じデータなのだが、こうまで印象が違うのか。
もうちょっとメリハリ欲しいのでY:512で取り込んだ。
- GIMP2 で RAW画像形式に変換して保存した
地勢/地形を加工する
-
編集ツールで地形を変更していく。
ブラシ Brushes を選択して、左クリックで上げ、シフト左クリックで下げ。
まるでポピュラスのようだ。
ブラシは、もっと小さいものを使うべきだったな。透明度 Opacity で盛り土の加減を調整できるようだ。標高の情報がグレイスケールなので、透明度が高い(薄い)と変化幅が小さく、低い(濃い)と変化幅が大きくなるようだ。
- 道を引くのが、かなり大変なようだ
シフト左クリックで高さの値を獲得(スポイト)して、少し高さを変えて高さを固定 Set Height してからブラシで道筋をなぞるのだが、盛り土か溝みたいに見えて道には見えない。
そもそも標高が変わる場所では逐一なだらか Smooth Height にしないといけないので面倒だ。相対指定するとか、もっとマシな方法はないのか...
地勢/地形が自然な風景になるように表面加工する
いまのところ石膏モデルのように無色なのだが、まずは色を付けてみる。
- それらしいマテリアル・テクスチャを入手して指定する。
Nature Materials vol2 を検索してダウンロード・インポートした。
マテリアルが大量に追加される。
いきなり描くことはできず、マテリアルを指定してレイヤを追加する必要がある。最初に追加したレイヤは地形 GameObject の全体に適用される。 -
実のところ、道路はマテリアル(テクスチャ)で十分だった。
段差を補正してなだらかにしさえすれば、道そのものはテクスチャで十分表現できると思われる。
植林する
Paint Trees という専用ツールがある。喜び勇んでこれをクリックした。
ブラシの範囲が表示されたので塗ってみた...が木は生えてこなかった。何故だ?
どうやら樹木のモデル Prefab が無く、何も配置できないようだった。
- 適当な樹木を1本作る
コピー元になるモデルを適当に作ることにした。
これのどこが樹木なのか分からないが...ブラシで増毛は出来たので手順としては正しいのだろう。作り方がマニュアルにあった。枝は自分ではやさないといけないのか。
docs.unity3d.com - 面倒だから樹木のアセット Assets を探してくる
鉄道模型のシーナリー作成と同様、樹木を石膏の山に挿す。
Realistic Tree 10 をダウンロード&インストールして適用した。
もっともらしくなってきた。
空や雲も必要だろう
ダウンロードしたアセットは以下のもの。
- Fantasy Skybox FREE
やり方は以下の記事を参考にした。
- レンダリング Rendering の設定変更を行う
メニューの場所が分かりにくい。
少し雲のようなものが追加された空になった。
建築物を作りたいが、ProBuilder では難しそうだった
ProBuilder を使ってみたが、
- Blender と機能は似ているものの、使い勝手がかなり悪い
- 用意されている3D図形も品質がいいわけでも、種類が豊富なわけでもない
取り込んだアセットの微修正をするくらいの用途なのかもしれない。
風景手作りするのしんどいから、GANcraft でも使うか...
Minecraft に生成させた世界をリアルにする GANcraft とかいうものがあるらしい。
NVIDIAは色々頑張っているようだ。
- 2D風景画の場合には、NVIDIA Canvas
- 3Dモデルの場合には、GANcraft
GANcraft: Unsupervised 3D Neural Rendering of Minecraft Worlds
このあたりが使えると、わざわざ世界を手作りする必要がなくなるので楽だ。
Cuda11.1 が必要であるらしい
ハードウェアの制約があるのかと思ったが、意外にもドライバ次第のようだった。
Windows Minimum Required Driver Version >=452.39*
GeForce Experience で確認すると、最新版がダウンロードできる。
すでに条件はクリアしているが最新にしておくに越したことはない。
参考文献
以前に練習したBlender での手順(参考)
建物のモデリングの場合
公開されている工場レイアウトと空中写真を併用して建物を作成した。
人物のモデリングの場合
Unity での人体モデルの作法のようなものを調べて、それになるべく対応させるように作成した。