コズログ

コズァドットハテナァブログゥドットッッジェーピゥィー

地形モデルの生成フローメモ

地形の作成について、ここ数日で調査したことのメモです。

現在テストしている地形の生成フロー

使ったアプリ

フロー

  • ZBrushで大まかな地形を作る。後でハイトマップに変換するのでこの時点ではオーバーハングした地形を作らない。
  • World Machineに、ZBrushで作った地形のハイトマップをインポートする。
  • ZBrushで作成した地形もとにして、いい感じにエイジングしたり、地形を操作する。
  • World Machine側から、ハイトマップもしくはメッシュで出力したデータをZBrush側にインポートする。
  • 地形のディテールをスカルプトする。この段階でオーバーハングした地形を作って他の部分と違和感がないように馴染ませる。(モデリング力がいる!)
  • スカルプトしたモデルをDecimation MasterやZRemesherでいい感じにする。
  • Blenderに持っていって、ブーリアンを使ってモデルを分割する。(←今ここ)
  • UE4側に全てのモデルをインポートして適切なLOD(Simplygon)を設定する。(部分的にテスト完了)
  • 全体的な負荷のモニタリングと分析。

ほぼ全ての段階でトラブルに遭遇して大変!

直近で調査したこと

  • UE4のランドスケープつかうメリットは?
    • データが軽い。
    • 自動的にLODが設定される。
  • スタティックメッシュで地形を作る場合のデメリットは?
    • データが重い。
    • LODを自分で設定する必要がある。

ランドスケープでは、頂点データの格納に、頂点あたり 4 バイト使用します。スタティックメッシュは、位置を 12 バイト ベクターとして格納し、タンジェント X と Z ベクターはそれぞれ 4 バイトにパックされ、頂点ごとの合計が 24 もしくは 28 バイトに対して 16 ビットもしくは 32 ビット浮動小数値 UV になります。

つまり、スタティックメッシュは同じ頂点密度に対して、ランドスケープのメモリ使用量よりも 6 倍から 7 倍のメモリを使用します。ランドスケープはデータをテクスチャとして格納し、遠く離れた領域に対し未使用の LOD をストリーム出力することができます。ユーザーがレベルへ近づくにつれて、背景でディスクから読み込みます。ランドスケープは標準の高度フィールドを使用するため、スタティックメッシュのコリジョン データよりもより効率的にデータを保存することも出来ます。

https://docs.unrealengine.com/latest/JPN/Engine/Landscape/index.html

  • UE4のランドスケープの一部を切り取って、スタティックメッシュ入れたらどうなる?
    • ランドスケープにメッシュを部分的にインポートすることはできなかった。ランドスケープの一部を削除できるので、そこにスタティックメッシュを入れ込む事はできそう。(スケールを合わすのが大変そうだけど。)
  • 小規模なオーバーハングは、ランドスケープで構築した上に小さなスタティックメッシュを積み上げて表現したらよさそう。(マスクして洞窟作る方法と基本的に同じ。)
    • どこまでをランドスケープで作るのかの線引が曖昧で理解できていない。(実際に失敗して覚える駆動。)
  • World Machineで、急な崖を作るとハイトマップに仕様上からか崖の面がガタガタになる。
    • 海外のフォーラムで情報を探したけど、ある程度はモデリングで修正するしかないっぽい。
    • もしくは急すぎる崖を作らないこと。(抜本的解決)

検討項目

  • ランドスケープ利用したほうがどう考えても効率がよいので、大きくオーバーハングする地形を作成すること自体を諦める。(現実的で効率優先)
  • SimplygonでのLODを調査する。
  • スタティックメッシュで作成した場合、マテリアルやテクスチャの設定、主にブレンディングがいい感じに(効率的に、楽に)できるのか謎。