lunarborの備忘録

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

3D-COATからエクスポートしたNormalMapの向きをLightwaveと合わしたいという話

使用ソフト 

  • Lightwave2020
  • 3D-COAT2022

■疑問

3D-COATとLightwaveの連携方法を模索し始めた頃から、ひとつ疑問に思っていた事がありました。3D-COATからエクスポートしたlwo(lwo2)ファイルをLightwaveに読み込むとデフォルトで"NormalMap"ノードが"サーフェイスノード"に接続された状態になっているのですが、設定を開くと"反転Y"にチェックが入っていることです。

この度、その理由がわかったかもしれないので記事にまとめました。

■関連記事

この記事はこれらの記事の派生記事です。

lunarbor.hatenablog.com

 

lunarbor.hatenablog.com

 

■CGソフトの座標系について

本題の前に座標系についてまとめておきます。

CGソフトを複数使用するとかならず学ぶことになるのがソフトによる座標系の違いです。右手系と左手系があります。

参考

ja.wikipedia.org

www.f.waseda.jp

映像、ゲーム制作で使われる主なソフトの座標系

Lightwave3D      左手系  Yup

Cinema4D        左手系  Yup

ZBrush             左手系  Yup

Unity                左手系  Yup

 

MODO               右手系  Yup

Maya                  右手系  Yup

3D-COAT            右手系  Yup

Houdini              右手系  Yup

 

3ds MAX              右手系  Zup

Blnder                  右手系  Zup

 

UnrealEngine     左手系  Zup

 

Open GL              右手系  Yup

DirectX              左手系  Yup

参考

zenn.dev

kimagurekote2.blog.fc2.com

 

■法線マップには種類がある

法線マップには"Open GL(Y+)"方式と"DirectX(Y- )"方式の2種類があり、お互い緑チャンネルが反転します。この違いは前章で挙げた座標系の違いに起因するモノのようです。

ただ、ソフトによってどちらを採用しているかは座標系によって明確に分けられているわけでは無いらしく、例えば右手系でも"DirectX(Y-)"を採用している場合もあるようです。また、オプションでどちらを採用するかを決められるソフトもあります。

Open GL(Y+)

DirectX(Y- )

  • 3ds MAX
  • UnrealEngine

参考

www.marcelvanduijn.com

www.betternowcgz.com

seesaawiki.jp

czpanel.com

■3D-COATの"法線マップのエクスポート"設定

3D-COATの"編集"メニュー"環境設定""入力/出力"タブに"法線マップのエクスポート"というのがあります。ここを変更すると法線マップの緑チャンネルが反転します。

Lightwave"Yup"の座標系なので緑チャンネルはY軸が対応します。

選べるのは"3D-Max,LW""Maya"の2種類です。

"3D-Max,LW"は「DirectX(Y- )」方式の法線マップ。

"Maya"は「OpenGL(Y+)」方式の法線マップ。

の意味です。表示されてあるソフト名には囚われないほうが良さそうです。

ここの設定について3D-COATのフォーラムにあるこちらのスレッドで詳しく言及されています。(DeepLで翻訳して引用)

グリーンチャンネル(いくつかの背景情報)
Modoはデフォルトで法線マップをDirectXの方法ではなくOpenGLの方法で解釈し、この2つは緑チャンネルを逆に解釈する(UV空間のY軸が反転しているため)とだけ読み取れました。
ですから、Modoで緑チャンネルを反転させることは1つのオプションです。
もう一つの選択肢は、3D-Coatからエクスポートする際に緑色のチャンネルを反転させることです。これは、環境設定の「法線マップのエクスポート」を「Maya, Blender」に設定することで可能です。

つまり、"Maya, Blender "は "OpenGL "方式の法線マップに対応します
3DS-Max, LW」は「DirectX」方式の法線マップのようです。

