西川善司のグラフィックスMANIAC

ためになる3Dグラフィックスの歴史(4)。プログラマブルシェーダに葬られたGPUたち

 PC環境における3Dグラフィックス技術の進化の歴史にスポットを当てたこのシリーズも今回で4回目となる。

 1回目は、3Dグラフィックスベースのゲームが我々にとって近い存在になっていく黎明期から成長期くらいまでの話題を取り上げた。

 2回目3回目は、1回目から若干主旨を変更して、「PC環境における3Dグラフィックスの進化」を盛り立てたNVIDIAとATI(現AMD)の「仁義なき戦い」にスポットを当てた。

 4回目となる今回は、時間を少し巻き戻し、「プログラマブルシェーダ技術」の台頭後、どのように業界が変動していくか……について見ていくことにしたい。

前回までのおさらい

 本題に行くまでに、ここまでの「あらすじ」をまとめておこう。

 今ではスマートフォンにすら実装されている3Dグラフィックスハードウェア「GPU」(Graphics Processor Unit)だが、PCに当たり前に搭載されるようになったのは1990年代の最後期あたりからだ。

 1回目では深く触れなかったが、PC環境の近代化を一気に推し進めたとされる1995年登場の「Windows 95」登場直後から、1998年登場の「Windows 98」登場前後くらいまでは、3Dグラフィックス機能を持たない……あるいは持っていても性能が極めて限定的な、言うなれば“2D”グラフィックスハードウェアが、一般PCユーザーにとっては必要十分とされる時代となっていた。

 その代表格は、Matrox社のMillennium/MystiqueやS3社のViRGE/Vision/Trioといった製品で、当時そうした製品群は、PC誌の多くで「ビデオカード」や「ビデオボード」と呼ばれることも多かった。

「Matrox Millennium」
S3 Vision 968を搭載したDiamond Multimediaの「Stealth 64 VIDEO VRAM PCI」

 1990年代前半までは、3Dグラフィックスハードウェアで最も先進的だったのは、アーケードゲーム基板の方で、これを1990年代中期あたりから猛スピードで追従したのが、プレイステーションやセガサターン、NINTENDO64などの家庭用ゲーム機勢だった。

プレイステーション
セガサターン

 PC環境向けの3Dグラフィックスハードウェアが存在感を出してくるのは1999年に登場したDirectX 7あたりからだ。Windows世代で言うとDirectX 7を標準搭載した「Windows Me」「Windows 2000」あたりになる。

 DirectX 6時代まではポリゴン単位の演算(ジオメトリ演算)はCPUが担当していたが、DirectX 7時代では、3Dグラフィックス技術の全パイプラインをグラフィックスハードウェアが担当するようになり、このタイミングで「GPU」が誕生する。

 また、このタイミングで、複数のプロセッサメーカーがGPUを独自に好き勝手に機能強化し、互換性の面で混沌となることを回避しよう……という業界内での気運が高まる。

 そこで提唱されたのが「新たな3Dグラフィックス表現」をGPUの機能としてではなく「GPUで動かせるソフトウェアの形態」として実装していく「プログラマブルシェーダ技術」だった。

 2000年には、「プログラマブルシェーダ技術」に対応したDirectX 8がWindows 98/Me/2000へリリースされ、3Dグラフィックスハードウェアは、このあと「プログラマブルシェーダ技術」ベースで進化を遂げていき、「2023年の現在」へと辿り着くこととなる。

 今回は、この「プログラマブルシェーダ技術」台頭以降を語っていくこととしたい。

本題に行く前に~業界の「中の人」からTR3にまつわるタレコミ

 恐縮なことであるが、本題に行く前に、いきなり閑話休題をば。

 1回目で、掘り下げた1990年代の独自3Dグラフィックスハードウェアを搭載したアーケードゲーム基板に対する言及において、興味深い情報をいただいたのでフォローしておきたい。

 2023年3月某日に行なわれた、とある業界人同士の会合において、当時を知る関係者から「あの記事読みました。懐かしかったです。しかし、実際はこうだったんですよ」という裏話を聞くことができたのだ。

 それはアーケード版「リッジレーサー」のシステム基板「システム22」について。

