こんにちは、岩崎です。
今月SIGGRAPH2015でいろいろな技術情報が発表されましたね。今後このブログでも取り上げていきたいと思います。ゲームCGにも使える情報盛り沢山でしたのでこれから楽しみです。
そしてお知らせです。CEDEC2015にて弊社Cygamesも講演致します。
ハイエンドゲーム機での開発について昨年 Play Station®4 への参入発表からの情報のアップデートがされる予定です。
詳しくはこちらをご覧ください。
物理ベースレンダリング 連載2本目は輝度計算とモニターの出力結果についてのお話です。
フォトリアルで物理的に正しい輝度を計算して出力するには画面に映る明るさも正しく補正する必要があります。
具体的にどのような補正を行えばよいのか解説してみたいと思います。
さて、皆さんが目にするペイントソフトでは大抵0~255のグレースケールグラデーションは次のような見た目になっていると思います。
普段使っている人も「こういうものだ」と思い込んでそれを使っているかもしれません。
しかしこのグラデーション、実は「見た目の明るさ」と数字が合っていないのです。
な、なんだってー!?
スポイトで色を拾ってみると真ん中あたりの値は128になっていて一見間違っていないように見えます。
一体どういうことでしょう?
上図のグラデーションの輝度をみてみます。その値を一覧できるようにしてみました
するとどうでしょう。真ん中あたりから黒にかけて輝度の落ち込みが激しいことがわかります。
50%の輝度のつもりで128を使っていたピクセルは21.7%の輝度しかありません。
半分だと思っていた輝度が4分の1以下の明るさになっています。
モニターの輝度がおかしい?と思いたくなるような結果ですが、実はここに注意しなければならないことがあります。
ディスプレイモニターの歴史的背景
まずはこの輝度の違いの謎を解くために「そもそも何故そうなるのか?」という原因を追ってみたいと思います。
遡ること1953年、世の中にテレビが誕生しました。
当時のテレビはカラーではなく白黒テレビで今の液晶などではなくブラウン管 (CRT = Cathode Ray Tube) で出来ていました。
このブラウン管とは、技術立国ドイツのカール・フェルディナント・ブラウンが発明した真空管でした。
仕組みは後方の電子銃から電子(電子ビーム)を発射して磁界によって曲げられ、蛍光面(画面)にあたって輝くというものです。
放送局ではテレビカメラで撮影した画像を水平525本の線にして、これを電気信号に直して送りました。
電波をアンテナで受けて、このアナログ電気信号を電子ビームの強弱として変換し、ブラウン管で蛍光面の明るさの濃淡として映し出すのがテレビ放送の仕組みです。
このアナログ放送が 2011年7月に終了し、地上デジタル放送に移行したことは記憶に新しいです。
ディスプレイガンマ
テレビに映したい色を出力する時、ブラウン管では白いところは電子をもっとも強く当て、黒いところは全く当てません。
では中間輝度をどうするのかというと、半分だけ弱くするわけです。照射電圧を操作することで実現されます。
しかしながらここで輝度の差異が発生します。電圧を半分にしてもブラウン管の明るさが半分に見えないのです。
本来想定している輝度よりも若干暗く表示されます。
これがブラウン管の特性で、電圧に対してガンマ2.2で計算した輝度で出力されます。この場合の2.2という値がブラウン管の特性のカーブになります。
$$\Large 輝度=電圧出力率^{2.2}$$
※ 出力率は0.0~1.0
これをまっすぐな直線にするために補正回路を搭載すればこの問題は解消できたのですが、当時の生産事情で回路を省略することで部品数を減らし、なるべく安くして普及を促したといわれています。
「テレビのほうじゃなくて映像側でガンマ2.2減衰を相殺する輝度で補正して送信してくださいね」
そうして生まれたのが NTSC と呼ばれる規格でした。
Wikipedia NTSC
https://ja.wikipedia.org/wiki/NTSC
数億台分もの補正回路を各受像機毎に付けるより、放送事業者側で一括補正した方が受像機のコストダウンになる為である。
この解決のために映像のほう(もしくは出力信号)で減衰を考慮してあらかじめ強い信号で送ります。
減衰を打ち消すためには逆スケールをかければ良いです。この逆スケールのことを通称デガンマとも呼びます。
$$\Large 輝度=電圧出力率^{1/2.2}$$
Photoshopのカラー設定で「NTSC(1953)」を指定するとガンマ値は「2.2」になることがわかります。これはこのデガンマのためのカラープロファイルです。
1/2.2は0.4545…になりますので0~1の輝度をおよそ0.45乗することで補正をかけることができるというわけです。
こんな経緯で誕生したディスプレイガンマという考え方ですが、何故ここまでブラウン管について説明したかといえば今の世代でもこの仕様が引き継がれているからです。
液晶ディスプレイでもこのガンマ2.2を考慮する必要があります。
せっかく物理ベースレンダリングをするからには輝度も正しく出力しなければなりませんのでこの知見が非常に大切です。
色空間 sRGB
Wikipedia 色空間
https://ja.wikipedia.org/wiki/%E8%89%B2%E7%A9%BA%E9%96%93
いままで説明してきたガンマ2.2ですが、この補正カーブのうちまっすぐではなく強調している側のカーブの色空間をsRGB色空間と呼びます。
数値的にはカーブで歪んでいますが、実際に画面に出力されるときにはまっすぐになります。
sRGB空間で用意したグラデーションとの比較は次のようになります。
※元データーの輝度に1/2.2乗することで作成可能です。
反対にここでは数値的にまっすぐなデーターをリニア色空間と呼んでいます。(リニア色空間は計算は正確に行うことができますが、そのままだとモニターでの見た目の輝度は正しくありません。)
随分印象が違って見えますよね。これほどの輝度差が発生しますので色再現性には非常に重要な要素になります。
sRGB空間のほうが輝度の変化がなだらかに変化していることがわかります。リニア空間のほうは黒い領域が多く感じられます。
リニアは本来の想定よりも暗く見えてしまっている状態です。
それでは実際に通常の物理ベース点光源を一灯設置して輝度の違いを比較してみましょう。
照明計算はリニア空間で行い、最後のディスプレイガンマをリニアのままとsRGBへデガンマしたものとで比較しています。
いかがでしょうか?
それぞれ印象も大きく異なりますが、弱い光が届く距離にも違いが出ていることにお気付きでしょうか?
もちろん両方とも同じ照明計算で出力した結果です。
違うのは最後にデガンマをしているかどうかだけです。
このようにガンマ補正が映像コンテンツ制作にとって重要なものということがご理解いただけると思います。
ゲーム画面も映像の一つですからこの条件に例外なくあてはまります。
リニア空間とsRGB空間を適切に使い分けることで正しいレンダリングを行うことができるようになります。
次回は「リニアワークフロー編(2)」としてこのガンマ補正をゲームの中でどう取り扱って制作していけば良いか詳しく解説していく予定です!