On this page |
OCIO ¶
OpenColorIO(OCIO)とは、映画制作と視覚効果を主な対象とした、カラーマネジメント用のオープンソースライブラリです。
ここ数年の間に、OCIOは標準となり、幅広いアプリケーションでサポートされています。
OCIOを使用することで、ACES(Academy Color Encoding System)規格に準拠し、パイプライン全体で一貫した色を保証するリニアワークフローを確立することができます。
ユーザにとって、OCIOの重要ファイルはocio.config
です。
このファイルは、様々なカラー空間をインポート、変換、表示するための多数の定義済みルールを提供するもので、テキストエディタで表示することができます。
Houdiniには、プリビルドバージョンのOCIOライブラリ(Pythonモジュールのサポートを含む)が同梱されています。 また、若干強化されたバージョンのACES 1.0コンフィグファイルも付属しています。 このコンフィグファイルはHoudiniパッケージとして付属しています。 コンフィグファイルを表示および編集するには、 Edit メニューのOCIO Editorを使用します。
カラー空間 ¶
デジタル素材を扱う時には、カラー空間を考慮する必要があります。 画像や動画で一般に使用されるのはRGBで、3原色(赤、緑、青)を混ぜると白になります。 加法混色のRGBに対し、CMY(シアン、マゼンタ、イエロー)は減法混色で、すべての原色を混ぜると黒になります。 ただし、色は様々なデバイス、センサー、アプリケーションだけでなく、人間の目によって様々に解釈されます。
カラー空間とは基本的に、記録または表示が可能な色の範囲です。カラー空間の定義の土台となるのは、CIE 1931 XY色度図です。 この図は、可視スペクトルのすべての色を示します。 色が付いた領域は、“馬蹄形(ばていけい)”と呼ばれる形状です。
CIE色度図の内部には、通常、1つまたは複数の三角形があります。 カラー空間の三角形内部の色全体を、 色域(ガマット) と呼びます。原色は、カラー空間の最も明るい赤(R)、緑(G)、青(B)のトーンを定義します。 これらが表すのは、色域三角形のエッジのポイントです。
最も一般的なカラー空間の1つはsRGBで、カメラやモニタなど多くのデバイスの標準となっています。 sRGBは“standard Red Green Blue”の頭字語です。次に一般的なカラー空間はRec.709で、色域はsRGBと同じです。
OCIOは多数のカラー空間を扱うことができます。 アーティストにとって最も重要な空間の1つが、ACEScgです。 ACESカラー空間の色域には、Rec.709やsRGBよりもはるかに多くの色が含まれます。 CIE色度図をよく見ると、ACEScgには可視スペクトルの外にある色も含むことが分かります。 ACEScgは標準のリニアカラー空間であり、ほとんどのDCCアプリケーションでサポートされています。
ガンマ ¶
Rec.709またはsRGBなどのカラープロファイルを持つ素材は、必ずガンマ値が適用されています。 ガンマが導入された技術的背景は、一般的な8ビットディスプレイでの量子化による劣化を補正するためです(この種のディスプレイでは、元画像のエンコードされた値を正確に再現することができません)。 ガンマカーブが元のリニア値を受け取り、新しい値にマッピングします。 ほとんどの場合、JPGやPNGといった画像フォーマットには、エンコーディング目的で既にガンマカーブが適用されています。 ただし、EXRやHDRなどのフォーマットは、通常、リニア空間で格納されています(以下参照)。
技術的な側面に加えて、アーティスティックな要素もあります。 例えば、写真を撮影してJPGとして保存すると、カメラはガンマ値を適用して、暗いトーンを強めます。 これは イメージガンマ です。 副作用として、暗い領域のディテール、バランスが取れたコントラスト、適切な彩度など、画像は私たちが普段見慣れているものに近くなります。 ディスプレイで画像を開くと、暗い領域が明るくなっているため、通常は明るく見えます。 ファイルのイメージガンマを補正するには、 ディスプレイガンマ でモニタをキャリブレーションします。
Note
Photoshopでの作業中にグラデーションカーブを適用するときは(暗い色を明るくしたり、コントラストを調整するなど)、 基本的にカスタムのガンマカーブを適用します。これは、画像ファイルにどのように色が格納されているかとは関係ありません。
適切にキャリブレーションされたモニタでは、イメージガンマとディスプレイガンマが互いに打ち消し合って直線になり、元の光の状態が表示されます。 この直線が1.0のガンマを示し、元の入力と画面の出力が同じであることを保証します。 この結果は、 システムガンマ と呼ばれます。 実際のところ、システムガンマは通常1.0よりわずかに大きく、コントラストを向上させます。
リニアカラー空間 ¶
リニアの世界では、強度1の入力信号は、同じ強度の出力信号を生成します。 図では、この関係は以下の図に示す直線です。リニアカラー空間が非常に便利なのは、色の操作に必要な計算が、感覚的に分かりやすいからです。
ディスプレイ空間を適用していない、リニアカラー空間の画像は、私たちの知覚と一致しません。 人間の目は明るさをリニアには知覚しないためです。 人間の目は順応性が高く、影の中のディテールを見分けたり、明暗の極端な違いを調節します。 例えば、ある色の強度が0.5で、その強度が1.0になっても、人間の目には2倍の明るさに見えません。 左下はガンマカーブを適用した画像、右下は未補正のリニアレンダリング画像です。
ACES ¶
ACESとは、Academy Color Encoding Systemの略です。 ACESは、変換のツールや複数の高色域カラー空間を備えたカラーマネジメント環境です。 このシステムはOCIOシステム内に埋め込まれ、特定のカラー空間で動作するツールや仕様を提供します。 ACES2065-1カラー空間は、可視スペクトル全体をカバーします。 ACESの開発は2004年に開始され、優れた利点により、現在はほぼすべてのデジタルプロダクションの標準となっています。
-
ACES準拠のアプリケーションは、色を一貫して再現。
-
可視スペクトルの大部分を再現する高色域。
-
sRGBエンコーディング画像よりもはるかに広いダイナミックレンジ。
-
6000 Kの標準の昼光色温度(D60とも呼ばれます)と相関するホワイトポイント。
-
VFX作品に特化したACEScgカラー空間。
-
様々なユーティリティ変換。
こうした特長により、明るい領域を保持しながら、暗い領域に多くのディテールを持つ、非常に高品質の画像が得られます。
カラー空間の変換 ¶
コンポジットツールやレンダリングエンジンなどの画像処理アプリケーションは、幅広い入力データ(動画、デジタル画像、テクスチャ、アトリビュートやPrimvarなどのジオメトリデータ、スウォッチなど)を扱わなくてはなりません。 データの種類によって入力空間も様々で、scene_linearカラー空間に変換しなくてはならない場合があります。 変換によって、すべての既存のガンマカーブが除去され、元のリニア状態が復元されます。 ほとんどの場合(コンポジットパッケージ、HoudiniのKarmaレンダリングエンジン、COPSなど)、この変換は自動的に行なわれます。
画像をレンダリングして保存する際は、出力空間またはレンダリング空間を指定する必要があります。通常、レンダリング画像はポスト処理のために別のアプリケーションに送られます。 この場合、出力空間もリニアで、通常、ファイルはEXRとして保存されます。 画像がビューアに表示される場合、たいていはJPGやPNGといったガンマ補正済みsRGBファイルに変換されます。 他のすべてのアプリケーションは、これらのファイルの画像データをsRGB空間に格納することを想定しているためです。 いずれにせよ、カラーマネジメントされた画像ビューアを使用する場合、ファイルをリニアフォーマットで保存することも可能です。
カラー空間の変換に使われている標準は、OCIOです。OCIOは、様々な変換タスクを自動化し、定義済みのルールやロールを通して一貫したルックを維持します。
-
ルールは、ファイルのインポートおよび変換の方法を記述します。
-
ロールは、アプリケーションのワークスペースを記述します。
変換後はガンマが除去されているため、人間の目には自然な画像として映りません。そこで、ディスプレイ空間が適用されます。 ディスプレイ空間は、データの変換はせず、ディスクへの書き出しを行ないます。 その唯一の目的は、ディスプレイガンマを除去し、元の信号を再現することです。副産物として、結果の画像は人間の一般的な視覚に近くなります。
簡単に言うと、リニアワークフローには次のような様々な変換方法があります:
-
sRGB、ログ、リニアなどの入力空間を持つ素材をロードします。
-
素材を一般的なリニアワークスペースに変換します。
-
実質的な変換を行なわずに、表示用にディスプレイ空間を適用します。
-
さらなる処理や最終表示のために、適切な出力空間で素材をエクスポートします。
HoudiniおよびKarmaは、OCIOコンフィグファイルのfile_rulesに基づいて、これをすべて自動的に行ないます。 カラー空間を期待通りに動作させるために、アーティストが介入する必要はありません。 Houdiniは、file_rulesをOCIOに提供し、例えばJPG、PNG、TIFFがsRGBカラー空間にあることを指定します。 一方、EXRとHDRは、多くの場合、Linear Rec.709(sRGB)に格納されます。 リニアワークスペース自体は、OCIOコンフィグファイル内で指定されたscene_linearロールを通して定義されます。 HoudiniのOCIOコンフィグファイルでは、“Utility - sRGB - Texture”は“sRGB - Texture”空間のエイリアスであり、主要な変換は、テクスチャを正しく見せるための“sRGB - Texture”から“scene_linear”(ACEScgではない場合があります)です。 ファイルルールは、どの方法で色をリニアワークスペースに変換するべきかをOCIOに伝えます。 OCIOではカスタムのファイルルールを定義できるため、柔軟性が向上します。 素材が定義済みのルールに従っていない場合には、これが必要になります。
RAW素材 ¶
カラー情報が異なる方法で解釈される、特定の種類のテクスチャマップもあります。 ディスプレイスメントマップでは、色は標高を定義します。 法線および接線マップでは、色は方向を表します。 また、Roughnessマップでは、色は強度を表します。 これらのマップタイプは、 RAW とみなし、どのような変換からも除外すべきです(手動変換 > MtlX Imageを参照)。
ジオメトリのプロパティ、アトリビュート、Primvar ¶
プロパティ、アトリビュート、Primvarは、Karmaによって常にリニアだとみなされ、変換されません。 以降のバージョンのUSDでは、カラー空間のサポートが向上し、各Primvarにカラー空間を指定できるようになる予定です。
手動変換 ¶
入力ルールが定義されていない場合などに、手動で素材をKarmaのワークスペースに変換することもできます。 そのような場合は、入力空間とワークスペースをHoudiniに伝えるためのノードが必要になります。 このため、KarmaにはKarma OCIO Color Transform VOPノードがあります。
MtlX Image ¶
入力ファイルを変換するには、MtlX Image VOPノードの Signature ドロップダウンメニューに移動して、それが Color に設定されていることを確認します。 ファイルが変換されないようにするには、 Vector 3 などの非カラーエントリを選択します。 ディスプレイスメント、法線、スペキュラーなどのタイプのマップも同様です。
Note
MaterialXでは、 File Color Space パラメータを使用してカラー空間を指定することができますが、現在のところUSDでサポートされていません。
USD UV Texture VOP ¶
このノードは、USDテクスチャプリミティブのすべてのアトリビュートを提供します。ファイルをロードするとき、 Source Color Space を3つの選択肢のいずれかに設定することができます。
-
sRGB は、入力データをsRGBからscene_linearに明示的に変換します。
-
Raw は、データを変えずにそのままロードします(ディスプレイスメント、バンプ、Roughnessなど)。
-
Auto は、OCIOファイルルールを使用して、ソースのカラー空間を決定します(scene_linearに変換されます)。
MtlX Geometry Color ¶
このノードでは、ジオメトリポイントのカラーアトリビュートを読み込むことができます。 Signatureパラメータは、Float、Color、Color 4タイプになります。 Karmaは、ジオメトリカラーPrimvarがscene_linearカラー空間内にあることを前提としており、カラーの変換は実行しません。 必要に応じて、Karma OCIO Color Transformノードを使用できます。
カラーエディタ ¶
HoudiniのカラーエディタはOCIOをサポートしており、色を選択して、様々なカラー空間で直接表示できます。 エディタの左上の部分のボックスには、現在の設定が表示されます。 右上には、OCIOカラー空間を含むドロップダウンメニューがあります。
-
View はデフォルトで、 Color Correction バーの2つ目のメニュー( Un-tone-mapped )に一致しています。新しいトーンマッピングに切り替えると、ビジュアルが変わり、モニタ上の色も変化します。
-
Pick は、ピペットのカラー空間を示します。標準のピペットの空間はLinear Rec.709(sRGB)です。ピペットの空間による効果を確認するには、ピペットを選択し、カラーフィールドのいずれか(オレンジなど)をクリックします。対応するRGB値は
1, 0.5, 0
です。ここで、OCIOドロップダウンメニューを開き、 Pick: Linear Rec.709 (sRGB) ▸ More ▸ ACEScg を選択します。次に、ピペットを使用して同じ色を再度選択します。 RGB 値が
0.7803, 0.5249, 0.0749
に変わりますが、色の見た目の印象は変わりません。これは、同じオレンジ色が、アクティブなカラー空間に応じて異なるRGB値によって表現されていることを意味します。ワークスペースを変更しない限り、 Pick を変更する必要はありません。 -
Input は、素材またはテクスチャの入力空間に応じて変わります。カラーエディタを使用すれば、テクスチャをロードしてそこから色を選択できます。テクスチャが一般的なsRGBなどの場合、 Input は sRGB ▸ Texture に設定する必要があります。
OCIOドロップダウンメニューでは、様々なディスプレイ空間の色を模倣することもできます。 デフォルトでは、メニューエントリは Color Correction バーの1つ目のドロップダウンメニュー( sRGB - Display )のエントリと一致していなければなりません。 他のディスプレイ空間が色に与える影響を確認するには、異なるエントリを選択します。 例えば、P3-D65 - DisplayやsRGB-calibrated monitorに設定すると、色はより明るくなり、彩度は下がります。
MPlay ¶
画像は、MPlayに直接レンダリングしたり、ディスクにレンダリングして後で開くことができます。 ビューポートと同様、MPlayにも Color Correction バーがあり、様々なディスプレイ空間やトーンマッピングオペレータを適用することができます。
AOV ¶
RenderVar LOPの Husk タブで、各AOVに特定のカラー空間を指定することができます。
トーンマッピング ¶
Note
OCIOエディタを介して、トーンマッピングカーブをビューポートに適用することもできます。 デフォルトでは、ビューポートのトーンマッピングは Un-tone-mapped に設定されています。
トーンマッピングは、入力として輝度値(または個々のカラーチャンネル)を受け取り、カーブまたは関数を適用して、0から1の間の値(モニタが期待する範囲)に変換します。 トーンマッピングのもう1つの用途は、HDR(High Dynamic Range)画像をSDR(Standard Dynamic Range)に変換する場合などに、現実をよりよく再現した画像を作ることです。 SDRディスプレイで現実を再現するのは不可能であり、完全に正しい選択は存在しないため、この処理は主観的と言えます。
トーンマッピングなしでは、アーティストはハイライトが白飛びしないよう、キーライトの強度を低くしがちです。 そうすると、他のすべてが暗くなってしまいます(反射光の強度も下がるため)。 この効果を補正するために、アーティストがフェイクのフィルライトを追加した結果、必要以上に複雑なライティングセットアップになってしまうことも少なくありません。
フィルミックトーンマッピングは特別なケースで、1つの用途が、独特なフィルム調のルックをシミュレートすることです。 フィルム素材は、コントラストや色を強化するために、光に対して特定の“反応”をするように設計されており、特徴的なS字カーブを描きます。 フィルミックトーンマッピングカーブは、画像の暗いトーン、明るいトーン、中間調で、つま先(toe)、肩(shoulder)、直線のセクションに分割されます。 Houdiniはフィルミックトーンマッピングをサポートしており(以下のTipを参照)、いくつかの一般的なオペレータを提供します。 各オペレータがそれぞれ、特定のS字形のトーンマッピングカーブを適用します。 また、Houdiniのフィルミックトーンマッピングオペレータによって影響を受けるAOVを選択することもできます。 以下の画像には、 Aces および Hable2 カーブが適用されています。
Tip
フィルミックトーンマッピングは、Karma Render Settings LOPにあります。 そこで、 Image Output ▸ Filters タブを開きます。 Image Filters セクションに移動し、 Tone Map メニューからエントリ( Unreal など)を選択します。 その後、画像をレンダリングします。
OCIOエディタ ¶
OCIOエディタは、Houdiniのocio_config
ファイルを編集できる便利なツールです。
カラー空間に関してどのように入力素材を変換するのかをについて、独自のルールを定義することができます。
さらに、レンダリングワークスペースやビューポートのトーンマッピングを設定することもできます。
-
Render Working Space は、デフォルトのレンダリング画像のカラー空間を定義します。デフォルトでは、この空間は Linear Rec.709 (sRGB) です。デフォルトを ACEScg などに変更したい場合は、ドロップダウンメニューからエントリを選択します。
-
View Transform を変更すると、ビューポートのデフォルトのディスプレイ空間を設定することができます。現在のところ、設定を適用するには Houdiniを再起動する 必要があります。
Houdiniのデフォルトのディスプレイ空間は、 Color Correction バーにあります。 このバーを表示するには、 Display options アイコンをクリックします。 表示されたメニューで、 Color Correction を選択します。 新しいバーはビューポートの直下にあり、2つ目のドロップダウン( Un-tone-mapped )に使用可能なディスプレイ空間が含まれています。
Input File Rules で独自のルールを定義したり、リストに表示されている既存のルールを編集することができます。
例えばEXRファイルは、デフォルトでLinear Rec.709 (sRGB)
に変換されます。
代わりに、EXRをACEScg
に変換したいとしましょう。
-
ボタンをクリックし、新しいエントリを追加します。フローティングウィンドウが表示されます。
-
新しい Name (
exr_acescg
など)を入力します。 -
Rule Type はそのままにしておきます。
Regex を選択することもできます。 これは、“regular expression”(正規表現)の省略形です。 正規表現とは、テキスト内の文字のシーケンスを検索するための構文のルールです。 残念ながら、この複雑なトピックをほんの数行で説明することはできません。 しかし、様々なオンラインリソースで、正規表現を記述する方法を確認できます。
-
Pattern は
*
です。アスタリスクは、すべての入力ファイル名を意味するワイルドカードですが、パターンを定義することもできます。 Pattern 列の既存のエントリを見ると、この機能の仕組みを理解できるでしょう。Houdiniは、インポートされたファイル名で、ここで指定したパターンを検索します。 -
次に、 Color Space を定義します。ドロップダウンメニューから ACEScg を選択します。
-
Name 列の左にあるハンドルを使用します。デフォルトとして独自のルールを設定したい場合、
exr_acescg
ルールを既存のexr
ルールの 前 の位置にドラッグします。これで、カスタムのルールの優先度が高くなります。