リッジレーサー

 このシステム基板に搭載されていたグラフィックス描画担当プロセッサのうち、ジオメトリエンジンはTI製のDSP「TMS320C25」で間違いないが、テクスチャマッピング用のプロセッサについては、前出の関係者によると、記事で触れたEvans & Sutherland社製「TR3」は実際には採用されなかった……というのだ。

 実は「E&SのTR3を採用している」という情報はWikipediaにも記載されているだけでなく、海外のさまざまな媒体にもそう記載されていて、いつの間にか公式情報のようになっているが、どうやら伝聞式で伝わっていった結果定着した誤情報らしい。

 実際には、テクスチャマッピング・プロセッサは、当時のナムコが自社開発したものだったのこと。前出の関係者によると「E&S TR3の採用検討を行なったが正式採用はせず。しかしE&S TR3の特許への抵触を未然に防ぐために、両社が交渉したことはあった(かも?)」などの事実が形を変えて、こうした誤報になったのではないか……とのことである。

 また、アーケード版「リッジレーサー」について「グロー(グーロー)シェーディングの代わりに、それっぽいグラデーション陰影を焼き付けたテクスチャを使っていた」という記述についても、「イメージとしてはそんな感じだが実装としてはちょっと違う」……とのことである。

 当時はグラフィックス処理用のメモリが、現在基準とは比べものにならないほど乏しかったために、陰影を事前生成したテクスチャマップはメモリ節約の観点から実践できなかったという。

 そのため、チップグラフィックス(BGグラフィックス)のように、定義済みの図柄パーツ(パターン)を陰影として見えるように貼り付けるような方式を採用した……ということのようだ。

 今風に言えば「既存のテキスチャマップをUV(テクスチャとポリゴンの対応構造。テクスチャ座標系をx,yではなくu,vで表すことが語源)側の工夫で流用する」ようなアプローチだったようである。

 実際、この手のテクニックは、初代プレイステーションのゲームグラフィックス設計でも使われていたので説得力はある。

DirectXの発展とともに進化したGPU技術

 話を本題へと戻そう。

 1回目でも触れたように、MicrosoftのWindows向けのマルチメディアコンポーネントAPIとして誕生した「DirectX」は、登場当初は「冴えない三枚目」だったが、時代が進むとともに進化し、事実上の「GPU誕生の後押し」を務めたDirectX 7登場時には業界に対する大きな影響力を持つようになった。

最初期のDirectXは、(PC)ゲーム業界からの評価は決して高くはなかった。画面は1996年にMicrosoftがWindows環境向けに発売した「Monster Truck Madness」(開発はTerminal Reality社)のもの。3dfx社が展開していたAPI「Glide」全盛期にDirectX 5ベースで開発された希有なタイトルの一例

 そして「グラフィックス表現をソフトウェアとしてプログラムする概念」である「プログラマブルシェーダ技術」の標準規格を掲げたDirectX 8登場時以降は、「鶏が先か、卵が先か」に似たような理屈、つまり「DirectXが先か、新GPU誕生が先か」のような関係性で、GPUはDirectX(Direct3D)とともにハイペースで進化・発展を遂げていくこととなる。

DirectX 5から10年後のDirectX 9時代になり、PCゲームグラフィックス表現はここまでの表現力を身に付けることとなる。画面は2006年発売のXbox 360用「Gears of War」より

 この「ハイペースな進化」が、2010年代まで十数年間も継続できた理由はいくつかある。

 1つは、MicrosoftのWindowsプラットフォームが、ここ20年以上に渡って、普及型コンピュータやワークステーションの業界標準プラットフォームとなっていたことだ。

 グラフィックスAPIとしては、「OpenGL」がDirectX登場以前より存在はしていたが、「ライセンスフリーかつオープンスタンダードなものを目指す」というコンセプトに縛られていた関係で、参画しているソフトウェア企業、ハードウェア企業らの思惑を均等に汲まなければならず、その進化スピードはDirectXと比べれば緩やかだった。

 その点、DirectXはMicrosoftが1社独占で進化させられるAPI(フレームワーク)だったために、主に、Windows OSのメジャーバージョンアップとほぼシンクロする形で、ハイペースに進化していった。

 なお、Windows自体の進化がスローペースとなったWindows 7登場以降は、DirectXの進化ペースも2010年代以前と比べると大部スローダウンしている。

 Microsoftの対抗馬と言えば、言わずと知れたAppleのmacOS系プラットフォームがあるが、当時のMac OS X系プラットフォームは、OpenGLを採用していたため、GPU技術に関してはリーダーシップを取るまでには至らず。

 余談ながら補足しておくと、Appleは2018年より、macOS系プラットフォームにおいてOpenGLと決別し、Apple独自開発の「Metal」を標準3DグラフィックスAPIとした。2023年現在、MicrosoftのDirectX 12とほぼ同等の機能を備えたグラフィックスAPI「Metal 3」を実装するまでにいたっている。

 そして、MicrosoftがDirectX(Direct3D)を一般的なグラフィックス用途のみならず、「ゲームグラフィックスでの活用」までを想定して進化させられたのは、2001年からMicrosoftが立ち上げた家庭用ゲーム機ブランド「Xbox」シリーズのゲームプラットフォームが、DirectXベースで形成されていたことも、少なからず影響しているはずである。

各DirectX世代の3Dグラフィックスのパイプライン。図版は拙著「ゲーム制作者になるための3Dグラフィックス技術 改訂3版」より引用

DirectX 8登場から黄金期DirectX 9時代へ

 2000年に発表されたDirectX 8以降、特殊用途のものを除いた、すべての汎用GPUは、プログラマブルシェーダ技術ベースで進化していくことになる。

 改めて言うことでもないが「DirectX 8世代のGPUは、最初期の「プログラマブルシェーダ技術対応GPU」ということになる。

 DirectX 8世代のGPUが採用した「プログラマブルシェーダアーキテクチャ」は、ジオメトリ(幾何学的な)処理を担当する「頂点シェーダ」と、ピクセル単位の陰影処理やテクスチャの適用、実際の描画を行なう「ピクセルシェーダ」の2シェーダ構成となっていた。

 なお、このDirectX 8時代には、NVIDIAはGeForce3、ATIはRADEON 8500をリリースしている。DirectX 8のリリースから1年後の2001年末にMicrosoftが発売した家庭用ゲーム機の初代Xboxは、まさにこのDirectX 8採用機であり、そのGPUにはNVIDIA GeForce3のカスタム版が搭載されていた。

世界初の民生向けプログラマブルシェーダアーキテクチャ採用のGPU 「GeForce3」。Microsoftが2001年に発売した初代XboxのGPUは、このGeForce 3のカスタム版であった
GeForce3を搭載したカノープスの「SPECTRA X20」

 このDirectX 8登場のタイミングで、DirectXの世代番号とは別にプログラマブルシェーダのバージョン番号が規定されるようになっている。

 たとえば、DirectX 8時代の初代プログラマブルシェーダ仕様はShader Model(SM)1.xと規定された(xの部分はマイナーチェンジ版を表す数値を意味する)。

 業界に革新をもたらしたプログラマブルシェーダ技術ではあったが、DirectX 8時代のSM1.xは、使用できる命令の組み合わせやシェーダプログラムの長さに制限が多く、使い勝手があまり良くはなかった。

 2002年には、そうした制限を低減させたSM2.0が発表され、同時にDirectX 9がリリースされることとなる。

世界初のSM2.0対応GPUはATI(現AMD)からリリースされた「RADEON 9700」シリーズだった。後の9800、下位の9600/9500シリーズも当時はかなりの人気を博したGPU製品となった。写真はCreativeの「3D Blaster 5 RX9700 Pro AGP 128MB DDR」

 2004年には「シェーダプログラムの長さ制限」をさらに低減し、頂点シェーダとピクセルシェーダの命令セットをほぼ共通化してシェーダプログラムの作りやすさを劇的に改善したSM3.0が発表される。

 このSM3.0の登場に連動してDirectX 10がリリースされると予測されていたが、実際にはそうならず、なぜか「新版DirectX 9」の意を汲んだDirectX 9.0cとしてリリースされた。

 本稿「ためになる3Dグラフィックスの歴史」の2回目3回目で紹介したような、NVIDIAとATI(現AMD)とで繰り広げられた「仁義なき戦い」のエピソードの多くはまさに、このDirectX 9時代のものが中心である。

世界初のSM3.0対応GPUはNVIDIAからリリースされた「GeForce 6800」シリーズだった。この頃から、GPUとCPUを接続するバスシステムが旧来のAGP(Accelerated Graphics Port)から、現在も広く活用されているPCI Expressへと切り替わることとなった。写真はエルザジャパンの「GLADIAC 940 128MB」

 翌2005年にはMicrosoftがXbox 360を発売。続く2006年にはソニーがPS3を発売した。これらは、いずれもSM3.0世代(すなわちDirectX 9.0c世代)のプログラマブルシェーダアーキテクチャを採用したGPUを搭載していたわけである。

