ニコニコ動画で面白いものを見かけたので技術解説。
最初はただのCGかと思いきや…
人の手が台を持ち上げると一緒に持ち上がるじゃありませんか!
京都産業大学の平#重行氏のページで紹介されている
ARToolKit ってやつですね。
仕組み
自分はARToolKitの実際のソースを確認していないので、各種ニュースソースなどから得た情報を加味した上、
こうやればできるだろう、という推測となります。その点、あらかじめご了承ください。
まず、踊っているキャラクタですが、これはCGです。カメラで撮った映像に、リアルタイムでキャラを合成しています。
台となる部分に黒い四角が書いてありますね。これをリアルタイムに検出し、その傾きを算出してポリゴンモデルの
表示位置や向きといったものを決めていると思われます。
このマーカーの種類を複数にすることで複数種類のキャラクタを表示できるようです。
マーカーの検出
画像認識の話題になりますが、画面中で四角い枠をとにかく検出することになります。
どうやらマーカーは白と黒の入れ子の四角形で作られているようです。
まず明るさでフィルタリングして、色の付いている領域を排除してしまうと検出がしやすいでしょう。
白黒の2値画像にしたら、直線の検出を行います。画像からの直線の検出は
ハフ変換
という定型的な手法がありますので、これで直線成分を取得します。
取得した直線からマーカーを拾い出します。この際、枠の線の傾きから2点透視法の逆を考えることで、
ポリゴンモデルの向きを決定することができます。
マーカーの中央手前に前を識別するための黒い四角があるのがわかりますね。
この四角のある辺、つまり画面手前側を前となるように座標を決定しています。
この映像では、キャラクタの影も表示されています。ただ、この影は不自然で、白黒の台の上でのみ表示されている。
このことから、マーカーが白黒の四角で設定されていると思われます。
手で白い部分を持っても大丈夫なことから、内側の黒い四角を基準に
外側の白い四角の大きさを算出しているのではないでしょうか。
画像の合成
映像中のマーカーの画像上の座標はわかりますから、この中央に足もとが来るように座標を調整します。
仮に、奥の辺と手前の辺が平行、そして左右の辺も平行だとします。つまるところ正方形の場合です。
この場合、キャラクタを真上から見下ろす視点となります。
そして、正方形の大きさによって遠近が決まりますね。
奥の辺と手前の辺が平行で左右の辺が平行ではない場合、つまり1点透視法の状態ですが、
この場合は斜め上から俯瞰する視点となります。真正面だとマーカーが見えなくなりますから、
この90度の角度の範囲でしかキャラクタを表示させられません。
(台の裏側にもそれを意味するマーカーを用意しておけば下から煽ることもできると思いますが、
水平視点前後でうまく繋げるのは難しいかな?)
あとは回転への対応が必要ですね。
真面目に計算していませんが、四角形の4つの頂点の内角から
ポリゴンモデルの方向が算出できるはずです。
あとは、ベースとなる画像(リアルタイムにカメラで撮影していると思われる)の上に
キャラを重ねればOK.
この間の処理時間のディレイがモニタ中のキャラクタの動きの遅れになっているととらえればよいでしょう。
こうしたインタラクティブなプログラムはとても面白いですね。
こういうところからプログラムをやってみたいと思う人が増えるとよいのですけども。
投稿日時 : 2008年2月13日 21:00