連載
2007年11月末,日本でも「クライシス 完全日本語版」(原題 Crysis。以下,クライシス)が発売された。PCゲームとしては2007年最大の話題作であり,なおかつ最先端3Dグラフィックス技術の博覧会的タイトルとして注目を集めてきたこともあって,楽しみにしてきた読者も多いと思う。
ゲーム本編の内容については,ほかの記事に譲るとして,久々の連載再開となる今回の「西川善司の3Dゲームエクスタシー」では,このクライシスのグラフィックスオプションとその技術的解説を行ってみよう。今やトップページからのリンクが消失してしまった本連載だが,相変わらず筆者は生きているし,不定期で今後も続けたいと思っているので,2008年もよろしくお願いしたい。
クライシスでは,ゲーム全編を通して,さまざまなスペシャルシェーダが動いているのが見られる。とはいえ,そのすべてを紹介するのはボリューム的に辛い。そこで,現行のハイエンドPC環境をもってしてもすべてが「最高」設定だとかなり重くなってしまうという,このクライシスのグラフィックスオプションに着目し,それぞれの項目がどんな3Dグラフィックス技術に関わっているのかを解説していくことにする。
ゲームを起動後表示されるメニューの「オプション」を選択し,そこからさらに下の階層の「システム設定」を開くことで「サウンド」「グラフィック」「詳細」の三つのタブに分かれたサブメニューが開く。
「解像度」は文字通りの表示解像度,「アンチエイリアス品質」は画面のジャギーを低減するアンチエイリアシング処理におけるサブピクセルサンプル数を設定するものだ。なお,アンチエイリアシング処理の詳細について知りたい読者は筆者の過去連載記事の「こちら」の後半部分を参照してほしい。
「フルスクリーン」をチェックすることで,ゲーム画面を全画面表示に切り替えられる。Windows Vista環境下で[ALT]+[TAB]によるタスク切り替えを行うと,クライシスでは画面がウインドウ表示に切り替わってしまう。これを再び全画面に戻す際に利用することになる。
ところで,2007年12月現在,クライシスには,ウインドウ表示と全画面表示の切り替えを頻繁に行っていると全画面表示の際,マウスカーソルの位置とメニューアイテムのポインティングがずれてしまうというバグが確認されている(筆者の環境でも確認)。対処法としては,[ALT]+[TAB]でクライシスを一度ウインドウ表示モードに切り替え,ここから「フルスクリーン」設定にもう一度チェックを入れれば大丈夫だ。豆知識として覚えておこう。
「自動設定」オプションは,そのPC環境を調べて最適なグラフィックスオプションを設定してくれるものだ。CPUやグラフィックスカード,サウンドカードなどをアップグレードしてクライシスを再起動した場合は,ここを実行しよう。
「詳細」タブの階層下には,より詳細なオプションが並ぶ。というわけで,ここからは各設定項目に沿って解説していこう。なお,これ以降のスクリーンショットは説明対象としている設定以外をすべて「最高」として撮影している。使っているOSは32bit版 Windows Vistaで,DirectX 10のゲーム画面である。
一般的なイメージとしては「3Dモデルに貼り付けるステッカーのようなもの」が想像されるテクスチャだが,プログラマブルシェーダ時代における3Dゲームグラフィックスのテクスチャは,さまざまな用途に使われる汎用数値データテーブルという活用法が多いため,この品質は,画像テクスチャの精細さ以外にも影響する。
画面は「最高」と「低」設定を切り替えて同一シーンを示したものだ。
石が並んだ川辺なのだが,大きな石はジオメトリレベルでの凹凸があるものの,細かい凹凸については放線マップによるバンプマッピング(俗称:法線マッピング)や視差遮蔽マッピング(Parallax Occlusion Mapping,パララックスオクルージョンマッピング)を適用している。
前者の法線マッピングは,微細凹凸を構成する微細な面の向きを「法線マップ」としてテクスチャに格納し,リアルタイム描画時にこの法線マップの情報をもとに,ピクセル単位のライティングを行うという疑似凹凸表現技法だ。また,後者の視差遮蔽マッピングは,視点からの微細凹凸の高さ情報テクスチャ(=Height Maps,ハイトマップ)が持つ遮蔽構造に配慮し,局所的なレイトレーシング+ボリュームレンダリングのような処理を法線マッピングに対して行うものである。
この「テクスチャ」設定を上げ下げすると,画像のテクスチャ解像度だけでなく,こうした法線マップやハイトマップの解像度も変わってくる。スクリーンショットの例でいけば,「低」設定にした場合は凹凸の解像度が低く凹凸が分かりにくくなっているが,「最高」では,あたかも本当の凹凸があるかのように見えている。
次の画面も「低」と「最高」を比較したものだ。右の扉に書かれたアルファベットが「低」だとぼやけており,扉の凹凸も「低」では分かりにくい。一方,左側の文字表示は「低」でもけっこうきれいだ。
あまりスポットライトが当たらない技術だが,クライシスのゲームエンジンでは,Half-Life 2シリーズのValveが開発し,SIGGRAPH 2007で発表した「Improved Alpha-Tested Magnification for Vector Textures and Special Effects」を実装していると思われる。これは,文字テクスチャの輪郭付近のピクセルに対応するαチャンネルに,滑らかに見えるようα値を細工しておく,シンプルなテクニックだ。
3Dモデルの表現精度のコントロールを行う設定だ。ジオメトリ負荷(つまり,ゲームの重さ)に直接的に影響する要素となる。
「最高」設定が“全部入り”の形状で最も複雑な形となり,「低」設定に向けて3Dモデルの造りがシンプルになっていく。
画面はプレイヤーが搭乗できる戦車を間近でとらえたもの。左が「低」設定,右が「最高」設定によるものだが,「低」では側面に備え付けられたスコップや打ち付けられたリベットなどがなくなっており,「最高」で見える砲塔の細かなパーツが姿を消している。
視点から遠い位置に表示させる3Dモデルは,頂点を削減した低ポリゴンモデルや,ディテールを省略した簡易モデルに変更することが多く,これをとくにLOD(Level of Detail)処理という。さまざまな描画エンジンにおいては,3Dモデル表現に対する「低」設定として,このLODシステムで遠方時に表示する簡易3Dモデルを,始点が近い位置にも適用するといった仕組みをとることが多い。クライシスでもおそらく同じ方法が使われていると思われる。
また,「オブジェクト」の設定を下げることでグラフィックスメモリ消費量も抑えられる。
画面は空母内にいるNPCの脇役達だが,左が「低」設定,右が「最高」設定だ。「最高」ではバリエーション豊かなNPCモデルを用意して表示しているが,「低」設定では使い回しが多くなる。同一モデルを使い回すことでグラフィックスメモリ使用量を削減しているわけだ。
また,この画面をよく見ると,人物そのもののポリゴン数も「低」では少なくなっているのが分かる。グラフィックスメモリ容量が少ない環境で「最高」設定をすると,あふれた情報がメインメモリに格納され,グラフィックスメモリとメインメモリ間のバス帯域幅の消費が著しくなってパフォーマンスが低下する。
比較的ジオメトリ負荷の高いクライシスでは,頂点シェーダ数が決めうち固定式のDirectX 9.0c世代(=シェーダモデル3.0対応)GPUではジオメトリ処理にボトルネックが発生しやすいと推察される。「最高」設定はDirectX 10世代(=シェーダモデル4.0対応)GPU環境下での使用が望ましい。
また,DirectX 10世代のGPUであっても,グラフィックスメモリ容量が256MB以下だと余裕がないため,「最高」設定は厳しいだろう。
文字どおり,影の描画品質に関わる設定がこれだ。
現在の,ポリゴンベースのリアルタイム3Dグラフィックスにおける陰影処理では,他者から自分への遮蔽についてはまったく考慮されない。だから3Dグラフィックスでは鼻の頭で覆われて暗いはずの鼻の穴の中がなぜか明るくなってしまっていたりする。光源から降り注ぐ光を何かが遮蔽することで影ができるわけだが,この処理は,陰影処理(=ライティング計算)とは別系統に実装する必要がある。
そこで,リアルタイム3Dグラフィックスの世界では「効率のよい影生成技法の開発」がホットな研究テーマとなっており,これまでにさまざまな技法が生み出されてきた。
クライシスでは,そのうちメジャーな技法である,「デプスシャドウ技法」の発展形を採用している。この技法についての詳細は連載バックナンバー「カプコンに聞く『ロスト プラネット』のグラフィックスオプション」に詳しいので,そちらを参照してほしい。
「低」設定。影なし |
「中」設定。低解像度の影出現 |
「高」設定。高解像度の影と限定的なソフトシャドウ処理 |
ソフトシャドウ処理を全域に適用 |
「低」設定では基本的な影生成がすべてオフになる。ビジュアル的にはかなり寂しくなるが,描画負荷はかなり軽くなる。
「中」設定からは影が生成されるようになる。ただし,影生成のために使用するシャドウマップ解像度が低くなるため,ややぼやけた影になる。
「高」設定と「最高」設定になるとシャドウマップ解像度が上がり,影のディテールも向上する。クライシスの影生成では影の輪郭をぼやかせるソフトシャドウ処理を実装しているが「高」設定ではこの処理を目立ちやすい視線から近い近場の影にしか適用しない。「最高」設定ではすべての影に対してこれを適用している。
ビジュアル的には「中」設定でもかなり見栄えがよくなるので,できれば「中」以上を選択したいところだ。
「低」の設定 |
「中」設定。ここから見栄えがずいぶんとよくなる |
設定は「高」。影がいくぶんクッキリする |
「最高」ではあるが,「高」との違いは微妙 |
「物理」となる日本語訳からも分かるとおり,「フィジックス」はクライシスの物理エンジンの動作品位を設定するオプションだ。よって,この設定を変更しても3Dグラフィックスの見た目はほとんど変わらない。
クライシスでは建造物のほとんどが破壊可能な物理特性を持っており,これが「次世代感」としてアピールされていた。ゲームショウやコンベンションなどでよくデモンストレーションされていたのが,「木や枝を撃てば着弾地点から折れる」という動的破壊システム。フィジックス設定はこのシステムを調整するものと考えていい。
「低」設定では,家そのものやテーブルといった大道具類の破壊が不可能になる。窮地に陥った場合は家屋へ逃げ込み,「低」設定に切り替えることで敵の攻撃を完璧に跳ね返すアジトが完成するわけだが,ゲームの面白味は下がってしまう。なお,樹木が倒れたり枝が折れたりする物理効果は「低」設定でも生きている。また,大道具類でも木箱のような一部のものは破壊可能になっている。
「中」設定からは家屋類が破壊可能になり大道具類もほとんどが破壊可能になる。また,キャラクターと草木の衝突判定が行われるのもこの「中」設定からだ。
クライシスの物理エンジンの面白さを体感するためには最低でも「中」設定にはしておきたい。
「中」設定からは家屋が破壊可能になる | ||
「低」設定では家屋は破壊不能 |
テーブルのような大道具オブジェクトが破壊可能になるのも「中」設定から | |
キャラクターと植物の衝突判定が行われるのも「中」設定から |
かなり抽象的な名称の設定オプションだが,実際にそのとおりであり,この設定を切り替えると複数のグラフィックス要素のクオリティがまとまって切り替わる。
すべての要素をここで紹介することはできないが,三つのシーンから設定の違いによるビジュアルの相違を示しておこう。
この水辺のシーンでは水面の違いが最も目立つポイントとなる(「シャドウ」設定と,後述の「ウォーター」設定は「最高」にしている)。
「低」設定 |
「中」設定 |
「高」設定 |
「最高」設定 |
「低」設定だと,水面の波表現は周囲の簡易情景と水底の様子をフレネル反射で調整するだけのものとなる。もっとも,水面のジオメトリにはちゃんとリアルタイムで変わるアニメーションが実装されており,数年前であればこれでも上等な水面表現だといわれたことだろう。「低」設定では「シャドウ」設定に関係なく,影描画が省略される。
「中」設定になると水面のさざ波によるスペクトラム効果が現れる。これは入射した光が水面で分光して色収差を引き起こす現象をシミュレートしたものだ。さらに,水面に映り混む情景の品質も上がっている。また,「中」設定から影の描画が行われるようになる。
「高」設定になるとHDRレンダリングが有効となり,高輝度部分からの光があふれ出すブルーム効果が現れるようになる。また,リアルタイム動的トーンマッピング処理も介入し,シーン内の明暗の違いの大きい区間を移動すると適正の輝度になるよう,階調の連続的な調整が行われる。露出のシミュレーションが行われるわけだ。
(左)「低」設定。(右)「中」設定 | |
(左)「高」設定。(右)「最高」設定。影の出方に注目。「シェーダー」設定でも影の描画品質を制御している |
また,「高」設定からは顔面シェーダが有効となり,皮膚にスペキュラが動的に現れ,さらに,光源位置を反映したハイライトのキラキラが眼球に描かれる。
「最高」設定では,被写界深度のシミュレーションシェーダ(俗称ピンぼけシェーダ)が有効となる。影のソフトシャドウ処理などではサンプル数が増やされ,より自然で柔らかいソフトシャドウになる。
ビジュアルクオリティにかなり直結するので「シェーダ」オプションはできれば「高」以上にしたいところだ。
(左)「低」設定。(右)「中」設定 | |
(左)「高」設定。顔面シェーダが有効になりだすのはここから。(右)「最高」設定 |
通常の3Dオブジェクトは,ポリゴンモデルの各面,あるいは各ピクセル単位の陰影処理を行うことで描画されている。
しかし,煙のように,実態が流動的で不定形な物体(?)はこれではうまくいかないため,「パーティクルシステム」(後述)で表現する方法と,実態のない物体の断面図テクスチャや奥行き(Zバッファの内容)などの情報を元にしてレンダリングする「ボリュームレンダリング」の実装が一般的になっている。身近な例では,医療現場で用いられるMRIやCTスキャンの可視化映像がこのボリュームレンダリングで生成されている。
さて,この「ボリューメトリックエフェクト」は,そのボリュームレンダリングの制御を司るものと理解していい。具体的にいえば,リアルタイムで動的に生成される雲の描画や,フォグの描画などを扱う設定だ。
「低」設定とすると空からは雲がまったくなくなってしまう。「中」以降は雲が現れ,より高い設定にするにつれて品質が変わるが,その違いはわずかだ。
フォグも「低」設定とするとおおざっぱに霞がかった処理になってしまうが,「中」設定とすると,シーンの奥行き情報にリニアに対応するフォグとなり,ビジュアル的に美しいだけでなく,距離感がつかみやすくなる。こちらも「中」設定以上での違いは少ない。
そこそこのビジュアルとそれなりのパフォーマンスがほしいというのであれば「中」設定であまり問題はなさそうだ。
(左)「低」設定。(右)「最高」設定。「低」とは雲の有無が決定的な違い。雲は「中」設定以上から出現する | |
(左)「低」設定。(右)「最高」設定。奥の霞み方が異なる |
これは,グラフィックスの品質そのものに影響はしないオプションで,その意味では「フィジックス」オプションと似ている。
クライシスはFPSなので,ゲームでは敵を撃退したり障害物を破壊したりしていくわけだが,その過程で積み上げられる死体や破片などをシーンから消失させる処理条件を設定していくのがこれになる。「最高」設定では,かなり長い時間残るが,「低」設定では比較的早く姿を消す。
それなりのパフォーマンスを持ったPCであれば,「高」設定以上にしてもプレイ自体が重くなることはない。
「低」設定(左)では比較的すぐに死体や破片が消えてしまう。敵の死体の山をプレイの勲章としてシーンに残したいプレイヤーは「最高」設定にしておくべきかも? |
3Dゲームグラフィックスの描画処理は,3Dレベルだけでなく,2D画像に対しても行われる。このような,描画が完了した3Dグラフィックスのフレーム(2D画像)に対して,さまざまな後付けのエフェクトを書き足したり,画像処理を施す処理系のことを「ポストプロセッシング」(後処理)という。いってみれば,3Dレンダリングした映像を素材に,「Adobe Photoshop」などを使ってレタッチするようなものだ。
クライシスでは,印象的なシーンのかなりの割合がこのポストプロセッシング処理で実現されている。
「低」設定ではほぼすべてのポストプロセッシングがキャンセルされてしまい,ビジュアルとしてはやや古くさい印象になる。一番目立つのは被写界深度のシミュレーションがキャンセルされる点だろう。
「中」設定では被写界深度のシミュレーションは有効になるものの,モーションブラーはキャンセルされたまま。クライシスにおけるモーションブラーでは,フレーム全体をブラーするだけでなく,高速アクションを行ったオブジェクト単位で異なる方向のブラーが引き起こされる「オブジェクトモーションブラー」が採用されている。これは,カプコンの「ロスト プラネット エクストリーム コンディション」が採用する「2.5Dモーションブラー」に類似した実装と思われるが,最近使用例が激増しつつある。ちなみに,詳しい技術的解説は「こちら」を参照してほしい。
ポストプロセッシングにおける「高」と「最高」での大きな違いは,光が遮蔽物から漏れて放射状に広がる「光筋」(Light Shaft, God Ray)表現が有効かどうかに出る(※「最高」設定で有効化される)。
ボリュームレンダリングのようにも思える光筋表現だが,これは実はポストプロセスで,GeForce 6800シリーズのデモ「Nalu」でも用いられたテクニックである。遮蔽物情報に配慮しながら,高輝度部分を放射状にブラーさせるもので,いわゆるHDRレンダリングにおけるブルーム効果の拡張版といえる。なお,「ポストプロセッシング」が「高」設定以下の場合でも,「シェーダ」オプションが「高」設定以上なら――光筋表現は簡略化されるものの――HDRレンダリングは有効になる。
ポリゴンによる3Dモデルでは表現しにくいオブジェクトや,形状が不定形なものを簡易的に表現する場合,パーティクルシステムが使用されることが多い。「スプライト」という単語を聞いたことのある人も多いと思うが,大胆な例えをすれば,スプライトを3D空間上でコントロールするのがパーティクルといえる。つまり,テクスチャをポリゴン板に貼り付け,これを動かすのだ。
クライシスのパーティクルシステムは,かなり多岐にわたって活用されているが,この品質を制御するのが「パーティクル」設定だ。
オーソドックスな使いどころだが,クライシスでも炎や煙などのエフェクト描画にパーティクルシステムが使用されている。パーティクルと3Dシーンとの交差線を低減するソフトパーティクル処理が最近の流行なのだが,なぜかクライシスでは「最高」設定でも,このソフトパーティクル処理が適用されない。
やや変わったところでは,落ち葉や草木の周りを飛び交う昆虫などもパーティクルシステムで表現されている。
設定レベルの違いは単純にこのパーティクルの量を設定するものとして考えていい。もちろん,「最高」で最も数が多く,「低」で最も少なくなる。
ゲーム後半の極寒のシーンでは,ここの設定を「低」にしても,雪煙は減らず,パフォーマンスはそれほど変わらなかった。
その名から連想されるように,水面表現にまつわる設定オプションだ。
クライシスにおける水面表現は大別して二つのタイプが実装されている。
一つは川や浅瀬などの比較的水深が浅い水の表現,そしてもう一つは大洋など底の深い水面だ。この「ウォーター」設定はこの二つの水面,いずれにも効果を及ぼす。
(左)が「低」設定。浅瀬が真っ平ら。(右)の「中」設定で波が出現 | |
(左)「高」設定。泡やさざ波のテクスチャが有効になり,(右)の「最高」設定で映り込み鏡像が高品位に |
(左)「低」設定。今度は大洋が真っ平ら。(右)「中」設定。シンプルな波が発生する | |
(左)「高」設定。遠景にもシンプルな波が出現。(右)「最高」設定では,近景から遠景まで複雑な形状の波が現れる |
「低」設定においては,浅瀬,大洋いずれもごく基本的なフレネル反射モデルが実装されるもののジオメトリレベルでの水面表現はキャンセルされる。水面に関してだけいえば,前出の「シェーダー」設定の「低」のような効果となる。
設定を「中」にすると,浅瀬における波動シミュレーションが適用される。大洋でもシンプルな高波が姿を現すが,遠景の水面は平坦なままである。
さらに「高」設定になると,浅瀬では,さざ波や泡のテクスチャが適用され,水面の見た目がディテール豊かになる。ただし,水面に映り込む鏡像については簡易的なものにとどまる。大洋では,遠景にも高波が見られ,違和感が減る。
「最高」設定では,浅瀬では,水面を通して見える情景が色収差を起こして色ずれを引き起こし,さらに水面に映り混む鏡像も高品位なものになる。大洋では波動シミュレーションをさらに複雑なものに切り替え,よりリアルな波を再現している。クライシスのシェーダ開発では,NVIDIAからの根幹技術の支援があったとのことなので,これはGeForce 6800シリーズの海賊船デモなどで用いられた「ゲルストナー波動関数」(Gerstner Wave)による波動シミュレーションを行っていると推察される。この技法については連載の過去記事でも触れたことがあるが,クライシスではゲルストナー波動関数によって生成される波動の個数を「中」以上で増やすといった実装になっているようだ。
(左)「低」設定で水に潜って水面を見上げたところ。(右)は「中」設定。“水面ぽく”なってきた | |
(左)が「高」設定で(右)が「最高」。色収差表現が現れるのは最高から |
順序が前後する感もあるが,最後に最も基本的な動作環境を振り返っておこう。最低動作環境と推奨動作環境は以下のようにとなっているが,たとえ推奨環境を満たしていてもかなり重い。
最低動作環境
[Windows XP環境の場合]
CPU:Pentium 4/2.80GHz以上,メインメモリ:1GB以上,グラフィックスメモリ:256MB以上
[Windows Vista環境の場合]
CPU:Pentium 4/3.20GHz以上,メインメモリ:1.5GB以上,グラフィックスメモリ:256MB以上
推奨動作環境
OS:Windows XP/Vista,CPU:Core 2 Duo 2.20GHzもしくは Athlon 64 ×2 4400+以上,メインメモリ:2GB以上,グラフィックスチップ:GeForce 8800 GTS以上,グラフィックスメモリ:640MB以上
筆者は,以下のようなシステム構成のPCで実際にラストシーンまでチートなしの難度ノーマルでプレイしたが,すべてのグラフィックスオプションを「最高位」に設定した場合,30fpsをコンスタントに維持してプレイするには,解像度1280×720ドットあたりがぎりぎりであったことを報告しておこう。
- CPU:Athlon 64 X2 6000+/3.0GHz
- チップセット:nForce 550
- メインメモリ:PC2-6400 DDR2 SDRAM 1GB×4(認識されたのは3GB)
- GPU:GeForce 8800 GTX(グラフィックスメモリ768MB)
- OS:32bit版Windows Vista Ultimate
1920×1200ドットや1920×1080ドットといったフルHD相当の解像度は,このPC環境ではきつい。試してはいないが,GeForce 8800 GTXでNVIDIA SLI構成にしても,投資コストに見合うパフォーマンスは得られそうにない。
また,1280×720ドットでも,ステージ8「Paradise Lost」以降の極寒シーンや空母甲板上でのラストバトルでは,ものすごい量のパーティクル負荷とジオメトリ負荷がGPUにのしかかるため,平均10fps前後にまでフレームレートが落ち込む。
2008年前半には,AMDが1カードで「ATI Radeon HD 3870」をデュアル駆動させるものを投入する予定であり,さらにNVIDIAはDirectX 10.1世代のプログラマブルシェーダ4.1(シェーダモデル4.1)対応GPUをリリースすると見られる。急がないのであれば,現行GPUでSLIを組むよりは,それらを待ったほうがコストパフォーマンス的にはいいはずだ。
もっとも,「グラフィックスオプションを最高位設定にする」ことにこだわらなければプレイは問題ない。「自動設定」でそのPC環境に最適なグラフィックスオプションをゲームが選んでくれるので一般ユーザーはその設定を使えばいいはずだ。
重いとはいえ,グラフィックスに関するクライシスの志は非常に高く,現存するPC向けゲームとしては現時点での最高位のリアルタイム3Dグラフィックス技術を実装していることが伝わってくる。
その重いグラフィックス表現のそれぞれの要素に自分なりの重要度を設定し,手持ちのPCでの最高のパフォーマンスと最高のビジュアルクオリティのバランスを探し出す手だてとして今回の記事が役に立てば幸いだ。
- 関連タイトル:
クライシス 完全日本語版
- この記事のURL:
キーワード
(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.