一日かけてモデルのスキン変形の方法を勉強した。
最終的にKhronos Group公式のglTFチュートリアルとSascha Willems氏による実装を見るのが一番ためになった。
https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_020_Skins.md
https://github.com/SaschaWillems/Vulkan-glTF-PBR/blob/master/data/shaders/pbr.vert#L40-L47
全体的な理解にはかなり苦労したが、結局のところ大雑把にまとめれば
- inverseBindMatrixでモデル空間における座標をボーンローカル座標空間の座標に直す
- その中で回転なり移動なり
- ボーンローカル座標空間上の座標を親ボーンローカル座標空間に直す
- 2-3を再帰的に(子から親の順番で)繰り返し最終的にモデル空間における座標にする
という感じらしい。3.の工程の仕組みがまだ今一つ理解できないが、大枠は理解できた。
明日以降実装しようかと思っているが、実装できたとしてデモとして分かりやすいアプリケーションに落とし込むアイデアがあまりない。どうしよう。
今日解いた競プロの問題。
ABC144-A: f(x)=Nとしてf(2x)の値の最大化を考えると、x→2xのところで繰り上がりは無いほうが有利だなという話になる。よってxの各桁の数字は4以下となる。で、各桁4以下でさえあればf(2x)は2Nであってどう頑張ってもこれ以上にはならない。ということでM=2N。
次のxを最小化するところだが、この時点でそもそも各桁4桁以下という縛りがある。桁数は少なければ少ないほど良いはずなので、各桁の数字は大きいほど良い。ということで出来るだけ4とし、1,2,3が余ったら頭に付ける。同じ桁数の数字なら当然上の桁が小さいほうが小さくなる。
ABC205-Eの解説を読んだ。自力でなんか二項係数の削り落としみたいな感じの式は出せたが、これをどう高速に解くのか分からないので解説を読んだところ、カタラン数なる数列があるらしかった。それなりに応用範囲の広い話らしい。
今日摂取したコンテンツ。
https://note.com/anno_kgrzk/n/n0e1d7abbf03b
面白い取り組みだと思った。VR空間に国境の壁はなくても言語の壁はあるので、そこに人工言語を持ってこようという発想はなかった。
Categories: 未分類