お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2008/06/13 12:10

連載

西川善司連載 / 完全理解「3DMark Vantage」(2)グラフィックスエンジン・後

西川善司の3Dエクスタシー 完全理解「3DMark Vantage」(2)グラフィックスエンジン・後
前回のページへ
6.ポストプロセス

 ポストプロセス(Post Process)は,直訳すれば「後処理」だが,3Dグラフィックスでは「レンダリング結果としての2Dフレームに対し,画像処理を行うこと」を指すことが多い。デジタルカメラで撮影した写真に対しては,フォトレタッチソフトなどを用いて色味を補正したり,輪郭を強調したり,赤目修正を行ったりするものだが,3Dグラフィックスにおけるポストプロセスは,この作業とよく似ている。ポストプロセスとは「ピクセルシェーダを使ったレタッチである」といってもいいだろう。

 フォトレタッチがそうであるように,ポストプロセスも悪くいえば「インチキ臭いフェイク処理」なのだが,実のところ,昨今の3Dゲームグラフィックスにおいては,このポストプロセスが重大なウェイトを占めている。そして,この流れを受け,3DMark Vantageでもかなりリッチなポストプロセスを実施している。個人的な感想を言わせてもらえば,ポストプロセス周りは,3DMark06と比べて,最も進化が著しい部分だと思う。

 3DMark Vantageにおいて目につく,代表的なポストプロセスを紹介していくとしよう。

 

●ブルーム(Bloom)

image
image

高輝度からふわーっとした光があふれ出ている感じの効果は,このブルームによるもの

 HDRレンダリングの醍醐味……というのは持ち上げすぎかもしれないが,HDRレンダリングのなかで,見た目的に最も分かりやすいのがブルームエフェクトだ。分かりやすくいえば,シーン中の高輝度部分があふれ出すようにして見える効果を指す。
 現実世界だと,このような光のあふれ出しは,「エアリーディスク」(Airy Disc)と呼ばれる,カメラや眼球のレンズ内回折現象によって引き起こされる。レンダリング結果に,普段見ている視界や写真に似せた,こうした効果をあえて加えることで,3Dゲームグラフィックスを,よりフォトリアル(=写実的)に見せようというのが,このポストプロセスの意義になる。

 ブルーム効果のあふれ出しには,ボカしフィルタの定番であるガウスフィルタが用いられている。フォトレタッチソフトなどでも「ガウスフィルタ」(あるいは「ガウスボカし」)といったキーワードを見たことがあるかもしれない。

 実際の処理系としては,「シーンのレンダリング結果をテクスチャとして出力したもののうち,高輝度のピクセルに対してガウスフィルタを適用する」というアプローチになるのだが,一度ガウスフィルタを適用しただけではあふれ出しが不十分。そのため,3DMark Vantageでは,いわゆる「縮小バッファ」技法と呼ばれる,ブルームエフェクト実装法としてはスタンダードなテクニックが採用されている。
 これは,「シーンのレンダリング結果」の解像度を縦横半分(※0.5×0.5なので,面積比にして4分の1)にしてテクスチャに出力し,それに対して同じようにガウスフィルタを掛け,さらに縦横半分にして……と繰り返していくもの。最終的には,元のテクスチャと,4分の1サイズのボカし映像フレーム,16分の1サイズのボカし映像フレーム……といったように,解像度の異なるボカし映像フレームが複数枚出来上がる。

 

image
image
image
image
image
image

基になるシーン(※ここでは分かりやすくするため,緑の円にした。左上)があって,解像度を4分の1にしながら,ガウスフィルタをかけていく

 

 この状態で,解像度(≒サイズ)の下がっているフレームを,元のサイズにまで拡大してから1枚に合成してやるのだ。解像度を下げた,すなわち縮小したフレームに対して処理を行うから「縮小バッファ」技法というわけである。

 

image
image
image
image
image
image

