■ [AR][作業履歴]PTAMテスト(その1)
PTAMを使ってWebカメラの映像にCGをリアルタイムで合成してみた。以下、実際に使ってみての感想。
ARToolKitとの比較
「マーカーが不要」というのが一番大きな違い。
マーカーを意識せずに自由にカメラが動かせるのはとても楽しい。
PTAMがはじめて公開されたときの動画を見て以来の一番の疑問だった「基準平面をどうやって決めているのか」という点に関しては、カメラをキャリブレーションするときに見つけた特徴点の中から最も地面らしく見える部分を探して、そこに適当な大きさの平面を自動的に生成する仕組みになっているようだ。カメラを机に向けた状態でPTAMを初期化すると、机の面にあわせた基準平面が生成される。
PTAMはとてもすごい技術ではあるものの、現時点ではまだ「どんなにカメラを動かしても勝手に追随してくれる魔法のように素晴らしい技術」というものではない感じ。
この辺はPCの性能にもよるところかもしれないけれど、カメラをゆっくりと動かしながら少しづつ周りの特徴点を増やして認識範囲を広げていくような使い方になる。感覚的にはARToolKitと同様に、誤認識を起こさないようにカメラを動かすためにちょっとしたコツのようなものが必要なる感じ。
取得できた特徴点が少なすぎたり、カメラを激しく動かしすぎたりすると基準平面がおかしくなってしまうことがあり、特に何もない平らな机の上などではうまく特徴点を拾うことができずに誤認識を起こしやすい。
上記の動画でもディスプレイの下に金属部の光るペンがおいてあったり、脇に時計を置いてたりするのはカメラを水平に向けたときに少しでも特徴点を取得しやすくして、誤作動を減らすためだったりする。
とはいえ認識精度は非常に高く、あらかじめカメラで動かしたい範囲を見回して周囲の特徴点を登録しておけば、上記動画よりもずっと速い速度でカメラを動かしても追随してくれるし、一度カメラ位置を見失っても見覚えのある場所を見せることでたいてい復帰してくれたりもする。
また、カメラに残像があってもちゃんと特徴点を追跡してくれる。ARToolKitだとちょっとカメラを大きく動かしすぎて画像がぶれるとすぐにマーカーを見失ってしまったりしていたので、安物の残像の多いカメラを使っている分にはとてもありがたい。
ARToolKitと比較したときのデメリットとして、「マーカーが不要」であるがために望んだ位置にモデルを表示したいときには起動のたびに毎回手作業による微調整が必要になってしまう、という点がある。
起動直後のキャリブレーションの段階で毎回なるべく同じ位置から同じようにカメラを動かすことである程度までは似たような基準平面を生成することはできるものの、狙った位置に平面が出せわけではないし、スケールを含めて完全に一致させることはとても困難。
最終的にはOpenCVなどで自前の基準マーカーを取得する方法と組み合わせるのがよさそうか。このような方式であれば、開始時に一度座標系を確定させるだけでARToolKitのようにマーカーをカメラに収め続ける必要はないため、扱いやすいはず。
カメラ映像とCGの合成について
CG部分の描画にはディファードレンダリング+SSAOを使用。ある程度は実写と混ぜたときにも違和感のないように調整してみたつもりではあるけれど、まだ時々浮いて見えるのが気になる部分もある。
現状ではライトのパラメータをシェーダーやソースに直書きしてる状態のため、光源の方向や強さの微調整にそれなりに手間がかかってしまった。
最初は夜の室内照明にあわせてライトのパラメータを調整していたのだけど、翌日の昼に改めて動画を撮り直そうとしたらまったく明るさが合わず、毛布を遮光カーテン代わりに窓に目張りしたり蛍光灯をビニールで覆ったりなどで似たライト環境を再現するのにムダに苦労してしまった。
明るさが足りないとカメラの残像が激しくなってしまうし、逆に明るすぎると反射で画面が見にくくなって特徴点の誤認識も増える。昼間の太陽の光がいかに強いものなのかを思い知らされた感じ。
また、調整時に環境マップの写りこみの強さやスペキュラの反射などを背景から浮かない程度に抑え目にしていたら、アップロード用に動画をエンコードした時点で反射のほとんどが真っ黒に潰れて見えなくなってしまったので、あえてちょっと浮いて見えるくらいに強めに再調整する必要があった。
逆に動画のエンコードのおかげで誤魔化せている部分もいろいろあったりするので、実写との合成にはまだまだ試行錯誤が必要そう。