Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

Phoenix 静止状態のレンダリング

Androidに表示した画面

colladaファイルからモデル情報を読み取り、その結果をそのまま表示した図

phoenix 1

モデルの権利表記

This model was created by NORBERTO-3D
https://sketchfab.com/3d-models/phoenix-bird-844ba0cf144a413ea92c779f18912042

LICENSE Creative Commons Attribution
https://creativecommons.org/licenses/by/4.0/legalcode

colladaファイルについて

colladaファイルを選んだ理由は

  • バイナリー形式でないので、自分のライブラリで読み込める
  • animationをサポートしている

という理由からcolladaファイルを読み込んでキャラを動かせるようになることを目標に取り組んできた。
glTF 2.0でも同じことができるはずなので、ひと段落すれば取り組んでみてもよいかも。

ただ、xmlで書かれているcollada形式の3Dモデルを読み込んでから、Vulkan APIを用いてのレンダリングはとてもやることが多く、時間がかかりまくっている状況。
colladaファイルを読み取る過程で調べた、各属性の依存関係のようなものはいつかまとめて画像一枚で説明するようなものをブログにアップしたいと思っているが、animationの実装が終われば取り組んでみたい。

animation付きのcolladaファイルについて

3Dモデルはsketchfabというサイトに、絵師様たちがアップロードしてくださっている。
Sketchfab - The best 3D viewer on the web
3Dモデルはfbxの拡張子でアップされることが多いと思うが、fbxはバイナリ形式である。(グラフィクスライブラリ内部では、Autodesk社のSDKを用いてパースすると思われる。それかASCIIファイルに変換するか。)
個人的には、今作成している個人ライブラリにはオープンなフォーマットを使いたかったので、animationまで内包しているcollada形式で読み込みたいのだが、animationを保ったままfbxからcolladaに変換する方法を探すのにとても時間がかかった。(見つけた方法も、たぶんすべての3Dモデルをカバーできているわけではないと思ってる。)
Blenderを用いてfbxファイルをimportし、collada形式でexportすればmesh情報などは正確なのだが、出力されたcolladaファイルをBlenderでimportしてanimationを実行してみると、何故かバグった状態で実行される。
Blenderで読み込めないものを個人製作したエンジンで読み込めるわけがないので、Blender上で正確にanimationを実行できるようなcolladaファイルの作成の仕方を探していた。
結論的には

sketchfabでfbxではなくglTF形式でダウンロードし、BlenderでglTFをcolladaに変換する

方法で実現できた。

ここからanimation用の行列を読み取り、座標変換を繰り返す部分の勉強と実装が待っており、時間がかかると思うが、とりあえず(予想以上に時間がかかったが)正しい情報を持ったモデルが用意できたことには一安心。