lunarborの備忘録

CGソフトの使い方を記録しておけば自分とどこかの誰かに役立つだろう

3D-COAT・Lightwave・Blenderのインポート・エクスポートでモデルのスケールを合わせたい話

使用ソフト

  • 3D-COAT2022
  •  Lightwave2020
  •  Blender3.2

3D-COATとLightwaveBlenderで連携して使うにあたり、インポートやエクスポート時のモデルのスケールの合わせ方をまとめた記事です。

 

3D-COATはシーン内のオブジェクトのサイズが大変わかりづらいです。検索すると3D-COATのフォーラムでもトピックが見つかるので、自分だけというわけではなさそうです。

3dcoat.com

そこで、1辺1mの立方体オブジェクトをLightwaveBlenderで作り、インポートとエクスポートで3D-COATと行き来して、わかったことを書いておきます。

■ペイントやUV展開では気にしなくてよい。

3D-COATはモデルをインポートすると作業がしやすいスケールに自動で設定されてシーンに表示されます。ペイントやUV展開を終えて3D-COATからエクスポートするとインポートしたときの設定を元にエクスポートされるので、LightwaveBlenderに再び読み込んでもモデルの大きさは一致します。ペイントやUV展開の作業では長さを指定したり合わせたりする必要は無いため、ペイントルームやUVルームでの作業では厳密なスケールを気にする必要は無いようです。比率があっていればOKです。

しかしポクセルルームにモデルを読み込む時は各所でスケールの問題が発生します。ですので今回の記事は主にスカルプトの機能を使用するときに注意する必要がある内容だと考えてください。

■2つの方法

3D-COATとlightwaveBlenderでモデルのやり取りにするときにスケールを合わせる方法には2種類あります。

ひとつは、3D-COATのシーンスケールを変更する方法。もう一つはシーンスケールはそのままでモデルのスケールを変更する方法です。

CGソフトは内部的に扱うスケールの基準を持っています。多くの場合それを"ユニット"という名前で呼んで1ユニットが現実の世界の単位でどれくらいに当たるかを設定することで、使用者が大きさを認識できるようになります。

公式な説明はありませんが、おそらく3D-COATはデフォルトで1ユニット=1mmで設定されています。対してLightwaveBlenderは1ユニット=1mで設定されていると思われます。

この基準の差がモデルをインポート・エクスポートしたときに大きさが変わってしまう理由です。

■①3D-COATのシーンスケールを変更してインポート

1つ目の方法は"1ユニットで設定しているスケール"をモデルをやり取りするソフト同士で合致させるやり方です。LightwaveBlenderにはこの設定を変える機能はありませんが、3D-COATには備わっています。つまり、設定で1ユニット=1mmになっているのを1ユニット=1mに変更してからモデルをインポートします。この方法は後記する2つ目の方法よりシンプルなので設定ミスで意図しない結果になるリスクを減らせますし、設定が間違っているときにはわかりやすく気づきやすいのでオススメです。自分も主にこの方法を使っています。

設定方法

設定場所は"ポクセルルーム(sculpt)""ジオメトリー(Geometry)"メニューの"シーンスケールを編集(Edit Scene Scale)""SceneScale"です。デフォルトではここの値は"1"になっていますが"1000"に変えることで"1ユニット=1m"に変更できます。(1m=1000mm)

インポートは"ファイル"メニュー"インポート""ポクセル化用メッシュをインポート"から行います。

必ず"シーンスケール"を変更してからモデルをインポートしてください。変更せずに先にインポートすると非常に小さいサイズで読み込まれてしまい、インポートに成功したのかどうか分からない事がよくあります。

モデルをインポートした後に"シーンスケール"を変更しても読み込まれたモデルのサイズは変更されません。そういう場合は"ファイル"メニューから"新規"でシーン自体を作り直してください。

インポート時の"ツールオプション"では"ポクセル化せずに追加"にチェックを入れます。この段階でポクセル化してしまうと"ポクセル密度"の設定次第で形が崩れやすくなるのと、逆に形を保つために必要以上に"ポクセル密度"を上げてしまうと変換に時間がかかったりメモリを多く消費する必要以上に重いモデルが生成されてしまうので、1度ポクセル化しない状態でインポートしてから"ポクセルツリー"を使って様子を見ながら変換するのがコツです。

