wonderflで立体投影にチャレンジしてみた。
こんにちは、kijimaです。最近は映画にカメラ・テレビと、やたら3D表現がキテますね。
ところでみなさん、"アナグリフ方式"と呼ばれる立体写真をご存じですか?
アナグリフ、と聞いてピンと来ない方も、下のような赤や青色がかった写真をご覧になったことがあると思います。
これはギターのヘッドを撮影した写真二枚を合成したもの。
ちなみに、用意する写真二枚はまったく同じ写真二枚ではうまくいきません。
人間の目で見た景色を擬似的に再現するために、左目と右目のあいだ分20cmくらい横にずらした位置で撮影した写真二枚が必要です。
これは人間がモノを見るとき、左右の目の位置の差によって遠近差を認識しているためで、片目だけでは距離感がつかめないことからもわかるかと思います。
上の写真を、赤と青のセロファンが貼られた通称"3Dメガネ"を通して見てみると、あら不思議、ギターのヘッドが立体的に飛び出して見えちゃいます。
この現象をFlashで再現できるのかな?と思ったので、WEBカメラを二台接続してwonderflで試してみました。
Mac環境ではUSBカメラ二台以上接続は不可能?
MacbookやiMacには、本体にiSightが内蔵されているため、外部USBカメラを接続すれば二台分のカメラが接続されたことになります。しかし、どうもこの方法ではうまくいきません。。
最近のUSBカメラはUVC(USB Video Class)のおかげで、ドライバをインストールしなくてもカメラが認識されて接続できます。しかし、FlashPlayer上で複数のカメラを同時に認識したい場合にこのUVCが原因で同時接続できない場合があるようです。
Mac環境ではiSightもUVCで認識される?ようで、USBカメラを接続するとiSightを上書きしてしまい、後に接続したUSBカメラ一台分しか認識できていないようなのです。
Windows環境にカメラのドライバをインストールした後にFlashPlayerのカメラ選択画面を表示してみると、USB Video Class(文字化けしてますが...)のほかにもうひとつのデバイスが選択できました。(Logicool Webcam 500)
windows環境では、複数USBカメラの認識、表示ができました。
ところが、同じカメラを接続した状態でMac側のFlashPlayerで同じ画面を見てみると、、
カメラのドライバをインストールしていない(そもそもMac版ドライバが配布されていない)ため、USBカメラを認識させるには「USB Video Class Video」を選択するしかありません。
Mac環境ではドライバをインストールする必要がないという利点が逆にアダとなってしまっているのです。
Windows環境では、同時接続するところまではいけたので、下の画像のような感じまではいきましたが、アナグリフ方式に合った画像調整をAS上で再現できておらず、まだまだ調整が必要そうです。(顔出し失礼)
赤青メガネで見てみましたが、飛び出してくる気配はありませんでした(笑) というか、WEBカメラを使っている時点で奥行きがない映像になってしまうので、やはり難しいんでしょうか。。
まとめ
ここまでやってみて感じたことは、
・レンズ特性が近いWEBカメラ二台が必須。
・当然、見る側は赤青メガネが必要。
・カメラ二台の同時接続時、PCにかかる処理負荷はとんでもないことになるよ。
ということ。
一つ目は、使用するカメラによってレンズ特性が違うため、その補正が必要だという点。下のwonderflのコード内でもadjustPosition()内でスケールや位置の補正をしていますが、そもそも補正が必要な時点で、立体写真のように見せることは不可能に近いと言えます。
そうなると、理想はまったく同じカメラ二台を使うことですが、そうすると同一ドライバを使用するため、一台しか認識しないのでは?という懸念があります。
まったく同じカメラのうち一台はUVCを使い、もう一台はカメラのドライバを使って、二台別々のものとしてFlashPlayer側で認識できるかもしれませんが、今回予算の都合で(笑)そこまでは試せませんでした。
二つ目は、そもそも見るためのハードルが高いということ。世の中に、赤青メガネを常に持ち歩いている人が果たして何人いるでしょうか? 実際、僕も今回の実験をするために立体写真をテーマにしたサイトから注文しました。
最後はパフォーマンスの問題。WEBカメラを二台同時に接続となると、PCに相当の処理負荷がかかってくるようで、ファンが勢いよく回り出します。
とまぁ、いろいろ難しいことだらけのようで、PC一台とWEBカメラ二台、それとFlash環境だけでは立体写真の再現は相当難しいことがわかりました。
最後に、今回の実験に使ったwonderflをご紹介。複数のカメラを接続するwonderflコードをforkさせていただきました。
単に複数のカメラを同時接続するときの注意点に関するレポートとなってしまいましたが、Flashに限らず、3D表現については今後もいろいろと試していきます!