今回は、darktableを主軸とした現像フローからHDRI作成について、Nukeを使用しないシンプルな方法を解説していきます。
より細かな調節も可能なNukeを使ったHDRI化フローについては、次回紹介していきます。
CGSLAB LLC.
テクスチャスキャナの作成/スキャン。3Dスキャナ、フォトグラメトリー等を用いた3Dスキャニングなどのサービス、研究開発をしています
site.cgslab.info
関連記事:
CG映像業界のテクニカル系の仕事を探る 第3回 前編:CGSLABの仕事
darktableを使う6つの理由
RAW現像のためのツールとしてはLibRawやRawTherapeeなども選択肢としてありますが、当社ではHDRI向けの現像フローにはdarktableを使用しています。
理由としては、以下の6点が挙げられます。
1. オープンソースウェアとして無償で利用可能。
2. GUIからの利用が可能。
3. ICCプロファイルの適用がしやすい。
4. THETA Z1のRAWファイル(.DNG)とデノイズの相性が良い。
5. スタイルを利用した一括処理が可能。
6. コマンドラインでの現像処理などのバッチ化も可能。
各種設定ファイルなどの配布
CGWORLD vol.262の特集の際には、THETA Z1のIDTと現像用のdarktableスタイルといったファイルを一式配布しました。今回はそれらのファイルにアップデートが入っていますので、改めて各種ファイルの配置場所と合わせて紹介を行なっていきます。
また、各章で出典元についても解説していきますが、ライセンス的に問題がないICCデータと当社で制作したファイルをZIPファイルにまとめて配布しています。
以下、本連載用のGitHubリポジトリを用意しましたので、そちらのリリースページからダウンロードについてを確認してZIPファイルをダウンロードの上展開しておいてください。
darktableのインストールと設定・配置
darktableはバージョン4.6(2023年12月)の日本語UIを基に解説を行なっていきます。
darktable公式サイトダウンロードページまずは上記の公式サイトのダウンロードページより、darktableのインストーラのダウンロードとインストールを行なってください。
インストール時には特に設定などはありませんが、macOSの場合はAppファイルを移動した後にコマンドを実行することが必要な場合がありますので、公式サイト上の解説を確認してください。
各種ICCプロファイルのダウンロード
CGWORLD vol.262の記事中に配布した株式会社ロゴスコープ制作のIDTは、ホワイトポイント修正前のIDTとなっています。
きちんとしたIDTを使用した現像データ同士で合わせる場合でなければ、どちらを使用しても大きな問題はありません。
ただし、どちらを使用しているかで色味が変わるので注意はして下さい。
※5000K準拠での話なので、撮影プレート等に対して色味を合わせ直す場合は基本的に影響はありません。
株式会社ロゴスコープのサイト上での、THETA Z1 IDTのICCプロファイル配布先は以下となります。
ACEScg等のICCプロファイル
ACEScg等のICCプロファイルはellelstone氏のGitHubリポジトリで提供されているものを利用します。記事内で利用するものは配布フォルダに含まれていますが、必要に応じて以下のリンクから利用カラースペースに合わせて活用してみてください。
https://github.com/ellelstone/elles_icc_profiles/tree/master/profiles
1. ACEScg-elle-V4-g10.icc
2. ACES-elle-V4-g10.icc (こちらは配布フォルダには含まれません)
3. Rec2020-elle-V4-rec709.icc
※REC2020(Rec709 Gamma).iccを使わない場合はこちらが同様のものとなります。
これらのICCプロファイルをダウンロードします。
IDTのインストール
darktableのカラープロファイルの読み込み先に、ICCプロファイルをインストールしていきます。
Windowsでは以下のどちらかのフォルダへの配置になります。C:\Users\ユーザー名\AppData\Local\darktable\color\
C:\Program Files\darktable\share\darktable\color\
macOSの場合は以下になります。/Users/ユーザー名/.config/darktable/color/
/Applications/darktable/darktable.app/Contents/Resources/share/darktable/color/
それぞれcolorフォルダ階下のinとoutのフォルダ(なければ作成)にダウンロードしてきたICCプロファイルを配置します。
●入力プロファイルin/THETA-Z1-normalized-5000k-adaptation-whiteInput-Device-Transform-developed-by-logoscope.icc
●出力プロファイル
out/ACEScg-elle-V4-g10.icc
out/REC2020(Rec709 Gamma).icc
なお、各種プロファイルの読み込みパスは、[ダークルーム]タブの[入/出力カラープロファイル→〜プロファイル]の項目にマウスオーバーすることで表示される、ポップアップヘルプでも確認できますので、何かあればそちらのパスも確認してみてください。
darktableの環境設定
インストールが完了したら、環境設定としていくつかの設定を変更していきます。開いたUIの右上から歯車アイコンをクリックして、環境設定を開きます。
1.[出力カラープロファイルを適応する際、常にLittleCMS2を使用する]のチェックを有効にする
LittleCMSとは、ICCプロファイルを利用するためのオープンソースライブラリです。この設定を有効にすることで、配置したIDT(.icc)を使用して適切に現像処理した画像データを書き出すことが可能となります。
2.[ピクセルワークフローのデフォルト設定の自動適用]の設定
通常の写真現像にdarktableを使用しない場合は[なし]に設定しておきます。
3.[カメラごとのベースカーブプリセットを自動適用する]を無効にする
darktableスタイルの追加
今回、現像用のdarktableスタイルをアップデートしました。CGWORLD vol.262の際に公開したものから一部設定を見直しました。
・THETA_Z1_HDRI_IDT_REC2020_v2.dtstyle
CGWORLD vol.262時配布のアップデート版です。次回使用します。
・THETA_Z1_HDR2EXR.dtstyle
今回新規にHDR-DNG向けに用意しました。今回使用します。
※今回配布するdarktableスタイルはVer4.6向けに作成しています。下位バージョンを利用の方は、Ver4.6をインストールしてセットアップの上でご利用下さい。
現像スタイルの更新内容
・darktableのモジュール順、ピクセルワークフローなどの更新に合わせて対応、不要なモジュールが追加されないようOFF設定モジュールの追加
・デモザイクの処理を“PPG”から現行版推奨の“RCD”に変更
・IDTをホワイトポイント修正更新されたものに変更
・デノイズパラメータを見直し、ディテールが維持されるように更新
・RAW色収差モジュールの追加 ※色精度重視の場合OFF推奨
・THETA_Z1_HDR2EXR.dtstyleの新規スタイル追加 ※詳細後述
テンプレートスタイルの読み込み
配布しているdarktableスタイルを読み込みます。
[ライトテーブル]タブの[スタイル]から[インポート]ボタンをクリックし、[THETA_Z1_HDRI_IDT_REC2020_v2.dtstyle]と[THETA_Z1_HDR2EXR.dtstyle]を選択して読み込みます。
スタイルの一覧に同名の項目が追加されていれば問題ありません。
これで準備は完了しましたので、THETA Z1で撮影したRAWファイル(.DNG)を読み込んでスタイルの確認を行います。
スタイルの確認
[ライトルーム]タブを開いている状態で、ウインドウ中央にドラッグ&ドロップか、[インポート→ライブラリの追加]で撮影ファイルを選択して読み込みます。
Burst-IBL-Shooterで撮影していたり、AEブラケット等で撮影後にフォルダにまとめていれば、そのフォルダを選択することで、読み込みリストにDNGファイルが列挙され読み込みが便利に行えます。
撮影ファイルの読み込みとスタイルの読み込みが完了したら、適当な撮影ファイルを1枚して、THETA_Z1_HDRI_IDT_REC2020_v2.dtstyleスタイルをダブルクリックまたは[適用]ボタンを押してスタイル適用します。
[ダークルーム]タブに移動して[入力カラープロファイル]カテゴリの[入力プロファイル]がTHETA-Z1-normalized-5000k-adaptation-whiteInput-Device-Transform-developed-by-logoscopeになっていることを確認してください。
※表示環境の関係で、ハイフン(-)がスペース表記になっています。
もし変更されていない場合は、[入力プロファイル]でIDTを選択した上で再度[ライトテーブル]タブに戻り、スタイルを選択して[編集]で[入力カラープロファイル]の[更新]にチェックを入れ保存します。
同様に、今回追加しているTHETA_Z1_HDR2EXR.dtstyleも確認、必要であれば更新します。
darktableを使用したHDRマージ
darktableを使って、Nukeを使用しなくても同程度の品質でHDRマージを行なってEXRとして書き出すことがシンプルに可能となったので、そちらについて紹介していきます。
冒頭でもお知らせしましたが、Nukeを利用してのHDRI作成フローについては次回取り上げます。
darktableの「HDR作成」機能
darktableには以前から「HDR作成」機能がありましたが、darktable 4.0.1でバグ修正され実用的になりました。シンプルなRAWファイル(.DNG)のスタック合成によるHDR-DNGを作成する機能です。
そのため、撮影時にTHETA Z1は完全に静止した状態での撮影が理想となり、もし動いてしまった場合はNukeでのマージ処理よりズレが顕著に目立ちます。
また、Burst-IBL-Shooter等で暗所撮影する場合で、ISO値のブラケットで高感度撮影されたデータが含まれるとき、暗部ノイズが目立つことがあります。
その他、ゴーストの除去機能がないため動く物体のゴーストが出やすく、ホットピクセルや高輝度部分などにエラーピクセル等が発生することが稀にあります。
Nukeのマージ処理はその点で、輝度マスク処理によるレイヤー合成のため多少動いてもズレが目立ちにくく、ハイライト部分しかゴーストが出づらい利点があります。
このフローの利点としては、Nuke等がなくてもマージ処理ができることと、HDR化までの現像書き出しが省けるため中間ファイルが減らせ、書き出しの待ち時間が少なくなり工数を減らすことができます。
光源がクランプされずに撮影できている場合は、書き出したEXRをスティッチするだけでHDRIをすぐ使用可能な状態にできます。太陽光など光源がクランプされている場合は、光源の追加や補完が必要となります。
HDR-DNGの作成手順
実際にHDR作成機能を使って、HDR-DNGを作成してみましょう。
手順としては非常にシンプルで、darktableに撮影したRAWファイル(.DNG)を読み込み、全て選択して[HDR作成]をクリックします。
するとHDR合成の処理が始まり、結合された-ファイル名-hdr.dngが作られます。
Burst-IBL-Shooterで撮影した場合、重複設定で撮影されているデータもあるものの全て選択して問題ありませんが、あまりに露出オーバーしすぎているものは除外する方が良いです。
こちらに[スタイル→THETA_Z1_HDR2EXR]を選んで[適用]して書き出しを行います。
[HDR作成]では一番暗い画像を基準に結合されますが、このあとの工程で使用するPTGuiではある程度の適正な露出でないと確認がやりづらかったりスティッチがきれいにならない場合があります。
そのため、露出補正が必要となります。配布のスタイルでは+8EVの露出補正が適用されるようになっていますが、必要に応じて変更してください。
※darktableのUI上ではデフォルトでは+4EVまでしか露出を上げられませんが、パラメータを右クリックして数値を直接入力することで最大+18EVまで上げられます。
カラーチャートを同時に撮影している場合は、スポイトで18%グレーをピックすることで適正露出にすることもできます。
THETA_Z1_HDR2EXRは[HDR作成]で作られたhdr.dng向けに最適化した設定になっています。THETA_Z1_HDRI_IDT_REC2020_v2と一番大きく異なるのはデノイズ設定です。その他にも、一部設定やモジュールが異なります。
現像設定
HDR化されたDNGの現像設定を行います。
[ライトテーブル]タブの[エクスポート]カテゴリから書き出しが行なえます。
[フォーマットオプション]から[ファイルフォーマット:OpenEXR]で書き出します。
その際、ビット深度は[16ビット(浮動小数点)]で圧縮は[非圧縮]か、非可逆圧縮の[ZIP/ZIPS]を選びます。基本的には[ZIP]で問題ありません。
プロファイルには最初に追加した[ACEScg-elle-V4-g10.icc]または、用途に応じて[リニアRec709]などを選びます。
最後に[エクスポート]ボタンをクリックすることで書き出されます。
スタイルに[THETA_Z1_HDR2EXR]を指定して、モードを[履歴の置き換え]にすることでスタイル適用を省略して以下の手順で書き出すことも可能です。
[RAW読み込み→全選択→HDR作成→作成されたDNGの選択→エクスポート]
※スタイルを適用して露出調整等を行なっている場合は、スタイルは[なし]にしてください。
スティッチについて
darktableではHDR化までが可能で、スティッチについては、このあとではPTGui Proでの方法を紹介しています。
その他、STmapを使った簡易スティッチ手法としてBlenderを利用した方法を紹介していきますが、もちろんNukeやNatronを利用しても問題ありません。
PTGui Proのテンプレートとスティッチ処理
PTGui Proを使ったスティッチ処理
PTGui Pro(11以降)はTHETA Z1に標準で対応しており、一番綺麗にスティッチ処理を行うことが可能です。
しかし、OpenEXRデータではEXIFメタデータが含まれないため、レンズ設定などの処理が自動で行われません。そのため事前にテンプレートを作成し、使用することで作業工程の簡略化が可能になります。
配布テンプレートの更新点(使用バージョン:PTGui Pro12.24)
・[最適な縫い目を見つける]をOFFに変更
こちらの方がブレンドエラー率が低いため。必要に応じてONにしてください。
また、デフォルト設定なので変更点ではありませんが、PTGui 12でカラーマネジメント機能が強化されています。
EXRを処理する場合、インプットのカラースペース設定はできないためACES、ACEScgのデータの読み込みであっても入力の色空間がLinear sRGBとして読まれているため、[出力用の色空間]の設定はLinear sRGBのままでOKです。
テンプレートの作成
1. 適正露出に近い撮影ファイル(.DNG)か、現像したTIFFファイル1枚を[ソース画像]へ読み込みます。
2. メタデータから必要な設定が読み込まれるので[画像を整列する]をクリックして、データに問題ないかパノラマエディタで確認する。
3. スティッチに問題がある場合、コントロールポイントを調整していく。
4. 左メニュータブの[ソース画像]で読み込んだ1、2の画像を、右クリック→[置換]で書き出したOpenEXRに差し替えます。
5. [露出合成/HDR]設定を、[トゥルーHDR]に変更します(最適化等の操作は不要です)。
6. [パノラマを作成する]タブの[HDR:HDRパノラマ]を有効にして[ファイル→テンプレートとして保存]で書き出す。
命名規則等はプロジェクト設定の項目で変更できます。
配布のテンプレート(ThetaZ1.pts)または作成したテンプレートを追加するには、[ファイル→テンプレートの適用→その他]で開かれるのがテンプレートフォルダになりますので、こちらに追加するか、任意にファイルを指定してテンプレートを使用できます。
テンプレートを使用してのスティッチ
テンプレートを使用してのスティッチは非常にシンプルな手順で完了します。
新規プロジェクトで[①画像を読み込む]に書き出したOpenEXRの同じデータを2回読み込み、追加したテンプレートを[ファイル→テンプレートの適用→ThetaZ1]で適用します。
プロジェクトアシスタントの工程通り[画像を整列する→パノラマを作成する]を実行すれば完了です。[画像を整列する]の結果に問題がある場合はコントロールポイントによる調整を行います。
テンプレート作成で整えているので、コントロールポイントによる調整が不要な場合は[画像を整列する]の工程を省くことも可能です。※スティッチ精度が下がる場合がありますので確認しながら試してみてください。
もし同一箇所でのチャートの有無など、複数撮影した場合は1つ目を処理したプロジェクトファイルを基にOpenEXRを[置換]で差し替え、[画像を整列する]の工程を省くことで完全に位置等が一致した処理を行えます。
また、[メニューバー→ツール]に含まれるバッチビルダー等を使い一括処理を行うこともできますので活用してみてください。
Blenderを使ったスティッチと露出調整
簡易スティッチをBlenderで行えるように、グループノードを作成しました。darktableの[HDR作成]と組み合わせることでオープンソフトのみでシンプルなHDRI作成を行えます。
簡易スティッチのために繋ぎ部分は補正されないので、場合によっては継ぎ目のズレや色ムラが発生します。
STmapを使用した処理となり、STmapは.blenderファイルに梱包されています。16bitと32bitの違いはSTMapのEXRが16bit floatか32bit floatかの違いとなります。32bit floatの方がキレイな結果となりますが、.blenderの容量が大きいです。処理速度は少し遅い程度です。HDRI_STmap_node_16bit.blend
HDRI_STmap_node_32bit.blend
darktableから書き出したEXRを、テンプレートのBlenderファイルのコンポジットノードに読み込みます。カラースペースは書き出し時に設定したものを指定します。
StithHDRIグループノードに繋ぎステッチ処理をします。StithHDRIのEVで追加で必要な場合露出補正を行います。
SetEVグループノードはオマケとなります。Nuke同様に撮影情報から露出設定を行えるようノードを組んでいます。※メタデータは読めないため手動で設定します
なお、イメージの保存時(OpenEXR)に、ACEScgで保存するときは、設定を[カラーマネージメント→オーバーライド]に変更して[カラースペース(色管理)]を指定してください。
PTGui Proだけで処理を行なってはいけない?
正直なところ、PTGui Proに撮影したブラケットのRAWデータを入れ込んで処理させるフローが一番シンプルで手軽な方法にはなるでしょう。
IDTは使用できませんが、PTGui 12からはカラーマネジメント機能が強化されたためACES、ACEScgを選択して書き出すことが可能となっています。
しかし、必ずしも良い結果とならないため、確実な手法としては推奨できません。問題ない場合も多くありますが、HDRマージ処理の問題で光源の値が場合によって高くまたは低くなったり、彩度が強く出たりなどHDRIとしての精度が悪くなる場合があります。
※ブラケット撮影された現像済みのTIFF等をPTGuiで処理した場合は、RAWより問題が出やすい傾向にあります。
また、HDRIにおいて必須ではないですが、適切なデノイズを行えない場合もあります。
※PTGui Pro 12初期リリースバージョンでは、更新されたHDRマージ処理のアルゴリズム(内部現像されたデータをスタック合成)の問題で顕著なノイズが発生していました。
そのため特にPTGuiのみの処理が非推奨でしたが、これはPTGui 12.21からは、以前のPTGui Pro 11のアルゴリズムに戻されたので、そこまで顕著な問題は出なくなっています(リリースノート)。
これらが実際のCGレンダリング結果の差に繋がることは極めて少ないかと思いますが、特に光源部分の値に問題が起きやすいために、気づかずに照明バランスが崩れたHDRIを使ってしまう場合があります。
パノラマのスティッチ処理と継ぎ目のブレンドは細かく設定でき、キレイに処理を行なってくれるため、手間ではありますがHDRマージまでは外部で行い、スティッチのみPTGuiを活用する方がキレイなパノラマを作成することができます。
今回紹介した内容で、ひと通り撮影からHDRI化までが可能になっています。
次回からは、細かなVFX向けのHDRI作成や修正方法などについて、Nukeをメインにしたフローを紹介していきます。
TEXT_CGSLAB
EDIT_小村仁美 / Hitomi Komura(CGWORLD)