Pages

Sunday, February 26, 2023

【西川善司のグラフィックスMANIAC】 ためになる3Dグラフィックスの歴史(2)。緑のたぬきと赤いきつねのバトルで育まれたGPU技術たち - PC Watch

【西川善司のグラフィックスMANIAC】 ためになる3Dグラフィックスの歴史(2)。緑のたぬきと赤いきつねのバトルで育まれたGPU技術たち - PC Watch

 「なぜ、NVIDIAとAMD、Intelといった異なる半導体メーカーが作るGPUで、同じようなゲームグラフィックスが出せるのか」というお題を元に、ゲームグラフィックスの進化の歴史を振り返るこのネタ。今回はパート2をお届けしたい。

 前回は、更地に好き勝手に半導体メーカーが独自の3Dグラフィックス技術を乱立させていた「動乱の時代」から、プログラマブルシェーダ技術が誕生して、3Dゲームグラフィックスが「天下統一の方向」に向かうまでの歴史にスポットを当てた。

 今回は「その後」を普通にお届けしようと思ったのだが、真面目な話が続くと飽きられてしまいそうなので、ちょっと「GPUの歴史」にまつわる「おもしろ話」に脱線しようかと思う。

「緑のたぬき」(NVIDIA)と「赤いきつね」(ATI/AMD)

 取り扱うのは、みんな大好き、「緑のたぬき(NVIDIA)と赤いきつね(ATI/AMD)」の話題だ。

 3Dグラフィックスハードウェアの開発を手がける二大メーカーと言えば、コーポレートカラーを緑としたNVIDIAと、赤としたATI(現AMD。以下同)が有名だ。日本には、ちょうど「緑のたぬき」と「赤いきつね」という認知度の高いインスタント麺があり、これが「彼らの闘い」を揶揄するのにちょうどよかったため、筆者は、記事で「彼らの闘い」を「緑のたぬき」と「赤いきつね」のバトルとして言い表すことが多かった。

 そんな彼らは、1990年代から好敵手の関係だったが、特に200X年代前半は、互いの足の引っ張り合いのような「罵り合い」が盛んでおもしろかった。まさに、「仲良くケンカしな」の「トム&ジェリー」状態で、「実は本当は仲がいいんじゃないか」と思えるほどに。

 当時のユーザー達は、その彼らのケンカに振りまわされることも多かったが、彼らの「相手を罵る悪口合戦」によって、GPUの仕組みの深淵への理解が進むことも多かった。そのためか、今となっては「古き良き思い出」という印象の方が強い。

「ピクセル演算精度の24bit浮動小数点論争」での化かし合い合戦

 プログラマブルシェーダアーキテクチャベースのGPUの開発は、当時先端を突き進んでいたNVIDIAとATIの2社にとっても決して優しいものではなく、「ユーザーから期待される性能」を発揮するために、さまざまな工夫を凝らしていた。

 2002年、DirectX9が発表され、第2世代プログラマブルシェーダ(Shader Model2.0)対応GPUが誕生。一番乗りだったのはATIで、この時RADEON 9000シリーズ(R3x0)を発表した。NVIDIAはやや遅れて同年後期にGeForce FX(NV3x)シリーズを発表した。

RADEON 9000
GeForce FX 5800

 当時の半導体技術では、GPUのすべての演算器に32bit浮動小数点(FP32)の演算精度を実装することは、性能的にもトランジスタ予算的にも難度が高かった。

 そのため、ATIはジオメトリ演算を司るプログラマブル頂点シェーダ(以下、プログラマブルは省略)にはFP32を採用するも、テクスチャ処理系やピクセル演算を司るプログラマブルピクセルシェーダ(以下、プログラマブルは省略)の演算精度は、ATI独自の24bit浮動小数点(FP24)で妥協した。

 FP24は、今も昔も浮動小数点演算精度を規定するIEEE754規格には存在しないものだったが、演算速度を稼ぐには有効だったため、ATIはこれを採用したのだ。

 対するNVIDIAのGeForce FXは、頂点シェーダも、ピクセルシェーダーもフルでFP32精度をサポート。ピクセルの演算精度をFP32精度で実践するのは、当時の映画(シネマ)向けのCG制作現場と合致することから、GeForce FXの描画パイプラインは「CineFX」と命名され、NVIDIAはこの「演算精度の一貫性」を強くアピールしていた。

 しかし、同じゲームを動作させたときに、パフォーマンス的にはRADEON 9000系に軍配が上がったのである。

 ここでNVIDIAは「RADEON 9000シリーズのパフォーマンスが高いのは、彼らのピクセル演算精度がFP24で粗いからだ! 彼らのやっていることはインチキだ!」と声を上げる。

 確かに、RADEON 9000シリーズは、シェーダープログラムが明示的にFP32を使うよう指定してあっても、内部的にFP24に丸められて演算が実践された。ここにNVIDIAが噛み付いたわけである。

実はDirectX 9の規格上、ピクセルシェーダーの演算精度の下限はFP24でよいと規定されていたので、ATIの実装自体はルール(規格)違反ではない

 NVIDIAは、「我々のGeForce FXシリーズはシェーダープログラムが求める精度でちゃんと演算を行なうGPUである」と宣言するのであった。

 この時、ゲーム開発者の間でもこの「ピクセルの演算精度問題」についてはホットな議論が巻き起こった。

 「そもそも、ピクセルの演算精度で浮動小数点が活用されるのはハイダイナミックレンジ(HDR)レンダリングに限られる。HDRレンダリングではFP16程度で十分だとしてILM(Industrial Light & Magic)が1999年にOpenEXRを規格化したじゃないか」。

 「テクスチャに3次元ベクトルなどのFP32情報を入れて、これをピクセルパイプラインで処理した後、その結果をジオメトリに転用する場合、演算精度に一貫性がないのは問題だ」。

 「GPGPUがやってくる未来がすぐそこに来ているのに(当時)、FP24ってなんだよ」。

 「最終的に描画されるピクセルカラーって8bit~10ピット程度の、しかもガンマ補正された整数精度ですよ(当時)。FP24で精度足りないなんてことあります?」……などなど、激論が交わされたのだ。

NVIDIAは「FP32形式のバッファに頂点情報に相当する内容をレンダリングし、これを頂点シェーダに戻す処理系である「頂点バッファレンダリング」(Render-to-Vertex Buffer)では、ピクセル演算精度がFP24では演算精度問題が起こりうる」と主張し、FP24形式を批判した。頂点バッファレンダリングは、GPUで物理シミュレーションをやるときにも有用とされる。画面は、NVIDIAが公開した頂点バッファレンダリング技術を使って布の挙動のシミュレーションを行なったデモのもの
「バーチャファイター5」では、水面を構成するポリゴン座標をFP32テクスチャに入れ込み、その凹凸変移の波動シミュレーションをピクセルシェーダー上でFP32運算精度で実践させていた。シミュレーションの結果はFP32テクスチャに入っているので、次のフレームの水面ポリゴンの座標位置を、頂点シェーダーからこのテクスチャから読み出して決定していた。この技術はVTF(Vertex Texture Fetching)と呼ばれた。こうしたジオメトリパイプラインと連携させたパイプラインの実現はFP24では精度不足となることがあるかもしれない

 ゲームファン視点の場合は、“アラ”が目立たない程度のピクセル品質で、フレームレートが高ければ「そのGPUは偉い」となるし、多くのPCベンチマーカーにとっては3DMarkなどのスコアが高ければ「そのGPUはすごい」となっていたため、「FP24、FP32、そんなの関係ねえ!」と言わんばかりに、GeForce FXは評判を落としていくことに。

 そしてその後、NVIDIAはGeForce FX起死回生のために「禁断の最適化」に手を染める。

 それは、ピクセル演算精度を、特定のゲーム等が実行されたときに意図的にFP16精度に代替させるなどしてパフォーマンスを稼ぐ方策だ。

 NVIDIAのやることにアンテナを張っていたATIは、定番ベンチマークソフトや、人気のゲームをGeForce FXで動作させたときに、ドライバの最適化(?)を駆使してこの最適化(?)を行なっていることに気が付き憤慨(笑)。

 「一貫してFP32にこだわり、FP24を馬鹿にしていたNVIDIAさん。そうですか、あなた達はFP16に逃げるんですね」とどこぞの論破王からのような指摘を受けてしまう。

 この時のNVIDIAはもはや開き直っており、「だってみんなFP24で満足だって言うし、ILMのOpenEXRだってピクセル演算精度はFP16で十分だって言うし。別にいいじゃん」と反論(一部、筆者の脚色が含まれています(笑))。

 その後、3DMark03の開発元のFuturemark(現UL)は、NVIDIAの「この最適化」行為を「インチキ」(Cheat)と断罪して批判。排除にかかる(GameSpotの記事参照)。

 しかし、これに対し、論破王のNVIDIAから「インチキって、それあなたの感想ですよね。同じ演算精度を落とす行為なのに、我々が採ったドライバ的アプローチでダメで、ATIのハードウェア的アプローチが容認されるのはおかしくないですか」という、鋭い反論がなされる。

 この時、「あれれ、おっかしいなぁ。DirectX 9のピクセル演算精度の下限ってFP24だったから、さすがにFP16はやりすぎだと思うんだけど……って小五郎のおじちゃんが言ってたよ」という少年名探偵は登場しなかったためなのか、「あ! それはごもっともですね」とFuturemarkは音速に近いスピードで「ドライバの最適化排除を撤回」してしまうのだった。

 結局、この騒動で盛り上がった「ピクセル演算精度FP24問題」は、後の世代に登場する「統合型シェーダ」(Unified Shader)アーキテクチャベースの設計への移行で自然解決(消滅)してしまう。

 そう、頂点シェーダもピクセルシェーダもフルFP32化が当たり前となったのだ。

ATIは、RADEON 9000シリーズの後、X300~X800の3年間に渡ってピクセル演算精度をFP24のままとしていた。2005年に登場したRADEON X1000シリーズで初めてピクセル演算精度がFP32となった。写真はRADEON X1800 XT

Adblock test (Why?)



2023-02-26 21:12:00Z
https://news.google.com/rss/articles/CBMiPWh0dHBzOi8vcGMud2F0Y2guaW1wcmVzcy5jby5qcC9kb2NzL2NvbHVtbi96ZW5qaS8xNDgxMDMwLmh0bWzSAQA?oc=5

No comments:

Post a Comment