本日は昨日に引き続きSMPLモデルを理解するために資料を読み解いていきます。
SMPLモデルの論文の筆者であるMichael BlackさんがYoutubeビデオでSMPLについて解説をしています。
今回はそれを読み解きながらSMPLモデルについての理解を深めています。
〇モーションキャプチャの歴史とSMPL
人類がカメラを発明し、1882年にエティエンヌ・ジュール・マレー(Étienne-Jules Marey)によってクロノフォトグラフィーとして12psの連続した撮影装置を使用した動きの研究が人類初のモーションキャプチャの歴史と言われています。
特徴点にマーカー(発光体)を付けて撮影し動きそのものではなく、その動きが何をしているのかを可視化するようなアプローチをとった心理学者Johanssonが行ったポイントライトの取り組みからモーションキャプチャは関節を主とした体の特徴点を判別し、それを時間軸で連続化することでモーションキャプチャのアプローチは主流となっていました。
これはOpenPoseなどの現時点で有名なモーションキャプチャの仕組みも同様です。
しかしながら実際の人間は関節を露出させているわけではなく、皮膚、または服で覆われています。
このためその人の体格を考慮した体全体をトレースするアプローチも進んでいました。
〇Kinematic Tree
Kinematic Treeは、ロボット工学やコンピュータグラフィックス、モーションキャプチャなどの分野で広く使われる概念で、物体の関節やパーツの動きの関係性を階層的に表現したもので現代のIKなどの考え方の基礎になっています。
これはUnityやBlenderなどのボーン階層の考え方と同じもので、各特徴点がワールド座標系とは別に親子構造を持たせた構造を指します。
つまり2の腕はワールド座標系でのTransform情報を考える必要はなく、1の上腕からの回転角Θのみを考慮すればよいです。
そして1の上腕は0のルートとなる体全体のパーツからの回転角によって求めることができます。
この時、人体の可動域で0→1はxyzの回転角が必要ですが、1→2に関しては1軸(x)のみを考慮しています。
そして2Dデータのカメラからの画角がわかっている場合計算によってこのKinematicModelを2Dデータに合わせることができます。
これが古典的なモーションキャプチャになります。
これは1983年にDavid Hoggが計算によって行った円柱で構成されたモデルを画像に合わせる研究後継と呼ぶことができるアプローチです。
ドイツの学者Karl RohrがTowards Modelとして1994年にCVGIP(Computer Vision, Graphics, and Image Processing=当時のコンピュータビジョンやグラフィックに関する学会)で発表しました。
https://www.sciencedirect.com/science/article/abs/pii/S1049966084710060
〇シンプルな形状のモーションキャプチャからの発展
David Hoggらは円柱で構成されるプリミティブな人型モデルを使用していましたがより複雑な形状に発展させたのはAlex PentlandとBradley Horowitzでした。
〇マルチカメラのモーションキャプチャ
1996年にはD.Gavrilaが博士論文で現代から見るとシンプルですが円柱から見れば複雑なモデルを用いたマーカーレスモーションキャプチャを発表しました。
Gavrilaの発表では体格や性別により様々な体系のモデルを使用しました。
この研究では複数のカメラを使用して人を追跡していました。
この研究が初のマルチ視点からのモーションキャプチャになるようです。
その後Christopher BreglerとJitendra Malikによって1998年に『Tracking Poeple with Twists and Exponential maps』として2Dの動きを3Dに投影する研究が発表されました。
この研究ではタイトル通り『Twists(ねじり)』と『Exponental maps』という2つの概念が導入されました。
Twistは回転と並進の複合的な動き(体のひねり)をねじりとして直線的操作であらわすための概念で、Exponental MapsはTwistの類型的効果を示すための方法です。
https://people.eecs.berkeley.edu/~malik/papers/bregler-malik98.pdf
この概念の登場で3D空間内での物体の動きを大きく次の3つの理由で効率的、直感的に表現できるようになりました。
①効率的な計算 ②より自然な動きのモデリング、③ジンバルロックの回避
ジンバルロックとはある角度にKinematic treeがある場合に回転の自由度が失われてしまう現象を指しています。
3D空間の物体を表現する際にオイラー角(xyz=ヨーローピッチ)を使用した場合に発生する問題がジンバルロックで、例えば飛行機を例に例えると飛行機の針路を決める水平軸(ヨー角)、高さにかかわる=機種を上げ下げする垂直軸(ピッチ角)、そして飛行機自体が回るロー角(ロール角)があります。
ピッチ角が90°…つまりロケットのように真上を機種が向いている場合を考えた場合のヨー、ローをワールド軸で考えてみると、どちらを回転させても飛行機は同じ方向へ回転してしまいます。これは例えばパイロットや自動操縦システムが回転を加えて正しく向きを向けようとしても予期しない方向を向いてしまうことになります。=つまり制御不能になります。
3Dのアニメーションで説明するとキャラクターの関節のねじれやIKなどを使用している場合にある姿勢をとることができないなどの減少をもたらします。
このように3つの回転角のうちある条件において2つが同じ回転結果をもたらすことをジンバルロックと呼びUnityなどでオイラー格ではなくQuaternionが使用されている理由でもあります。
ジンバルロックについては次の記事のGIF画像がわかりやすいです。
Christopher BreglerとJitendra Malikの研究ではこの点で高く評価されています。
1990年代初頭から中旬までのこのころは、現代でも使用されているコンピュータ上での3Dの動きの基礎を築いています。
90年代後半からは機械学習を用いたアプローチが登場します。
次回からは90年代後半から登場した機械学習を用いたアプローチを読み解いていきます。
Youtubeビデオでは数分で説明されている内容ですが、用語の読み解きや口頭でさらっと述べられている人物について調べていると元の論文を見つけることが出来たりなど非常に唯意義な内容になっています。