測定ツールとの関係

"シーンスケール(SceneScale)"の設定は"測定"ツールの単位と深い関わりがあります。

設定で"1ユニット=1mm"にした場合、"測定"ツールの単位は"mm"を使い"1ユニット=1m"にした場合は"測定"ツールの単位は"m"を使うといった設計思想のようです。

これについては別記事で詳しく書いてありますのでそちらも参照してください。

lunarbor.hatenablog.com

エクスポート時の注意点

"シーンスケール"の設定値はモデルをエクスポートするときにも3D-COATに参照されます。一度シーンにモデルを読み込んでしまえば"測定"ツールを使うために作業途中で"シーンスケール"を変更してもモデルの大きさは変わりませんが、そのままの設定でモデルをエクスポートすると、変更したシーンスケールの設定値を参照してエクスポートされるので、インポートしたときのモデルの大きさと合わなくなります。必ずエクスポートする時は"シーンスケール"の設定値をインポートしたときの値と合わすようにしてください。

■②モデルのスケールを変更してエクスポート・インポート

2つ目の方法は3D-COATの"シーンスケール""1"のままエクスポート、インポート時にモデルのスケールを変更するやり方です。3D-COATはデフォルトで1UnitsScale=1単位のポクセル密度=1mmという設定になっており、この設定はフィギュア制作などでデジタル造形をする上で大変重要なようです。(自分は3Dプリントには疎いので詳しくは分かりません。)その辺りを重視する場合はこちらのやり方が良いかもしれません。

■3D-COATのエクスポート設定

lwo(lwo2),obj

"ファイル"メニューの"モデルのエクスポート(obj,lwo)"の設定にある"スケールの適用(計測単位を使用する)"にチェックを入れると"追加スケール"という項目が追加されるので、数値を入れてエクスポートします。デフォルト値は"1.000000"です

fbx

"出力メッシュ"でモデルの保存先を指定するときにファイル形式で"fbx"を選択すると、"FBXエクスポートユニット"という項目が追加されるのでドロップダウンメニューから目的にあった単位を選んでエクスポートします。選べるのは"mm" "cm""m"です。

"スケールの適用"のチェックはしません。

また、FBXは事前に"環境設定""入力/出力"メニューからも同じ設定が行なえます。この項目はエクスポート時の設定と連動しています。

Lightwaveのエクスポート・インポート設定

lwo(lwo2)

lwo(lwo2)を使う場合はエクスポート、インポート時のスケール変更の設定ができないため必然的に前記した3D-COATのシーンスケールを変更する方法を使うことになります。

obj

objはモデラー"一般オプション""OBJ"タブにある"OBJスケール入力""OBJスケール出力"という項目でそれぞれインポートとエクスポートの時のスケールを変更できます。デフォルトは両方とも"100.0%"です。100.0%のまま行えばlwo(lwo2)と同じスケールになります。

また上のチェック項目でOBJに付属させる設定を選択できます。

ここの詳細は下の公式マニュアルを参照してください

https://docs.lightwave3d.com/lw2020/appendices/common/common-modeler/obj-options

fbx

○エクスポート

fbxは"保存"メニューの"出力"項目から"FBXファイル出力"を選択すると設定が表示されます。スケールの変更は"スケールシーン"から行いますデフォルト値は"1.0"です

※チェックを外した状態だと値は"1.0"固定になります

○インポート

インポート時の設定はfbxファイルをLightwaveで開けば自動で出てきます。

スケールの変更は同じく"スケールシーン"で行います。デフォルト値は"1.0"です

Blenderのエクスポート・インポート設定

lwo(lwo2)

Blenderlwo(lwo2)はデフォルトでは読み込めませんが、アドオンを導入することで読み込めるようになります。但しインポートのみでエクスポートはできません。またインポート時にスケールを変更する設定もありません。

※アドオンはこちらから。

github.com

obj

objはBlender3.2からは標準アドオンを使う"Wavefront(.obj)"に加えてネイティブで読み込む"Wavefront(.obj)(実験的機能)"というのが追加されています。