2005年にMicrosoftから発売された「Xbox 360」は、SM3.0世代のATI(当時)のRADEON系GPUを搭載していた
2006年にソニー・コンピュータエンタテインメント(現ソニー・インタラクティブエンタテインメント)から発売された家庭用ゲーム機「プレイステーション3」は、SM3.0世代のNVIDIA GeForce 7800シリーズベースのGPUを搭載していた

 2000年のDirectX 8以降、長らく頂点シェーダとピクセルシェーダの2段構成だったプログラマブルシェーダアーキテクチャは、ついに2007年に刷新されることとなる。

 それが、ポリゴンの増減を自在に行なえる「ジオメトリシェーダ」をパイプラインに導入したSM4.0である。

 Microsoftは、このSM4.0に対応したDirectX 10を2007年にリリース。5年に渡った長いDirectX 9時代はとうとう終焉を迎えたのだった。

 ちなみに、DirectX 10世代GPUを搭載した家庭用ゲーム機としては、任天堂が2012年には発売したWii Uが該当する。

2012年に任天堂から発売された家庭用ゲーム機「Wii U」は、SM4.0世代のRADEON HD 4000系のGPUを搭載していた

 2009年には、ポリゴンを自在に分割させたり、各頂点を変移させたりすることができる「テッセレーションステージ」がジオメトリパイプラインに追加されたDirectX 11/SM5.0が発表される。

 テッセレーションステージは「ポリゴン分割計画」を司る「ハルシェーダ」、ポリゴン分割実務を担当する「テッセレータ」、そして分割したポリゴンの変移を担当する「ドメインシェーダ」の3段構えで成り立っており、ハルシェーダとドメインシェーダはSM5.0から新たに追加されたプログラマブルシェーダとなる。

テッセレーションステージのイメージ図。図版は拙著「ゲーム制作者になるための3Dグラフィックス技術 改訂3版」より引用

 DirectX 11は、同年2009年リリースされたWindows 7に標準搭載されることとなり、それ以前のWindows XP/VistaのPCゲーミングファン達のOSの刷新の促進に貢献した。

 そして、DirectX 11世代GPUを搭載した家庭用ゲーム機としては、北米で2013年(日本では2014年)に発売となったPS4、Xbox Oneが挙げられる。

2013年(日本は2014年)にMicrosoftから発売された家庭用ゲーム機「Xbox One」は、SM5.0世代のAMD RADEON HD 7000系GPUを搭載していた。写真の一番上にある大きなカメラデバイスのような機械はモーション入力デバイスのKINNECTセンサーである
2013年(日本は2014年)にソニー・コンピュータエンタテインメント(当時)から発売された家庭用ゲーム機「プレイステーション4」は、SM5.0世代のAMD RADEON HD 7000系GPUを搭載していた。家庭用ゲーム機の歴史において、競合機が互いに同メーカーの同世代・同系のGPUを搭載することになったのはこの時が初めてのことであった

プログラマブルシェーダ技術台頭で淘汰されたGPU開発企業たち

 プログラマブルシェーダアーキテクチャの実現はGPUメーカーに高い技術力を要求した。

 具体的には、高度で複雑な並列処理を前提としたシェーダプログラムを高速に実行するには、とてつもなく高い開発設計能力が求められたのだ。

 このため、DirectX 8登場後からDirectX 9時代の間に、最初期のリアルタイム3Dグラフィックスを支えてきた多くの半導体チップメーカーがGPU開発事業から撤退するようになる。

 本稿シリーズの1回目でも登場した、PCグラフィックス黎明期を支えたVoodooシリーズを送り出した3dfx社は2000年にNVIDIAに買収された。

 同じく高性能GPUをリリースしていたNumber Nine社も1999年に倒産している

企業名から製品名までを、伝説の音楽グループ「ビートルズ」にゆかりのあるキーワードで統一したグラフィックスハードウェアメーカーのNumber Nine Visual Technology。日本では「知る人ぞ知る」的な立ち位置の製品だった。写真は「Revolution IV」

 Windows 9x 時代、日本で人気の高かったGPU、MillenniumシリーズをリリースしていたMatrox社も、最後発でDirectX 8世代GPU「Parhelia」シリーズを2002年に投入したのを最後にGPU開発からは撤退した。

日本でも高い人気を誇ったMatrox社が出した最後発のDirectX 8世代GPU「Parhelia-512」。世界初の512bitグラフィックスメモリバスを採用し、DirectX 11登場の遙か前に先んじて世界初のテッセレーション機能を内蔵したことで注目を集める。しかし性能面で同世代のNVIDIAやATIの製品におよばす、鳴かず飛ばずの結果に……。ちなみに、Matroxが新規GPU開発からの撤退を発表したのち、同社のGPU開発エンジニア達の多くは同じカナダのATIにこぞって移籍したと言われている。その後のATIのRadeon製品がやたらとテッセレーション機能を搭載するようになるのは、この影響だと分析する向きがある

 1990年代、Verite V1000/V2000シリーズを展開していたRendition社は1998年にMicron Technology社に買収されるも、その後に続く製品をリリースできずフェードアウトした。

比較的高性能な3Dグラフィックスハードウェアを出していたRendition社は、Veriteシリーズを展開。写真はCreative「3D Blaster PCI」。日本企業のカノープスが「TOTAL 3D」ブランドの製品も出していたため、それなりに日本のPCユーザーからの認知度も高かった

 プロフェッショナル向けワークステーション用GPUを開発していた名門3Dlabs社もWindows 9x時代に民生向けPermediaシリーズを投入するものの健闘虚しく、2002年にシンガポールのCreative Technology社に買収される。その後、2006年にはGPU事業から撤退した

3Dlabsは、一般ユーザー向け3Dグラフィックスハードウェアとして「Permedia」シリーズを展開。Permedia 2まではそこそこの人気があったが「3」以降は性能的に振るわず。DirectX 9世代のプログラマブルシェーダ技術であるSM2.X対応のP9/P10シリーズも開発したが、時すでに遅し。すでに振り向いているユーザーはいなかった。写真はPermedia2を搭載するDiamond Multimediaの「Fire GL 1000 Pro」

 台湾のチップセットメーカーSiS社からスピンアウトしてGPU専門メーカーとして新設されたXGI社も、2006年に新GPUの開発から撤退している。

2004年発売のXGI「Volari Z7」

 1990年代中後期まではATI(当時)やNVIDIAに勝るとも劣らぬ人気を誇ったGPU(当時はグラフィックスハードウェア)製品を数多く送り出していたS3は、2000年に台湾VIA Technologies社に吸収され、GPU開発部門はS3 Graphicsと改名されるが、製品リリース頻度は鈍化。

 2003年から新アーキテクチャのDeltaChromeシリーズを展開するも、市場からは高い評価が得られず、業界からフェードアウトした。

 余談ながらS3社の功績を補足しておくと、S3亡き後も3Dグラフィックス業界で長らく標準的に使われることになったGPU向けのテクスチャ圧縮技術「S3TC」はS3社が開発したものである(現在は後継技術にバトンタッチ済み)。

「ビデオカード」と呼ばれていた“2D”グラフィックスカード全盛期においては、日本でその知名度が高かったS3社も、DirectX 8時代のプログラマブルシェーダ技術であるSM1.X対応のGPU開発に失敗して失速。その後、VIA Technologies傘下となったS3 Graphics時代にDirectX 9/SM2.X対応のGPU「DeltaChrome」シリーズを業界最"遅"でリリース。しかし、時すでに遅し。性能的には同年代のNVIDIAやATI(現AMD)に遠くおよばず、店じまいへ……。写真はDeltaChrome S8 Proを搭載するアイ・オー・データ機器の「GA-S8HD/AGP」

 こうした淘汰の結果、DirectX 9時代以降は、GPUメーカーの二大巨頭とも言えるNVIDIAとATI(現AMD)の激しいGPU戦争が目立つようになる。近年では、この2社以外でPC向け高性能GPUを開発しているのはIntelとApple(Mac専用だが)くらいだろうか。

 なお、スマートフォン向けなどを初めとした組み込み機器向けGPUについては、Arm、Qualcomm、Appleなどが今も開発を続けている。

 プログラマブルシェーダ技術は、近代GPUアーキテクチャの基盤技術となり、GPU製品の進化の方向性を決定づけたことは間違いないが、同時に、半導体メーカーに「GPUを作り続けるか、撤退するか」を決断させる大きなきっかけともなったのであった。

 次回以降は、DirectX 11以降のGPU進化について見ていくことにしたい。