【Watch記事検索】
最新ニュース
【11月30日】
【11月29日】
【11月28日】
【11月27日】
【11月26日】

西川善司の3Dゲームファンのための次世代機ハイデフ講座
ハイビジョン映像時代のゲーム映像の問題点



 「ゲームはハイデフへ」をキーワードに他社に先駆けて登場したマイクロソフトの次世代機Xbox 360。そして年末登場予定のソニー・プレイステーション3も「HDMIでハイビジョン」を大きくアピールしてきている。

 ただ、ここに来て、コアゲーマーや開発関係者の間で「Xbox 360タイトルのほとんどが720pを満たしていない」とか、「PS3も多くのゲームが本当のハイデフにはならないかもしれない」という、やや後ろ向きの見解がポツポツと出始めている。今回は次世代ゲーム機とハイビジョン(ハイデフ)の関係について考えてみたい。


■ ハイビジョン(ハイデフ)の基礎知識

マイクロソフト「Xbox 360」は世界初の“ハイデフ”ゲーム機として登場したことはまだ記憶に新しい
 そもそもハイビジョン(ハイデフ、以下、本稿では同義とする)とはなんなのだろう?

 これまで長らく「標準的なテレビ解像度」として利用されてきた縦方向480本(伝送数は525本。以下同)の走査線の解像度をSD(Standard Definition)と呼んでおり、これに対して720本(750)、1,080本(1,125)の映像をHD(High Definition)と呼ぶ。Xbox 360で強く訴求されていたハイデフはここから来ている。

 日本では世界に先駆けてNHKがBSアナログハイビジョン放送を'89年より実施しており、これがきっかけとなり高解像度テレビをハイビジョンとする呼び方が広まった。なお、海外では基本的には「ハイビジョン」という呼び名は通じず、「High Definition」という呼び方が一般的であり、略すときは「HD」あるいは「High-Def(ハイデフ)」とする。舶来ものであるXbox 360が「ハイビジョン」ではなく「ハイデフ」の方を連呼したのはこのあたりが理由になっているのだ。


■ ゲーム機では出力解像度とレンダリング解像度は一致しなくてもいい

 テレビ解像度を言い表わすときには縦解像度の数値のみで言い表わすのは、もともとテレビがブラウン管を基本として考えられていたことと関係が深い。ブラウン管では1本の電子ビームで描き出す水平方向の走査線を上から下に向かって描くことから、この走査線の本数で解像度を表わす。なお、ブラウン管テレビでは表示管面に列んだRGBの蛍光体の数が、実際に表示しようとする映像解像度と一致していないことも多かった。さらにテレビでは、映像信号全域を表示せずに画面外に若干はみ出るような形で表示させるオーバースキャン方式で表示するのを基本としている。この表示映像とオーバースキャンされてはみ出させる量の割合も、実は明確に定まっておらず、極端な話、メーカー間で微妙に異なっていたりもした。

低価格なHDVカメラとして人気の高いソニー「HDR-HC3」。1,440×1,080ドットのインターレースで記録される。実はHDVの解像度はDVテープのビットレートとの関係も深い
 そんな背景もあってか、テレビやビデオの実解像度は幅を許容しているケースが多い。今でもこの傾向は残っていて、たとえばDVDビデオは記録解像度は720×480ドットで、縦横の画素数比で行けば3:2。4:3でも16:9でもない。これを表示段階で16:9や4:3に伸張して表示していることになる。今話題のハイビジョンデジタルビデオ(HDV)カメラも、実は記録解像度は1,440×1,080ドットであり、表示段階で1,920×1,080ドット相当にしている。

 ところが、最近ではテレビといえば液晶方式やプラズマ方式を指すことが多く、これらは明確な表示画素を持った映像機器で、特に「固定画素系」と呼ばれる。固定画素系の映像機器は実体のある画素が明確に配列されているため、明瞭な表示解像度仕様を持つ。そのことから入力画像を欠落なく表示させたいというPCディスプレイ用途にはおあつらえ向きの方式だった。

 なお、固定画素系が一般化してからは、「720pは1,280×720ドット、1080i、1080pは1,920×1,080ドット」という認識が強くなってきており、逆に例えば「720p対応のディスプレイ」といえば「1,280×720ドット以上の解像度がある」という認識がなされるようになってきている。

 微妙な立ち位置にあるのはゲーム機の映像だ。ゲーム機のリアルタイム映像は何かを適当な解像度で撮影したものではなく、基本的にはCGなわけで、PC画面と同じく、明確な解像度仕様に基づいて作り出されたフレームだ。