ところで、3D-Coatのグリーンチャンネルを反転させるオプションは、ソフトウェア名で設定するのではなく、別のチェックボックスで(あるいはドロップダウンのオプションに「OpenGL」や「DirectX」のような名前を付けて)アクセスできるようにしたほうがよい、というGary (https://3dcoat.com/forum/index.php?/topic/20056-why-so-many-normal-map-options/ ) の意見に同意せざるを得ません。ソフトウェア固有のものは、"Normal Map Sofware Presets "の選択されたオプション内にのみ保存されるべきです。

パディング
Denormalized TB」のチェックを外すと、パディングが作成されるようで、ここではプラスの効果がありました(ただし、完全に問題が解決したわけではありません)。
また、エクスポートダイアログで「パディングを作成する」にチェックが入っていることを確認する。

UVマップ
この問題は、3D-Coat の自動アンラッパーが作成するギザギザの UV マップに一部起因していると思われます。あなたのモデルでも、おそらくそのようなUVの継ぎ目に重要な部分が配置されているのでしょう。
ModoはギザギザのUVを容赦なくレンダリングするようですが、これがメッシュやテクスチャマップの正しい設定の問題なのか知りたいところです。
現状では、法線マップを手動でエクスポート/インポートしても良い結果は得られませんでした。何か注意すべき点があれば教えてください。

しかし、3D-Coatでは、重要な領域はすでに見えていますが(少なくとも私のテストケースでは)、より見えにくくなっていることに気づきました。
ですから、最終的には素敵なUVマップがこれを解決するかもしれませんが、よりスムーズな法線マップの交換に関するより多くのヒントやヒントは非常に歓迎されます! 

www.DeepL.com/Translator(無料版)で翻訳しました。

3dcoat.com

■実際に設定する

ここまで調べてきたことによると、

  • Lightwave3Dの座標系は"左手系"なので"DirectX"と同じ
  • 3D-COATの"法線マップのエクスポート"には"3D-Max,LW"という項目がある

ことから「DirectX(Y- )」方式でノーマルマップをエクスポートすれば良いように思います。3D-COATで文字が盛り上がったメッシュをベイクしてノーマルマップを作りましたのでテクスチャのみエクスポートしてLightwaveに読み込みます。

DirectX(Y- )」での出力結果。ライトは左上です。

光が上から当たっているのに上側に陰が付いて文字が凹んでますね。逆でした。
なので意図したモノにするためにノーマルマップの設定で"反転Y"にチェックをいれます。これが冒頭の疑問の答えです。

意図したものになりました。

■結論

つまり、結論としてはLightwave3Dのノーマルマップは「OpenGL(Y+)」方式です。
しかし、3D-COATの環境設定に従ってノーマルマップをエクスポートすると「DirectX(Y- )」方式になります。それをLightwaveに読み込むと緑チャンネルが反転してしまうため3D-COATがlwo(lwo2)をエクスポートする時に"反転Y"にチェックが入るように設定してある。

テクスチャとモデルを同時にエクスポートした時は意図したモノなるが、テクスチャのみエクスポートでは(自分で気づいて設定しない限り)意図したモノにならない。

"法線マップのエクスポート"の最もシンプルな設定方法

3D-COATの"環境設定""法線マップのエクスポート""3D-Max,LW"ではなく"Maya"を選んでLightwave用のプリセットをつくります。

特にこのブログで紹介したLightwaveと3D-COATの連携フローでは最終的にテクスチャのみをエクスポートしてLightwaveに読み込むため、この設定を推奨します。

なるべくシンプルな設定しにておく事で、意図しないモノになるリスクを減らします。

但しlwo(lwo2)も同時にエクスポートして使用する場合は必ずLightwave"NormalMap"ノードの設定を開いて"反転Y"のチェックを外すようにしてください。

従来の方法を選んだ時は

何らかの理由から"法線マップのエクスポート""3D-Ma,LW"を選ぶ場合、またすでにこの設定で構築してしまったモデルがある場合は必ずLightwave"NormalMap"ノードの設定を開いて"反転Y"にチェックが入っているか確認してください。

■おまけ

Lightwave3Dはバージョン2018で大幅に変更が加えられたため過去バージョンだと今回の疑問に別の答えがあるのかもと思い、念のためLightwave2015でも検証してみましたが、この部分に付いては特に違いは見受けられませんでした。