RICHO THETAでHDRIの作成

RICHO THETA

360度カメラである,THETA SCを買いました。
解像度は静止画で5376x2688で,だいたい4K相当です。 マルチブラケット撮影もできるので,Photomatix ProみたいなHDRIの合成ソフトを使ってみたら,すぐHDRIができました。

http://cgcompo.blog134.fc2.com/blog-entry-67.html
https://www.hdrsoft.com/jp/

ただ,便利なソフトを使ってみただけでは面白くないので自分でHDRIの合成をしてみたいと思います。

HDRIの作成

まずは,以下のように複数の露光でマルチブラケット撮影をしておきます。

f:id:hikita12312:20180612103843p:plain:w600

THETAは絞りが弄れない関係上,どうしても明るく撮れてしまうので,木陰など暗めの場所で撮ったほうがよいと思いました。 また,撮影時間も30~40秒ぐらいはかかるので,三脚とシータ棒は必須です。

次に,各画像を取り込んでシェーダーでRGBA16Fフォーマットのテクスチャへ合成します。 THETAは残念ながらRAW画像は取得できないので,JPEGとして読み込みます。 画像を取り込むときには,EXIF情報も同時に読んで,露光時間とF値,ISO感度からEV値を計算しておきます。

{ \displaystyle
\begin{eqnarray}
\mathrm{EV} = \log_2{\Big( \{\mathrm{Fnumber}\}^2 * \{\mathrm{ExposureTime}\} * \frac{100}{\{\mathrm{ISO}\}} \Big)}
\end{eqnarray}
}

画像の読み込みはDirectXTexを利用しました。EXIF情報はIWICMetadataQueryReaderから読んでいます

https://github.com/Microsoft/DirectXTex
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ee719904(v=vs.85).aspx

入力画像を1枚のHDRIとして合成するときには,EV値が高い画像ほど,値としては暗い部分になるようにスケールします。 いろいろ合成のやり方はあると思いますが,今回は三角形型の重み関数で合成を行っています。

f:id:hikita12312:20180612104234p:plain:w600

合成を行う時に,ソースとなる画像のあまりに暗すぎる部分や明るすぎる部分を計算から省くような処理を行っています。 matlabのドキュメントでも似たようなことをしているようです。

https://jp.mathworks.com/help/images/ref/makehdr.html

実際の合成を行うシェーダーは以下。

結果

出来上がったHDRIを使って,レンダリングをしてみました。

f:id:hikita12312:20180612105925p:plain:w600
f:id:hikita12312:20180612105925p:plain:w300 f:id:hikita12312:20180612105946p:plain:w300

中央の球体のレンダリングはUnrealEngineのPBRを実装しました。

http://blog.selfshadow.com/publications/s2013-shading-course/

ちゃんと高輝度成分が入っているので,ブルームエフェクトも機能しています。 HDRI合成の重みを工夫したらもっとキレイにできそうです。