日立の最新「1080ALISパネル」採用のプラズマTV「Wooo」。解像度は1,024×1,080ドット。縦方向は1080p相当だが、横方向は1,024ドットしかない
 仮に1,280×720ドットのフレームをレンダリングしたとしたら、PCの場合はこれを1,280×720ドットのディスプレイに表示するのが一番綺麗だ。ところが、ゲーム機の場合、テレビに出力するので、多少事情が異なる。映像信号として出力する段階でオーバースキャンなどに配慮しなければならないし、解像度仕様のやや曖昧なテレビ出力向けに解像度変換を行なわなければならない場合もあるからだ。

 逆に、もともとオーバースキャンされる事がわかりきっているならばオーバースキャンされて最終的に表示される部分だけをレンダリングして、スキャンアウトにより表示されない部分はレンダリングをさぼるという手もあるだろう。


■ Xbox 360は720p出力だけど720pでレンダリングされていない?

 以上を踏まえた上で、本題に入っていきたい。Xbox 360の“ハイデフ”ゲーム映像は「720pのハイビジョン映像」ということになっている。

 720pというキーワードだけを聞くと多くのユーザーは「じゃあ、Xbox 360のゲームは1,280×720ドットでレンダリングされているんだね」と思うかもしれないが、実際にはその通りのタイトルもあるし、それ未満の解像度のタイトルもある。

 なお、マイクロソフトの立場としては、今でも「Xbox 360のゲームタイトルは1,280×720ドットのMSAA(マルチサンプル・アンチエイリアシング)付きの画面でレンダリングすること」を推奨しているという。

 ところが、「凝ったグラフィックス表現をやろうとすると、この奨励事項を守っていてはどうしてもパフォーマンスが足りない局面が出てきてしまう。どうにかしてくれ」という開発者達の訴えが増え、これに応える形でマイクロソフト側としては譲歩して「やむを得ない場合は仕方なし」というエクスキューズを付け加えたのである。

 こうしたことから、もしかするとこれからのレンダリング解像度は1,280×720ドット未満のタイトルが主流となるかもしれない。おそらくこのあたりの断片情報から「Xbox 360のハイデフは720pじゃない」という解釈(≒誤解?)が生まれたと推察される。しかし、Xbox 360のGPUは最新鋭のGPUのはずだ。パフォーマンスが足りないというのはどういうことなのか。次は何がボトルネックになっているのかを詳しく見ていく。


■ Xbox 360 GPUはシェーダモンスターではあるがメモリ帯域モンスターではない

Xbox 360 GPUダイアグラム。Shader Pipe(×16)が3本セットで合計48基のシェーダを内包する
 Xbox 360のGPUは世界初の統合型シェーダアーキテクチャを採用したGPUだ。48基の汎用シェーダユニットを、局面に応じて頂点シェーダとして起用したり、ピクセルシェーダとして起用したりできる最新GPUだ。動作クロックは500MHzあり、これで48基もシェーダがあれば、シェーダーそのもののパフォーマンスはPC用のハイエンド最新GPUと比較しても遜色ないといえる。

 しかし、Xbox 360システムにはゲーム機ならではの弱点がある。それはメインメモリとビデオメモリを共有しているUMA構造(Unified Memory Architecture)だ。UMAでは、CPUによるプログラム実行の際のメモリアクセスと、GPUが描画する際のメモリアクセスによって、メモリ帯域を奪い合ってしまう。

Xbox 360のシステムブロック図。CPUからメモリが遠く、しかもGPUと共有される。メモリ帯域はCPUとGPUで食い合う格好だ
 Xbox 360ではデータレート1.4GHzのGDDR3 SDRAMが共有メモリとして512MB実装されるが、これはGPU側に実装されたメモリコントローラと接続される。メモリバス幅は128ビットとなることから、メモリ帯域は22.4GB/sec。22.4GB/secという限られたメモリ帯域をCPUとGPUで共用することになるのだ。

 ちなみに22.4GB/secというメモリ帯域は、現行のPC向けGPUでいうと丁度ATI RADEON X1600 XTやNVIDIAのGeForce 7600 GT程度。つまり、現行のメインストリームクラスのGPUと同程度に過ぎない。なお、ハイエンドクラスGPUのメモリ帯域はだいたい50GB/sec(RADEON X1900 XTXで49.6GB/sec、GeForce 7900 GTXで51.2GB/sec)なので、Xbox 360ではその半分以下の帯域ということになる。

 シェーダが17基(VS5+PS12)しかないRADEON X1600 XTやGeForce 7600 GTと比較するのはナンセンスだという意見も出てきそうだが、シェーダパフォーマンスはあくまで単位時間あたりに1ピクセルに対してどれくらいの量の陰影処理が施せるかということを表しているに過ぎない。

 「単位時間あたりに何ピクセル描画できるか」は、すなわち「単位時間あたりに何バイトをメモリに書き込めるか」という議論とほぼ等価なのでメモリ帯域の方に直接関係してくる。高解像度のフレームを単位時間あたりにより多く出力するためには広帯域なメモリ帯域が必要になってくるのである。その意味では単位時間あたりにピクセルを打ち込める数はXbox 360 GPUとRADEON X1600 XTは大差ないといえるわけだ。

 なお、Xbox 360の公称フィルレートは160億テクセル(サンプル)毎秒というとてつもない値になっているが、これは後述するEDRAM側のピクセルプロセッサが4xMSAAを実行したときの理論帯域であり、GPUコアそのもののフィルレートはその1/4である40億テクセル毎秒となる。これは丁度GeForce 7600 GTと同程度だ。

 仮に720pを1,280×720ドットとして60fpsを維持しようとすると、1/60秒の間に最低でも1,280×720ドットの約100万ピクセル分のデータをメモリに書き込めなければならない。実際には動的なテクスチャ生成などを行なったりしてマルチパスレンダリングを組み合わせるのが今や当たり前なので、レンダリングを完遂するには、この数倍から十数倍の量のデータをメモリに書き込めるポテンシャルが必要になる。

 初代Xboxでは400MHzデータレートのDDR SDRAMを64MB搭載しており、これがやはり128ビットバスでノースブリッジと接続されていた。メモリ帯域にして6.4GB/sec。この時ターゲットにしていた解像度は640×480ドット程度のSD解像度だったので約30万ピクセル程度。Xbox 360でターゲットとしている1,280×720ドットの100万画素ではその3倍のメモリ帯域が必要になる計算になる。Xbox 360のメモリ帯域は22.4GB/secだから3.5倍はあることになる。

 しかし、この3.5倍の帯域分のうち3.0倍分は、高解像度化されて描画するピクセルが増加した分で消費されてしまうと仮定すれば、ヘッドルームは0.5倍分しかない。Xboxより高度なシェーダを動かして、多段テクスチャ参照を行なうことになるXbox 360世代では、これはあまりにも心許ない。

 このメモリ帯域が足りない根本の原因となっているのは、GPU内のメモリコントローラがGDDR3 SDRAMと128ビット接続になってしまっている点だ。現在ATIもNVIDIAもハイエンドクラスのGPUは2004年から256ビット接続だ。コストに関わってくる部分なので単純な話ではないにせよ、Xbox 360も256ビットメモリバスを採用していれば、もうちょっと余裕ができたかもしれない。

次世代ゲーム機のGPU基本スペック(一部筆者推測)
Xbox 360 GPUPS3 RSX
プロセスルール90nm90nm
トランジスタ数3億3,800万2億7,800万
コアクロック500MHz550MHz
メモリクロック1.40GHz1.40GHz
ビデオメモリタイプ/最大容量GDDR3 SDRAM 512MB(メインメモリ共用)GDDR3 SDRAM 256MB
メモリバス幅128bit128bit
メモリバンド幅22.4GB/sec22.4GB/sec
ネイティヴ・インターフェイス専用バスFlex IO
頂点シェーダーバージョン3.0+3.0
頂点シェーダ数1~488
ピクセルシェーダーバージョン3.0+3.0
ピクセルシェーダ数1~4824
ROPユニット数8基相当16基
頂点性能10億頂点毎秒(※)11億頂点毎秒
フィルレート40億ピクセル毎秒(EDRAM内で最大160億ピクセル毎秒)88億ピクセル毎秒
※汎用シェーダから8基の頂点シェーダを起用した場合の値。

最新PC用GPU基本スペック比較(一部筆者推測)
▼ハイエンドモデルRADEON X1900 XTXRADEON X1900 XTGeForce 7900 GTXGeForce 7900 GT
プロセスルール90nm90nm90nm90nm
トランジスタ数3億8,400万3億8,400万2億7,800万2億7,800万
コアクロック650MHz625MHz650MHz(※700MHz)450MHz(※470MHz)
メモリクロック1.55GHz1.45GHz1.6GHz1.32GHz
ビデオメモリタイプ/最大容量GDDR3 SDRAM 512MBGDDR3 SDRAM 512MBGDDR3 SDRAM 512MBGDDR3 SDRAM 512MB
メモリバス幅256bit×2256bit×2256bit256bit
メモリバンド幅49.6GB/sec46.4GB/sec51.2GB/sec42.24GB/sec
ネイティヴ・インターフェースPCI-Express x16PCI-Express x16PCI-Express x16PCI-Express x16
頂点シェーダーバージョン3.03.03.03.0
頂点シェーダ数8888
ピクセルシェーダーバージョン3.03.03.03.0
ピクセルシェーダ数48482424
ROPユニット数16基16基16基16基
頂点性能13億頂点毎秒12億5000万頂点毎秒14億頂点毎秒9億4000万頂点毎秒
フィルレート104億ピクセル毎秒100億ピクセル毎秒104億ピクセル毎秒72億ピクセル毎秒

最新PC用GPU基本スペック比較(一部筆者推測)
▼メインストリームモデルRADEON X1600 XTRADEON X1600 PROGeForce 7600 GTGeForce 7600 GS
プロセスルール90nm90nm90nm90nm
トランジスタ数1億5700万1億5700万1億7800万1億7800万
コアクロック590MHz500MHz560MHz400MHz
メモリクロック1.38GHz780MHz1.4GHz800MHz
ビデオメモリタイプ/最大容量GDDR3 SDRAM 256MBGDDR3 SDRAM 256MBGDDR3/256MBDDR2/256MB
メモリバス幅128bit128bit128bit128bit
メモリバンド幅22.08GB/sec12.48GB/sec22.4GB/sec12.8GB/sec
頂点シェーダーバージョン3.03.03.03.0
頂点パイプライン(=頂点シェーダ数)5本5本5本5本
ピクセルシェーダーバージョン3.03.03.03.0
ピクセルパイプライン(=ピクセルシェーダ数)12本12本12本12本
ROPユニット数4基4基8基8基
頂点性能7億3750万毎秒6億2,500万頂点毎秒7億頂点毎秒5億頂点毎秒
フィルレート23億6000万ピクセル毎秒20億ピクセル毎秒44億8,000万ピクセル毎秒32億ピクセル毎秒


■ メモリ帯域不足をEDRAMが救う……?

Xbox 360のEDRAMに関する説明
 ただ、マイクロソフトも、この弱点については当然、最初から気が付いていた。そこで、十分とは言い難いメモリ帯域を補える仕組みを考えて実装した。それがGPU専用のローカルメモリとして接続される10MBのEDRAM(Embedded DRAM:組込型メモリ)だ。このEDRAMはXbox 360 GPUとは32GB/secの帯域で結ばれる。512MBの共有メモリよりも広帯域なのだ。

 このEDRAMにはZ処理(深度情報処理)、α処理(透明度合成処理)、ステンシル処理(切り抜き処理)、4点サンプルまでのマルチサンプルアンチエイリアス処理(4xMSAA処理)を行なうことのできるピクセルプロセッサが192個、内包されている。さらに4枚までのMRT(Multi-Render Target:同時レンダリング)に対応しており、Z値(深度)とステンシルの更新までを同時に行なえる。公表情報によれば1サイクル当たりカラー&Z値を8ピクセル、Z値のみならば16ピクセルの書き込み性能があるという。このEDRAMは、一般的なGPUにおけるROPユニットとビデオメモリを一体化したような機能ブロックであり、ある意味サブGPU的なポテンシャルを持っているといえる。

 このEDRAMの採用により、一番メモリ帯域を食うはずのレンダリング結果のメモリへの出力に際しては、512MBの共有メモリのメモリ帯域をほとんど使わずに処理できることになった。では、問題解決かというと、完璧でもなかった。ある視点から言えば、このEDRAMがXbox 360のグラフィックスサブシステムの取り扱い自体をややこしいものにしたといってもいいかもしれない。


■ 10MBのEDRAMじゃ足りない~分割レンダリングの提供

 基本的にこのEDRAMはレンダーターゲット(レンダリングするためのバッファ)として活用されるが、容量が10MBしかない。問題はここだ。

 例えば1,280×720ドット解像度でレンダリングするとする。αRGBがFP16の64ビットHDRレンダリングを行なうのだとすると、1,280×720×8=7,372,800バイト(64ビットは8バイト)の容量が必要になる。約7MBで10MBに収まっている。

 ところが、実際のレンダリング工程にはZ値(深度)を記録しておくZバッファも必要になる。Zバッファを32ビット(4バイト)で確保するならば、さらに1,280×720×4=3,686,400バイトで、新たに約3.5MBが必要になり、トータルで約10.5MBとなり、ぎりぎり10MBに収まらない。

Xbox 360専用ともいえるFP10-32ビットバッファ。Windows VistaのDirect3D10での採用は未定
 実はXbox 360のGPUは、FP16-64ビットバッファではブレンディングができないので、特殊用途を除き、マイクロソフトはXbox 360のHDRレンダリングではα2ビット、RGBが各7e3の32ビットバッファの活用を奨励している。ちなみに7e3とは仮数が7ビット、指数が3ビットの10ビット浮動小数点表現(FP10)で、現時点ではXbox 360 GPU独自の浮動小数点バッファのフォーマットとなっている。ダイナミックレンジはFP16-64ビットバッファには到底及ばないが、従来の32ビットバッファの帯域でHDRレンダリングが行なえるものとして3Dゲーム向けとしては重宝される。

 これだと、1,280×720×4=3,686,400バイト、Zバッファと合わせても7,372,800バイト、約7MBで10MB以下になるではないか。と思いきや、前述したようにマイクロソフトでは2xMSAAを奨励しているので、これが2倍で利いてきて約14MBが必要になり、結局10MBに収まらない。八方ふさがりだ。では、どうするのか?

10MBのEDRAMの容量制限を緩和する分割レンダリング「Predicated Tiling」モード
 Xbox 360では、「Predicated Tiling」レンダリングモードという、分割レンダリングメソッドがライブラリの形で提供される。これは簡単に言えば、レンダリングの際にEDRAMの10MBを超えてしまうという場合には、1フレームを複数回に分けてレンダリングする、というもの。複数回とは具体的に言えば画面を左右に分割して2回に分けたり、あるいは上下に分けてレンダリングするもの。分割数は2回に限定されず3回以上も可能だという。

 例えば、上記の1,280×720ドットの32ビットバッファで2xMSAAのケースでは、14MBが必要になるが、このフレームの左7MB分をまずEDRAM上でレンダリングし、この結果を512MBの共有メモリへ書き戻し、続いて右半分7MBのレンダリングも行なうといった感じになる。ただ、これでEDRAMの容量不足は解決かというと、残念ながらそういうことでもない。


■ 分割レンダリングの落とし穴~もっとあれば良かったEDRAM

「NINETY-NINE NIGHTS (N3)」より。この画面の場合、上下で分割しても左右で分割しても中央付近の重複描画は多くなりそうだ
 1つの問題は、分割レンダリングの際の境界部分について起こりうる。分割レンダリングではその境界線をまたぐようなジオメトリの処理は重複して行なわなければならない。分割数が増えれば増えるほど重複が増えてくることになるわけだ。

 視点からの距離が遠いと自動的にジオメトリ量を削減するLOD処理をゲーム側で実装していればまだしも、そうでない場合、奥行き方向の奥に行けば行くほど頂点量が増え、この重複処理が負荷として重くのしかかってくる。大量のキャラクタが同時に登場する「真・三國無双」や「NINETY-NINE NIGHTS(N3)」のような群集を扱うゲームでもこの分割レンダリングによる重複処理はきつそうだ。

 また、被写界深度のシミュレーションや疑似表面下散乱、疑似光散乱シミュレーションのような、レンダリングしたフレームのZバッファ側のの内容を再利用するような特殊効果では、この分割レンダリングのたびに前のレンダリングに用いたZバッファがクリアされてしまうため、これを防ぐためにMRTを活用して深度値を別に用意した共有メモリ側のバッファに退避しておく工夫が必要になる。これはZ値の二度書きに相当し、メモリ帯域を余計に消費することになる。一括レンダリングであれば、この二度書きは不要なので、これは分割レンダリング使用時の弊害といえる。

マイクロソフトもMSAA付きで720pのレンダリングでは分割レンダリングが必要になってしまうことを公言。また、パフォーマンス低下が多少あることも認めている
 Xbox 360 GPUの分割レンダリングは、容量が10MBしかないEDRAMを活用してなんとかパフォーマンスを稼ぐために生み出されたものだが、得られるパフォーマンスと制限事項のバランスを考えると手放しで喜べない。そもそもマイクロソフト奨励の画面モードでのレンダリングで、いきなり分割レンダリングなる特例メソッドを使わなければならないというのは、開発者達に「なんでだろう?」という疑問符を呼び起こさせることだろう。

 そもそもEDRAMの容量が10MBというのはなぜなのだろうか? 16MBあったらマイクロソフト奨励モードで分割が不要になるし、欲を言えば32MBあれば、マルチパスレンダリングを行なう際においても共有メモリへの書き戻しを低減できて楽になったことだろう。

 10MBの理由。これには諸説あるようだが、マイクロソフトの打ち出した製造コスト、消費電力、チップサイズ、性能といった複数の要求仕様に対して、Xbox 360 GPUのEDRAM製造側との折り合いをつけた結果ではないだろうか。

 ただ、Xbox 360 GPUではテクスチャは512MBの共有メモリに配置しておく仕組みなので、仮にEDRAMの容量や分割レンダリングを用いる用いないに関わらず、結局、テクスチャ参照の際には、共有メモリ帯域を食うことになる。今世代はただの画像テクスチャ(デカールテクスチャ)の適用以外に、法線マップによるバンプマッピング、シャドウマップ技法による影生成の際などなどテクスチャ参照頻度が高い。Xbox 360のグラフィックスプログラミングでは、EDRAMの上手な活用、そして最終的にはメモリ帯域消費のチューニングが鍵を握りそうなのである。その開発には、XboxやPS3とは違った苦労がつきまといそうだ。


■ こうなったら最後の手段、解像度変換だ!

 結局、Xbox 360では「1,280×720ドットで2xMSAA」はなかなか守りにくい決め事になってしまったので、マイクロソフトは低解像度でのレンダリングも許容することになった。しかし、低解像度でレンダリングして720p出力できるのか。

より詳細なXbox 360 GPUのブロック図。左上のDisplay Controllerが最終的な画面表示を司るブロック
 Xbox 360には、その映像出力を司るディスプレイコントローラ(昔的に言えばCRTC)がなかなか優秀で、レンダリング解像度と出力解像度が一致していなくてもよいのだ。そう、冒頭の長い前置きで語った、記録解像度と表示解像度が一致しないテレビやビデオの話がここで効いてくるのだ。

 Xbox 360はテレビゲーム機なので、任意の解像度でレンダリングしたフレームを720pや1080iといったハイビジョン映像モードで出力する能力が与えられているのだ。もっと具体的に言えば1,280×720ドット未満の解像度のフレームを720pとして出力することはできるのだ。もちろん逆に480pや480iといったSD映像モードでの出力も可能だ。

 多少の縦横解像度の組み合わせの制限はあるものの、Xbox 360のGPUでは任意の解像度を設定してレンダリングすることがハードウェア的に可能となっている。極端な話、320×240ドットのレンダリングも可能であり、これを720pとして出力することもできるのである。

 これまであまりXbox 360のディスプレイコントローラについても語られることがなかったので、ここで簡単に紹介しておこう。Xbox 360の映像出力を司るディスプレイコントローラは高品位な解像度変換を行なうスケーリング回路を搭載している。それも単なる線形補間回路ではなく、マルチタップFIRフィルタ(Finite Impulse Response Filter)の機能を有しており、垂直、水平のタップ数は非公開とされるものの、フィルタ係数はコンフィギュラブルとなっている。簡単に言えば、一般的な液晶テレビやプラズマテレビの解像度変換回路とほぼ同等性能を備えているといっていい。

 いくら高品位とはいえ、映像をデジタルズームで拡大表示したような感じになるので、レンダリング解像度が1,280×720ドットより極端に低いのに720p出力すれば、やはりぼやけたモザイクのようになってしまう。しかし、1,280×720ドット未満であっても、十分高解像度であれば、アンチエイリアス処理までをかけてしまえば、よっぽどのマニアでなければ「ハイビジョン映像」として認識されてしまうだろう。

 さらにフルパフォーマンスを得るためには、どうすればいいか。それは分割レンダリングを使わないことだろう。つまりEDRAM 10MBに収まるような解像度でレンダリングするように心がければいい。ただ、1,280×720ドットよりも解像度が低くなるとジャギーは目立つ。せっかく全くパフォーマンス低下のないアンチエイリアス処理が行なえるピクセルプロセッサがEDRAMに搭載されているのでこれを活用しない手はない。

ある開発者によれば、今はマイクロソフトから2xMSAAも強要されていないとのことだった。バンダイナムコが開発中の「機動戦士ガンダム」もこの画面を見る限りではアンチエイリアス処理を行なっていないようだ
 あくまで筆者が挙げる一例に過ぎないが、例えば16:9でFP10-32ビットバッファ、960×540ドット、32ビットZバッファ、2xMSAAだと、8,294,400バイトで約8MBだ。これならばSDよりは高解像度だし、分割レンダリングなしで済む。

 とある開発者は、縦解像度をキッチリ720ドットに合わせて、FP10-32ビットバッファ、880×720ドット、32ビットZバッファ、2xMSAAで9.9MBなんかもいいかもしれないと述べていた。レンダリング解像度の縦横比は4:3でも16:9でもない12:10という変則的なものだが、画角を16:9としてレンダリングすれば、ディスプレイコントローラで16:9の720p出力されたときにもちゃんとつじつまが合うので問題はない。

 ある別の開発者は、適当な低解像度でレンダリングし、表示するための720pのフレームを自前のシェーダで作り出すのも1つの手だと主張する。この低解像度フレームを720pフレームに自前のシェーダで変換する際に、カラーのディザリング処理も行なってしまえば副次的な滑らかな色表現が得られるかもしれないし、あるいは7e3からなるFP10の仮数の分解能不足を低減する効果もあるかもしれない。

 さらに別の開発者は、とにかくジャギーを低減したいと話す。せっかくEDRAMのピクセルプロセッサが4xMSAAまでパフォーマンス低下がないのだから、これを活用したら面白いという。4xMSAAでFP10-32ビットバッファ、32ビットZバッファとして、分割レンダリングをさせないように10MBに収めるとすると、レンダリング解像度640×480ドットになってしまうが、全くジャギーのない画は確かにこれまでのゲーム機のものとは違った見え方となることだろう。


■ PS3は大丈夫なのか~PS3の方が大変?

「プレイステーション 3(PS3)」は2006年11月に世界同時発売を予定している
 実は「解像度変換でハイビジョン出力」だったXbox 360の「ゲームはハイデフへ」戦略はPS3にとって対岸の火事というわけでもない。

 ある開発者は「HDRレンダリング前提で考えるとPS3の方が深刻だ」という。PS3はCPU直結のメインメモリを256MB、GPU直結のビデオメモリを256MB搭載した、PCに近いアーキテクチャをとる。しかもCPUがビデオメモリにアクセスできたり、GPUがメインメモリにアクセスできると言ったUMA的な相互乗り入れも可能になっており、UMAとディスクリートのいいとこ取りのようなシステムだ。

PS3のシステムブロック図
 ビデオメモリは1.4GHzデータレート、128ビット接続でメモリ帯域は22.4GB/secで奇しくもXbox 360と全く同一。ただし、PS3の場合、前述したようにCPUにはメインメモリの形で256MB直結されているので相互乗り入れが可能とはいえ、Xbox 360よりも帯域の奪い合いの頻度は圧倒的に少ない。

 ところが、PS3ではFP10-32ビットバッファがサポートされない。PS3のGPU「RSX」では、HDRレンダリングはFP16-64ビットバッファを標準としている。つまり同解像度のHDRレンダリングをやろうとするとXbox 360の2倍の帯域を消費する。メモリ帯域自体はXbox 360と同じなのに消費量が2倍なのだから余裕どころか大ピンチである。

 しかもRSXには帯域消費を緩和するEDRAMのような仕組みも持たない。RSXは設計をご存じのようにNVIDIA GeForce 7800 GTX(NV47/G70)と同じくするので、つまりFP16-64ビットバッファのブレンディングには対応するがアンチエイリアスには対応していない。一貫したレンダリングに活用するバッファとしてはやや特殊性が残っている。ゆえに、もしかするとPS3でのHDRレンダリングはXboxやDirectX 8世代で流行したαRGB各8ビット整数の従来の32ビットバッファを用いた疑似HDRレンダリングのほうが主流となる可能性も否定できない。

 レンダリング解像度に関してはPS3でも、Xbox 360同様に、解像度の選択は各ゲームタイトル毎に好きなものを選択させ、最終的にディスプレイコントローラで720p、1080i、1080pといった解像度で出力するアプローチをとることだろう。

2005年のE3では「Up to 1080p(progressive)」を掲げていたが、これをリアルタイム3Dゲームグラフィックスで実施するのは非常に困難。PS3でも720p未満でレンダリングして720p,1080i,1080p出力が現実的な線だろう PS3ではハイビジョン2画面出力に対応するというが、異なる画面を2枚出力するという場合には描画負荷は二倍で効いてくる。1枚のハイビジョン映像レンダリングですでにギリギリのはずなので2画面出力時にはフレームレートを半分にしたり解像度を半分にしたりするといった工夫を採用する?

 あるPS3のゲーム開発者は、真顔でこう話す。

 「解像度なんかそこそこでいいと思う。PS3のRSXはせっかくのシェーダモンスターなのだから、それよりもめちゃくちゃ高度なシェーダを実行して1ピクセルに多くの情報を反映させて、しかも徹底的にアンチエイリアスをかけた方が絶対リアルに見えるはず。ハイビジョン解像度よりも1ピクセルに込めるリアルの方を重視したい」と。

 実際、高解像度レンダリングに必要なメモリ帯域に余裕がないのだから、解像度をそこそこに留めてシェーダサイクルに時間予算を多めに割いた方が結果としてバランスのいい画ができるのかも知れない。

 このあたりの「落としどころ」は、Xbox 360にしろ、PS3にしろ、様々なタイトルがリリースされていく中で最適解がいずれ見つかることだろう。

□マイクロソフトのホームページ
http://www.microsoft.com/japan/
□Xboxのホームページ
http://www.xbox.com/ja-jp/
□ソニー・コンピュータエンタテインメントのホームページ
http://www.scei.co.jp/
□PlayStationのホームページ
http://www.jp.playstation.com/
□関連情報
3Dゲームファンのためのグラフィックス講座 リンク集
http://game.watch.impress.co.jp/docs/backno/rensai/3dg.htm

(2006年4月26日)

[Reported by トライゼット西川善司]



Q&A、ゲームの攻略などに関する質問はお受けしておりません
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします

ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp

Copyright (c)2006 Impress Watch Corporation, an Impress Group company. All rights reserved.