自作p.o.d. #1 ドーム映像レンダリング

『戦場の絆』でおなじみの180°ドーム型スクリーンを自作してみます。

実物は特注の魚眼レンズを装着したプロジェクターでドームへ投影しているのですが、そんなレンズ持ってない(中古が出回ってたりはするが)ので普通のプロジェクターでなんとかしてみます。周辺部の光量・情報量・フォーカスなど魚眼にくらべて不利はあるものの、映せないことはないでしょう。

問題は投影する映像です。まず180°の広画角をレンダリングします。Unityでカメラに画角180°を設定するとこうなりました。

Fisheye0

実際に設定できるのは179°まで


期待する魚眼的な見た目にはほど遠い。透視投影変換で光学的な結果を得られるわけではないことがわかります。実物はいったいどうやってるのか調べてみると、たいへん参考になる記事がありました。いわく、画角90°ずつ左右に分けてレンダリングしてくっつける。これを真似てみます。

Fisheye1

わかりやすくするため中央に白い板を置き、さらに隙間を空けた

画角90°のカメラを2つ、90°の開きで設置。いい感じになりました。次に、これをドーム状に歪ませてやります。半球を左右2つに分けた形のメッシュを作り、それぞれに対応するカメラのレンダーテクスチャを貼り付けます。

Fisheye2

半球メッシュ。テクスチャが正距円筒図法でない限り極に向かってすぼまって見えることになるが、実物でも無視してる(隠れてる)?っぽいので気にしない

Fisheye3

レンダリング結果

いちおうそれらしくはなったものの、左右の境目がいびつです。カメラ中央に向かって収束する透視画像の縁同士ですから当然でしょう。ならば、逆に中央ほど拡がるような変換をかけてやればいいのでは。と考えて左右のカメラそれぞれにFisheyeフィルターをかけてみました。

Fisheye4

最終結果(隙間は閉じた)。負荷が気になる場合はレンダーテクスチャ解像度や半球メッシュポリゴン数を調整

パラメータを適当に調整すると、なんとかなめらかにつながりました。光学的に正確なものではありませんが、それが要求されるまではとりあえず、らしく見えればいいことにします。