今回は5パターン用意したが,ガウスフィルタを適用した状態で解像度を元に戻して(=拡大して)合成する。すると右下のように,ブルーム効果のあふれ出しが自然に見えるというわけ。これは川瀬正樹氏がCEDEC 2002やGDC 2004で発表したことで広く活用されるようになった,いわば日本発のテクニックだ

 

 解像度を下げたフレームに対してボカしを適用し,それを合成時に拡大すると,同じボカし処理を繰り返しただけなのに,広範囲をボカしたのとほぼ同じ結果になる。もちろん,合成時に拡大する以上,場合によってはモザイク状の疑似輪郭が現れてしまうものの,合成時に,解像度の低いボカし結果ほど“薄く”して合成するので,そのアラは分かりにくくなり,まず問題ないとされている。
 なお,「どの輝度値からブルームを起こさせるのか」という閾(しきい)値の設定は,そのシーンを作り込んだアーティストが任意に設定できるようになっており,3DMark Vantageでどういった閾値設定がなされているかは明らかになっていない。

 

●光芒(Streaks)

 光芒は,高輝度部分のあふれ出させ方が少々違うだけで,基本的には前段のブルームと同種のエフェクトと考えていい。ブルームではもやーっとした,光のモヤのようなあふれ出しになるが,光芒は光が鋭く放射状に溢れ出すことを指す。星のマークはよく「★」の形で描かれるが,これは地球上から見たときに光の点でしかない星を見たとき,人間の睫毛やカメラレンズ内の絞り羽根における回折で,放射状に伸びた光筋に見える現象を端的に表したものだ。

 

image
image

3DMark Vantageにおいて,光芒は6方向に光筋がはみ出すようなフィルタカーネルで処理されている。高輝度から六本の光筋が伸びるあふれ出し表現は,このポストプロセスによるものと考えていい

 

 3DMark Vantageでは,この光芒効果も(先ほどのブルームと同じく)縮小バッファ技法で実装している。
 シーンをテクスチャへレンダリングし,その高輝度部分だけを抽出しつつ解像度を下げたものを生成。これに対して32点サンプリングを行い,6方向へ放射状に光が伸びる加工を施してやる。本処理1回分だけでは光筋の伸びが不十分なので,解像度をさらに下げ手同様の処理を繰り返していく,という流れだ。

 複数の解像度を段階的に低くして生成した光芒効果フレームを,「解像度の低いものほど薄くブレンドする」ルールですべて合成。すると,中央は明るいが,中心から遠くに行けば行くほど淡くなる光芒が完成する。

 

●歪形フレア(Anamorphic Flare)

image

中央よりやや下に見える,青い横方向の鋭い光のあふれ出しが歪形フレアだ

 歪形フレアとは,カメラのレンズへ光源が直射した場合などに,水平方向に長く伸びる光芒のこと。実装形態は前述の光芒と同じだが,光が伸びるにつれて伸びた光の色がだんだんと変わっていく,「カラーシフト」を起こさせる処理が加わっている。これは,レンズで分光現象が起きているような見た目の印象を作り出してくれている。

 

●レンズフレア(Lens Flare)

 レンズフレアも,高輝度な情景をカメラが捉えたときにレンズ内反射で起きる虚像現象の一種。撮影映像のような雰囲気を出そうという狙いから,これをあえて付加するのだ。

 レンズフレア効果の実現に当たっては,「適当なボケ形状パターンをスプライトで表現し,これを放射状に配置する」という疑似的な手法もあるが,3DMark Vantageではポストプロセスで付加する方法を採用している。
 具体的には,「レンダリング結果フレームを縮小バッファの要領で縮小してボカし,さらに最外周を暗くする『ビネット効果』(Vignette Effect)も施して,これを画面中心から放射状に並べる」感じだ。

 

image
image

3DMark Vantageにおけるレンズフレア実装がよく分かるショット2点。左では,台形状になった通路の高輝度部分の虚像がダブってその通路に上書きされているように見えるのが分かるだろうか。さらにその左にうっすらと台形の天地が逆転した虚像も見える。右は,太陽の虚像が左上方向に伸びている

 

●レンズ形状光輪(Lenticular Halo)

image
image

高輝度部分の外周へ,円状に分光するようにあふれ出すのがレンズ形状光輪

 レンズ形状光輪は,レンズフレアの一種で,「ハレーション」とも呼ばれることもある効果のこと。高輝度なものをカメラレンズで捉えたときに,その高輝度部分の外周に光の輪(=Halo)が現れる現象を指す。
 これも基本的には前述したブルーム効果の別バージョンという感じの処理で,3DMark Vantageではシーンをテクスチャにレンダリングしたものを縦横4分の1,面積比で16分の1に縮小し,これにフィルタを適用するという流れになる。

 そのフィルタは,球形状に高輝度部分がはみ出していくものになるが,3DMark Vantageでは“光学現象っぽさ”を出すため,高輝度部分を円周状に広げてスライドさせていくときに色も変化させていく,カラーシフトの効果を織り交ぜている。こうすることで歪形フレアの場合と同様,光がレンズの影響で分光しているような味わいが生まれる。
 ただし,そのまま元フレームに合成したのでは,光輪が,適当な数のピクセルサンプルから作られている感じが露呈してしまう。そのため,ガウスブラーを適用してボカし,光が広がった雰囲気を出している。

 

●被写界深度(Depth of Field)

image

中央の戦闘機にフォーカスが合っているため,手前の1機と奥の2機はボケて見える

 被写界深度のシミュレーションも,最近の3Dゲームグラフィックスでは当たり前のように採用されつつある効果だ。簡単にいえば,「そのシーンをカメラで捉えたときのように見せる加工処理」になる。
 具体的には,フォーカス(=ピント)が合っているところはキッチリと見せ,ピントがズレていく箇所については,そのピントのズレの大きさに応じてボカしていく。

 3DMark Vantageでの被写界深度効果は,オーソドックスな深度情報を用いたテクニックで実現されている。
 まず,通常どおりレンダリングしたシーン結果を各αRGB16bit整数のバッファ(int16-64bit)にコピーし,このときにフォーカス情報も(おそらくαに)埋め込んでしまう。一方,アーティストはカット割りごとの演出的なフォーカス位置をシーンの奥行き情報,すなわち深度値で設定している。つまり,通常レンダリングしたシーンにおける各ピクセルの深度値と,そのフォーカス深度値の差分は,「当該ピクセルのピントがどのくらいズレているか」の情報に相当することになる。これがフォーカス情報となるわけだ。

 

image

手前の二人にフォーカスが合っているため,奥の通路がボケて見える。3DMark Vantageの被写界深度は弱めな感じ

 フォーカス情報とピクセルカラーがひとまとめになったバッファは,ここでも縮小バッファのテクニックを使って低解像度に変換される。そして,この縮小された低解像度バッファに対して「適当なボカし半径のガウスフィルタ」を用いてボカし,これを被写界深度効果フレームとする。この被写界深度効果フレームとシーンのレンダリング結果とを,解像度を揃えて合成するときに,前述のフォーカス情報を見て,ピンボケのところは被写界深度効果フレームの割合を多く,ピントが合っているところは割合を少なくして合成する。
 こうすることで,ピンぼけのところボケが出る一方,ピントが合っているところはクリアに見えるようになるのだ。

 

●モーションブラー(Motion Blur)

image

ホバークラフトのウイングや,奥の岩肌がブレて見えているのは,モーションブラーによるもの

 3Dグラフィックスのフレームは,喩えるなら「シャッター速度が無限大分の1仕様となっているカメラで撮影した結果」なのでブレることはない。しかし実際のカメラでは,映像を写し取るのに,シャッタースピードに応じた時間が必要なので,その間に被写体が動くとブレて映ってしまう。そこで,この「動きによって生じるブレ」を表現するものとして用意された効果が,モーションブラーである。
 3Dゲームグラフィックスでは,モーションブラーをあえて付加することによって,これまた写実的な映像を目指そうとする動きが強いのだ。余談だが,このモーションブラー効果は,「相手を狙いにくくするノイズでしかない」と,ハードコアなFPSゲーマーからは不人気なのだとか。

 さて,モーションブラーには視点の移動によってシーン全体がブレて見える「カメラ・モーションブラー」(Camera Motion Blur,以下CMB)と,シーン内の3Dキャラクターが動いてそれがブレて見える「オブジェクト・モーションブラー」(Object Motion Blur,以下OMB)の2タイプあるが,3DMark VantageではOMBに対応している。その技法は「Crysis」や「ロスト プラネット エクストリーム コンディション」で採用されたものとよく似たタイプだ。
 OMB生成には画面上の全ピクセル単位の速度分布を記録したテクスチャ「ベロシティマップ」(Velocity Map)が必要になる。これは,各3Dキャラクターについて,前フレームにおける各頂点の位置と現在フレームでの各頂点の位置の差分から求めた各頂点単位の速度情報を基に,視点から見たピクセル単位の速度情報を弾き出して,各αRGB16bit整数のバッファ(int16-64bit)に出力していくことで生成する。

 

image

移動方向にぶれているのが分かる

 あとは,このベロシティマップから取り出した速度情報をベースに,シーンのレンダリング結果をブレさせる加工を施せば出来上がりだ。先の2タイトルではベロシティマップを強調するプロセスを挟み込むことで,よりダイナミックなOMBを実現していたが,3DMark Vantageではそこまではやっていないようである。

 

●深度フォグ(Depth Fog)

image

基地内の奥(※画面では右側)が白っぽく見えるのが深度フォグの効果。かなり淡目にかかっている

 フォグ,つまり霧は,遠くのほうが霞んで見える,お手軽な空気遠近法の実現手段だ。
 3DMark Vantageでは,この空気遠近の効果を,「シーンのレンダリングを終えたあとのZバッファの内容(=深度値)を見つつ,各ピクセルについて,その深度値(=奥行き)に応じてフォグ色を強くしていくような加工処理を施す」ことで表現している。このような,深度値を見ながらのフォグ処理なので「深度フォグ」というわけだ。
 ちなみに,地表などの基準高からの一定の高さまでについてフォグ処理を行う,「高さフォグ」(Height Fog)というものもある。これは,3DMark06において,水深方向の霞み表現に使われていた。

 

●ボリュームフォグ(Volumetric Fog)

image

ボリュームテクスチャとは“フォグの断面図”的なもので,フォグの密度や色が記録されている。レンダリング時には,各ピクセル位置から伸ばした視線と,そのフォグとが衝突したところ(図中左のX)から一定距離間隔ごとに突き進ませてボリュームテクスチャをサンプルし,その値でライティング。障害物があればそこでライティングを打ち切ることにしつつ,フォグ領域を突き出るまで繰り返すのだ。フォグ領域を突き出た場合は,当然のことながら不透明度が増す

 雲のような,ある程度の形状を持ったフォグをボリュームフォグ(Volumetric Fog)という。奥行き方向の全体的なフォグしか表現できないのが深度フォグなので,対応するようにあえて和訳するならば“立体的なフォグ”といったところか。
 ボリュームフォグの表現には,フォグの密度と色を記録した,フォグの「ボリュームテクスチャ」(Volumetric Texture)を用意する。ボリュームテクスチャというのは,「表現対象の断面図」だと思えばいい。CTスキャンみたいなイメージだ。表現したい霧の形状をボリュームテクスチャとして用意しておくわけである。

 あるピクセルをレンダリングするときは,まさにCTスキャンで輪切りにしたイメージになるボリュームテクスチャからフォグの濃度と色を取り出し,当該ピクセルの透明度を算出(=ライティング計算を実行)する。断面図から実態を再構成する,いわゆるボリュームレンダリングを行うわけだ。

 

image

