2023/7/24(月)

モデルのボーン変形関連の処理で深みにはまった。今まで頂点バッファJOINTS_0に記録されてるジョイントのインデックスはglTFにおけるnodeとそのまま対応していると勘違いしていたのだが、これは間違いだった。

正しくは、まずmeshに対して対応するskinがある(これはnodeに記録されている)。そのskinの中にjointという数値配列が入っている。この数値がnodeの添え字に対応している。

分かりやすく疑似コードで書けばこういうことだ。

jointNode = node[mesh.skin.joint[jointIndex]]

モデル全体の構造メタデータ的なものをかなりしっかりシェーダに渡す必要がある。前からやろうとは思っていたので、もう頃合いだろうということで頑張って実装を始めた。

モデル管理クラスにモデルメタデータを持つバッファおよびデスクリプタセットを管理させる方針とし、とりあえずモデルテクスチャの管理をそちらに移譲することに成功した。

実装はまだまだ終わらないが、ちょっと大学の方が忙しいのでここらへんでいったん開発は休止にする。メモ書きとして再開時に何をやるべきかまとめておく。

  • ジョイント情報の受け渡し
  • 多種類のモデルの管理用の仕組み(モデルのバッファ上の位置の整理)
  • 複数枚のテクスチャデータをデスクリプタ配列から2DArrayにまとめる

Categories: