#やりたい事
UnityのTerrainは便利だけれどぬるっとしてしまう。
他のツールでいじれたら最高なんだけどなぁ・・・
ということで調べてみました。
#とりあえずの決め事
データサイズが不定のままだと基準が無いので、こんな感じにしてみます。
■UnityTerrainData
Terrain Width 700
Terrain Length 700
Terrain Height 500
Heightmap Resolution 513
■Maya側のObject
UnityのTerrainにあわせて、PlaneObjectの幅 高さは70
分割数はTerrainのLengthにあわせて700(もっと少なくても良かったかも)
1)UnityでTerrainのInspectorからExport Rawを選択
2)RawはMayaで扱えないのでImageMagickで変換
Magick Convert -depth 16 -size 513x513 gray:[入力].raw [変換後].tif
3)MayaでImport設定はこんな感じ
サーフェス/ジオメトリのスカルプトツール□
スムーズの強さ 10(MAXにしないとがくがくになるから)
スカルプトパラメータ 最大ディスプレイスメント 50
アトリビュートマップ 読み込み
読み込み値:輝度
という形で読み込んで見ました。
Scaleが1/10となっていますが、だいたい読み込めていそうです。
#Unityに戻すためにExportしよう
この後、Mayaであれこれ加工する楽しい作業があるとして、戻せなければ意味がありません。
次はUnityに戻してみましょう。
■出力
Mayaであれこれ加工したPlaneのデータは頂点の変化として捉える事が出来ます。
これをそのまま書き出してみましょう
ここでは手っ取り早くTURTLEを使います。
RenderType Baking
Bakingタブ
TargetSurfaces >適当にPlaneを作ってサイズをあわせておき、それをセット
SourceSurfaces >加工したObjectをセット
TextureBakeSetting
Width 513
Height 513
FileFormat TIFF16
ShaderOutputs DisplacementMapを選択
DisplacementMap
Scale 0.020(今回はMayaScale50を0~1にNormalizeするので 1/50の数値です)
これで、TURTLEの出力結果のフォルダにDisplacementMapが出力されました。
UnityがExportしたRawデータと色の濃度が違いますが、気にしないでください。
Rawデータの明るさが違うだけで、高さMAPとしての数値は問題ありません。
#UnityにImport
Mayaで扱えるデータとして、tiff形式でBakeしていますので、まずはRawに戻します。
Magick Convert -depth 16 -size 513x513 [入力].tif gray:[変換後].raw
後はUnityの作業です。
UnityのTerrainを選択し、歯車タブからImport Rawを選択し、
先ほど変換したDisplacementMapを読み込みます。
どうでしょうか。
ディティールは多少変化してしまっていますが、概ねそのままのようです。
これで安心してMayaのスカルプトツールで細かい作りこみができるようになりましたね。
#注意点
UnityとMayaでScaleを一致させるために、単位がどうなっているのかは把握しておきます。
HeightMapは高さのデータですからTerrain Height の数値と
スカルプトパラメータ 最大ディスプレイスメント 50の数値には気をつけます。
#メモ
Rawからの変換はPhotoshopとか持ってないと出来ないのでは困るのでImageMagickを使いました。
LinuxやMacではコマンドラインが異なりますが、大体同じですので、使ってみてください。
■ImageMagickの画像変換コマンド(WINのコマンドです)
.tiffへ変換
Magick Convert -depth 16 -size 513x513 gray:[入力].raw [変換後].tif
・rawへ変換
Magick Convert -depth 16 -size 513x513 [入力].tif gray:[変換後].raw
■ImageMagickはこちら
ImageMagick