MicrosoftのDirectX 10デモに含まれる「VolumeSoft」より。同デモにおけるボリュームフォグの実装は,3DMark Vantageのそれとよく似ている

 3DMark Vantageオリジナルの工夫としては,ボリュームテクスチャを適当なリズムで拡大縮小してからサンプル(してボリュームレンダリング)するというものが挙げられよう。これにより,生成されたボリュームフォグが微妙に動いて,対流しているかのようなアニメーション効果が出せたとのことだ。
 凝っているのは,ボリュームレンダリング時にちゃんとシーンのシャドウマップも吟味しているという点。この配慮により,他者の影がちゃんとこのボリュームフォグ上にも投射される。

 

image

隕石の間にうっすらと複数の土埃の固まりみたいなのが見えるが,これがボリュームフォグ

 ボリュームレンダリングは,いわばレイトレーシングみたいなものなので,処理にかかる負荷が高い。そこで3DMark Vantageではこのボリュームフォグのレンダリングに関しては,ターゲット解像度の縦横4分の1,面積比16分の1となる低解像度でレンダリングしたものを拡大して合成している。また,上の図で示した「フォグ領域」は,円柱形状で管理される簡易的なものになっているという。

 

●トーンマッピング(Tone Mapping)

 3Dグラフィックスはこれまで,RGB各8bit(=24bitカラー)というダイナミックレンジに縛られてレンダリングしなければならなかった。
 しかし,当たり前だが,現実世界の視界にそういった制約はなく,幅広いダイナミックレンジの光(※輝度や色)に満ちあふれている。人間なら瞳,あるいはカメラならレンズの露出やシャッター速度をそれぞれ調整することで,それぞれにとって適切な輝度の範囲にまとめ,見やすくしているのだ。

 

image
image

連続したカメラシーケンスより。基地内の暗いシーンを捉えていた直後に,日の差し込む情景にカメラを向けたことで,日の当たっている高輝度な岩肌の陰影が飛んでいる。こうしたHDR表現が動的なトーンマッピングの効果だ

 

 さて,RGB各8bitを超えるHDR(High Dynamic Range)レンダリングについては,連載バックナンバー「『Half-Life 2: Lost Coast』でHDRレンダリングの実体をチェックする」をぜひチェックしてほしいと思うが,HDRレンダリングされたフレームというのは,そのままだと普通のディスプレイには表示できない。3DMark Vantageの場合,FP16-64bitの浮動小数点バッファでレンダリングされているため,一般的な整数8bit RGB駆動のディスプレイ装置で表示できるわけがないのだ。
 そこで,「人間の瞳やカメラのレンズによる露出補正」に相当する処理を行ったうえで,適切な輝度,すなわち普通のディスプレイに表示可能な映像フレームへ変換してやる必要が出てくる。そして,これを行うのが「トーンマッピング」と呼ばれる処理系になる。

 役割はシンプルでありながら,奥行きが深いテーマであるトーンマッピング。それだけに,どのような実装になっているのか非常に気になるのだが,残念ながらFuturemarkは「露出変調とガンマ補正付きの,シンプルなトーンマッピング処理を行っている」という説明しかしていない。

 

 

まずまず現実的なDirectX X10/SM4.0対応

 

 第1回の冒頭で述べたとおり,ここまではとくに,3DMark Vantageのグラフィックスエンジンについて詳解してみた。

 

image

VSM技法を採用したゲームエンジンの代表格といえるのがEpic GamesのUnreal Engine 3.0だ。画面は同エンジンベースのタイトル「Gears of War」より
(C)2008 Microsoft Corporation. All Rights Reserved

 通して見てきた感じでは,3DMark06のグラフィックスエンジンと比較して,基本アーキテクチャ面に大きな進化はないものの,現行世代で使われている,あるいはやや先の3Dゲームで使われるであろうテクノロジーが,けっこう貪欲に取り入れられているという手応えはある。
 例えばバリアンス・シャドウマップ(VSM)の影生成技法は本当に採用例が多くなっているし,数々のポストプロセスについては,3DMark Vantageに近い形の実装を現実に行っているエンジンもある。GPUに現実的な負荷をかける目的の3Dグラフィックスベンチマークアプリケーションとしては,面目躍如といったところだろうか。

 そのなかでも,とくにいい未来予測といえるのが,グラフィックス素材となる要素をCPUでなくGPUでシミュレーションして生成しているという部分。具体的には水面の波動シミュレーションや布の物理シミュレーションのことだ。AGEIA Technologiesを買収したNVIDIAが,GeForceでPhysX物理シミュレーションをアクセラレートするのは既定路線だし,ゲームデベロッパの間でも,今後,GPUでできる物理シミュレーションはどんどんやっていこうという流れが生まれつつあるので,このGPGPU的要素をテストに組み込んだ意義は高いと思う。
 欲をいえば,ゲーム開発者会議であるGame Developers Conference 2008(GDC2008)でも関連セッションが相当な数に上った「プロシージャル・アプローチのシェーダ技術」の要素も,何かしらエンジンに組み込んでほしかったが。

 

image

NVIDIAのGeForce 8000シリーズ用デモ「Cascades」

 なお,プロシージャル(Procedural)とは,日本語だと「手続き」の意だが,3Dグラフィックスの世界では,GPUに適当な“種(タネ)”とAI的な適応型のアルゴリズムを与えて,何かを生成させるような処理系を指す。
 最近の実例でいうと,GPUが地形と水,昆虫を自動生成して動かすNVIDIAのデモ「Cascades」や,Crytekが「Crysis」に組み込んだ,夏場のアートセット上に凍結シーンをプロシージャル生成する凍結シェーダのような技術がこれに相当する。

 

image
image

「Crysis」におけるプロシージャル凍結シェーダ
(C)2007 Crytek. All Rights Reserved. Crytek, Crysis and CryENGINE are trademarks or registered trademarks of Crytek. EA and the EA logo are trademarks or registered trademarks of Electronic Arts Inc. in the U.S. and/or other countries. All other trademarks are the property of their respective owners.

 

 このほかにも,Ubisoft Entertainmentが開発中の「Far Cry 2」も,植物の生成と成長,天候の制御などをプロシージャル技術で実現しており,プロシージャル技術はGPGPUと並んで次世代の技術トレンドになる可能性がある。次期3DMarkにはぜひ取り入れてほしい要素だ。

 最後に,気になる「3DMark VantageのDirectX 10対応度」についても簡単に言及しておこう。
 DirectX 10の目玉要素であるジオメトリシェーダは,パーティクルシステムに活用されている。煙や火花,水しぶきなどのパーティクルは,管理情報としては一頂点だが,ジオメトリシェーダで頂点を増殖させてポリゴン化し,スプライトに変換しているのだ。やや“甘口”な使い方だが,DirectX 10時代の序幕といえる今日(こんにち)的には,まあ現実的な使い方ともいえる。

 DirectX 10パイプラインの新要素となるストリームアウトの機能は,第1回で説明したとおり,GPUで行った布の物理シミュレーション結果を頂点シェーダに戻してグラフィックス処理させるための,再帰的処理系の実現に使われている。
 そのほか,テキスト断片で管理されているシェーダプログラムを合成し,1本のロングシェーダにまとめ上げて活用するという仕組みは,DirectX 10/SM4.0におけるシェーダプログラム長制限の(事実上の)撤廃や,シェーダリソース群の増強がなければ実現しなかっただろう。
 積極活用とはいえず,全体的に地味な印象には留まるものの,3DMark Vantageのエンジンは,確かにDirectX 10/SM4.0の恩恵を受けているのだ。

 一方,賛否両論あるDirectX 10.1のプログラマブルシェーダ4.1仕様は,現行の3DMark Vantageでサポートされていない。痒いところに手が届く機能も多く,レンダリング結果の品質を厳密に管理できるプログラマブルアンチエイリアシング系の機能はベンチマークソフト向きともいえるのだが,対応予定について今のところ特別なアナウンスはなく,ホワイトペーパーにも言及はなかった。

 

(3)Graphics Testの詳細 に続く

 

  • 関連タイトル:

    3DMark Vantage

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:12月17日〜12月18日