RICOH THETAやinsta360といった 上下左右360度一気に撮影できる
全天球カメラというのがあります
Blenderのシェーダーを利用して撮影空間をラフに再現する方法を解説したいと思います
オブジェクト基準の座標と座標変換
360度カメラの撮影データは正距円座標の画像データとして取得できます
また、Blenderシェーダーには 特定のオブジェクトを基準にした座標を取得する機能があります
つまり うまく撮影座標とオブジェクトの位置を計算できれば 撮影空間を再現できます
空間上の任意の座標x,y,zを正距円筒図法[u,v]に変換する式は
$u = atan(x/y)$
$v = atan(z/sqrt(x^2 + y^2))$
となり
これをBlenderのシェーダーのノードで再現するとこうなります
u,v それぞれが360度や180度をラジアン変換で除算されているのは
シェーダーでの角度の単位がラジアンで テクスチャの座標が0.0~1.0の値で表されるため
Y座標で0.5を引いているのはカメラの位置が画像の中心を表すようにするオフセットです
キャプチャは円筒の面を反転した状態で裏面を非表示状態にしています
モデリング
撮影条件の疑似的な再現の場合には 円筒や球体への投影だけでいいかもしれませんが
シェーディング状態のままモデルの編集ができるBlenderの利点を利用した
もう少し細かいモデルの作成方法を例示したいと思います
まずは さきほど基準に設定したEmptyオブジェクトを撮影時のカメラの高さに合わせて
地面位置に合わせた面を作成してみました
大まかな床面の形は合ってそうに見えますね
鉛直方向の板ポリゴンを床との境目に作成すれば壁が作れます。
このように 撮影地の既知のデータを基準に未測定だったものも含めた空間の再現ができます
冒頭の動画作成時は壁は間取り図でも既知だったので壁面を配置して
さらに細かいディテールは壁面に辺を追加した上で押し出しといった方法で作っています
活用例
今回の例は以前の引越しの検討先で 家具を置いてみたらどうなるのかを検証に使った時のものです
複数のカメラの結果をミックスして ここまで例示したものよりも広い範囲を2時間程度で作れました
BlenderにはVRヘッドセットを使ってビューをVR表示するアドオンもあるので
この時はVR空間で家具の収まり具合を確認しました
また、この方法でビル街を撮影して地上からの見え方を再現するといったこともやりました
地道な手段ではありますが応用の効く方法ではないかなと思います。
尚、360度カメラの撮影像も 光学的特性から実際には正確な円筒座標ではありませんので
校正データを作成して業務に使用しています
校正データの作成方法や使用法の概要も以前記事にしましたので参考にしてください
https://qiita.com/yukimituki11/items/c357b40021ce456d8a36
何かの参考になれば幸いです