とある界隈で OpenEXR が流行っているらしいので、EXR とはどんなものか調べてみました。詳しくはウィキペディアさんに譲るとして、以下のメリットがあるフォーマットだと認識しました。
- 複数のチャンネル(というか画像プレーン)を複数持てる
- HDR のデータに対応(16bit float)
- 圧縮によるデータ削減
HDRだとデータの容量も問題になりますが、フォーマットが 16bit で圧縮ありというところで対策されているようです。また複数のチャンネルが格納できることで、ディファートシェーディングの G-buffer も格納して確認に使ってみたりということができそうです。また映像系のツールではこの形式を用いて行き来したりする模様です。
オープンソースでこの形式を扱うものが提供されており、これが OpenEXR というライブラリです。今現在 2.2 が出ており、これをビルドしてみたのが今回の内容となります。
ビルド
ゲームエンジニアな日々 WindowsでOpenEXR-2.2.0をビルド の情報を参考にしました。タイトルそのものずばりな内容です。
必要になるものは VisualStudio と cygwin の環境、CMake となります。
自分の環境では CMake を Program Files 以下に配置して、各ソース群を D:\Development\openexr な場所に配置しました。この場所で cygwin コンソールを開いて make を実行しました。
もちろん、D:\Development\openexr には Makefile を配置しています。その Makefile は参考にしたサイトのものを自分のパスに合わせて書き直しています。このような便利な Makefile を公開されており助かりました。
一応自分の変更したものを以下に掲載しておきます。VisualStudio 2012 で 32bit のものを使いたかったのでこのようになっています。
# Makefile DEST_DIR := $(shell cygpath -ma libs) DEVENV := "$(shell cygpath -ua "$(VS110COMNTOOLS)/../IDE/devenv.exe")" CMAKE := "$(shell cygpath -ua "/cygdrive/d/Program Files/CMake/bin/cmake.exe")" CMAKE_TARGET := 'Visual Studio 11' all: $(MAKE) zlib $(MAKE) ilmbase $(MAKE) openexr download: curl -L \ -O http://zlib.net/zlib-1.2.8.tar.gz \ -O http://download.savannah.nongnu.org/releases/openexr/ilmbase-2.2.0.tar.gz \ -O http://download.savannah.nongnu.org/releases/openexr/openexr-2.2.0.tar.gz clean: $(RM) -fr */ zlib: $(RM) -fr zlib-1.2.8/ /bin/tar xvf zlib-1.2.8.tar.gz /bin/mkdir -p build $(RM) -f build/CMakeCache.txt cd build; $(CMAKE) -G $(CMAKE_TARGET) '-DCMAKE_INSTALL_PREFIX=$(DEST_DIR)' ../zlib-1.2.8 $(DEVENV) build/zlib.sln /out build/zlib_build.log /build "Release" /project "INSTALL" ilmbase: $(RM) -fr ilmbase-2.2.0/ /bin/tar xvf ilmbase-2.2.0.tar.gz /bin/mkdir -p build $(RM) -f build/CMakeCache.txt cd build; $(CMAKE) -G $(CMAKE_TARGET) '-DCMAKE_INSTALL_PREFIX=$(DEST_DIR)' ../ilmbase-2.2.0 $(DEVENV) build/ilmbase.sln /out build/ilmbase_build.log /build "Release" /project "INSTALL" /bin/cp -f $(DEST_DIR)/lib/*.dll $(DEST_DIR)/bin/ openexr: $(RM) -fr openexr-2.2.0/ /bin/tar xvf openexr-2.2.0.tar.gz /bin/mkdir -p build $(RM) -f build/CMakeCache.txt cd build; $(CMAKE) -G $(CMAKE_TARGET) '-DCMAKE_INSTALL_PREFIX=$(DEST_DIR)' \ '-DZLIB_ROOT=$(DEST_DIR)' '-DILMBASE_PACKAGE_PREFIX=$(DEST_DIR)' \ ../openexr-2.2.0 PATH="$$(cygpath -ua libs/bin):$$PATH" \ $(DEVENV) build/openexr.sln /out build/openexr_build.log /build "Release" /project "INSTALL" /bin/cp -f $(DEST_DIR)/lib/*.dll $(DEST_DIR)/bin/
ビルドが成功すると、openexr/libs の中に成果物が格納されています。あとはコレを用いてアクセスするプログラムを書けば EXR の中身を確認していけそうです。
EXR 扱えるソフトについて
単なる確認として使えるソフトに何があるか軽く調べてみたら、 Photoshop で開いたり保存したりは出来るようです。ただしモードが 32bit のチャンネルにしないと、保存時に EXR 形式が出現しませんでした。確認したのは Photoshop CS5 Extended ですが、おそらくこれ以降のバージョン、現行だと CC でしょうか、こちらは対応できているものと思われます。たぶん。