自前のボーン(スキニング)アニメーション
ディズニー研究所? の論文
Binh Huy Le, Jessica K.Hodgins. Real-time Skeletal Skinning with Optimized Centers of Rotation. Disney Research.
を見つけて、試したくなりUnityで組んでみた。
一般的なソフトウェアで使われるLBS(Linear Blend Skinning)はボーンの変換行列にウェイトを掛けて頂点の位置を決定する手法。数学的にも簡単でハードウェア上に回路として実現できるので高速に実行できる。欠点は関節付近の変形が著しいのと、ウェイトを付ける作業がとんでもなく大変だということ。怠るとモデルの肩がぶっ壊れたりする。ただ骨格を上手く作ったり職人レベルのウェイト付けで回避はできる。
論文の主法は、Optimized Centers of Rotationを事前計算することで、LBSと同程度の計算量で破綻の少ない変形を可能にするというもの。ウェイトに「近さ」を導入して、その「近さ」で重み付けられたLBSとのズレが最小になるように変形する。……と書いても良く分からないと思うので詳しくは論文を見てね。
で、Unityでの実装なんだけど、LBSはそれなりにできた(と思う)。しかしUnity上での行列やクォータニオンの扱い方がいまいちよく分からないのと、Unityが行列演算に滅法弱いということが判明したので、OCoRの方は正直ちゃんと出来ているのかすら良く分からない。
紫色の四角形がボーン。二番目と三番目の角度がパラメータで、上から(0, 0)(初期状態), (45, 0), (45, 45), (90, 45), (90, 90)(度)となっている。白丸がLBSによる頂点、青丸がOCoRによる頂点。
頂点が少ないからか、やり方が間違っているのか、OCoRでの位置がLBSと殆ど変わらない。わずかにゆとりがある程度だろうか。うーむ、やはりちゃんとしたモデルでテストするべきなのかもしれない。
ところで、新しいゲームエンジンXenkoが4月にリリースされるみたい。Unityと同じくC#で開発できる。APIマニュアル見る限り、行列演算が充実してて便利そう。ちゃんと組むならこっちでやりたいかも。
それまでにクォータニオンも勉強しなきゃだなぁ。
29.線型無関連
まだ公開していないPDFにおいて、前回の記事の最後に、有限次ガロア拡大における「縦」の関係について加筆しました。ブログ上では更新するつもりはないので簡単に述べておくと、有限次ガロア拡大の中間体に対し、がガロア拡大となる同値条件()と、そのとき成り立つ群の完全系列
の証明です。
で、今回は「横」の関係を調べてみようという話になります。
線型無関連
一般的な拡大の状況を考える。を体の拡大、をその中間体とする。がに対して線型無関連(linearly disjoint)とは、上一次独立なが、において上一次独立であることをいう。*1
命題 以下は同値である。
- はに対して線型無関連。
- はに対して線型無関連。
(証明)上から下を示せば十分である。が上一次独立とし、によりがで成り立つとする。と仮定すれば、並び替えてが一次独立で、と表せる。
だが、仮定よりは上一次独立なのでを得る。ところがも上一次独立だからを得る。これは矛盾する。
以上によりとは上線型無関連と言うこともできる。
さて、はより作られる内の部分代数であるが、実はもう一つ代数を考えることができる。それは既に述べたとのテンソル積である。一般にテンソル積の普遍性より、-代数準同型(-代数準同型とも見なせる。)を定めることが出来る。特にこれは全射だが、実は線型無関連なら単射となる。実際とすれば、先ほどの証明と同様にとしてよく、
よりで写せば
となるが、が上一次独立であることからが従う。故にとなる。
では逆にが単射のとき、は線型無関連となるだろうか。実は正しいのだが、それを証明するためにはテンソル積を具体的に見る必要がある。
体上のテンソル積
まず次の補題を示しておく。
補題 を環、を-加群とする。のとき、ある有限生成な部分加群が存在して、がにおいて成り立つ。
(証明)加群のテンソル積の具体的な構成を思い出してみよう。は、を添え字とする自由加群を、ある部分加群で割ることで作ることができた。だから、これはの元である。従っての生成系の有限和として書ける。つまり
と表せる。ここで現れた元を用いてと置けばよい。
この補題により、テンソル積の議論は本質的に有限生成な状況に落とし込めることが分かる。
命題 を体、を上のベクトル空間とし、基底をとする。このときはの一次独立な生成系(つまりはベクトル空間でありその基底)をなす。
(証明)として、双線型写像を定める。(ただしはの基底。)普遍性よりを得るが、これは明らかに全射である。また
よりが従うので単射であることも分かる。
定理 を体の拡大、をその中間体とする。以下は同値である。
- とは線型無関連である。
- は同型である。
(証明)上の議論よりが単射なら線型無関連であることを示せば良い。は上一次独立とする。もし上一次独立でないなら、となる非自明なが存在する。このときだから、単射性よりを得る。補題より、有限生成な部分加群が取れて、においてが成り立つ。はベクトル空間なので、特にの基底が取れる。今と表せるとすると、
となる。ところでは上一次独立なので部分空間を張り、命題よりはその基底となる。故にが従う。つまりとなり矛盾する。
加群のテンソルは一見良く分からない対象かもしれないが、体をモデルとすることで具体的な形を見ることができる。例えばが代数拡大なら、の元も代数的である。つまり可逆であるからは体を為す。特にとが線型無関連でもあればは体を為すことが分かる。
一般に、とが上線型無関連ならが成り立つ。実際に対しては上一次独立となるから、線型無関連より上も一次独立となる。しかしならとなり矛盾する。逆は一考の価値があるがここではやらない。
所感
ちょっと量的に少ないので後で加筆するかもしれないし、しないかもしれない。
*1:の代わりにでも構わない。重要なのはの方。
PDFの公開場所を変更しました
Dropboxに変えてみた。新しいのも作ってあるけど取りあえず古いので様子見。