2017/03/25(土) [n年前の日記]
#2 [cg_tools][gosu][dxruby] Wings 3DでエクスポートしたCOLLADA形式を眺めてたり
blenderからエクスポートした COLLADA形式(.dae)は、Rubyスクリプトを使ってある程度は読めるようになってきたけど。ふと、Wings 3D からエクスポートしたCOLLADA形式ファイルにも対応できたらヨサゲかもしれないと思いついて対応作業を始めたりして。
しかし、Wings 3D からエクスポートした .dae を使おうとすると、色々な問題が。
しかし、Wings 3D からエクスポートした .dae を使おうとすると、色々な問題が。
◎ diffuseが出てこない。 :
テクスチャが貼ってあるモデルデータを .dae でエクスポートしたところ、マテリアル情報のあたりで、ちと問題が。
例えば、blender からエクスポートした .dae の場合、diffuse には RGBA を記述してくれるけど。
Wings 3D からエクスポートした .dae は、(テクスチャを使ってた場合)diffuse に以下のような記述が入るので RGBA を取得できない。
どうやら Wings 3D上のマテリアル設定で指定された diffuse 値は、エクスポートした .dae 内に含めてくれない模様。どこにもそれらしい情報が無い…。
ただ、テクスチャを貼らない場合は blender と同様に出力してくれる模様。
対処としては…。colorタグの有無を調べて、もし無ければ、diffuse を RGBA = 1.0, 1.0, 1.0, 1.0 にでもしておく、みたいな感じだろうか。
例えば、blender からエクスポートした .dae の場合、diffuse には RGBA を記述してくれるけど。
<diffuse> <color sid="diffuse">0.8 0.72 0.64 1</color> </diffuse>
Wings 3D からエクスポートした .dae は、(テクスチャを使ってた場合)diffuse に以下のような記述が入るので RGBA を取得できない。
<diffuse> <texture texcoord="CHANNEL1" texture="uvchecker512_png-sampler"/> </diffuse>まあ、「テクスチャ画像がRGBAを持ってるんだからそれをdiffuseとして使えや」ってことだろうけど。
どうやら Wings 3D上のマテリアル設定で指定された diffuse 値は、エクスポートした .dae 内に含めてくれない模様。どこにもそれらしい情報が無い…。
ただ、テクスチャを貼らない場合は blender と同様に出力してくれる模様。
対処としては…。colorタグの有無を調べて、もし無ければ、diffuse を RGBA = 1.0, 1.0, 1.0, 1.0 にでもしておく、みたいな感じだろうか。
◎ 座標系で悩む。 :
座標系の扱いも、ちと悩む。
blender がエクスポートした座標値やベクトルを DXRuby (DirectX) から使う場合、z と y を交換すればいいのかな…。Wings 3D の場合は、追加でz値の反転も必要になる、のかな。DirectX は、前が -Z らしいので。
更に、OpenGL から使う場合、DXRuby で扱う座標値やベクトルとは、zの向きを逆にしないと…。OpenGL は、前が +Z なので。
- blender は、右が +X、上が +Z、前が -Y。.dae には「Z_UP」の記述が入る。
- Wings 3D は、右が +X、上が +Y、前が +Z。.dae には「Y_UP」の記述が入る。
+Z +Y | +Y | | / | | / | |/ | +------ +X +------ +X / / / +Z blender Wings 3Dまあ、これは blender が変わっていて、Wings 3D のほうが素直なのだけど。
blender がエクスポートした座標値やベクトルを DXRuby (DirectX) から使う場合、z と y を交換すればいいのかな…。Wings 3D の場合は、追加でz値の反転も必要になる、のかな。DirectX は、前が -Z らしいので。
更に、OpenGL から使う場合、DXRuby で扱う座標値やベクトルとは、zの向きを逆にしないと…。OpenGL は、前が +Z なので。
+Y +Y | +Z | | / | | / | |/ | +------ +X +------ +X / / / +Z DirectX OpenGL
◎ 三角形化してくれない。 :
blender は、daeエクスポート時のオプション項目に「三角形化」があるのだけど、Wings 3D のエクスポータには無い。故に、Wings 3D では、元々のモデルデータを「テッセレート」→「三角ポリゴン化」してからエクスポートしないといけない。
元のモデルデータを三角ポリゴンだらけに変換してしまうと、後から修正するのが面倒な状態に…。一々別名保存してバックアップを取ってから作業することになるのだろうか。
元のモデルデータを三角ポリゴンだらけに変換してしまうと、後から修正するのが面倒な状態に…。一々別名保存してバックアップを取ってから作業することになるのだろうか。
◎ すべてがスムーズになる。 :
Wings 3D上の、ハードエッジ、ソフトエッジの指定が、エクスポートした .dae には反映されてないことに気づいた。滑らかに見えるように自動スムージングをかけると、全てのポリゴンがスムージング表示になってしまう。全部フラットにするか、全部スムーズにするか、二択なのか…。
◎ ちともったいない。 :
なんとなくだけど、Wings 3D ってエクスポータが癌になってる気がしないでもない。かなり機能豊富なモデリングソフトなのに、エクスポータがバグってたり仕様が足りてなくて、他のソフトと連携しづらい点が痛いというか、実にもったいない。
いっそ Wings 3D ファイル形式がテキスト形式だったら、まだコンバータを作ってどうにか、等もあったのかもしれんけど、どうやらバイナリファイルっぽいし…。しかも Wings 3D は Erlang で書かれてるあたりが…。
なんだか世界が閉じてる印象を受けるソフトだなと。オープンソースなのに、変な話だけど。
いっそ Wings 3D ファイル形式がテキスト形式だったら、まだコンバータを作ってどうにか、等もあったのかもしれんけど、どうやらバイナリファイルっぽいし…。しかも Wings 3D は Erlang で書かれてるあたりが…。
なんだか世界が閉じてる印象を受けるソフトだなと。オープンソースなのに、変な話だけど。
[ ツッコむ ]
以上です。