現実世界を記録するのに必要なダイナミックレンジとは?
そこで、DirectX 9世代SM2.0対応GPUの時代に、HDRレンダリングを実現するのに必要な120dBほどの数値表現能力を持ったフレームバッファフォーマットとして提供されたのが、各RGBが16ビット浮動小数点(FP16)で表されるフォーマットだ。
FP16は符号1ビット、仮数10ビット、指数5ビットで成り立っている浮動小数点フォーマットだ。表現範囲は(2の10乗)×(2の32乗)≒4.4×10^12、つまりダイナミックレンジ120dBとなり(指数5ビット=2^5、つまり32)、FP16はダイナミックレンジとしては現実世界のかなりの割合の輝度レンジを記録できるポテンシャルがあることが分かる。
コンピューティングの世界で浮動小数点表現というと、「単精度」といわれる32ビット浮動小数点(FP32)と、「倍精度」といわれる64ビット浮動小数点(FP64)が一般的だが、このFP16は主にグラフィックス用として提唱されたものだ。ちなみに、この提唱者はSF映画「スターウォーズ」の特殊効果でお馴染みのILM(Industrial Light & Magic)のCG部門で、FP16はこのILMが提唱するHDR映像のオープンソース規格「OpenEXR」の中に定義されている。
単精度のFP32は符号部1ビット、指数部8ビット、仮数部23ビットで成り立つ浮動小数点フォーマットなので、表現範囲は(2の23乗)×(2の256乗)=9.7×10^83であり、ダイナミックレンジは830dBと、こちらは逆にオーバースペック過ぎる。
そうした経緯があり、最新世代のGPUでは、αRGBが各FP16で表される64ビットバッファ(16ビット×4、以下FP16-64ビットバッファ)が、リアルタイム3Dグラフィックス向け、3Dゲーム向けの標準的なHDRレンダリング向けのバッファのフォーマットとなっている。
ただ、従来のαRGBが各整数8ビットで表される32ビットバッファ(以下、int8-32ビットバッファ)と比較すると倍のビデオメモリを消費し、32ビットバッファと同等パフォーマンスを実現するには単位時間あたりに求められる帯域やバス性能は2倍になる。
これはDirectX 9世代/SM2.0対応GPUの時は、負荷的にかなり厳しいものであったのだが、最新世代のDirectX 10世代/SM4.0対応GPUにおいては、現実的に問題なく活用できるソリューションとなりつつある。
HDRレンダリングのメリットとは?
HDRレンダリングは、現実世界に近いダイナミックレンジの情報をほぼそのまま記録していくようなレンダリング技法であるということはイメージできたと思う。
とはいえ「それが一体どうした?」という疑問も浮上するかもしれない。ハイダイナミックレンジでレンダリングしたとはいえ、表示するディスプレイ装置は従来の1677万色のディスプレイであるため、そのままでは表示することが出来ない。
FP16-64ビットのHDRバッファにHDRレンダリングしたところで結局、表示させる段階でint8-32ビット相当のLDRバッファに丸め込んで減色処理しなければならないのだ。
となれば、HDRレンダリングのメリットとは一体どこにあるのか?
それは、主に、ここから紹介する3つの要素にあるとされる。
(1)陰影がよりリアルになる (2)露出のシミュレーションが行える (3)まぶしさの表現が可能になる
HDRレンダリング第一の効能~陰影がよりリアルになる
HDRレンダリング第一の効能は、陰影がよりリアルになるというところだ。
例えば、光をあまり反射しない材質として道路の路面のアスファルトを例に挙げるとしよう。
道路の材質で知られるアスファルトの光の反射率はわずか7%程度だという。これは「ほとんど反射しないが全く反射しないわけではない」という反射率だ。
例えば、一般的に流通しているαRGB各整数8ビットの1677万色モードにおいて、8ビット整数表現で最も明るい255の7%は約18となる。つまりRGBの全てが255の白色光でライティングしても、その陰影処理の結果はRGBの全てが18というかなり暗い色、階調になってしまうということなのだ。
しかし、現実世界では、高輝度の太陽光を受けた路面は鈍く輝いて見える。
これは3Dグラフィックスに置き換えると、光源の太陽がディスプレイで表現される最高輝度のRGB=255どころではない、とてつもなき高い輝度値を持っているためだ。
HDRレンダリングは、このような「RGBの全てが255で頭打ち」という制約を取り払うものなので、従来のレンダリング技法ではどうしても埋もれてしまっていた陰影を浮かび上がらせる効果が期待できるというわけだ。(続く)
「HalfLife2:Lost Coast」(VALVE,2005)より。LDRレンダリングではこのように全体が暗い |
HDR光源を用いたHDRレンダリングでは、このように埋もれた陰影が見えるようになる。画としては全体が明るくなったような感じになる。なお、「HalfLife2:Lost Coast」では、レンダリングにFP16-64ビットバッファのレンダーターゲットを採用している |
(トライゼット西川善司)