HDRレンダリングの歴史
HDRレンダリングの基本的な概念が分かってきたところで、ここ最近までのHDRレンダリングの技術動向を簡単に振り返っておこう。
前節までで、HDRレンダリングはFP16-64ビットバッファのような浮動小数点バッファを活用して行うもの……というような論調で解説してきた。浮動小数点バッファが実装されたのはDirectX 9世代/SM2.0対応GPUになってからなので、それまでHDRレンダリングの実装はなかったのかというと実はそうではない。
それよりもわずかに前に、「擬似的なHDRレンダリング」というアプローチで3Dゲームに実装された例がある。
この技術で注目を集めたのは、Xbox用ゲームとして発売された「DOUBLE S.T.E.A.L」(ぶんか社,2002年)だ。これは日本で開発されたゲームで、擬似的なHDRレンダリングではあったが、その後の本物のHDRレンダリングの実装にも応用できる数々の基礎技術を確立したものであった。
XboxのGPUはDirectX 8世代SM1.x対応のものであり、FP16-64ビットの浮動小数点HDRバッファは取り扱えなかったので、通常のint8-32ビットの整数LDRバッファをユニークな使い方をして疑似HDRレンダリングのテクニックを実装していた。具体的にはαRGBのうちの、α部に8ビット/256段階では表現できない高輝度情報を格納するようにして実現していた。
この疑似HDRレンダリング技術については本連載の後の回で解説する予定だ。
2002年後期、DirectX 9世代/SM2.0対応GPUが登場して、浮動小数点バッファがサポートされるようになったものの、マルチサンプル・アンチエイリアス(MSAA:Multi-Sampled Anti-Aliasing)処理が適用できないという制約があったため、実は、このあともしばらくは、3DゲームのHDRレンダリングは、「DOUBLE S.T.E.A.L」的な疑似HDRレンダリングの実装が主流となっていたのであった。
2004年に「本格的なHDRレンダリングを実装した」という触れ込みで登場した3Dゲーム「HalfLife2」(Valve,2004)でも、α値にRGBに共通利用されるスケール値(倍率値)を入れて、各RGBの値をX=X×α×16でデコードするような疑似HDRレンダリングを実装していたに過ぎなかった。そのため、動的なトーンマッピングは実装されておらず、環境マップなどもHDR情報は切り捨てるゆうな簡易実装になっていた。
「HalfLife2」(Valve,2004)より。空の太陽はHDR情報が活用されたブルームを起こしているのに水面に映り込んだ太陽は暗くなってしまっている。HalfLife2ではテクスチャにはHDR情報が反映されていなかった |
2004年にはDirectX 9世代/SM3.0対応GPUが発表され、FP16-64ビットバッファのブレンディングがサポートされるなど、その実用性も高まってくる。これを受けて2005年頃になると徐々にFP16-64ビットバッファを活用したHDRレンダリングの実装を果たした3Dグラフィックスエンジンも徐々に登場し始めるが、主流にはなりきれなかった。というのも、FP16-64ビットバッファに対するアンチエイリアス処理に対応したGPUがATI(現AMD)のRadeon X1000シリーズのみに限られ、競合のNVIDIA GeForce 6000/7000シリーズでは対応していなかったためだ。
2006年になると、FP16-64ビットバッファを活用したHDRレンダリングに対する研究が進み、これを実装した3Dゲームグラフィックスが増えてくる。これは、2005年末に発売されたXbox 360の登場の影響も少なからずあったと思われる。Xbox 360のGPUはDirectX 9世代/SM3.0対応のGPUで、3Dゲームグラフィックスの設計が、DirectX 9世代/SM3.0対応のGPUを前提にしたものになってきたためだ。(続く)
「AGE OF EMPIRES III」(ENSEMBLE STUDIOS,2005)はメインストリームなPCゲーム作品としては初めてFP16-64ビットバッファによるHDRレンダリングを採用したタイトルとなった |
(トライゼット西川善司)