2023/7/20(木)

VRChat的なものの開発を進めた。今日はOpenXR対応を進める気でいたが、シェーダへ各種データを渡す処理の実装が進んだ。Vulkanコア部と描画処理部でどういった感じでデータをやり取りするかを悩んでいたが、最終的に描画データとしてモデルの全データをバッファに整えて描画処理に渡して、そこから何をどう取捨選択するかは描画処理部の責任という形になった。描画処理部が何を必要とするかはVulkanコア部の関知するところではないし、だったら全部渡してしまえというのが妥当だろう。ただしバッファに整理することを描画処理の中で考えたくはないから、そこはコア部の責任とした。

こうした実装が整ったことによって、描画処理部で色々実験するのが楽になった。最終的にスキン変形の実装が完全に上手くいった。いえい!

公式チュートリアルの「The joint matrices」の項目が長らくちゃんと理解できていなかったのだが、実装を試行錯誤した結果分かった。全然難しくなかった。

https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_020_Skins.md#the-joint-matrices

各頂点にかけるスキン変形行列の算出は、単純にその頂点が関わる最大4つのジョイントのジョイント行列の重み付き平均である。これは何も難しくない。ただ、このジョイント行列の算出が分かっていなかった。

ジョイント行列はこのように計算される。各ジョイントごとにinverseBindMatrixというのがglTFの仕様として与えられるので、まずそれをかける。そこにさらに、ジョイントの回転行列・移動行列をかける。終わり。要は(ジョイントを表示する3Dモデルとして考えたときのモデル行列)×(inverseBindMatrix)という式だ。これだけだった。

なんか試行錯誤して上手くいかないなと首をひねっていたのだが、これは全く本質的ではないところで、自分がglslにおけるmat4の行・列の扱いを逆と勘違いしていたらしい。転置をとったら全てが上手くいった。


久しぶりに4.2kmのジョギングをした。未だに股関節の痛みが取れないので、関節に負担をかけないようになるべく着地の衝撃を膝とつま先の曲げで吸収する走り方をした。関節を慮って走るとなんか自然とおじいちゃんみたいな走り方になるらしい。

今まではある程度速度も目指して走っていたのだが、体の安全第一でひょこひょこ走った。安全第一とはいっても別に極端に遅い走りをしていたわけではないと思うのだが、この走り方をしていたら4.2kmを走り切っても全く息が上がっていなかった。じっとりとした汗はかいていたがまだまだ全然走れそうなコンディションで、とても気分が良かった。これは良いことを発見したかもしれない。怪我の功名というやつか。


チェンソーマンの8巻を読み進めた。何だこれ!?何だこれ!?やば!!!!!何が起こってるの!!!!!みたいになってた。以下ネタバレ注意。

「ドイツのサンタクロース」と呼ばれていたあのおじいちゃんはなんか目的がある独立の存在だとずっと思っていたのだが、急に自分も人形になっててびびった。元々そうだったのか??それとも何か罠にかけられたのか??「師匠」は何者なんだ???

地獄も存在だけ匂わせられてそれで終わりということはないだろうからそのうち舞台になるとは思っていたが、こんなに早く来るとは思わなかった。何が起こるかわからんすぎる。

Categories: