PS3のGPU「RSX」はNVIDIAのGeForce 7800 GTXをベースにした設計であるため、FP16-64ビットバッファに対してMSAAが利用できない制約も受け継いでしまっている。コナミのPS3専用タイトル「メタルギアソリッド4」(2008年)では、この制約とフィルレートに配慮して、FP16-64ビットバッファの採択を断念した。

CEDEC 2008のスライドより。「メタルギアソリッド4」では32ビット整数バッファでのHDRレンダリングを採用した

なお、やや変則的な手法ではあるが、「Half-Life2」の開発元のVALVEは、このFP16-64ビットバッファに対する制約を回避しつつ、FP16-64ビットバッファに対してHDRレンダリングするテクニックを発表している。

このVALVEの実装では、テクスチャやレンダリング先をFP16-64ビットバッファとするが、ブルーム効果やグレア効果の処理の前にトーンマッピングを行って32ビットのLDRバッファにしてしまう。

VALVEが実装した妥協案的リアルHDRレンダリング

この方法では、ブルーム効果やグレア効果を処理する時点ではHDR情報は完全に失われてしまっているわけだが、LDR(RGBが0~255)バッファ中の高輝度領域(例えばRGBが平均240以上など)を抽出し、そこからブルーム効果やグレア効果を生成する。反射や屈折した情景(動的生成される環境キューブマップなど)についても、レンダリング自体はHDR次元で行われ、そのシーンに適合したトーンマッピングが行われるので、HDR情報はたしかに失われてしまうが、後段のブルーム効果、グレア効果も矛盾のない出方をしてくれるという。厳密なHDRレンダリング手順手順としては全く正しくはないのだが、総じて不自然さはないとしている。

トーンマッピングされたあとのLDRフレーム

ここから高輝度部をボカしてブルーム効果フレームを生成

これらを合成

この方式のメリットは、ブレンディング、MSAAなどがLDRバッファで行えるということ。つまり、FP16-64ビットバッファでMSAAが使えないDirectX 9世代のGPUでも互換性が保証されるのだ。この妥協案的リアルHDRレンダリングは「Half-Life2:LostCoast」(VALVE,2005)、「Half-Life2:EPISODE ONE」(VALVE,2006)で採用されている。

妥協案的リアルHDRレンダリング技法を実装した「Half-Life2:LostCoast」(VALVE,2005)より。左が2004年のオリジナル「Half-Life2」時代の疑似HDRレンダリング。右が妥協案的リアルHDRレンダリングによるもの。右の方は水面に映り込んだ太陽にもちゃんとブルーム効果が出ている事が分かる

2007年に発売されたWindows Vistaとほぼ同時に提供が開始されたDirectX 10世代/SM4.0世代のGPUではFP16-64ビットバッファ、FP32-128ビットバッファに対してもMSAA処理が適用できるようになり、理想通りのHDRレンダリングの工程が全てのメーカーのGPUで実装できるようになっている。

こうしてみてくると、2002年頃から始まった疑似HDRレンダリングの期間が意外にも長く、最近になってやっと理論通りの本物のHDRレンダリングが実現できるようになったということが分かる。(続く)

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