どちらを使ってもスケールに関する設定は同じでしたので今回は標準アドオンを使う"Wavefront(.obj)"で説明します

 

○エクスポート

"ファイル"メニューから"エクスポート"項目の"Wavefront(.obj)"選ぶと"ファイルビュー"が開くので右上の歯車のアイコンをクリックするとエクスポート設定が開きます。

その中の"トランスフォーム"にある"スケール"でモデルのスケールを変更します。

デフォルト値は"1.00"です

○インポート

"ファイル"メニューから"インポート"項目の"Wavefront(.obj)"選ぶとエクスポート同様"ファイルビュー"が開くので右側の"トランスフォーム"にある"クランプサイズ"でモデルのスケールを変更します。但しこの"クランプサイズ"は比率ではありません。

指定した値に収まるようにモデルの大きさを調整する機能のようです。ちょっと分かりづらいです。単位は"m"のようです。

"Wavefront(.obj)(実験的機能)"では"バウンディングボックス(ClampBoundingBox)"

という名前になっています。

 

例えば1辺1.2mの立方体を作って、一度objファイルをスケール1000でエクスポートしたもの(一辺1200mの立方体)をもう一度作成サイズの1辺1.2mで読み込もうとするとします。

クランプサイズ"0"は無効の意味で1辺1200mの立方体として読み込まれます。

クランプサイズ"1"~"1.19"までは1ユニット(1m)の中に収まるようにリサイズされて読み込まれます。この場合は1辺0.12mの立方体。

クランプサイズ"1.2"~"11.9"だと1辺1.2mで意図したサイズになります。

クランプサイズ"12"~"119"だと1辺12m

クランプサイズ"120"~"1000(上限)"だと1辺120m

になります。この入力する値はモデルのサイズによります。

"クランプサイズ"で調整するのは少し分かり辛いですし、いちいちモデルのサイズを確認する必要があるので手間です。Blenderにobjでインポートする場合はエクスポートするソフト側の設定でスケールを合わすほうが良いかもしれません。

fbx

○エクスポート

"ファイル"メニューから"エクスポート"項目の"FBX(.fbx)"選ぶとobj同様に"ファイルビュー"が開くので右側の"トランスフォーム"の中の"スケール"でモデルのスケールを変更します。デフォルト値は"1.00"です

○インポート
"ファイル"メニューから"インポート"項目の"FBX(.fbx)"を選ぶと同様に"ファイルビュー"が開くので右側の"トランスフォーム"の中の"スケール"でモデルのスケールを変更します。デフォルト値は"1.00"です

■各ソフト間の換算値

それぞれのソフトでエクスポートとインポートの設定でスケールを指定できる項目が有るため、把握しつつどの工程でスケールを調整するのか、事前に決める必要があります。

3D-COATLightwave

  • lwo(lwo2):0.001→既定値
  • obj:0.001→100.0%
  • obj:1.0(スケールの適用をoff)→0.1%
  • fbx:mm→1.0
  • fbx:cm→0.1
  • fbx:m→0.001

3D-COATBlender

  • lwo(lwo2):0.001→既定値
  • obj:0.001→クランプサイズ0.00
  • fbx:mm→1.00
  • fbx:cm→0.10
  • fbx:m→0.001

Lightwave3D-COAT

  • lwo(lwo2):スケール変換できない
  • obj:100000.0%→シーンスケール1.000000
  • fbx:10.0→シーンスケール1.000000

LightwaveBlender

  • lwo(lwo2):スケール変換できないがそのままで合致する。
  • obj:100.0%→1.00
  • fbx:1.0→1.00

Blender3D-COAT

  • lwo(lwo2):エクスポートできない。
  • obj:1000.00→シーンスケール1.000000
  • fbx:10.00→シーンスケール1.000000

BlenderLightwave

  • lwo(lwo2):エクスポートできない。
  • obj:1.00→100.0%
  • fbx:1.00→1.0

※単位や数値の書式はそれぞれのソフトの設定に準じています。

■参考

Blenderにlwo(lwo2)を読み込めるようにするアドオンの導入方法の動画

www.youtube.com

Blenderの"Wavefront(.obj)(実験的機能)"の説明

cgbox.jp