拡張現実は糞重い
まぁ、Cで書けや。と言う話にはになりますが
個人的には、HTML5とOpenGL標準が使えるようになれば
書く気になるけど、ネイティブなコーディングはしたくねぇ、と
FlashかJavaで書くと、環境依存度は下がりますが何分スピードの面で不利
回避方法はありますが、環境依存度が高くなるので却下。。
四角いマークからオブジェクトを投影するデモを見て、さわって
これを家具でやったら便利やがな。と思っていましたら
IKEAが始めました。。。。
3Dだと重い問題を、中々面白いといいますか
非常に簡単な方法で回避していたので
作成の容易さからも、これは後々似たものが出てくるのではないかと
具体的な方法は、通常はマークを中心点として3Dを表示するのですが
ここで、その角度の画像を投影するわけです。
流としては、
1:撮影
画像自体は、Googleのストリートビューを作る時の逆で
カメラを中心に1周分撮るのではなく。
撮影対象をカメラの前に置き、一定角度ずつ回しながら撮影する。
2:制御
ストリートビューの場合は、撮影した画像を球体に投影し
カメラの座標を、マウス移動量を係数化して適時切り替えて行きますが
IKEA板?はカメラは固定し、マウスの移動量を係数化し
仮に写真枚数が60枚であった場合、係数の最大値を60とし
算出された係数の画像をカメラの前に表示していく
※車のサイトで商品の紹介なんかで使われてますね、アパレル系があまりないのが残念・・。
3:実際のIKEAモドキ
某ARモジュールを使うと分かるのですが
カメラで捉えたマークを中心とした、X,Y,Zの座標が普通に取得できます。
この座標を元に、自分が今いるラジアン角を求め
そこから、2のマウス係数と同じものを算出し
対象の画像を、オブジェクトとして、渡す。
実際に作ると分かりますが、2が出来ていれば
ちょっとイジるだけで直ぐできます。
後、Nvidiaが車のホイールをこの方式でドレスアップチェックする
デモを行っていましたが、
さすがNvidiaライトをかざすと、ARで投影されたホイールも光っていました。
CUDAのデモだったようですが、オートバックスとかCM連呼中のマルゼンとか
物凄く食いつきそうですね。。
この方式のARの場合、最大の問題となるのが
対象のマークが認識出来る間しかオブジェクトの投影が行えない事です。
この問題の解消として、考えてみたのが
1:
実装可能な条件は限られますが
2006年に発表された3Dスキャナ
これは、空間上の位置情報を取得するのに
黒い丸を初めに認識し、その後レーザーで照らされたオブジェクトの距離を計測しています。
これを応用すると、黒丸で位置を認識し
その後、所定の位置でマークを認識させると
そのマークを認識した、空間座標が算出できます。
こうすると一度認識させたマークは再認識不要で、特定の座標に常に表示させることが出来ます。
ただ、問題としてカメラが認識用の黒丸で座標を検出出来る範囲内しか移動が出来ません。
使いどころとしては、車のホイールとかエアロパーツなんかの装着シミュレーションに結構使えるかと
反対から見ても、エアロやホイールの裏面も投影できるので
レイトレーシング的な事は難しくとも、より現実に近いデモが可能では無いかと。
2:
高等テクニックになりますが
Huginこのソフトは、パノラマ写真を作るソフトなんですが
こいつをライブラリとして、使うか
IntelのOpenCV等を使いますと、画像の特徴点検出が行えます。
これを使うと、一般に良くあるものですと、顔検出とかスマイルシャッター何かがあるわけですが
こいつで、空間の特徴点を何点か記録し、カメラが動いた際に、特徴点を座標として
空間座標を得ることが出来ます。
この技術を応用した、3Dスキャナも出てますので、そのうち近いものを
どこかが出してくるでしょう。
座標が取得できれば後は、他と同じで、
どの位置で、マークを認識したのかを記録すれば
後はカメラの移動に合わせて、くるくる回すだけ
セカイカメラもバージョンが2を数え
何かと発展傾向のAR系技術
Google的な、Webでマルチに動く環境をもっとうにしている私には
まだ、早い技術な感じはありますが
JavascriptとWebkitで出来ないことも無いわけですから
根性でやってみるのも面白いかもしれません・・・。根性で。。