連載
西川善司の3DGE:知られざるPS4 Proの秘密(2)明らかになった「4Kレンダリングのレシピ」
今回のテーマは「レンダリング」である。
9月のPS4 Proの発表時点で筆者は,当時の限られた情報を基に「PS4 Proの4Kグラフィックスは,リアルな4K解像度レンダリングではなく,アップスケール表示になる」とお伝えしていた(関連記事)。その情報自体はおおむね正解だったのだが,実装レベルでは,もう少し高度かつユニークなことを,ハードウェア支援を受けながら実現していたことが分かった。本稿ではその部分の「秘密」に迫ろうというわけだ。
4Kレンダリングを,PS4 ProのGPUでいかにして行うか
PS4 ProのGPUは,標準的なPlayStation 4(以下,標準PS4)のそれと比べて,約2.28倍高い性能を持っている。これは,PS4 Proと標準PS4との間で,GPUコア側の演算ユニット「Compute Unit」数と動作クロックが以下のとおり異なっていることから計算できる数字だ。
- PS4 ProのGPU:Compute Unit数36基,動作クロック911MHz
- 標準PS4のGPU:Compute Unit数18基,動作クロック800MHz
具体的な理論性能値としての単精度浮動小数点演算性能で言うと,PS4 Proは約4.20 TFLOPS,標準PS4が約1.84 TFLOPSなので(※),約2.28倍というわけである。
※Graphics Core Nextアーキテクチャを採用するAMD製GPUの場合,シェーダプロセッサ1基は1クロックで単精度浮動小数点数の積和算を2つ実行できる。そして,1基のCompute Unitは64基のシェーダプロセッサを内包している。そのためPS4 Proは「64(シェーダプロセッサ)× 36(Compute Unit) × 2(FLOPS) × 911(MHz)=4,197,888 MFLOPS」となり,同様に標準PS4は「64 × 18 × 2 × 800=1,843,200 MFLOPS」となる。
本連載のバックナンバー「PS4 Pro向けゲームとHDR対応PS4ゲームのアーキテクチャ」でも触れたが,仮に「標準PS4の1.84 TFLOPS」が,ソニー・インタラクティブエンタテインメント(以下,SIE)の想定する「フルHDゲームグラフィックス描画に最適化された仕様」だったとすると,同条件で4Kゲームグラフィックス描画に必要な性能値はいくつになるだろうか。
フルHDは1920
この点について,PS4 Pro発表当時,各方面でさまざまな議論や考察が展開されたわけだが,大枠として伝わってきたのは「PS4 Proではネイティブ4Kを行うわけではない」「ある程度の高解像度レンダリングを行って4Kにアップスケールさせる」という情報だった。
また,その時点でSIEは,「シェーダ負荷のそれほど高くないタイトルにおいては,ネイティブ4Kレンダリングを行っているものも存在する」と述べる一方,多くのタイトルで,ある程度の高解像度レンダリングを行い,それを4Kにアップスケールさせること自体は否定していなかった。
では,そのアップスケールをどのように行うのだろうか。
今回,SIEのリードシステムアーキテクトであるMark Cerny(マーク・サーニー)氏は,「今回お話しする内容は,一般の記者に対しては初めて」と前置きしつつ,その部分を明らかにしてくれたのである。
ポリゴンレンダリングのみを4Kで行う「ジオメトリレンダリング」
Cerny氏が最初に語ったのは,最もシンプルな4K出力だ。SIE内では「ジオメトリレンダリング」と呼んでいるという。
Cerny氏の言うジオメトリレンダリングとは,簡単に言えば,ポリゴン解像度だけを4K化しつつ,シェーディングやライティング,テクスチャの適用解像度はフルHD解像度でレンダリングするときのまま据え置く方法である。結果だけに着目すると,オブジェクトの輪郭描写は,滑らかなアンチエイリアシング付きの4K解像度で得られる。
仕組みはこうだ。
いま述べたとおり,ジオメトリレンダリングでは,ライティングや陰影処理を行う解像度はフルHDのまま据え置きとなるが,Zバッファは4倍解像度の4K解像度で出力する。これはちょうど,4x MSAA(Multi-Sampled Anti-Aliasing,マルチサンプルアンチエイリアシング)を適用したフルHD描画と同等になる。
「4x MSAAを適用したフルHD描画」だと,Zバッファの解像度は4K解像度相当だが,最終出力される画像は,当たり前ながらフルHD解像度だ。1ピクセルに対して,Zバッファサンプル(以下,Zサンプル)は2
極端な例だが,たとえば今,赤色をしたポリゴンの一部が,2
それを踏まえてPS4 Proのジオメトリレンダリング技法だが,ピクセルシェーダを起動して行うライティングや陰影処理はフルHD解像度のままとして,Zバッファの解像度も4倍解像度の4K相当とするところまでは,「4x MSAAを適用したフルHD描画」と同じだ。
異なってくるのは,Zバッファとは別に,「IDバッファ」(ID Buffer)という特殊なバッファを用意し,ここにオブジェクトやポリゴンに対応する固有IDを出力するところ。たとえば,あるキャラクターモデルのIDが100だとすれば,その100という値で,IDバッファ上に当該キャラクターモデルの形状(=シルエット)を出力するイメージである。
このIDバッファも,Zバッファと同じく,ピクセル解像度の4倍の4K解像度となっている。
レンダリング時,こうした任意の値を出力しておくバッファとしてはステンシルバッファ(Stencil Buffer)がよく知られているが,IDバッファは,用途がまったく異なる一方で,ハードウェアとしての振る舞い自体はステンシルバッファとよく似ている。Cerny氏も「ステンシルバッファへの出力と同じように,深度値とセットでID値をIDバッファに出力します」と述べていた。
さて,ジオメトリレンダリングでは,フルHD解像度のピクセルシェーダでライティングや陰影処理を行い,4K解像度のZバッファとIDバッファのレンダリングも終えた後で,これらの情報を基に,SIEが「ソフトウェアによるリゾルブ」と呼ぶ処理によって4K解像度の映像に変換して出力する。
リゾルブ(resolve,結果回収)とは,簡単に言うと,GPUのプログラマブルシェーダ,より正確を期せばコンピュートシェーダ(≒GPGPU)で実装したポストプロセス処理のことだ。
ピクセルシェーダでも実装できなくはないが,ピクセルとZ,IDの各バッファへ局所的なアクセスが集中した場合,各バッファのデータがキャッシュに載りやすいため,コンピュートシェーダのほうが都合はいいらしい。
ジオメトリレンダリング技法で,「レンダリング結果としてのピクセルデータ」はフルHD解像度分しかない。言い換えると,「4K解像度の描画に必要なピクセル数の4分の1しか,ちゃんと計算したピクセルデータはない」,もしくは「ピクセルシェーダでちゃんとライティングや陰影処理を行ったピクセルは4個中1個で,3個は計算していない」のである。
ここで考えられる最も単純な解像度変換は,未計算である3個のピクセルに,実際に計算した1個のピクセルの結果をコピーして4K化するというものだ。ただしこれだと,4KパネルにフルHD映像をそのまま表示するような画像となり,能がない。
少し賢い処理としては,未計算の3ピクセルそれぞれに隣接する周辺の計算済みピクセルデータ群から加重平均を計算して,各ピクセルの値とするというものも考えられる。ただこちらも,一見うまくいきそうながら,背景とキャラクターの境界などを無視して,画像処理的に加重平均をとってしまう点に難がある。それこそ,背景色がキャラクターの輪郭線の色に滲み入ってしまうこともあり,美しい映像は期待できないのである。
PS4 Proにおける,ソフトウェアによるリゾルブ処理の振る舞いは,いま挙げたアイデアの後者を賢く拡張したものになっている。ここで活用するのは,前述したIDバッファの値だ。
未計算ピクセルのピクセルデータを周辺からサンプルして加重平均を計算するとき,その「サンプル対象となるピクセル」のIDが異なっている場合には,それを対象から外すのだ。こうすれば,背景色がキャラクターの輪郭線に滲んでしまう事態は避けられる。
Cerny氏によれば,IDバッファに書き込まれるID値は,ゲームプログラム側で任意のものを指定できる仕組みになっており,その割り当ては3Dモデル(=オブジェクト)単位でも,ポリゴン(=プリミティブ)単位でも構わないとのことだ。
IDバッファ自体は32bit幅となっており,16bitをマテリアル単位,16bitをポリゴン(プリミティブ)単位で振ることができるとのことである。
ちなみに,標準PS4で1920
ジオメトリレンダリング技法のメリットは,「既存のレンダリングパイプラインをほとんど改造しなくても4K出力に対応できること」と「GPUに追加の負荷を与えなくて済むこと」に尽きる。端的にまとめるなら「軽くてきれい」といったところか。
実際に,PS4 Proと標準PS4とで「inFAMOUS First Light」のジオメトリレンダリングを使った4K出力版とフルHD版の映像の比較を見せてもらったが,輪郭線が非常に美しくなっていることを確認できた。また電線のような細いジオメトリ,パーティクルのような微細なジオメトリも,4K出力版のほうが描画は緻密で,情報量が多い。
また,技術セミナーでは,イベントシーンではなく,インゲームにおける主人公キャラクターの顔にクローズアップした状態も見せてもらったが,その表情も,ジオメトリレンダリング技法による4K出力のほうがよく見える。ピクセルシェーダ側で適用されるテクスチャ解像度はフルHDと変わらないが,オブジェクトのIDに配慮して近傍色を補間してくれる後処理が,もしかすると超解像的な役割を果たしているのかもしれない。とにかく想像以上に目鼻口の解像感も上がっている印象だ。
一方,背景物の文字看板などといったテクスチャに,PS4 Proと標準PS4とで大差はないように感じられた。
PS4 Proの秘密兵器は「チェッカーボードレンダリング」!?
PS4 ProのGPUの性能を活かしつつ,PS4 Proの性能の範囲で最も優れた4K映像を作り出せるテクニックは,いまから紹介する「チェッカーボードレンダリング」技法のほうになる。
チェッカーボード(Checkerboard)は「チェスの碁盤の目」のことで,日本語では「市松模様」などと言うが,そんな名前を冠する本技法でも,ジオメトリレンダリングと同じく,ZバッファとIDバッファはいずれも4K解像度を用いる。つまり,ポリゴン解像度はリアル4K解像度相当になる。
では何が違うのか。前段で紹介したとおり,ジオメトリレンダリング技法では,ピクセルシェーダで行うライティングや陰影処理を1920
冒頭で確認したとおり,標準PS4のGPUに対して,PS4 ProのGPUは約2.28倍高い性能を持っている。なので,「横解像度はフルHDと同じで,縦解像度は2倍」というのは,PS4 Proにとって,「仕事量のちょうどよい増大」になるのである。
ただ,言うまでもないが,これでは横解像度がリアル4K解像度比で半分しかない。3840
ここでも,最もシンプルな解像度変換は,横解像度1920ピクセルの各ピクセルを隣にコピーして倍化して3840ピクセルにする手法だが,やはりこれは能がないし,映像の品質としてもよくない。そこで登場するのが,チェッカーボードという概念なのだ。
分かりやすく噛み砕いて解説しよう。
PS4 Proが持つGPUのチェッカーボードレンダリング技法では,ピクセルシェーダによる,横解像度3840ピクセル分のライティングや陰影処理を,1ピクセル飛ばしで行う。それを縦解像度2160ピクセル分処理することで1920
そう,これこそが,チェッカーボードレンダリング技法の「チェッカーボード」たるゆえんなのである。
ちなみに,チェッカーボードレンダリングのギミック自体は,どうやら「Graphics Core Next」アーキテクチャ世代のRadeonがサポートしているEQAA(Enhanced Quality Anti-Aliasing)の仕組みを応用しているようだ。
EQAAでは,ポリゴン描画にあたって,「当該ポリゴンをピクセルとして描画するか否か」の被覆率判定の位置を変移させる仕組みがあるのだが,この機能を活用している可能性が高い。
ではなぜチェッカーボードレンダリングだと映像品質がよくなるのか,その点を論理的に理解するには,「欠落した画素情報を復元する」ことを思い浮かべるといい。
下に示したのは,Game Developers Conference 2016で,Ubisoft MontrealのJalal Eddine El Mansouri氏が行ったセッション「Rendering ‘Rainbow Six | Siege’」のスライドを一部引用したものだ。チェッカーボード状で互い違いに1ピクセル分だけ歯抜けにした画像から補間処理を行って復元する場合と,元画像を縦に1ラインずつ歯抜けにしたものから補間処理を行って復元する場合とで,どちらが元画像に近いかを評価したものになる。
結果は見てのとおりで,チェッカーボード状に歯抜けにした画像からの補間復元のほうが,格段に元画像に近い。消失した画素情報量は同じにもかかわらず,である。
これは,チェッカーボード状の歯抜け画像のほうが,欠落した情報の分布を空間方向に対して均一化できるからだ。
そもそも極端なことを言えば,縦に1ラインごとに歯抜けした画像と,チェッカーボード状に歯抜けにした画像だと,補間復元する前から見栄えは後者のほうがいい。要はそういうことなのである。
なお,最終的に出力する4K映像は,前出のジオメトリレンダリング技法と同じく,「コンピュートシェーダで実装したフィルタ処理として,IDバッファに書かれたID値に配慮しつつ,近隣のピクセルを参照して加重平均を行い,補間するような処理をした結果」となる。
Cerny氏によれば,フルHD比で2倍の画素数を16:9アスペクトに配置した2720
ただ,Cerny氏は「実は,これだけではないんです」と笑顔を浮かべる。
PS4 Proのチェッカーボードレンダリング技法において,コンピュートシェーダで実装したフィルタ処理は,チェッカーボード状描画結果の4K映像変換処理にあたって,現在フレームの結果だけでなく,前フレームの結果も参照するという。
もちろん,前フレームの参照においても,当該ZバッファおよびIDバッファの内容を吟味する。そのため,「異なるオブジェクトのピクセル色を誤って取って,それをそのまま補間処理してしまう」心配は無用だ。
また,前フレームの参照にあたっては,ピクセル単位の移動速度を記録したベロシティバッファ(Velocity Buffer,速度バッファ)を流用するが,ベロシティバッファ自体は今日(こんにち)のゲームグラフィックスにおいてモーションブラー生成などのためにあらかじめ生成しておくことが多いので,前フレームの参照が追加の負荷になることはほとんどないはずだ。
「しかも,前フレームと現在フレームで1ピクセル飛ばしの位置を入れ替えます。これがどういうことか分かりますか」(Cerny氏)。
勘のいい人は分かったのではないかと思う。
視点(=カメラ)が静止している場合,前フレームと現在フレームの2フレームによる補間を経て出力される映像は,リアル4Kレンダリングを行った結果とほぼ同じになるのだ。
カメラがゆっくり動いていたとしても,前述したように,前フレームのZバッファやIDバッファの内容に吟味した補間が行われるため,極めてリアル4K映像に近くなるだろう。
実際,inFAMOUS First Lightで,ジオメトリレンダリング技法の結果とチェッカーボードレンダリング技法の結果を横に並べて比較させてもらったが,チェッカーボードレンダリング技法だと,キャラクターのエッジだけでなく,陰影処理の結果のハイライトやテクスチャ表現の解像度が格段に向上していた。看板に書かれた文字なども,まるで筆者の視力がよくなったかのように鮮明であった。
また,技術セミナーでは,開発途上版「Days Gone」を用い,ネイティブ4Kレンダリングの結果とチェッカーボードレンダリング技法の結果を比較するデモを見せてもらうことができた。
ネイティブ4KレンダリングはPS4 Proにとって重荷となるため,カメラを動かすと,フレームレートの違いで「どっちがどっち」の判別はつく。ただ,カメラを静止させた状態だと,その判別は極めて難しかった。
厳正を期せば,コンピュートシェーダで実装したフィルタ処理によって,結果としてピクセル色が隣接するピクセルに若干散乱することになるため極めて微細な表現に着目することで,区別はできなくもない。また,半透明が絡んだ描画結果はフィルタ処理による誤差が大きくなる。
ただ,本当に見比べなければ気がつかないレベルであり,チェッカーボードレンダリングで出力する4K映像は「ほぼネイティブ4K画質」と言っても問題はないレベルだと思う。
拡張型チェッカーボードレンダリング技法を考案済み!?
Cerny氏は「ライセンシー開発者には,ジオメトリレンダリング技法やチェッカーボードレンダリング技法のリファレンスコードを提供します。平均的な(技術力を持つ)開発者であれば,ジオメトリレンダリング技法は数日で,チェッカーボードレンダリング技法は数週間でそのゲームに組み込むことが可能だと思います」と述べていた。
9月のPS4 Proお披露目時点で出展となったPS4 Pro対応タイトルは14本。いずれも,あの時点では開発途中版という位置づけだったが,そのうち9タイトルがチェッカーボードレンダリング技法を採用しているそうだ。
残るは5タイトルだが,そのうち「Uncharted 4」ではいくつかの技法を検討している段階とのこと。
「Paragon」は,標準PS4だと1600
「Spider-Man」と「For Honor」は,元Naughty Dogで現Epic GamesのBrian Karis氏や,元NVIDIAで現AMDのTimothy Lottes氏らが開発した「チェッカーボードレンダリング技法をベースにした拡張技法」を採用している。
どういうものかというと,レンダリング自体はチェッカーボードレンダリング技法を活用して行うが,前フレームの情報を基に4K映像を生成するにあたって参照する場所を変移させる(=ジッタリングさせる)手法を採用しているのだという。このほうが,“素”のチェッカーボードレンダリング技法よりも品質の高い映像が得られることが多いのだとか。
たとえば,前フレーム参照のときにサンプリングするカラーサンプル(Color Sample)の位置を,フレーム・バイ・フレームで変移させる(=ジッタリングさせる)ということだ。
この方法のほうが,固定位置よりも時間方向に対して広域にサンプリングすることになるので,時間方向のチラツキの低減にも貢献できるようである。
PS4 ProをフルHDテレビに接続しても,標準PS4の映像よりも高画質になる!?
以前筆者は,「PS4 Proは,PlayStation VRに出力したり,フルHD解像度のテレビに出力するときでも,フルHDよりも格段に高い高解像度でレンダリングし,これをスーパーサンプリングしてから出力する」とレポートしたことがあった(関連記事)。
スーパーサンプリングを行う主体は,ディスプレイコントローラの一部であるハードウェアスケーラで,GPUが生成したバッファを参照して最終的にディスプレイ装置に映像を伝送する役割を果たすが,PS4 Proでは,そんなスーパーサンプリングのサンプル量がすごいのである。
なんとこのハードウェアスケーラ,1ピクセルにつき,最大60ピクセルの情報を取ってきて加重平均を計算するフィルタリング処理を行うというのだ。しかも,これはピクセルシェーダではなくハードウェアべースであるがゆえ,ほぼレイテンシフリーというのだから,驚くほかない。
ちなみにこのデモは,4K解像度版「KNACK」で見ることができた。
片方はPS4 Proモードで実行するも,映像の接続先はフルHDテレビとしたもの,もう片方は標準PS4モードで実行してフルHDテレビに出力したものだったが,見比べると,その違いは3つのポイントで確認できたので,紹介しておこう。
1つは,最も分かりやすい,美しいアンチエイリアシング効果だ。PS4 Proのほうが,輪郭のしっとりとしたアナログ表現で美しく,滑らかなのである。
2つめは,カメラ(=視点)を動かしたときに目に付く,時間方向にピクセルがうねったり,消えたり出現したりしてちらつくピクセルシマー(Pixel Shimmer,「Pixel Crawling」とも言う)現象の少なさ。
3つめは,ワイヤーや金網などといった細い線分表現で,PS4 Proではそれらが破線状にならず,しっかりと描画できていたところ。フルHD解像度レンダリングだとラスタライザがポリゴンのラスタライズをミスしてしまいそうなほどの微細なジオメトリまでも,PS4 Proは描けるのだ。
これらの効果は,言うまでもないが,PlayStation VR(以下,PS VR)においても体験できる。PS4 ProとPS VRを組み合わせたときの“効能”はフレームレートの向上しかないと思われがちだが,その表示映像の品質の向上も期待できるのだ。
おわりに
いかがだっただろうか。
「ネイティブ4Kレンダリングを行えない」「疑似4Kだ」などと揶揄されることもあったPS4 Proだが,こうして見てくると,たとえそうであったとしても,ネイティブ4Kに相当近い映像体験が得られるのだということをイメージできるはずだ。
フルHDテレビと接続しても,PS VRと組み合わせても,その高い性能を効果的に活用できることから,4Kテレビを持っていなくても,標準PS4から買い替えるのは,そう悪い選択肢ではないと思える。
一般ゲームファンの多くはおそらく,「標準PS4で十分」という意見を持つことだろう。それでも今回の情報開示は,「PS4 Proの高性能が気になる」層には強く響いたはずで,PS4 Proの購入を悩む人の背中を,最後に一押しするものになったのではないだろうか。
SIEのPS4公式情報ページ
西川善司の3DGE:知られざるPS4 Proの秘密(1)メモリ増量に,Polarisと次世代GPUの機能取り込み!?
- 関連タイトル:
PS4本体
- この記事のURL: