■ [AR][PTAM][作業履歴]電脳のぞき窓を作ってみた
作ってみた、といいつつもこの前購入した8インチの外付け液晶モニタの後ろにWebカメラをくっつけてみただけなので、物理的にはほとんど何もしてなかったりする。
これまで作ったARのプログラムでは映像が表示されているモニタとカメラの位置が違うためにあまり没入感は感じられなかったけれど、これなら手に持ったモニタを動かすだけでそれにあわせて映像も動いてくれるので、直感的でわかりやすい。窓の向こう側にそのまま合成された3D物体と背景が見えるのは予想以上に楽しい。
最初のうちは目視の視野角と液晶内の映像の違いのためか、向こうが透けて見える「のぞき窓」というよりは、ビデオカメラでの撮影時に液晶を覗き込んでるように感じてしまうこともあるけれど、しばらく見ているうちに慣れてくる。もう少し視野角の広いカメラを使えばさらに雰囲気も変わるかも。
今回の動画では、物理シミュレーションにBulletを導入してみた。
物体が物理法則にしたがってうまく背景と干渉して転がったり跳ね返ったりしてくれると、カメラの没入感とあいまって実際には存在しないはずのものが、そこにちゃんとあるように感じられるのが面白い。現状ではカメラのフレームレートが足りず、3D映像も少し遅れてついてきてしまっているので、そのへんを改善できればさらに気持ちよくなりそう。なにかしら工夫してみたいところ。
Bulletの導入は比較的簡単で、同じフリーの物理エンジンのODEと比べるとしっかりとライブラリがくみ上げられているような印象を受けた。動作もけっこう安定していて使いやすい。まだ基本的な使い方しか理解できてないので、いろいろ凝ったことをやりはじめるとそれなりに時間がかかりそうかも。
背景との合成は、実際に置かれている箱のサイズと位置を計測して、それにあわせて3D空間に同じ形をした物体を配置している。
リアルに置かれている物体と3D空間内の背景との位置あわせはかなりシビアで、特定の角度で合って見えるように調整しても、カメラを動かしたときにずれが発生してしまう。上記の動画でもときどき背景の箱に遮蔽されているはずの向こう側が見えてしまったりなど、おかしな部分が目立ってしまう場面がある。
これがPTAMのカメラ位置の検出精度の限界なのか、それとも単に物体のスケールや位置を調整しきれていないだけなのかはまだ検証不足でわかってないけれど、とりあえず3D空間の物体が手前にあるリアル背景物に隠れるようなシチュエーションはなるべく避けるようにしたほうが無難かも。
さらに画角が広いカメラを使う場合にはカメラのレンズの歪みなどの影響も無視できなくなってくるだろうから、背景と3Dの完全な同期はなかなかに難度が高そう。