|
会場:Moscone Convention Center
現在、サンフランシスコで開催中のGDC 2007において、この「CRYSIS」のゲームエンジンである「CRY ENGINE2.0」に関連したセッション「Realtime Atmospheric Effects in Games Revisted」が行なわれたので、その内容をレポートしたいと思う。 ■ 全世界が注目する新世代ゲームエンジン「CRY ENGINE2.0」
CE2では、どうしても作り物っぽくなってしまう屋外情景のリアル表現にこだわっており、今回のセッションでは、そのために実装されたユニークなグラフィックス技術が紹介された。自然界のリアル表現というのは、数学的な視点で見るととてつもなく複雑であるため、これまでの大半の前例と同じく、CE2でも大胆な近似的アプローチにより実装を模索したとしている。大胆な近似とはいえ、DirectX 10世代のGPUパワーを活用することにより、かなり理にかなった洗練された方法を実装している。
CRYTEKが導入したのはシーン・デプス・ベースド・レンダリング(Scene Depth Based Rendering)というテクニック。これは視点からの視界の深度値(Z値)を先に求めてしまい、この値を用いて様々なポストプロセスを行なっていこうというのが基本方針になる。意味的には、作り上げたシーンを観察者から見て視界がどのような奥行き構造になっているかを先に把握してしまう、ということだ。これがどういう意味を持ってくるかは後々わかってくる。ちなみに、ピクセル陰影処理を完全に省略してそのシーンの深度値だけを求めるZバッファレンダリングだけを行なって、以降のパスでそのZバッファの内容を反復活用して複雑な陰影処理を後回しにする「ディファード・レンダリング(Deferred Rendering)」というテクニックがあるが、発想はこれに近い。
■ 空の光のレンダリング
一般的なゲームでは、「空」はアーティストが描いた空や写真を元に作成した画像等で表現することが今でも多いが、「CE2.0」では、リアルな空を再現するために、地球上の観測者を取り巻く半球(天球)の空の光の状態を計算で求めるアプローチを実装している。現実世界の空は、時刻によって太陽の位置が決まり、そこから観測者に向けてその光がどう伝わっていくかで見え方が決定される。これを求めるのだ。太陽の位置が決まると、光が空をどう伝搬するかは「レイリー散乱」と「ミー散乱」という2種類の光散乱現象(Light Scattering)を表した方程式を解いて求める。
なお、シーンをレンダリングするピクセル解像度よりも天球テクスチャ解像度のほうが圧倒的に低解像度になるので場合によっては天球がブロッキーな見た目になる不具合がでてしまう場合がある。これについては、より高い生成精度が求められる太陽そのものなどはピクセル単位の解像度でGPUで計算しているとのことだ。SM3.0/4.0世代のGPUであれば光散乱の方程式をピクセル単位に解いて直接テクスチャにレンダリングすることもできるためだ。
こうした計算で天球テクスチャを求めるというアプローチは、実は「CE2.0」が初めてではなく、既に一部のソフトでも実装されている。本連載で取りあげたPS2用「鬼武者3」でも、これとほぼ同種のテクニックを実装しているのは有名な話だ。 ■ 「CE2.0」におけるフォグ
シーン全体を覆うフォグは距離に応じて霧が濃くなる「距離フォグ」と一定の高さまで立ちこめる「高さフォグ」の組み合わせで表現されている。これを「CE2.0」では「大局的なボリュームフォグ」(Global Volume Fog)と呼んでいるが、この大局的なフォグのシーンへの合成は、冒頭で述べたように求めた視点から見た深度値を用いてフォグ色を決定する。具体的には画面内のうち、遠くまで開けている部分は何もない空間が多いのでフォグによる光散乱が多くなると言うことでフォグ色が強くなるが、視点から近い場所に遮蔽物があるような部分では光散乱が少ないのでフォグ色は薄くなるようなかんじだ。なお、そのフォグ色そのものは、事前に求めた天球の平均色を用いているとのこと。
「CE2.0」におけるフォグはそうした画面を広く覆うフォグ以外に、立体的な形状を持つ局所的なフォグ(ボリュームフォグ:Volume Fog)表現にも対応している。形状単位としては立方体形状や長球形状に対応しており、その形状の前面と後面との差分から、そのフォグ領域の厚みを求め、視線がその厚みをどう突き抜けるかをピクセル単位で求めて(レイ・キャスティング)、フォグの色を求めている。このフォグは、前出の距離や高さといった基本パラメータだけのフォグとは違い、立方体、長球といった単位形状を組み合わせた、自由な形のフォグをシーンに配置することができるのが特長だ。
半透明のオブジェクトとそうしたフォグが同居する場合の合成がややこしいわけだが、「CE2.0」では、許容できる範囲で簡易的な近似処方を実装している。前述の「大局的なボリュームフォグ」との合成は、半透明オブジェクトは頂点単位に持たせた半透明情報を利用し、「ボリュームフォグ」との合成は、CPUで求めておいたその半透明オブジェクトの半透明率を用いて合成している。
■ ソフトパーティクル~今世代ではもはや常識? 煙や火炎などの表現は、煙や火炎などの模様を描いたテクスチャを四角形に貼り付けたようなポイントスプライトを複数描画してそれっぽく見せるパーティクルシステムを活用するのが一般的だが、シーン内の他の3Dオブジェクトと交叉するとその交叉線が強く出てしまう。PS2などのゲームにおいて、爆炎が立ちこめるシーンで、その炎や煙に強い切り取られ線を目の当たりにしたことがあるだろう。あれだ。
これは非常に不自然であるため低減させるテクニックが最近は台頭しつつある。「CE2.0」では、本連載の「ロストプラネット」編で使われたものと同じアプローチが採用されている。これはパーティクル側に仮想的な厚みを持たせ、その厚みを配慮した状態でパーティクルを書き込み、その厚み情報が、そのシーンの何かと交叉するようであれば、そのパーティクルのそのピクセルの色を薄めてやる。すると、交叉線を目立たなくすることができるのだ。
■ 雲のレンダリング~自然に見える工夫とは?
「CE2.0」では雲パーティクルにはテクセル単位の雲の形状の厚み情報を待たせており、ソフトパーティクルと同じ処理を行なって、山と雲が重なったときに切り取られエッジがでないように工夫している。また、この厚み情報を利用して、逆光になったときの、雲からの光の漏れ具合のポストプロセスも適用している。「CE2.0」では、ちゃんとパーティクルシステムで生成した各雲固有な形の影が大地に投射される。これは非常に印象的なビジュアルだが、原理は単純で、雲パーティクルに仮想的に設定してある厚み情報のシルエットをシャドウマップ・スペースに投射しているだけで、雲以外の他の影生成と同時に処理できるようになっている。
全部の雲をこの手法でリアルタイム描画していては負荷が高すぎるので、視界の関係上必然的に数が多くなる遠くの雲については、この雲パーティクルシステムで生成した雲を、半リアルタイムにテクスチャにレンダリングして、2Dテクスチャとして利用してしまう妥協方法を用いる。
完全に書き割りの空ではなく、ちゃんとこの雲生成システムで生成した雲をテクスチャ化したものになるので、リアルタイム描画される動的な雲とのビジュアル面でのマッチングもいい。しかも、太陽の位置や空の色具合によってちゃんとライティングされてレンダリングしてテクスチャ化するので、陰影的にもリアルタイム雲とのつじつまが合う。もともと、空の雲は動きの早いものではないので、毎フレームではなく、ゆったりとしたサイクルで、複数フレームにまたがって更新すればいい。CRYTEKによれば、GPU性能如何によって更新タイミングを変えてもいいだろうとのことだ。
■ 水面の処理~さざ波表現のその先へ 水面表現も今や3Dゲームグラフィックスには欠かせない要素となっている。水面表現といえば本連載でも様々なゲームで活用されている法線マップを活用した環境バンプマッピングによる「さざ波」表現、水面までの距離に応じて異方性反射をするフレネル反射の再現といったテクニックをたびたび紹介してきているが、「CE2.0」ではそれらは大前提としてそれ以外の細かいテクニックが実装されているのでそちらを紹介しよう。
「Halflife2」を初めとして、水面が登場するゲームの水はやたら澄んでいて綺麗ではなかったろうか。現実世界の水はあそこまで透明度が高くないことが多い。「CE2.0」では、このやや濁った水を表現するためのテクニックを実装している。とはいっても、水面から下に向かってフォグを発生させて不透明感を実現するという単純なモノだ。また、水面と水辺の交叉線が強く出てしまっている3Dゲームグラフィックスを見たことが多いと思うが、これについても低減処理を行なっている。これは、ソフトパーティクルとの交叉線の低減と同じ発想で、シーンの深度情報と水面位置が近いところは水面と水辺をブレンドして交叉線を消している。
海のような水深が深い水面下についてはさらに特別な処理を適用している。「CE2.0」では水面下に潜ることもあるので、水面下と水面上での2パターンの処理に対応しているが、考え方が逆なだけで処理はほぼ同じ。 ■ CRY ENGINE2.0は屋外表現が美しいゲームエンジン
□Game Developers Conference(英語)のホームページ http://www.gdconf.com/ □Game Developers Conference(日本語)のホームページ http://japan.gdconf.com/ □CRYTEKのホームページ http://www.crytek.com/ (2007年3月7日) [Reported by トライゼット西川善司]
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp Copyright (c)2007 Impress Watch Corporation, an Impress Group company. All rights reserved. |
|