2023/7/21(金)

VRChat的なものの開発を進めた。今日はこまごまとした実装の整理を行った。

drawIndirectが実は不完全だった。デバイス機能multiDrawIndirectを有効化しないと0個か1個のドローコールしか出せないらしい。drawIndirectは本来的にはインスタンス化時のインスタンス数をGPUで制御できるようにするものだったようだ。いや、そんな中途半端なの要る???multiDrawIndirectならGPU制御で別種モデルを大量に描画出来るという大きな利点があるから存在意義が分かるのだが。

ジョイント情報の受け渡しについて、今まで各オブジェクトに固定長のジョイント行列配列を持たせていたのだが、これはジョイントを持たないモデルの表示にも大量にジョイントがあるモデルの表示にも固定長の配列があるということになり無駄が多いので、ここを切り離すことにした。

ジョイント行列配列だけを別にシェーダに渡し、各オブジェクトデータにはジョイント行列配列の何番目を見ればいいかのデータを持たせた。これで無駄が無くなるはず。動作確認もとれた。テクスチャデータとかもこの方式で行きたいと思う。

今までUniformBufferを複数作っていたのだが、こういう時はDynamic Descriptorを使った方が良いようなのでそのようにしてみた。Vulkanとかいうの本当に最適解が分からん。いや、最適解など土台ないのだが。


遅くまで寝ない生活が板についてしまっている。よろしくない。

Categories: