java3dでMetasequoiaのモデル(MQO)をロードする

java3d 1.5が出たし、そろそろ使い物になるかなと触ってみた。
モデルつくるのが大変なので、まずはmqoをロードできるか挑戦。

java3dとmqoでググるとlg3d関係の人が2005年頃に頑張ってたっぽい
でも、まだ未公開みたい。

レンダラーまで作ったスゴイ人(Caffiさん)発見
でも、java3dのシーングラフとしては読み込めないっぽい。

しょうがないので、ちょっと作ってみるか。と言うのが動機。

私ももとがしさんのグラドリエル王女使わせてもらいます。
mqoview01.jpg


中略で、さくっとmqoローダ作ってみた。
参考資料はMetasequoia ファイルフォーマット。とCaffi’s Diaryのエントリ。
ソースはこちら mqoview20070717.zip

mqoview02.jpg

問題は透過ビットマップ。
以下のコードで透過を有効にすると、ZOrderがぐちゃぐちゃになる。

tAppearance.setTransparencyAttributes(new TransparencyAttributes(TransparencyAttributes.BLENDED, 1.0f - tColor.z));

mqoview03.jpg
mqoview04.jpg

こんな感じで剣の刃がお尻より手前に描画されたり。
java3dのバグっぽいんだけど。僕の環境だけかなぁ。

そして、テクスチャ貼った面に陰が落ちないorz
ロード方法がおかしいのかなぁ・・・。

Google先生に聞いてみたところ
こんなML発見。2001年ですか。

http://www.mail-archive.com/java3d-interest@java.sun.com/msg13493.html

ふむふむ。View.setDepthBufferFreezeTransparent()で”screw up the Z-buffer”機能を無効化しろとな。

this.mUniverse.getViewer().getView().setDepthBufferFreezeTransparent(false);

mqoview05.jpg

直ったっぽいが、今度は額に穴が空いてしまった。
mqoview06.jpg
下から覗いても穴がないところを見ると、透過ビットマップを貼った面に隠れた面がカリングされちゃってる?
mqoview07.jpg

MLにあるdepth-sorted transparencyが気になるので試してみる。

this.mUniverse.getViewer().getView().setTransparencySortingPolicy(View.TRANSPARENCY_SORT_GEOMETRY);

としてみたものの効果無し。
別のMLではTRANSPARENCY_SORT_GEOMETRYがバウンディングボックスに依存していると言う情報が。
mqoからロードしたシーングラフはmqoのObjectチャンクとShape3Dを1:1対応させているので、バウンディングボックスもひとつだけ。効果は期待できないか。トホホ。

追記

バウンディングボックス増やせば良いなら、Objectチャンク増やせばいいやん。ということで、mqoの方を弄って対処してみた。
前髪と王冠を別オブジェクトにすると・・・。
mqoview08.jpg
うん。うまく透過してる。

コメントをどうぞ


ホーム | RSS | 採用情報 | 会社情報