Unityのプロジェクト設定で、リニア色空間/ガンマ色空間を設定できますが、あれって何なんでしょうか?

よく分からなかったので調べてみました。

1.歴史的経緯

昔、ブラウン管テレビはなんか色が暗めに表示されちゃう問題があったそうです。

じゃあ、その分映像の方を明るめに補正して放送すればテレビ観てる人は普通の映像が観れます。

これがガンマ補正(明るくする)です。

 

液晶テレビやパソコンの液晶ディスプレイではもうブラウン管の時の問題起きないのに、昔の慣習を引きずってガンマ補正した映像を表示する規格を続けてしまいました。

ガンマ補正された映像をそのまま液晶で表示するとなんか明るすぎる見た目になっちゃうので、わざわざディスプレイ側で逆ガンマ補正(暗くする)をかけています。

 

ガンマ補正された映像に対して、余計な補正がかかってない正常な映像をリニアと呼びます。

 

さて、それじゃあ我々がPCでお絵描きしたイラストやスマホで撮った写真はガンマなのか、リニアなのか?

ガンマです。

PCディスプレイで逆ガンマ補正された上で普通に見えてるって事はガンマです。

(参考:リニアワークフローて何?(専門用語抜き挿絵マシマシ)

 

2.リニア色空間の方がいい

Unityの設定でリニア色空間を選ぶと何が起こるのか?と言うと、レンダリングの最後にガンマ補正(明るくする)してくれるようになります。

ガンマ色空間だとガンマ補正してくれません。

 

ガンマ色空間(ガンマ補正されない)だと、「何か計算上よりライティングの表示結果が暗いな?」って事になります。(ディスプレイ側で逆ガンマ補正されちゃうから)

だからライトを強めにして対応します。

すると元々明るかったところが白飛びしたり、影が濃くなって黒で潰れたりしちゃいます。

 

リニア色空間(最後にガンマ補正される)ならそういう問題は起きません。

 

ところでキャラのテクスチャ画像などは、上述した通り最初からガンマ補正(明るくなってる)がかかってますが、これにさらにレンダリング時にガンマ補正すると白っぽく表示されてしまいます。

なのでリニア色空間設定の時はシェーダからテクスチャの色をサンプリングする時に逆ガンマ補正した色を取得するような仕組みになってます。

これをsRGBサンプリングと言います。

 

手描きじゃなくてプログラムで計算して作ったテクスチャなどはリニア(ガンマ補正されていない)だったりします。

そういうテクスチャはsRGBサンプリングをオフにする必要があります。その場合、テクスチャのインスペクタのsRGBチェックボックスをオフにします。

 

 

参考:こちらの動画の最初の方でリニア色空間設定について解説されてます。

[Unite 2015 TOKYO]Unity 5グラフィックスガイド 実践編 from Unity Technologies Japan G.K. on Vimeo.

 

参考リンク:

リニアレンダリング概要

物理ベースレンダリング -リニアワークフロー編 (1)-

物理ベースレンダリング -リニアワークフロー編 (2)-

Linear Rendering Support on Android and iOS

Linear Rendering Support with WebGL 2.0