Blenderで作業していると、画像素材を読み込んだのに思った色と違う色で表示されることがあります。また、出力結果がくすんでしまった、テクスチャが適切に表示されない、など。
これは主に色空間の扱い(例えばsRGBやリニア変換など)が原因です。
自分が意図した通りの色で表示・出力するためには、Blender内部で行われている色の変換処理の仕組みを理解する必要があります。
Blenderや他のCGソフトが行う「画像の色変換処理(正確に色を扱うための内部処理と見た目を良くするための表示変換)」全般のことをカラーマネジメントと言います。
カラーマネジメントのことを詳しく知れば、出力する画像の色を自由にコントロールできるようになります。CGでキレイな画像を作りたい、他のソフトと連携して作りたいなら必須の知識とも言えますので、ぜひ参考にしてみてください。(わかりやすさを重視しているので、正確で詳しい情報が知りたい方は専門的なサイトや書籍などでちゃんと調べてね)
この記事は、Blenderのカラーマネジメントについて書いた初心者~中級者向けの記事です。
難易度
※最後に参考サイト・記事などをまとめています。
カラーマネジメント
私たちが見ている色とは?
色とは、光(電磁波)のうち目に見える範囲(可視光)を、目の中のセンサー(錐体細胞)で感じ取り、脳が処理して認識したものです。
人間の目は主に「赤・緑・青」の3種類の光に反応し、それらを組み合わせてさまざまな色を感じます。
つまり、「色」は実体ではなく、脳が光の波長を翻訳して作り出した感覚なのです。


なので、人によって色の感じ方も少しずつ異なります。
モニタやカメラなどの機械は、人間の視覚に近い色を再現しようと設計されていますが、機器ごとに色の出し方が異なります。
結局のところ「色」とは、脳が作り出した知覚(感覚)にすぎないので、人それぞれ、そして機械ごとに見えている色は少しずつ違うのです。

あなたが見てる景色・色は、あなただけが見ている特別な色なんですね。
モニタで映っている真っ赤なリンゴをプリンタで印刷したら、なんだか黄色っぽくなってしまった――それでは困ります。
そこで、機械ごとに色を扱う方法(定義やルール)を統一する仕組みが作られました。これが Color Management(カラーマネジメント) です。
カラーマネジメントでは、色空間の定義や、異なる機器間で色を変換するためのルールが定められています。
これに従って変換を行えば、どの機械でも、できる限り同じような色が表示・印刷されるようになります。

カラーマネジメントでしていること
では、具体的にカラーマネジメントで他の機器と色を合わせるために何をしているのでしょうか?
大きく分けて、次の 2つの処理 が関係しています。
- 色空間変換(Color Space Transform:CST)
色の定義(色域・白色点・ガンマカーブ)を、異なる機器に合わせて変換します。 - トーンマッピング
主に ダイナミックレンジ(明暗の幅)を調整します。
これらの処理を組み合わせて、機器ごとの違いを埋めながら、できるだけ一貫した色表現を目指すのがカラーマネジメントです。
専門用語が多くて混乱しますが、1つずつ解説していきますので安心してください!
❶色空間変換
色空間とは、ある機器やシステムで色を定義・扱うための基準で、次の3つの要素から構成されます
- ガンマカーブ(Gamma): 明るさの表現(リニア or 非リニア)
- 色域(Color Gamut): 再現できる色の範囲
- 白色点(White Point): その空間での「白」の基準
色空間変換は、これらの要素を調整し、決まった色空間へ変換させることです。
よく使われる色空間:sRGB、Adobe RGB、Display P3、Rec. 709、Rec. 2020、ACES…

ガンマカーブ
ガンマカーブとは?
ガンマカーブとは、「明るさ(輝度)」の扱い方を定義するものです。特に映像や画像で、数値と実際の明るさの見え方の関係を決めるグラフのカーブのことを指します。
現実の世界における光のエネルギーはリニア(線形)で、明るさが2倍になると光の強度も2倍になります。

しかし、人間の目の明るさ知覚は非線形で、暗い部分に敏感、明るい部分に鈍感という性質を持っています。
右図のガンマカーブのように0.2くらいの暗さでも、人間は中間くらいの明るさだと知覚しています。
暗い部分の明るさの範囲は知覚的に「持ち上げられて」広がっており、細かい違いが分かりやすくなっています。
一方、明るい部分は範囲が圧縮されており、違いが分かりにくく、情報量も少なくなっています。

