「Half-Life 2」は,GeForceFXシリーズでなぜ遅い?

Page 1/2

"「Half-Life 2」はRADEON9500以上でないとだめ"宣言の波紋

 ATIが9月末にRADEON9800XT/9600XTを発表したとき,「Half-Life 2」開発元のValve社社長GAbe Newell氏が「Half-Life 2を最高位グラフィックス設定で動作させると,RADEON9800XTはGeForceFX5900Ultraの約2.5倍高速に動作する。」とコメントした。
 この発言を聞いたとき,「どうしてそんなことになっているの?」と思ったGeForceFX系ユーザーも多かったのではないだろうか。
 NVIDIAは10月21日,アメリカのカリフォルニア州サンフランシスコ市にて,GeForceFXシリーズにおける,さまざまな疑問について説明を行うセミナー「NVIDIA EDITOR'S DAY」を開催。ここで公開された情報のいくつかは,前述の「Half-Life 2」パフォーマンス問題の原因の究明につながりそうなものも含まれていた。
 本稿ではこのセミナーで公開された情報と,NVIDIA チーフサイエンティストのDavid Kirk氏に行ったインタビューをもとに,Half-Life 2パフォーマンス問題について考察してみたい。

9月末のATI RADEON9800XT発表会では,Valve社の社長Gabe Newell氏が講演。下のグラフを踏まえつつ「Half-Life 2はRADEON9800XTが最適」と宣言した NVIDIA チーフサイエンティスト David Kirk氏
RADEON9800XT(赤)とGeForceFX5900Ultra(緑)における各種3Dゲームのパフォーマンス格差を表したグラフ。左端が「Half-Life 2」の結果 世界各国からメディア関係者が集められ,NVIDIAとGeForceFXシリーズに対する懐疑心を払拭するために開催された「NVIDIA EDITOR'S DAY」

 

「Half-Life 2」のHDRレンダリングエンジンがGeForceFX系で動作しないわけ

 「Half-Life 2」(以下,HL2)は,PCにDirectX9世代GPUが搭載されていることを認知した場合には,ハイダイナミックレンジ(HDR)レンダリングモードでグラフィックスを描画しようとする

天窓からの光が強いグレアを起こしている。これは屋外が屋内に比べて非常に明るいことを表現している

 現実世界には,ディスプレイで表現できる1677万色をはるかに超えた色(光)が存在する。我々の目は瞳孔の大きさを変えて,カメラは絞りを調整して,一番適切だと思われる映像にして見ている。3Dグラフィックススにおいても,現実世界のような非常に暗いところから非常に明るいところまでを細かくレンダリングしようというアプローチがあり,これを"HDRレンダリング"と呼ぶ。HDRレンダリングされた映像はそのままではディスプレイで表示できないので,これにカメラの露出を変えるような意味合いで,ある明るさを基準として1677万色に収める処理を施してやる。これを"トーンマッピング"といい,ここまでを広義にHDRレンダリングという場合もある。
 HDRレンダリングの何が素晴らしいかというと,それは非常に「写実的な映像」が作り出せること。抽象的にいえばHDRレンダリングとは「表現幅の広い光で満ちあふれた空間を,自分の目で見ているような感覚」を,3Dグラフィックススで実現しようというアプローチである。
 さて,HL2のHDRレンダリングについては,デモムービーがあるのでぜひとも「こちら」(ZIP:114MB:2分15秒)よりダウンロードして見ていただきたい。
 このHL2のHDRレンダリング・エンジンについて,これまでに分かっている情報としては

 (1)16ビット整数バッファを使用している
 (2)GeForceFX系で動作させた場合は演算精度が限定的になる

といったものがある。
 16ビット整数バッファとはαRGB(αは透明度,RGBはそれぞれ赤/緑/青の意)の各色チャンネルに対して16ビットの表現幅を持つ"サーフェースフォーマット"のことで,DirectX9でサポートが開始されたものだ。これまで,フレームバッファやテクスチャのサーフェースといえば,αRGB各8ビット(デスクトップ画面モードでいうところの32ビットカラー)や,α1ビットRGB各5ビット(デスクトップ画面モードでいうところの16ビットカラー)などが一般的だったが,DirectX9ではこれ以外のバリエーションが用意された。具体的には

32ビット整数系
・α8-R8-G8-B8…αRGB各8ビット
・α2-R10-G10-B10…α2ビット,RGB各10ビット


