« Motion JPEG でアルファ付きムービーを | メイン | アップサンプリング、ダウンサンプリング »

2008年05月02日

ツール開発メモ:: OpenEXR のライブラリ

    

HDR 画像を格納するためのファイルフォーマットとして、OpenEXR がある。
このファイルフォーマットは、任意のチャンネルをいくつも格納できる柔軟なファイルフォーマットらしい。
ミップマップやレイヤーもサポートするようだ。
他にHDR 画像を格納するファイルフォーマットに hdr ファイルフォーマットがある。
こちらは RGBE で HDR 画像を格納するだけの比較的シンプルな構造。

OpenEXR ファイルの構造は詳しくは調べていないが、読み書きするためのライブラリがオープンソースで存在し、そちらを使えば良いようだ。
ライブラリはこのページにある。
ただ、単純にファイルの読み書きをしたいだけなのに DLL が5個に分かれていて、しかも全て合わせると 2.28 MB とでかい。
いったい何が入っているのか気になり少し見てみることにした。

Half.dll
16ビット浮動小数点を扱うためのクラスライブラリのよう。
HDRI 以外に、最近のビデオカードは16ビット浮動小数点型のサーフェイスを作れるので、それを扱う時に使えるかも。
CPU で処理する場合は普通に float ( 32ビット浮動小数点 ) に変換して処理した方が楽で速いと思う。

Iex.dll
例外やエラー関係

Imath.dll
ベクトルやマトリックス、その他幾何学系
色や色空間の変換など
3D 関係で取り扱う数学関係のもののよう。

IlmThread.dll
スレッド、ミューテックス、セマフォ、スレッドプール・タスク など

IlmImf.dll
ファイルの読み書きなど、上記のもの以外全般。

ソースを見た感じだと以上のような構成のようだ。

後、仕様などを見ていて気付いたけど、これは 3D CG 用のフォーマットだな。
ディフューズ、スペキュラー、アルファ、RGB、Z などチャンネル別に出力しておき、合成方法を変えることで最終イメージを調整するような使い方を想定しているよう。
単に HDR 画像を格納したいだけの用途では少々オーバースペックな感じがする。
ただまあ HDR 画像を格納するのに hdr ファイル と OpenEXR ファイルの2つが主に使われているようなので、オーバースペック な気がしても関係ない。
それに、とりあえずライブラリを使えば読み書きできるので利用するのは楽。

チャンネル別にいろいろと出力しておき、合成方法を変えて複数のイメージを作り出すと言うのは、ゲームでも使えそうな気がしたけど、いろいろ考えるとそれほど用途はなさそう。
実行時に合成してバリエーションを生むと言っても、大してパターンを作れないような。
数が多くないのなら、はじめから全部最終イメージで持っておけばいいだけだし……



投稿者 Takenori : 2008年05月02日 19:39




comments powered by Disqus
Total : Today : Yesterday : なかのひと