ゲームグラフィックス、コンピュータグラフィックスは共に、ディスプレイ装置に表示することが前提であったために、レンダリングパイプラインが、この「ディスプレイ基準」で組み立てられて来た経緯がある。ところが、現実世界をリアルに表現しようとした場合、これは足かせとなる。この足かせを断ち切ろうという動きが近代リアルタイム3Dグラフィックスにおいても見られるようになってきた。

それが「ハイ・ダイナミック・レンジ・レンダリング」(HDRレンダリング:High Dynamic Range Rendering)だ。

もともとは学術的な研究テーマとして盛んだった「HDR」というキーワードは、今や、PCにおけるリアルタイムレンダリングのみならず、家庭用ゲーム機のグラフィックス表現としても標準となりつつある。

今回からはしばらく、このHDRレンダリングというテーマについて見ていくことにしよう。

HDRレンダリングとは?

そもそもHDRレンダリングとはどういう意味があるのだろうか。まずはここから解説していこう。

「HDRレンダリング」の定義としては「表示に用いるディスプレイ機器の輝度/色域の限界に囚われず、幅広い輝度/色域でレンダリングを行うこと」ということになる。

現在のPCで日常的に取り扱う色表現はRGB(赤、緑、青)の三原色が各整数8ビットずつで表現される24ビットカラー、1677万色が最も身近な存在だといえる。

このディスプレイに採用されている「1677万色」というものは、人間の一度に視覚できる輝度や色のおよその範囲のRGB三原色光を256段階(0~255)段階で表現するものだ(R256×G256×B256=16,777,216)。人間が一度に見ることのできる輝度範囲/色範囲をこの1677万段階という分解能で表現する分にはほぼ必要十分だが、現実世界をそのまま再現するには不十分な状況が出てくる。

下図は人間の視覚を分かりやすく図解したものだ。

視覚のダイナミックレンジ。桿状体は暗い光を感じるための視覚細胞。そして円錐体は明るい光や色を感じる視覚細胞。下の数値の単位はルミナンス値(lum/m2)

例えばだが、「太陽光を反射する雪原(1E+6=106)」は相当明るく、「夜空の星空が地表を照らす明るさ(1E-6=10-6)」は相当暗いことはイメージできるはずだ。この明るさや暗さはルミナンス値(lum/m2)では実に10の12乗(1012)の"格差"がある。

3Dグラフィックスはルミナンス値でレンダリングするものではないが、それでも現実世界の明るさと暗さをエネルギーとして記録するにはとてつもない表現域が必要になるということは想像できたと思う。

前述の雪原と夜空の例が現実世界の最大の明るさと暗さを示していたとして、これを数値表現するためには1012の範囲を表現できなければならないことになる。

話を分かり易くするために、「取り扱える数値の範囲」という意味においての"ダイナミックレンジ"を計算してみよう(用語の定義としての"ダイナミックレンジ"とは表現できる最小値と最大値の対比を表す単位である)。

対数を取って10を掛けたものをdB(デシベル)というが、1012の表現幅が必要ということは120dBのダイナミックレンジが必要になるということだ。

いわゆる1677万色は輝度を整数8ビット、256段階で記録する方式だから256≒102.4となり、約24dB分しか記録できないことになる。そう、現実世界(120dB)の約40億分の1(≒1012÷102.4)しか記録できないということなのだ。もちろん、1012の幅の階調を8ビットの256段階で無理矢理表現することも出来なくはないが、これでは分解能としては粗すぎる。

この広大なダイナミックレンジの明るさ、暗さを、なるべく正確に記録しようというのがHDRレンダリングの基本的なアプローチになる。(続く)

(トライゼット西川善司)