現在、誰でもVRギャラリーを簡単に作成・シェアできるサービスを開発中です。
https://note.mu/excosarada/n/n3db1afec01e1
このサービスのなかでA-Frameで作った3D空間を3D画像にエクスポートする機能があるのですが、その中で得た知見を共有したいと思います。
※ポエム分多めです。
180度の3D画像の作り方(人間の目まじで単純すぎぃ〜)
3Dに興味がある方ならば立体的に物を見るには視差が必要だということを知っていると思います。人間の2つの目は4〜5cmほど離れており、物体を複数の角度から見ることで距離を認識しているのです。つまり、原理的には4〜5cmほど左右にずれたカメラから見えるビューを合成すれば3D画像が作れることになります。しかし、果たして本当にそんな単純にいくのでしょうか?現実と3D空間は違いますし4〜5cmの位置の差なんてほとんど画像の内容も変わりません。人間には個体差もあります。3D画像の作成にはたぶん色々な困難が待ち受けているはず。私にもそう思っていた時期がありました。
しかし!人間の目まじで単純すぎぃ!個体差もなんのその、だいたい4〜5cmくらい離したところから画像とって合成すれば普通に3Dに見えました!何も難しいことなかったです!逆に驚きです!
360度3D画像は原理的に難しい(諦めた)
開発中のサービスでは180度3D画像のエクスポートに対応します。
しかし、本当は360度(全天球)の3D画像に対応するつもりでいました。
最初は4〜5cmカメラをずらして全天球画像を2枚とって合成すれば実現できるのではないかと考えましたが、これは誤りであることが分かりました。カメラを横にずらしても、それは自分が前方を見ているときの視差を発生するだけで、横方向を見たときには視差はなくなってしまいます。つまり、この方法で単純に画像を合成しても前方だけは3Dで見ることができるが横を見ると視差がなく、さらに左右の目で別々の画像を表示しているのでおかしな見え方になってしまうのです。
しかし世の中には360度の3Dの撮影に対応している機器も存在するため、何らかの処理で実現はできるのだと思いますが、文献が少なく実装は諦めました。おそらく全天球画像の横方向に位置する部分について視差が発生するように画像を合成するアルゴリズムが存在するのではないかと思うのですが。。。
見つけられても処理が複雑でJavaScriptで処理するのが現時的ではない可能性もありますね。
この辺りは引き続き調査・勉強したいと思います。(もし、これを実現する記事や論文を知っている方がいましたら教えていただけると助かります。)