|
今回取りあげるセガの大ヒット3D格闘ゲーム「バーチャファイター5(VF5)」も、昨年発表されたセガのPCベースシステム基板「LINDBERGH(リンドバーグ)」ベースで動作している。リンドバーグのタイトルとしては、第1弾のガンシューティングゲーム「ハウス・オブ・ザ・デッド4(HOD4)」、テニスゲーム「パワースマッシュ3(パワスマ3)」などがある。 アーケードゲームのシステム基板がPCアーキテクチャに移行してきた理由はいくつかある。1つは汎用部品としてPCパーツを利用でき、システム価格を下げられるということ。2つ目は熟成されたPCハードウェアの知識や開発環境を利用することで、ソフトウェア開発が行ないやすいという点だ。また、プレイステーション 3やXbox 360といった次世代ゲーム機がPCの遺伝子を継承したプログラマブルシェーダアーキテクチャを採用してきた事を踏まえれば、(CPUの違いはあるものの)グラフィックス面に関しては相互移植性が高いという点もメリットとして挙げられるかもしれない。 「リンドバーグ」のスペックだが、Pentium 4(3GHz)、メインメモリ1GBといったスペックは、パソコンとしてみると「超ハイエンド」というわけでもないが、Windowsのような大規模汎用OSを動かさずにゲームコンテンツにのみにほぼフルパワーを割けるアーケードシステムということを考慮すれば、性能的には妥当なセンだろう。使用OSについては非公開。GPUについては「SM3.0世代のNVIDIA製GPU」ということになる。 いずれにせよ、公表されているリンドバーグのスペックは2006年時点での仕様であり、タイトーの「Type X2」のように、リンドバーグも自在に仕様拡張可能なPCシステムの優位性を活かし、Core 2 Duo+PCI-Expressシステムに移行する可能性は否定できない。 ■ 60fps維持が絶対条件だったVF5のグラフィックス VF5のグラフィックステクノロジの詳細に触れる前に、VF5のグラフィックス仕様についてまずは見ていくことにしよう。大胆に例えて言えば、「VF」シリーズに限らず、格闘ゲームは1/60秒単位でじゃんけんを行ない続けるゲームだ。このため、フレームレートが一定でないと、行動条件に不均衡が生まれ、フェアでなくなってしまう。そこで、フレームレート維持を徹底してゲームを設計するのが常。 VF5では、PCベースのシステム基板でグラフィックスを実装する都合上、OpenGLベースで作り込まれている。APIを介してでしかハードウェアの状態を知ることができない、いわば直接ゲームアプリ側が管理できないようなシステム上でフレームレートの維持は易しいことではないように思える。
加東 崇氏「OpenGLに命令コマンドを与えてから実際にGPUが描き出すまでのタイミングがAPIレベルで把握できないので、最初は苦労しましたね。最終的には60fps維持を実現しています。60fps維持できなかったら“ヒドイ目にあわすぞ”と上から言われてましたし(笑)」 VF5では、レンダリング解像度を1,280×768ドットとしており、これをリアル720p相当のハイビジョンモニタに出力している。筐体に採用されているディスプレイパネルは画面サイズや消費電力等の要因から液晶となり、その中から最速の液晶パネルを選択したという。残像が少なく、プレーヤーからの評判も上々で、パネル解像度は1,366×768ドット。レンダリング解像度と表示解像度が違うが、これはどういう事なのだろうか? 山之内氏「レンダリング解像度は1,280×768ドットなので、1,366×768ドット表示時には数十ドットの非表示エリアが左右に付きます。なぜ1,280×768ドットなのかといいますと、開発機材を1,280×768ドットのものにあわせて揃えており、もし横幅が1,366ドットになって、両横43ドットずつ非表示になっても問題ないと判断されていたからです」 1,280×768ドットの画面で60fpsを維持し、しかも複数のシェーダを稼動させながらのレンダリングというと生やさしいものでは無いイメージがある。前述したようにリンドバーグはAGPシステムなので、かなりギリギリという感じがする。 加東氏「ボトルネックは(GPUの)バスよりも、ピクセル負荷の方によく見られました。これをあらゆる条件下で60fpsが維持できるようにチューニングしていきました」 ■ 3D格闘ゲームだからこそできた人間LODシステム?
山之内氏「開発段階では、アイテム一杯付けているキャラ同士が戦うとフレームレートが落ちたりしてもう大変(笑)」 VF5では投げ技が決まると「投げカメラ」と呼ばれるシネマティックなカメラワークで技のアニメーションが入り、演出でキャラクタがアップになることがある。この場合、キャラクタが大きく描かれ、シェーダが多くのピクセルに適用されることで負荷が高くなる。このように、状況によって負荷が変わりやすいグラフィックスでは、パフォーマンスを平均化するために通常LOD(Level of detail)システムを導入することが多い。 さらに、最近の3Dゲームグラフィックスでは、描画するオブジェクトが視点から近いか遠いかで、シェーダの精度を切り換える「シェーダLOD」というテクニックも採用されつつある。これは、つまり、視点から近く大きく見えるキャラクタには、リッチなシェーダを動かすが、遠いキャラクタには低負荷な簡易シェーダを動かすというようなものだ。 しかし、VF5では、フレームレート至上主義で作られたとはいえ、その60fps維持のために動的なLODシステムを導入していない。VF5のような3D格闘ゲームは基本的にカメラが2人のプレーヤーキャラクタを捉え続け、普段はそれほどシーン上にキャラクタの増減がない。遠くの背景はいつまでも遠くのままだ。そこで、遠くの背景にはそれなりのポリゴン数予算で、シェーダもそれなりの品質に留め、近くの背景やキャラクタには多くのポリゴンを割き、シェーダは高度なものを動かす……というような実装にしている。 山之内氏「ある意味、事前に人間がLODをやっておくという感じですかね」 前述のように負荷が変わる状況はあるにはあるが、「装着アイテムが増えたとき」、「投げ技でカメラが寄ったとき」などなど、高負荷になる状況は予測、想定できるため、そうしたケースで60fpsが破綻しないように調整すれば、本来は難しい最高品位のビジュアルとフレームレート維持の両立の糸口も見えて来るというわけだ。 ■ VF5のポリゴン予算はVF4の3倍! VF5のグラフィックスはプログラミングAPIとしてはOpenGLを採用しているが、シェーダのプログラミングはOpenGLベースのシェーダアセンブラ言語「ARBアセンブラ」を使用。OpenGLで賄えない特殊な直接的なGPU制御のためにOpenGL上のNVIDIA拡張命令(NV EXTENSION)も駆使している。 リンドバーグの開発では必ずこうなっているというわけではなく、「HOD4」ではOpenGL Shader Language(GLSL)を用いていたり、「パワスマ3」では、NVIDIAの高級シェーダ言語「Cg」を使っていたりする。PS3では、OpenGL/ESを採用しつつも標準シェーダ言語には「Cg」を採用しているので、VF5のPS3への移植においては少々苦労した……という情報も筆者の耳に届いている。なお、逆に同様の理屈で、PS3版の「パワスマ3」ではその部分は楽になったと聞いている。現時点では、シェーダ設計の言語が異なる点と、それほど大規模なシェーダを作成していないこともあって、各開発チーム同士のシェーダの共有は行なわれていないそうだ。 山之内氏「とはいえ、他チームのグラフィックスで凄そうなシェーダが動いていると、パワスマ3チームのところに出向いて『これ、どうやってんの』と聞きに行ったりはしましたよ(笑)」 ポリゴン数が全てではないが、VF4とVF5では使用ポリゴン数などはどうなっているのだろうか? 牧野宗和氏「VF4のときが1キャラおよそ1万2,000ポリゴンくらいでしたね。VF5は1キャラおよそ4万ポリゴンくらいに増加しています」 村井里会氏「背景ですと、VF4で大体5万ポリゴン前後、VF5では大体10万~30万ポリゴンくらいです。ステージによって結構違うんです」
VF4はドリームキャストのアーキテクチャの最終形といわれる「NAOMI2」上で動作していた作品だ。ハードウェアベースのジオメトリエンジンを積んでいたので当時としては群を抜いたポリゴン性能だったが、時代が進みGPUが進化したことで3倍程度のポリゴン予算が持てるようになった。というより、実際のところ、VF5では、ポリゴン数を気にしてのデザイン開発はやっていないという。確かに、平均的な最近のPCゲームと比較しても、VF5のポリゴン数はかなり多く感じる。 PCゲームでは、NVIDIAのSM3.0対応GPUに限定してもGeForce 6200から7950GX2に至るまでターゲットGPUに幅がある。ターゲットハードウェアごとに最適な3Dモデルを複数持つのは開発コストやデータの冗長性に繋がるので、大体その時代のミドルクラスで処理できる程度のポリゴン数の3Dモデル設計をすることが多い。そして実行時に、比較的スケーラブルにコントロールが可能なテクスチャ適用数、シェーダ適用数、影生成精度、レンダリング解像度、ポストプロセス段数などで、クオリティとパフォーマンスのバランスを取るようにした設計が多い。 VF5では、ターゲットGPUがハイエンドクラスのものに固定された仕様であるため、比較的リッチなジオメトリデザインが実現できた。なお、PS3やXbox 360のタイトル群のグラフィックスもポリゴンモデルが平均的なPCゲームより高めと感じるのは同様の理由からだ。 牧野氏「ポリゴン数よりはテクスチャのメモリ容量とか、シェーダをどのくらい適用するとどのくらい負荷がかかるのか……とか、そのあたりの方に気を配る方が多かったですね」 ■ 影生成はデプスシャドウ技法+スクリーンスペースフィルタ処理を組み合わせた秘伝の技法で VF5ではシリーズ初となる、セルフシャドウ付き影生成を採用している。動きが激しいゲームなのでわかりにくいが、じっくり目を凝らしてみよう。首から頭までの影が肩に落ちるし、顔の凹凸においても影が出る場合がある。振り上げた腕の影が自分自身のボディに投射されるし、それらの影が相手キャラクタや背景にも投射され、また、着ている衣装の影がキャラクタの地肌にも投射される。いわゆる簡易影生成ではなく、かなり力の入った影生成が行なわれていることが伝わってくるはずだ。また、今流行りのソフトシャドウ(半影)処理も適用されており、現実世界の影に近い輪郭の淡い半影を伴っている。VF5の影生成の基本メソッドとしては「シャドウマップ技法」(デプスシャドウ技法)を採用している。
この弱点を克服するためにデプスシャドウ技法にはこれまでに様々な改良が施されている。3DMark05ではPerspective Shadow Maps(PSM)技法、イニス社のXbox 360テクニカルデモではLight-Space Perspective Shadow Maps(LSPSM)技法、3DMark06ではCascaded Shadow Maps(CSM)技法が実装され、それぞれユニークな工夫で弱点の克服に挑んでいる。また、今年のSIGGRAPH2006では、ノースカロライナ大学が対数系デプスシャドウ(LOGSM)技法を発表して話題を呼んだ。VF5の影を見ると、それほど目立ったエイリアシングは見えないが、一体どのような工夫をしたのだろうか? 牧野氏「VF4の時は低ポリゴンモデルを別に用意してステンシルシャドウボリューム技法での影生成を行なっていましたが、VF5ではデプスシャドウ技法に切り換えました。シャドウマップの解像度は1,024×1,024テクセルです」 加東氏「この程度のシャドウマップ1枚では到底エイリアシングは回避できないので、我々は、ちょっと一風変わったテクニックを開発して実装し、そのデプスシャドウ技法の弱点をごまかしているんです」 デプスシャドウ技法自体はセオリー通りそのまま実装しているが、まず、デプスシャドウによるジャギーを含んだ影付きのフレームを生成し、このフレームを元に2Dベース(スクリーン座標系)のぼかしマスクフレームを生成する。喩えると「影と日向」からなる型抜きフレームを作って、これをぼやかしてマスクとする。そして最終的にシェーダやテクスチャを適用したリッチなフレームと影フレームと影のぼやかしマスクを合成して、「セルフシャドウ付きソフトシャドウ」を作り上げるのだ。
この技法の特徴は、デプスシャドウ技法のエイリアシングを「2D画像処理」で消してしまうというアプローチだ。SM3.0世代のGeForce系ソフトシャドウといえば、「スプリンターセル3:カオスシオリー」で実装されたピクセルシェーダの条件分岐命令を駆使した適応型マルチサンプル技法の方が技法としてスマートのようにも思えるのだが……。 山之内氏「我々もその技法は実は開発初期段階では実装して試してみたんです。ですが、負荷がちょっと高めで、シーンの影生成状況に応じて負荷が変わりますし、60fps死守というテーマの前にはちょっと適さなかったんです」 加東氏「我々のこの方法だとコンスタントに大体1msの時間がこれにかかってしまいますが、負荷は基本的に常に一定にできます」 ただ、「投げカメラ」演出時や、オープニングデモなどにおけるキャラクタのアップショット時には、ジャギーが出ている瞬間を目にすることがある。さすがに、あまりにも視点が近くなり、ジャギーが大きくなった場合には、このVF5マスク式デプスシャドウ技法でも消しきれない。
■ 影生成は実は二段構えの方式 VF5における影生成は、実はこれだけではない。画面を見ただけでその違いを判別するのは難しいが、各キャラクタの地面に落ちている影は、実はデプスシャドウ技法で生成されているものではない。地面に落ちる最も目立つ影は、昔ながらの簡易影生成方式であるシルエット投射テクスチャマッピングを採用しているのだ。 シルエット投射テクスチャマッピングは、デプスシャドウの原型ともいえるもので、影生成元の光源位置から見たキャラクタのシルエット(外郭像)をテクスチャに生成し、これを光源からプロジェクタからの映像投影のようにテクスチャマッピング(投射テクスチャマッピング)することで実現する。低負荷であるため、PS2のゲームでは広く活用されており、PCゲームなどでもRPGやRTSなどでは未だに採用例が多い技法だ。ただし、その投射するシルエットには、投射距離が長くなる頭部に行けば行くほど強いぼかし(半影加工)を施しており、リアルな半影になっている。
まとめると、VF5ではマスク付きデプスシャドウ技法とシルエット投射テクスチャマッピング技法の2つの影生成技法を組み合わせていることになる。 加東氏「地面に落ちる影というのは存在感があるものなので、これを別途生成するようにしました。デプスシャドウによるものだとちょっと汚くなってしまうので」 村井氏「遠くの背景の影などは、リアルタイム生成しない、プリレンダな焼き込みの影ですし。影生成は適材適所で使い分けています」
なお、背景オブジェクトの影などでも、壁や柵、存在感のある大道具オブジェクトの影などは前出のデプスシャドウ技法によって生成し、対戦している2体のキャラクタにちゃんと投射されるようにしているという。1つのユニバーサルメソッドではなく、理想の映像に仕上げていくために複数技法を組み合わせて使うというのは、日本の職人技的なアプローチだと言えよう。
■ 匠の技。人間シェーダとプロシージャルテクスチャ VF5では、VF4よりもポリゴン数が多く、影生成もしっかりしているが、それだけではなく、1つ1つの細かい材質の質感にパワーがあってとてもリアルに見えると思う。これは、プログラマブルシェーダを駆使した、特殊なシェーダを実装して実現されているように見えるが、実際はどうなのだろうか。 牧野氏「基本的には拡散反射(デフューズ)、鏡面反射(スペキュラ)、それと法線マップによるバンプマッピングですね」 山之内氏「肌、髪、服といったものについてはデザイナーさんのセンスでそうした要素を調整してもらって、それっぽく見せているという感じです。よく見えたというのであれば、デザイナーさんの力量の勝利という感じですか(笑)」 基本は、「デフューズ、スペキュラ、法線マップ」の3要素で構成されるが、確かにスペシャルカスタマイズされたシェーダもあるという。例えば、アキラの道着。ボツボツとしたエンボスは法線マップによるバンプマッピングで表現されているが、肩の部分の“ほつれ”の部分は法線マップ+α値を読んでの透明/不透明合成を行なっている。また、水面が登場するシーンでは、服が濡れると、濡れた事を表現するためのパラメータを拾ってそれっぽく見せる工夫もしている。
ユニークなのがパイのチャイナドレスのような、テカテカした独特な異方性反射(見る角度によってテカリや色が変わって見える)を伴った質感のサテン(Satin)生地についての表現方法。これは、環境マップ側に周囲の情景だけではなく、布の素材模様も埋め込むようにして、これを環境マップとして適用しつつ、デフューズ、スペキュラを調整するという、かなり変わった実装で表現している。 牧野氏「物理的に正しい処理なのかはよくわからないのですが、それっぽく見えるんです。普段とか、ツールとかで実験していると時々、何かに使えそうなものが偶然できる。それを取っておいて、実際に使ってみたらこうなったというわけです」
VF5の開発では、特にシェーダのオーサリングツールのようなものは用いず、パイのチャイナドレスのように、基本シェーダの適用具合と、それに与えるデータをデザイナーが工夫して作成することで、様々な質感を作り出しているわけだ。ディズニーアニメで骨が折れた時の効果音をセロリの折った音で代用した方がリアルに聞こえるというエピソードをメイキング映像で見たことがあるが、まさにそれに近い、独自のアイディアと工夫で“リアル”を作り出しているわけだ。いうなれば「人間シェーダ」といったところか。
山之内氏「いろいろやろうとは思いましたけど、まっとうなスキンシェーダの実装は現状のハードではパフォーマンス的に厳しいですね」 牧野氏「でも、女性キャラ限定で特別な処理系が入っていますよ。女性キャラには見えないレフ版がついて回っているんですよ(笑)」 女性キャラは、陰影が際立ったり、セルフシャドウが強く出たりすると美人度が下がってしまう(?)ため、見えないレフ版(光源)を設定することで、顔の陰影が出にくくさせ、ライティングで調整しているのだという。逆に男性は陰影が濃く出た方がかっこよく見えるため、そうした工夫は特に行なっていないという。VF5においても、女性キャラクタは「女優扱い」であり、システムレベルでライティングには気を使っているのだ。
VF5のキャラクタ描写を注意深く見ていると、光源がこちらに向いている、逆光気味のシーンでは、本来ならば影となるはずのところで、肌の輪郭付近や、衣服の輪郭から光が漏れてくるような表現が見られる。HDRレンダリングの光あふれ出し(ブルーム)とは違う、まるで表面下散乱シミュレーションの結果のような表現のようにも見て取れる。
この「逆光テカリ表現」は、「光源位置が逆光気味」なおかつ「その面の法線の向きから判断してその逆光光源を掠めていると判断できる」という一定条件を満たす箇所が、「視線に対して輪郭として光が溢れ出るはず」と判断され、そこを光源色をブレンドして描くということで実現している。平たく言えば、光源がこちらに向かって輪郭を掠めるときは、その輪郭を光源色で塗って光が溢れているようにするということだ。NVIDIAがGeForce 7800シリーズ発表時に公開した「Luna」デモで実装した疑似的な表面下散乱では対象物の厚みに配慮した光の溢れ出しを実装していたが、VF5では、そうした複雑な処理はしていない。 VF5のこの「逆光におけるテカリ」は、実質、簡易的な処理なので、イレギュラーなケースではセルフシャドウとして影である部分から光が出てきてしまったり……というエラーがあったという。しかし、これもデザイナー側のパラメータ調整で不自然にならない程度に抑えてしまったとのこと。 超簡略版の疑似表面下散乱処理だが、シーン全体としてみるとかなりいい仕上がりになっている。頭、頬、手や首筋といった肌の透き通った感じはもちろん、衣服にも同様の処理が適用されるので、「布がそれほど厚くない」→「柔らかいものなのだろう」というようなイメージとして伝わってくる。 山之内氏「この“光の掠め”を味わいたい人はシュンやレイフェイなどのハゲキャラにご注目下さい。とっても綺麗にハゲが光りますので(笑)」 液体金属的な質感を持った最後の敵、デュラルについてはやや例外的にスペシャルなシェーダが動いているという。4体いるデュラル・バリエーションの中で出現条件の厳しい2体にそのスペシャルシェーダが使われている。
1つは薄膜干渉シェーダのデュラル。視線角度や周りの情景によって不思議な異方性の虹色光沢をする質感になっており、この質感表現には描ききりのテクスチャを用いていない。頂点シェーダを用いて光の回折(Diffraction)シミュレーションを実行して、この虹色を算出している。光は色によって波長が違うが、その異なる波長の光同士の干渉をピクセル単位で計算し、その結果から最終的な色を決定している。現在、3Dゲームでの実用に向けて研究が進められている、「計算でテクスチャを生成する新しいメソッド」である「プロシージャルテクスチャ」(Procedural Texture)の手法を、ある意味、先取りして実装した例といえなくもない。
山之内氏「この光の回折計算には屈折ベクトルの計算も行なうんですが、せっかく屈折ベクトル計算しているんだから、光が屈折するデュラルも作ってしまえ……という形でできたのが屈折デュラルです」 屈折デュラルは、求めた屈折ベクトルに基づいてデュラル以外のレンダリングされているそのフレームからサンプルしてくるだけで実現できてしまっているというわけだ。ちなみに、この2体のデュラルは一定条件を満たさないと見られないようなので、頑張ってプレイしてみて頂きたい。
■ 業界初!? 水面の表現に頂点テクスチャリング(VTF)によるディスプレースメントマッピングを使用 VF5のグラフィックスで目を惹く要素の1つに水面がある。VF5における水面は大別して2つ。1つは水位の浅い「水たまり」、もう1つは比較的水かさの高い「水辺」だ。水位の低い水たまりについての水面表現は比較的オーソドックスなアプローチになっている。水面への映り込みは、予め用意した低精度の背景を適当な解像度でテクスチャにレンダリングして「反射マップ」(≒環境マップ)を生成。これを適用することで実現している。
波動シミュレーションというとなにやら難しい響きがあるが、やっていることは基本的にシンプル。具体的にはその時点での水の高さ、速度、力といった要素をテクスチャに格納し、これらの情報から次の状態の水面の高さを計算したテクスチャを生成。この処理はピクセルシェーダにて実行されるのでCPUは介さない。算出された水面の高さの値は凹凸を表したハイトマップテクスチャとして扱い、これを法線マップへと変換して環境バンプマッピングを行なうわけだ。 プレイに夢中だとわからないかもしれないが、キャラクタが水面に足を乗せると、その振動で波紋が広がるという演出が凝っている。これはその波動シミュレーション用のテクスチャに対し、そのキャラクタの足跡の形でハンコを押す感じで更新することで影響を与えている。
加東氏「この水面のメッシュ形状が変わる波動アニメーションは、NVIDIAのGeForce6/7系にのみ搭載されている頂点テクスチャリング(VTF:Vertex Texture Fetching)を使って実現しています」 これにはちょっと驚かされた。そう、VTFは現時点ではほとんど使われていない、いわば盲腸的な機能だからだ。VTFとは頂点シェーダからテクスチャを参照できるようにした機能のこと。テクスチャというと画像というイメージがあるが、プログラマブルシェーダ時代に突入してからはテクスチャの使われ方に革新がもたらされ、用途によっては(シェーダプログラムの設計によっては)汎用のベクトルデータ配列として活用されることも多くなってきているのだ。であれば、汎用記憶領域としてピクセルシェーダからだけではなく、頂点シェーダからもテクスチャアクセスを行ないたいという要望が出てくるのも自然な流れ。この要望を具現化したのがVTF機能だ。
業界初のSM3.0対応GPUとしてGeForce 6800シリーズが発表された当時、VTFは「SM3.0ならではの待望の機能」として鳴り物入りで紹介された。ところが、その後、競合のATIのRADEON X1000シリーズがVTF未サポートで登場。ATI対NVIDIAの戦いの果てに、VTFは盲腸機能となってしまったのだ。補足しておくと、ATIはVTF実装を別に拒絶しているわけではない。ATI設計のXbox 360 GPUではVTFがサポートされているし、次世代DirectX 10世代SM4.0対応GPUではATIもVTFをサポートする事が確実視されている。さらに補足すると、もちろんPS3のGPU「RSX」はGeForce 7800GTXベースなのでVTFはサポートされている。 山之内氏「我々にとってターゲットハードウェアはリンドバーグ1本ですから。そのハードウェアをフルに活用すればいい。VTF便利ですよ~。むしろないと泣きます(笑)。CPUに戻さずに、基本的なジオメトリプロセッシングがGPUだけで完結できるというのは美味しいんですよ」 波動シミュレーションは、32ビット浮動小数点(FP32)テクスチャ上にてピクセルシェーダで行なう。先ほどの「水たまり」では整数テクスチャで波動シミュレーションをやっていたが、水辺の方でFP32テクスチャを用いる。この理由は単純明解で、VTFではFP32テクスチャに限定されているためだ。
加東氏「近所で弁当を買うと味噌汁が付いてくるんですが、その味噌汁の入ったカップを揺らしながら思いついたアイディアがあって(笑)。VTFで使ったFP32の波動ハイトマップには波の高さとか速度と力の情報があるので、せっかくだからピクセル単位のライティング時に、この情報を活用して濃淡を与えて濁りとか透き通っている感じを出しました。VF5での泥水とか汚水の表現はこれで実現しているんです」 山之内氏「チーム内で“味噌汁シェーダ”と命名されて使われました(笑)」 現状ではポリゴンを自動分割するテッセレータがGPUに実装されていないので(DirectX 11世代以降に実装の可能性有り)、VTFでディスプレースメントマッピングを適用する際には、その3Dモデル側の頂点数(このケースでは水面の頂点数)を予め分割しておく必要がある。ちなみにVF5では、水面の頂点数は、予め100×100との解像度で分割してある。 この「水辺」でも、やはりキャラクタが動くと、波動シミュレーション用テクスチャを摂動させるので、キャラクタの動きにインタラクトされて波が動くことになる。先ほどの水たまりよりもダイナミックに水面が動くので見た目のインパクトはかなり強い。 加東氏「蹴り上げた足が水を巻き上げるようなときには水しぶきが発生しますが、これに注目して欲しいです。VTFのおかけで水しぶきの衝突をテクスチャを使って頂点シェーダで検出できるんですよ。水しぶきの1つ1つが着水するとそこから波紋が発生するようにしています。多分、気づいている人、凄く少ないと思いますけど(笑)」 水しぶき自体は1個1個がジオメトリを持ったパーティクルで、着水時の水面へのインタラクトは、前述したキャラクタが足で水面をインタラクトする処理と変わらない。波動シミュレーション用のFP32波動ハイトマップの方に着水したシミュレーション用の初期値(高さ、速度、力)を設定すればいい。加東氏の言うように目立たないことかも知れないが、「何となく全体的にリアル」というような、グローバルなリアリティ感を出す効果としては非常に有用なことだと思う。
■ 雪原もVTFでやってます! このVTFによるディスプレースメントマッピングは雪原にも応用されている。水面の波のように動きはしないが、雪面をキャラクタの足で踏むと、FP32テクスチャによるハイトマップがキャラクタの足跡形状で押し下げられることになり、結果的に描かれる雪面が足跡の形で凹む……という寸法だ。
このブラーさせてできあがったぼやけ光沢テクスチャを普通に適用すれば、スペキュラ部分が、あたかも光が浸透して抜けてきたようなぼやっとした柔らかい陰影になるのだ。
加東氏「VTFで雪原の高さを変移させているわけですが、高い雪面はスペキュラを多くしてキラキラと輝きますが、低い雪面はデフューズの方を多くする陰影処理をしています」
加東氏「スノボーが好きなんで、去年のシーズン時、ゲレンデとかの写真を撮って研究しました(笑)」 ■ セガのVTF活用はせかいいちぃぃ!? 山之内氏「VTFはもう活用しまくりましたね」
水辺の水面処理では、水面の高さをグレースケールで表しハイトマップとして活用されていたFP32テクスチャを、VTFフォグでは、霧の濃淡情報を管理する。つまり、霧の濃淡の分布をFP32テクスチャで表してやるのだ。チーム内ではこれを「フォグマップ」と呼んでいたそうだ。
実際のレンダリングでは、水辺の水面のようにステージフィールドに対して平行で水平に見えない面を配置し、この見えない水面の各頂点から、そのフォグマップに対してVTFを参照し、取り出した値を「フォグの濃さ」として、その頂点カラーを決定してやる。つまり、VTFでフォグマップから取り出した値で高さフォグ(Yフォグ)の処理を頂点単位で実行してやるのだ。 この方法ならば、求めたフォグ色を最終的なカラー算出時に線形合成を1回やればよく、半透明の重ね描きは全く不要となる。比較的安い処理で、複雑な霧の濃淡をフィールド上に展開できるというわけだ。しかも、このフォグマップをスクロールさせれば、複雑な濃淡の霧が風で流れているように見せられる。 加東氏「それだけじゃないんですよ。例えばウルフのジャイアントスイングなどで、この“もや”が掻き乱されてふわぁっと、押しのけられるような効果までできます」 理屈はキャラクタが水面に影響を及ぼしたときと同じで、キャラクタの行動に応じてフォグマップを摂動してやるわけだ。これは面白い。 山之内氏「まあ、吹き飛んだ“モヤ”は、また自動的にまた流れて来て補充されるようなフォグマップアニメーションを適用していますけどね」
■ VF5はFP16ベースのリアルHDRレンダリングを採用~トーンマッピングにもVTFを活用! 最新3Dゲームのグラフィックスでトレンドとなっているのがハイ・ダイナミック・レンジ・レンダリング(High Dynamic Range Rendering)だ。VF5でも、当然HDRレンダリングを実装しており、レンダーターゲットバッファはαRGB各16ビット浮動小数点(FP16)の64ビットバッファ(以下FP16-64ビット)を採用している。
加東氏「最初、環境マップや反射マップなどのテクスチャもFP16-64ビットバッファとしていたのですが、書き出しはともかく、これらのテクスチャはフェッチ(読み込み)が遅いんです。そこでテクスチャはαRGB各8ビットの通常の整数フォーマットを採用して、HDRレンダリングの結果、高輝度となる場合には、そのα部に追加輝度情報を入れ込むテクニックを使いました」 VF5開発現場の手応えとしては、FP16-64ビットのレンダリングは半透明書き出しも含め若干遅い手応えもあったが、それよりもFP16-64ビットテクスチャの読みだしが遅く、レンダリングパイプラインのボトルネックになりやすかったと言う。 山之内氏「FPテクスチャのフェッチはたぶんフィルタリングが遅いんだと思います。少々コードのステップ数は食いますが(FP16-64ビットテクスチャをフィルタリング付きで読むよりは)、HDR情報をエンコード、デコードして整数テクスチャを使う方式の方が速かったですね」 PCゲームなどではHDRなFP16-64ビットテクスチャを使ったタイトルも出てきてはいるが、あれは可変フレームで問題ないPCゲームだからこそやっていける実装で、VF5のような60fps命のゲームでは「フルHDRなパイプライン設計はもう1世代GPUが速くならないと辛い」ということのようだ。 HDRレンダリングでできあがったHDRフレームはそのままだとFP16-64ビットバッファであり、RGB各8ビット色体系のディスプレイ装置では表示できない。そこでこれをRGB各8ビット色体系に調整するポストプロセスを行なう。この時、HDRフレームの輝度量を算出して、実際にそのHDRシーンに人間やカメラがいたら見ることになるだろう、適正輝度に補正する処理「トーンマッピング」(TONE MAPPING)処理を行なうのが一般的だ。なお、こうしたHDRフレームに対する調光シミュレーション的なポストプロセスまでを含めてHDRレンダリングと呼ぶこともある。 トーンマッピングで面倒なのは、そのHDRフレームの適正輝度を求める処理だ。HDRフレームをCPUに戻して計算したり、もう一回ピクセルパイプラインに戻してピクセルシェーダで求めたり……とやり方にはいくつかの手法があるが、いずれにせよ少々余計な手間と時間がかかる。そこで、VF5では、このトーンマッピング処理において、ユニークな方法を実装して、その問題の低減を試みている。なんと、ここでもVTFを使って約1パス分処理の短縮を実現しているのだ。 1x1ピクセルにまで縮小したHDRフレームをテクスチャとし、このテクスチャをVTF機能を使って頂点シェーダ側で読み出し、映像の平均輝度を頂点パイプライン側で計算してしまうのだ。その結果をトーンマッピング用の定数として、続くピクセルパイプライン(ピクセルシェーダ)に渡してしまえば、CPUも使わず、余計なレンダリングパイプラインを回さずにトーンマッピングが実現できる。 トーンマッピングによって適正輝度に落ち着くまではワザと多少の遅延を設けており、カメラや目の瞳の絞りが動く感じを模倣している。逆光気味のシーンや、屋内の暗めのシーンなどではよく観察すると演出としてわかるので注意深く見て味わって欲しい。
■ 物理シミュレーションエンジンは内製のものを使用 物理シミュレーションエンジンについてはセガ内製のもので、「VF4」の担当者が引き続き担当しており、基本設計もVF4から継承されたものを使用しているという。衝突判定用の衝突形状の設定は、基本的にローカルな衝突を検出するためのもので、キャラ対キャラでは取っていない。ローカルな衝突というのは、具体的に言えば、衣服、アイテム、髪の毛、はちまきなどのアクセサリが身体にめり込まないようにするための衝突などのこと。 牧野氏「衝突形状は球や円柱なんかで指定していってます。はちまきなんかは複数のジョイント(関節)でできているわけですが、それっぽく見えるように堅さなんかは我々デザインチームで設定、調整しました」
パンチがどう当たったからどう吹っ飛ぶ、とか、荷重を移動してパンチやキックを打った方がダメージが大きい……というような、物理シミュレーションを格闘システムに盛り込んでいくといった試みは無いのだろうか。 山之内氏「やってできなくはないんです。それで、売れるんならばやりますよ(笑)。ただ、『VF』というシリーズの括りだと難しいと思います。VFシリーズにはこの時にこう入力するとこういうコンボが決まる……という暗黙のゲームルールがありますからね」 衣服、アイテム、髪の毛、アクセサリは地形や水面に対する衝突は検出しており、例えばダウン時、はちまきは水に浮くし、長い髪の毛が地面に潜ってしまうことはなく、地面に広がるようにはなっている。
山之内氏「『VF3』のとき、IK(Inverse Kinematics:逆方向運動学)を活かしたゲーム性を取り込んだんですよ。ステージに段差とかアンジュレーション(Undulation)がある時に、ちゃんとキャラクタが追従するというような事を当時のプログラマが頑張って実装したんです。VF4以降、無くなりましたが」 ■ まとめ しかし「60fps死守」という命題をクリアするために、シェーダ負荷をあまり高くせずにその設計をシンプルに留めたというのは予想外であった。デフューズ、スペキュラ、法線マップという基本要素だけが与えられたデザイナー陣が、そのセンスとアイディアを駆使して職人芸的に「それっぽく見える質感」を作り上げていった様は「日本ならでは」という感じがする。 また、「60fps死守」を徹底するならば、むしろ切り捨てるか、簡易的な実装にしても良かったはずの影生成。これを凝りに凝った形で実装してしまうあたりからは、「世界に負けてなるものか」というような、「日本の技術者としての意地」のようなものが感じられる。 山之内氏は「VF5って全然グラフィックスを前面に押し出した作品じゃないんですけどね(笑)」と謙遜していたが、アーケードゲームのリアルタイム3Dグラフィックスとして、今後間違いなくベンチマーク的な存在としてリファレンスされていくことだろう。 現在、VF5はアーケードにて稼働中だ。ゲームセンターに立ち寄った際には是非ともその先進グラフィックスを見て欲しい。また、PS3版の移植も進行中で、アーケード版チームとの情報共有を行ないつつ鋭意開発中となっている。東京ゲームショウ2006ではプレイアブルのPS3版VF5が公開されていたが、グラフィックス面においては、解像度が1,280×720ドットになっている以外は影のエイリアシングの出方までコンパチというほどの移植度の高いでき映えとなっていた。こちらも期待したい。 (C)SEGA
□セガのホームページ (2006年10月25日) [Reported by トライゼット西川善司]
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp Copyright (c)2006 Impress Watch Corporation, an Impress Group company. All rights reserved. |
|