※全体が一様に明るく見えているわけではなく、暗い部分だけが持ち上げられて、より明るく・広く見えるようになっています。
人間の目は暗いところに敏感
右図をご覧ください。昼間に電灯を1個から2個に増やしても、明るさの変化はあまり感じられませんが、夜間に同じ変化があると、周囲がかなり明るくなったように感じるはずです。
これは、人間の視覚が暗い部分の変化には特に敏感だからです。
ガンマカーブ的な知覚の特性により、暗い部分もある程度明るく見えるため、視覚的な情報を理解しやすくなっているのです。

ガンマ補正と逆補正
ガンマ補正
画像や動画を sRGB 色空間として保存するとき、輝度の値に 1/2.2 乗をかけるようなガンマカーブが適用されます。
これは、人間の目が暗い部分に対して敏感であるという特性に合わせて、暗部により多くの情報を割り当てることで、保存効率を高めるためです。
この処理を ガンマ補正(エンコード) と呼びます。

逆ガンマ補正
そして、それを sRGB 対応ディスプレイで表示する際には、ディスプレイ側が 2.2 乗のガンマカーブをかけて画像を再現します。
これにより、ガンマ補正された画像はリニア(物理的な光強度に比例)に近い形で出力され、人間の目に自然な明るさとして映ります。
この処理は 逆ガンマ補正(デコード)、あるいは 逆補正 と呼ばれます。
ガンマ補正や逆補正を行い、リニアな光の強さに戻すことで、現実に近い表示を実現しています。
しかし、最終的にそれを見るのは、人間の目――非線形な知覚(ガンマカーブがかかった視覚)です。
つまり私たちが見ている映像や画像は、結果として“またガンマがかかったような見え方”をしているのです。
それが自然に見えるんだから仕方ないですね…。


画像を保存するときに0.2の数値を0.5にして、それをディスプレイでまた0.2に戻す…最初の数値に戻ります。(※数値は厳密なものではありません)
(※歴史的には、もともと CRT モニターが 2.2 のガンマ応答を持っていたため、それに合わせて画像の保存時にあらかじめ逆ガンマ(1/2.2)をかける必要がありました。
現在ではディスプレイ側で自由にリニア出力することも可能ですが、人間の視覚に合わせた効率的なデータ圧縮として、sRGB 形式のガンマ補正は依然として一般的に使われています。)
カラーマネジメントでは、異なる色空間(例:sRGB、AdobeRGB、Rec.709など)間で正しく色を扱うために、色空間変換の際にガンマカーブの補正や逆補正が行われます。
これは、色の見え方や明るさを正確に保つために必要な処理です。
色域(Color Gamut)と白色点(White Point)
色域とは?
色域(しきいき)とは、ある機器(モニタ・カメラ・プリンタなど)が再現できる色の範囲のことです。
右の図のように、人間の目に見える色の範囲(可視光の色域)を全体として、各色域(Rec.2020、Rec.709)がその中のどの領域まで表示・記録できるかを示しています。

- sRGBやRec.709(ほぼsRGBと同じ)は一般的なモニタで使われる標準的な色域
- Display P3やRec.2020は、それよりも広く鮮やかな色を出せます
広い色域ほど、より鮮やかでリアルな色を表現できますが、対応していない機器では正しく表示されないこともあります。
広い色域から狭い色域への変換は、一部の色は再現できませんが、色域圧縮などの処理によって、なるべく自然な見た目になるよう調整されます。
色域圧縮(Gamut Mapping)とは表示できない色(sRGBの外側にある色)を、なるべく目立たないように近い色へマッピングする技術です。

上の図は、BlenderでDisplay DeviceをsRGBとRec.2020に切り替えて表示した比較です。
私のモニターはsRGBの色域を持っているため、sRGBを選んだ場合はモニターに合わせた最適な表示が行われ、鮮やかな色がきれいに再現されます。一方、Rec.2020に設定すると、モニターが対応していない広い色域を前提とした表示になり、色域圧縮が不十分になってしまうため、全体的に色がくすんで見えてしまいます。
白色点とは?
白色点(ホワイトポイント)とは、「この色を白とする」という基準のことです。
色域には白の基準点が設定されており、この基準が異なると、同じ色でも少し青みがかったり赤みがかったりして見えることがあります
Rec.2020、Rec.709、sRGBはみんなD65(昼光色)という白色点を使っています。

