前回に引き続いて、もう一つの非互換部分に迫ってみたい。それは各GPUの「レンダーターゲット」サポートの違いだ。
レンダーターゲットとは、3Dグラフィックスの描画先バッファ、いわゆる「フレームバッファ」のこと。通常、3Dグラフィックスは32ビットカラーとか16ビットカラーといったバッファに描画されるわけだが、Direct X 9のDirect3D(以下 D3D9)では、仕様上、これ以外のフレームバッファが新設され、これがPC上の3Dグラフィックスにおいて、フォトリアリティ実現へのステップアップに繋がるはずだった。
フォトリアリティの実現では具体的になにが必要になってくるのか。これも順を追って説明していこう。
従来、3Dグラフィックスはディスプレイに表示できる色数で描画を行ってきた。この説明に多くの読者は「なにを当たり前のことを」と思うかもしれない。
ところが、現実世界にはその数千倍以上の色(光)が存在するのだ。例えば「Windows XPデスクトップ画面の背景色」と「晴天の青空」は同じ水色でも、どちらが眩しく感じるか。この違いは誰でもすぐに実感できるだろう。
実際は人間の視覚能力にも限界がある。眩しいときには瞳を絞って、眼球内側壁面の網膜に到達する光の量を調節している。それでも強い光を見たときには、その光が眼球内の水晶体で乱反射したり、受光細胞が受ける情報が飽和気味になったりして、「視界全体が白い光に包まれて見える」などの、一種独特の映像を見ることになる。このような特殊な視覚現象こそが人間の「リアル」という感覚に繋がっているのだ。
そういうわけで、PC上の3Dグラフィックスの表現でも、ディスプレイの表示色限界については度外視して、まず現実世界に則した情景をレンダリングし、これに「人間が見た感覚」というシミュレーションを付加することで、リアルな映像を作り出そうというアプローチがとられた。これが「ハイダイナミックレンジ(HDR)レンダリング」という技術だ。
HDRレンダリングという概念は、1677万色の数千倍に及ぶ広い範囲の光(色)を(演算処理の中で)描画することから始まる。となれば、演算で扱うデータの桁数も膨大なものになり、Direct X 8時代まで標準に使われてきた32ビット整数カラーでは手に負えなくなってくる。
D3D9では、このHDRレンダリングに対応するために、3Dグラフィックスを描画するフレームバッファ(レンダーターゲット)として、浮動小数点実数フレームバッファやαRGBの各ビットを8ビットより大きくした整数フレームバッファが新設された。
この新規格バッファに1677万色を超えるダイナミックレンジでシーンをレンダリングしたあとで、どの程度の明るさを基準点にしてシーンを見るかを決定する(これは、瞳を絞って光量を調整する人間の動作に相当する)。HDRでレンダリングしたシーンを、ここで決定した基準の明るさを中心に1677万色へ丸め込む最終プロセスでは、プログラマブルピクセルシェーダを活用して処理を行う。
この、HDRシーンをディスプレイ表示色に丸め込む工程はとくに「トーンマッピング」と呼ばれている。
HDRレンダリングに欠かせない浮動小数点実数レンダーターゲットや多ビット整数レンダーターゲット。実はこのフォーマットに対するサポート範囲もDirect X 9世代GPUのなかでばらつきがある。
これを調べてみたのが下の二つの表だ。フォーマットの表記自体は、前回のテクスチャフォーマットの表記と同一。また、3Dゲームにあまり活用されなさそうなフォーマットについては省略している。
浮動小数点実数レンダーターゲット | GeForceFX系 | RADEON9500以上 | DeltaChrome系 | Volari系 |
D3DFMT_R16F | × | ○ | × | ○ |
D3DFMT_G16R16F | × | ○ | ○ | ○ |
D3DFMT_A16B16G16R16F | × | ○ | × | × |
D3DFMT_R32F | × | ○ | ○ | ○ |
D3DFMT_G32R32F | × | ○ | × | × |
D3DFMT_A32B32G32R32F | × | ○ | × | × |
整数レンダーターゲット | GeForceFX系 | RADEON9500以上 | DeltaChrome系 | Volari系 |
D3DFMT_A8R8G8B8 | ○ | ○ | ○ | ○ |
D3DFMT_R5G6B5 | ○ | ○ | ○ | ○ |
D3DFMT_A1R5G5B5 | × | ○ | ○ | ○ |
D3DFMT_A4R4G4B4 | × | ○ | ○ | ○ |
D3DFMT_G16R16 | × | ○ | × | ○ |
D3DFMT_A2R10G10B10 | × | ○ | ○ | × |
D3DFMT_A16B16G16R16 | × | ○ | × | × |
これを見ても分かるように、浮動小数点実数レンダーターゲットに関して万全なサポート体制になっているのはRADEON9500以上だけ。GeForce FXに至ってはまったくサポートされていないことが分かる。
また、DeltaChromeやVolariはいくつかサポートしているものがあるが、もっとも活用しやすいフォーマットと思われる「D3DFMT_A16B16G16R16F」「D3DFMT_A32B32G32R32F」はサポートしていない。
整数レンダーターゲットについても、すべての多ビット整数レンダーターゲットをサポートしているのはRADEON9500以上のみ。GeForce FXはいわゆる32ビットカラーと16ビットカラーのフォーマットにしか対応していない。
ゲーム開発者の間では「ベンチマークソフトならばともかく、実際の3Dゲームで浮動小数点実数レンダーターゲットを活用するのは時期尚早」という意見もある。これは「3DゲームでそこまでのHDR表現は必要とされない」という理由と、「浮動小数点実数レンダーターゲットを使うと遅くなる」からという理由が根拠になっている。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR