互換性とパフォーマンスを重視するならば疑似HDRレンダリング?
DirectX 10世代/SM4.0対応GPUでは、FP16-64ビットのレンダーターゲットをただ利用すればよい。幅広いダイナミックレンジを、FP16-64ビットならば特別な小細工無しに絶対値でレンダリングが行える。
それ以前のDirectX 9世代/SM2.0~3.0対応GPUでも、互換性やパフォーマンスの問題がクリアできるのであれば、FP16-64ビットバッファを利用することになる。
そうでない場合は、int8-32ビットの整数LDRバッファを利用した疑似HDRレンダリングの採用が適しているとされる。
8ビット整数であれば0~255の値が表現できるわけだが、通常は、これを0.0~1.0の値に対応付けた輝度表現になる。これを例えば0~255を0.0~2.0までの値に対応することにして、通常時の2倍のダイナミックレンジ(表現域)を持つと見なすようにするのだ。つまり、イメージ的には色表現の分解能を半分にする変わりに、輝度表現を2倍にする……と見なしてレンダリングをするのだ。つまり、通常のLDRレンダリングで最大に明るい255がこの疑似HDRレンダリング技法では128となるわけだ。
このまま全ての疑似HDRレンダリングを終えて、後段のブルーム/グレア生成を終えてトーマッピングを行った際には幅127の範囲が0~255の範囲に戻されることになる。
もちろん、0~255を0.0~4.0まで……というようにダイナミックレンジをさらに広げることもできなくはない。しかし、後段のトーンマッピングの処理で、幅63の範囲が0~255に戻されることになり、分解能は前述の0.0~2.0のケース以上にさらに低下してしまう。
そのため、この手法を使う場合には「0~255→0.0~2.0」とする利用が多いようだ。
前節で紹介した疑似HDRレンダリングの開祖的存在である「DOUBLE S.T.E.A.L」や、「ヴァルキリープロファイル2」(トライエース,2006)などでも、「0~255→0.0~2.0」とした疑似HDRレンダリングを採用している。(続く)
(トライゼット西川善司)