Unity Terrainのハイトマップデータフロー
UnityのTerrainで生成されるハイトマップデータを外部ソフトからインポートしたり、エクスポートしたデータを外部ソフトで編集したりする場合の設定のメモ。
使用バージョン
- Unity : 2018.4.20f1
- Blender : 2.91.0
- Houdini : 18.0.287 Indie
- ImageMagick : 7.0.11-0 Q16 x64
Unity Terrainからハイトマップをエクスポートする
Unityからハイトマップのデータをエクスポートする場合は、Terrain
コンポーネント→Texture Resolutions
→Export Raw...
を選択する。
ダイアログが出てくるので、以下の設定でExport
する。
Flip Vertically
にチェックを入れないと外部ソフトで読み込む場合に反転してしまう。
Photoshop
エクスポートしたrawデータをPhotoshopで読み込む
rawデータはPhotoshopで読み込むことができ、読み込む場合は以下のような設定にする。
- チャンネル数を1にする
- 色数は16 bitにする
- バイト順序はIBM PC(B)にする
Photoshopで加工したデータを書き出し、Unityで読み込む
Photoshopで編集したハイトマップをUnityに読み込む場合は、まず保存時にファイルの種類
を汎用フォーマット(*.RAW)
に設定し保存
ボタンを押す。
バイト順序
がIBM PC(B)
になっているのを確認してからOK
を押す。
UnityでImport Raw...
から保存したファイルを開き、以下の設定でインポートする。
インポート完了
Rawデータを外部ソフトで読めるPNGに変換する
Unityから書き出されるrawデータをBlenderやHoudiniは直接読み込めないため、16BitグレースケールPNG
に変換して読み込む。Photoshopで変換してもよいが、Photoshopがない場合は、変換のためにいちいち立ち上げるのが面倒な場合はImageMagick
を使用する。
ImageMagickをインストール後、対象のRawファイルに対して以下のコマンドを実行すると16BitグレースケールPNG画像
が得られる。
入力ファイル名: terrain.raw
出力ファイル名: output.png
解像度: 513x513
とする
1 |
|
Blender
Blenderでのハイトマップの表示
Blenderを立ち上げ、平面を出したら、必要な分だけ細分化する。(マルチレゾリューションモディファイアでもOK)
平面のサイズは、TerrainのMesh Resolution
のTerrain Width
、Terrain Height
に合わせる。
この場合ならX、Yの寸法を500mに合わせる。ただしスケールで制御する。したがって、500なら最初のプレーンを250倍する。この段階ではスケールの適用も行わない。
ディスプレイスメント
モディファイアを追加し、
方向
をZ
スペース
をローカル
中間レベル
は0.0
にする。
強さ
はTerrainの設定値から以下のように設定する。
(Terrain Height) × (Terrain Width) / 2
この例なら600 * 500 / 2 = 2.4
新規
ボタンから新たにテクスチャを設定し、ImageMagickから出力した画像を読み込む。
画像の色空間
をリニア
に変更する。
これでUnityと同じTerrainデータが読み込まれる。
Houdini
Houdiniへの読み込み
HeightField
ノードでサイズをTerrainのTerrain Width
、Terrain Height
に合わせる。
次にHeightField File
ノードをつないで、
- Layer Name
をheight
にする。
- Size
をTerrain Width
と同じにする。
- Height Scale
をTerrain Height
と同じにする。
これで読み込み完了
Unity形式へエクスポート
エクスポートにはHeightField Output
ノードを使用する。
ファイル名の拡張子を.png
にして、(.tif
は正しくエクスポート出来なかった。)
Format
をSingle Channel
にするType
を16bFixed
にするResolution
は2の累乗+1になるようにする。(たとえば512+1で513)Image Channel
のRed
にheight
をセットするOutput Range
をManuel Remap
にして、From Range
を0-(Terrain Height
)にする。
そしてSave to Disk
を押してエクスポート
ImageMagickでrawに変換
以下のコマンドでpngをrawに変換する。
1 |
|
Unityでインポート
Photoshopの時と同じようにインポートすればOK。
参考
UnityのTerrainのHightMapをMayaで扱いたい! - Qiita