データをColladaで書き出したと時のマテリアルの「色」に関して

#1
データをColladaで書き出したと時のマテリアルの「色」に関して

お世話になります。

データをColladaで書き出した時に、マテリアル内の色の「不透明度」が無視されているっぽい(強制的に100%で書き出される)のは、仕様でしょうか…

????????? 2013-03-11 8.46.57.png

書き出したColladaデータを、自作ソフト内で半透明で表示したい時に、マテリアル内の色の「不透明度」が利用出来るととても有り難いのです。

いつも細かい質問ばかりで申し訳ありませんが…ご検討宜しくお願いいたします!
 

tg_jp

Active member
#2
tek.nishi さん、どうもです。

お尋ねの件、仕様のようですね。

Cheetah3D 自体は、透明度をカラー値で保持しており、.dae ファイルの transparent ノードには設定したカラー値が書き出されていますが、transparency ノードでは、対応する値が無いため、 1.0 の固定で書き出されているようです。

また使用する collada ライブラリの解釈(仕様)にもよると思いますが、OSX のプレビュー.app の場合、 transparent ノードで指定したカラーを透明カラーとして表示するには、transparent ノードに opaque="RGB_ZERO" のアトリビュートオプションを追加してやる必要もあるようです。(無指定の場合、デフォルト値の opaque="A_ZERO" が使われるため、transparent で指定したカラーは無視されるようです)。

.dae で書き出した後に、スクリプト等で強制的に <transparent opaque="RGB_ZERO">...</transparent> に書き換えてやる事は可能だと思いますが、自作アプリとの事なので、ファイルのロード時に強制的に RGB_ZERO で読み込むように工夫すれば、手間がはぶけるかも。

それでは。

tg_jp, Hiroto
 
#3
情報ありがとうございます。

tg_jpさま

さっそくのご解説、ありがとうございます。

私の説明が足りず申し訳なかったのですが、Colladaを読み込むのは「assimp」というオープンソースなライブラリを使っています。

なのでそちらの方にも掛け合ってみたいと思います!

毎度ながら、こういったデータの解釈に関して書き出しと読み込みが別々実装の場合、なかなか思った通りの結果を得られず悩ましい限りです^^;
 

tg_jp

Active member
#4
tek.nishi さん、どうもです。

でしたら、ライブラリが .dae のマテリアルパラメータをどのように解釈するかによって、最適な方法は変わりますね。入力用の .dae ファイルを少し調整して使えるようなら、Cheetah3D で書き出し後に、外部のスクリプト等で整形してやればいいかと思います。

ちょっとコードを見た所では、 transparency ノードの値を 0 にしてやれば、透明が有効になるようですね…(ColladaLoader.cpp? L.1236..)

Cheetah3D のスクリプトを使えば、書き出し->整形の自動化も可能です。

それでは、

tg_jp, Hiroto.
 
#5
挑戦してみます!

tg_jpさま

わざわざassimpのコードまで読んで頂き、恐縮です。本当にありがとうございます!
さっそく挑戦してみたいと思います。
 
Top