64ビット整数系
・α16-R16-G16-B16…αRGB各16ビット

64ビット浮動小数点実数系
・α16f-R16f-G16f-B16f…αRGB各16ビット

128ビット浮動小数点実数系
・α32f-R32f-G32f-B32f…αRGB各32ビット

といったものがある。なお,後半の"16f"や"32f"は浮動小数点実数を意味する。
 結局,HL2のHDRレンダリングでは,α8-R8-G8-B8バッファではなく,α16-R16-G16-B16バッファを使用してレンダリングしているということになる。これは従来のαRGB各8ビットと比べて256倍の表現幅を持つことになるわけだ。

同じ方向を向いても今度はグレアを起こさない。屋外の明るさに目が慣れた,というような感覚を出したいため。HL2のHDRレンダリングはDirectX8世代の疑似HDR表現技法の延長線上にあるもので,実際にトーンマッピングが行われているわけではないようだが,それなりにHDRレンダリングっぽいビジュアルにはなっている

 ここで一つ問題がある。それはGeForceFX系がα16-R16-G16-B16をサポートしていないという点だ
 Valve社によれば,現在のHL2のHDRレンダリングエンジンを,GeForceFX系で動作させた場合には,DirectX8世代GPUのレンダリングメソッドにプログラマブルシェーダ2.0を組み合わせたハイブリッド・レンダリングパスが採択されるという。Valve社ではこのレンダリングモードを"MixMode"と呼んでいる。なお,Valve社のスタンスとしてはα16-R16-G16-B16が使えない場合はMixModeを使用する………ということになっているのだ。
 MixModeでは,テクスチャやフレームバッファはα8-R8-G8-B8フォーマットを使い,おそらく疑似HDRレンダリングを採用した最近の3Dゲームのように追加輝度情報をαチャンネルに格納し(*1),プログラマブルピクセルシェーダ2.0でこれをエンコード-デコードして陰影演算を行っていく仕組みを採用している。この方式ではRGBの各色チャンネルが8ビットしかなく,さらに輝度情報がRGB全てで共有化されているために演算精度に限界があるのだ。これが上記(2)の主な理由となる。
 実際にHL2が出てみないと分からないが,上で仮定したような方式を使っているのだとしたら,陰影処理のたびにHDR情報をエンコードとデコードしなければならず,ダイレクトにHDR情報を取り扱えるRADEON9500以上と比べるとパフォーマンス的にも不利となる
「Valveがなぜα16-R16-G16-B16フォーマットを選択したのか理解できない。GeForceFX系もRADEON9500以上の双方がサポートするα16f-R16f-G16f-B16fはHDRレンダリングならばベストソリューションなのは明白なのに。現在,Valveと,こちらのフォーマットのインプリメントについて話し合っているところ」(NVIDIAチーフ・サイエンティストDAvid Kirk氏)。とのことで,現在NVIDIAでは,Valve社と共同で,このレンダリングメソッドを改良していく方針だという。
 ところが,現状ではDirectX9環境下でGeForceFX系ではテクスチャフォーマットに「α16f-R16f-G16f-B16f」「α32f-R32f-G32f-B32f」が利用できないという問題がある。この問題に対し,NVIDIAが「ハードウェア的には対応できているがドライバ的な問題で利用できなくしている」と言い続けて1年が経過している。RADEON9500以上では「α16f-R16f-G16f-B16f」「α32f-R32f-G32f-B32f」(*2)の両方もサポートするので,ValveがHL2で「α16-R16-G16-B16」を採択したのは,なにもGeForceFX系排除目的ではなかったと筆者は推測するが。
「最終的にはRADEON9500以上で動作させた場合と変わらないものになる」(DAvid Kidk氏)。GeForceFX系ユーザーとしては,今はこの発言を信頼するしかない。

(*1)αチャンネルを本来の目的とは違う形で,数値格納場所として利用していることになる。
(*2)RADEON9500以上の場合,内部演算精度は24ビットになる。

 

つや消し塗装されている感じの茶色いトタン屋根 見る角度を変えると,上空からの強い光が当たって光沢が表れる 左奥の黄色い屋根は上空の強い光を浴びてサチュレーションを起こしている
上空からの光が,当たって一次反射光がグレアを起こしている エイリアンの皮膚の光沢やデコボコも,プログラマブルシェーダ2.0による長いシェーダでシングルパスで処理されている 超リアリズムを目指すHL2だが,影表現は簡易的でセルフシャドウもない

 

次のページへ