❷トーンマッピング
トーンマッピングとは
現実の光の強さ(リニアな明るさ)を、見た目が自然に見えるように、うまく圧縮して表示する処理のこと。
これは主に、ダイナミックレンジ(明暗の幅)の調整を目的としています。
現実の明るさは0からほぼ無限大までと非常に幅が広いですが、
ほとんどのディスプレイではそんな広い範囲の明るさをそのまま表示できません。

たとえHDR(ハイダイナミックレンジ)画像などで幅広い明暗を持つデータを作っても、
ディスプレイには限界があるため、
明るすぎる部分や暗すぎる部分は潰れてしまいます。
そこで「トーンマッピング」によって明暗の情報をうまく圧縮し必要に応じてカットや調整をして自然な見た目や雰囲気になるよう表示をコントロールします。
Blenderでトーンマッピングを設定するのはビュー変換(View Transform)です。Standard,Filmic,Agx,Rawなどがあります。

Standard
BlenderのStandardはほぼほぼsRGBの見た目に合わせた表示。トーンマッピングらしい圧縮処理はほぼ無く、明るい部分がすぐに飛びます。(白くなる)色の彩度が落ちないので、セルルックなどの2D表現によく使われています。
FilmicやAgX
ハイライト(明るい部分)をゆるやかに圧縮し、白飛びを防ぎます。中間をちょっと狭めて、明るい方に段階を多く持たせてるようなカーブです。リアルな、映像的表現に向いています。より多くの明暗の範囲を表現できます。(AgXの方が色が濁りにくく、現代的と言われています)
しかしやっぱり現実の方が光りも色も豊かなんですよね、CGやってないで外の景色を見た方がいいのかも…?限られた制限の中で自由に表現するのも素敵ですけど、どちらにしてもたまには外に出て現実の光や色を見るのは大切ですね。


View Transform:Standardの方は明らかに明るいところの色がすべて白く潰れてしまっています。Agxの方が明るいところまできちんと色が残っています。中間トーンの彩度が高いのはStandardの方ですね。
シーンリニアワークフロー
カラーマネジメントは、Blender内でも機能しています。Blenderで、外から来た素材(画像や動画)をBlenderで扱いやすいリニアな色空間に変更し、またモニタなど別の色空間に変更して出力する流れをシーンリニアワークフローといいます。

(※BlenderのカラーマネジメントはOpenColorIOが持っている色空間の定義や変換ルールを使っています。これを使うことで、Blenderだけでなく他の対応ソフトとも色の扱いを合わせられ、どのアプリでも同じ色に近い結果を得られます。)
Blenderでシーンリニアワークフローを正しく行うには
正しく綺麗な出力結果を得るためには、レンダリング、表示、画像の保存にそれぞれ異なる色空間(Color Space)が必要です。
画像の取り込みにはsRGB色空間がよく使用されます。ガンマカーブの項目でも言及しましたが、人間の目の特性に合わせてガンマ補正をかけて明るい部分と暗い部分のバランスを調整したほうが、自然で美しく見えるため、sRGB色空間で画像が保存されていることが多いからです。テクスチャマップのノーマルやラフネスマップなどは値として読み取りたいため、Non-Colorでリニアに読み取ります。
レンダリングやコンポジットなどの計算処理は、リニアな色空間で行うのが最適です。これは、現実の光のふるまい(たとえば、光の加算や減衰)に近いため、物理的に正確なライティングや合成が可能になります。このように、Blender内で計算に使われるリニアな色空間のことをシーンリニア色空間(Scene Linear Color Space)と呼びます。
画面に表示するための色の変換もします。これはレンダープロパティのColor Managementで行います。モニタに合うようガンマ逆補正をかけたり、ビュー変換で見た目を映像的に見えるよう調整したりしています。大体のモニタがsRGB対応なので、出力時のDisplay Device設定はsRGBになっていることが多いと思います。

上の図は、木の器の部分のテクスチャやHDRI背景画像がリニア色空間に変換され、Blenderが作業するシーンリニア色空間でレンダリングされて、また出力用にカラーマネジメントされている流れの図です。具体的にはこのようにユーザーが適切に設定しなければならない項目があります。(テクスチャのサイトから読み込んだテクスチャを自動で読み込んだり、アセットで読み込むと自動で適切に設定してくれます。)
画像の色空間について
画像や動画を読み込んだり保存したりする時には、カラーマネジメントを意識することが大切です。
PNGやJPEGなどの画像は、ほとんどがsRGB色空間で保存されていますので、Image Textureなどで画像として読み込むときに、Color SpaceでsRGBと設定する必要があります。こうすることで、Blenderがきちんとリニアな色空間の画像に変換し、レンダリングなどを正しく行うことができます。
画像の中には色ではなく、たとえばノーマルマップやディスプレイスメントマップのように、単にベクトルや位置情報を表しているだけのデータもあります。
こういった画像はNon-Color Data(非カラー データ)として設定して、色空間の変換を行わないようにする必要があります。
HDRI画像は、リニアなOpenEXR形式で出力され
ていることが多く、Blenderに読み込むと自動的にリニアな光データとして認識され、色空間は通常 Rec.709(リニア)として扱われます。
※本当はHDRI画像に埋め込まれたICCプロファイルやメタデータを確認して、正確な色空間を特定するのが理想的です。Polyheavenなどはそのまま設定するだけでいいと言っていますが。ICCプロファイルは埋め込まれてない場合もあるし、photoshopなどで見る必要があり、確認が難しいです。

中間ファイル
中間ファイルとは、作業の途中でいったん保存するファイルのことです。
あとで続きから作業したり、チェックしたり、素材として使ったりするために使います。
制作途中で使う中間ファイルとしては、OpenEXR形式が推奨されます。OpenEXRはリニア色空間のままで保存されるため、色の情報が失われません。そのため、後で合成や色調整、さまざまな形式への変換にも向いています。

- レンダー結果からそのまま出力
- PNG(16bit)で保存した中間ファイル画像
- OpenEXR(16bit)で保存した中間ファイル画像
の三通りの画像をコンポジットで取り込み、さらにレンダリング出力してみました。


PNG画像がとてもくすんでしまっています。OpenEXR形式の中間ファイルはレンダーレイヤーからの出力とそん色なく見えます。
OpenEXR形式の画像は中間ファイル、素材の画像の形式として適していることがわかります。
Display Device(ディスプレイデバイス)
Display Device(ディスプレイデバイス)
Blenderの画面が表示されるディスプレイの色空間を設定します。(出力するときのカラーマネジメントの設定の一部です。)

ほとんどのディスプレイはデフォルトでsRGBを使っていますが、最近の一部のディスプレイではRec. 2020という、より広い色域を持つ設定を選べるものもあります。これらはHDR(ハイダイナミックレンジ)コンテンツの表示にも対応しています。
Appleのディスプレイを使っているなら、Display P3の設定を選ぶのがよいとBlender Manualに書いてあります。
最も正確な色を表示するためには、使っているOSやディスプレイの設定がこの項目の設定と合っているかを確認してください。
まとめ
Blenderでのカラーマネジメントについて、自分なりに理解した範囲をまとめてみました。
数値やグラフは厳密なものではなく、図解画像もあくまで分かりやすさを優先しています。そのため、内容に大きな誤りがあれば、ぜひご指摘いただけると嬉しいです。
特に大事だと感じたのは、扱う素材の色空間を正しく把握し、それに応じてBlender側で適切に設定すること。さらに、出力時には「どう表現したいか」「どのモニタで見せるか」といった表示環境も意識して設定することが重要だと思いました。
リアルな画づくりを目指す場合には、広いダイナミックレンジに対応したトーンマッピング(たとえばAgX)を活用し、明暗の情報を損なわないように中間ファイルを扱うことも大切になります。
初心者のうちは、まずImage TextureノードのColor Spaceを正しく設定する習慣をつけることから始めるとよさそうです。
自分自身もまだ完全に理解できているわけではありませんが、少しずつ整理しながら進めていきたいと思っています。
参考記事
参考にさせていただいたサイト・記事です。もっと詳しく知りたいという方はぜひアクセスして深堀りしてみてください!
いつも使っているアイコン素材サイトです