Game Developers Conferenceレポート

Microsoft DirectX Day開催、次世代ゲームグラフィックスの姿とは?

会期:3月19日~3月23日 (現地時間)

開催地:San Jose McEnery Convention Centerなど

Microsoft DirectX Dayのシンボルマークがスライドで大きく映し出された
 米国カリフォルニア州サンノゼにて現地時間の19日から24日まで開催中のGame Developers Conferenceにおいて、Microsoft DirectX Day(以下MSDXDay)のセッションが設けられた。

 MSDXDayは、プレス向けの情報開示というよりは、完全にゲーム開発者のための技術講習的な意味合いが強く、主催はMicrosoft、聴者はゲーム開発者が中心、壇上に上る講師もゲーム開発者であるため、まさに「開発者の、開発者による、開発者のためのカンファレンス」といったコンセプトになっている。具体的には以下の題目による講演が行なわれた。

  • Introduction
  • Volumetric Rendering and Lighting Effects
  • Surface Material Physics
  • Shader Optimizations for DirectX
  • Power Debugging with Visual C++7.0
  • Art Pipeline Support in DirectX
  • DirectX High Level Shading Language
  • Next Generation 3D Gaming Technology
 基本的には、PCゲーム開発者向けに新しい、レンダリングテクニックを提示する内容で、いくつか次世代ゲームグラフィックスの姿を彷彿させるビジュアルが見られたのでそうした情報を中心にMSDXDayの概要をお伝えする。


■空間的レンダリングとライティング効果~幽霊や竜巻もお手の物に

 空間を表現するレンダリング技術に関するセッションでは、フォトリアリスティックなビジュアルを実現するための具体的なテクニックが提示された。

 まず、3Dグラフィックスは基本的に表示されているすべてのオブジェクトにフォーカスが合ってしまっているため、被写界深度の概念がない。これをプログラマブルシェーダを活用して実行しようという例が示された。これはフォーカスが合っているか合ってないかを数値化したアルファマップを用意し、これをもとにプログラマブルシェーダでフィルタリング処理をしていくことで実現する。

 具体的にはプログラマブルピクセルシェーダを用いてドット単位にアルファマップを参照し、フォーカスがあってないところはブラー処理を大きく行なってぼやけさせ、フォーカスがあっているところはブラー処理をあまりせずに普通のレンダリング結果が残る……という感じに処理される。

 3dfxのVoodoo5のようにレンダリングした各フレームをアルファ合成するのではなく、プログラマブルシェーダを活用しているのが現代的(もしくはDirectX8.x的?)だといえる。

被写界深度は最近にわかに採用され始めているテクニック アルファマップの方は解像度が低くても問題ないのでビデオメモリの節約も可能


 そしてドアの隙間から漏れる光や、霧の表現に役に立つと思われる、明確な立体的な形状を持つ半透明空間のレンダリングテクニックも示された。従来はこうした表現は半透明オブジェクトでごまかしていたのだが、「まやかし」なので3Dオブジェクトと交差した場合に、嘘が露呈する。今回示された例は、ジオメトリレベルで矛盾が出ない方法だった。

 直感的にはプログラマブルピクセルシェーダを用い、ドット単位にフォグ量を計算していくアプローチを取る。少々難しいので解説すると、Wバッファ(バックバッファ)にレンダリングしたいボリュームの最後面をレンダリングする。続いて、最前面を別のWバッファにレンダリングし、先のWバッファで引き算をしてやると、ドット単位ごとの、ボリューム量(霧の層の厚さ)が求められる。あとはこれを先ほどの被写界深度の例と同じようにアルファマップ(フォグマスクマップ)として参照してやり、ドット単位でプログラマブルピクセルシェーダでアルファ合成処理してやればよい。

 完全な3Dオブジェクトとして扱えるため、このボリュームにテクスチャを張ることも可能。デモンストレーションではノイズのテクスチャを張り、これをアニメーションさせることで、無数のパーティクル(粒子)が立体的な形状を形成しながら渦を巻くような表現が示された。これは竜巻などの表現、うごめく幽霊のような表現も膨大なパーティクルを使わずに比較的軽い処理で(ただしプログラマブルピクセルシェーダがあればだが)実現できることだろう。

本来霧の濃さというものは、視点から霧の層の厚さで決まってくるはず。左の図は霧の中にポットがあるのだが、ポットのジオメトリが考慮できず一様の濃さの霧になってしまっている。フォトリアリスティック時代においてこれはまずい これまでの3Dグラフィックスにおけるフォグというと一面にかかっている印象があったが、このテクニックを使うとある程度形を持ったフォグ表現ができる。光筋の表現にももちろん適用可能



■表面材質の物理~ワックスがけされた車はどう光る?

 このセッションでは表面材質が変わったときに光の反射がどう変わるか、についての技術解説が行なわれた。

 基本的なライティング演算に関する話が行なわれたが、1つユニークなテクノロジが示された。ここでは、1つはオブジェクトの表面が複数の材質が重なって形成されていた場合のシミュレーションだ。たとえば、金属面にワックスを掛けた場合はどう光るのか、もっと具体的に言えばワックスがけされた車はどう光るのか……という議論だ。
 これについては、単純にライティング演算を組み合わせて演算していくだけでOKだという。たとえばワックスがけされた金属面という例については、金属面に対するスペキュラ、グロス演算処理を行ない、これに拡散反射を足し込むというような処理系を行なう。どちらにどの程度重みを置くかはまた材質によっても変わるのだがこうすることで、車のゲームで「車体表面が妙にテカテカ」しているあの「うそっぽさ」をかなり抑えられるという。

スペキュラはグロス処理と環境マップの合わせ技で表現。これでもそれほど変ではないが「いかにも」3Dゲーム的。よく見ると変にテカりすぎている気はする こちらは拡散反射のみ すべてをやればこんな感じ。ワックスがけされた車という感じ。コンピュータ画面内でワックスがけされた車が走る日も近いか



■DirectXにおけるシェーダの最適化など

命令の対応はこんな感じ。これだけ見るとたんに関数名に括弧が付いただけだが、前述のデバッガと併用するとかなり敷居は下げられたといえるのではないか
 「シェーダの最適化」の講義では、プログラマブルシェーダで記述したシェーダプログラムを10%でも最適化して縮められればそれはフレームレートの向上につながる……という話であった。

 「Visual C++7.0におけるシェーダーデバッギング」では非常に強力なプログラマブルシェーダデバッガのβ版が公開され、これまで数学的な知識と、物理的な理解がないとなかなか難しかったこのシェーダープログラミングを、カット&トライによるプロトタイピングが可能になることを明らかにした。その際に用いられるラスタライザはソフトウェアベースのリファレンスラスタライザで、1命令単位のステップ実行ができる。

 「DirectXにおけるシェーダー高級言語」という講義では、これまでアセンブラ(機械語)ライクな低級言語で記述していたプログラマブルシェーダを、C言語ライクな高級言語で記述しよう、という提案のセッションで実際に、その開発環境のβ版が公開された。

 「再起構造が使えない」、「ポインタ変数が使えない」という制限はあるものの、ほぼ完全なC言語スタイルの文法を採用しているのが特徴。ハードウェアごとに微妙に違うプログラマブルシェーダの違いを吸収する意味合いもあるようだ。これは、DirectX 8.1になってATI系とNVIDIA系でプログラマブルシェーダの仕様が分極化してしまったことへの対応の意味合いもあるのかもしれない。

□GDCのホームページ
http://www.gdconf.com/
□関連情報
【3月20日】ゲーム開発者向けのカンファレンス「Game Developers Conference」開幕
http://game.watch.impress.co.jp/docs/20020320/gdc01.htm

(2001年3月21日)

[Reported by トライゼット 西川善司]

I
【Watch記事検索】
最新ニュース
【11月30日】
【11月29日】
【11月28日】
【11月27日】
【11月26日】


ウォッチ編集部内GAME Watch担当 game-watch@impress.co.jp

Copyright (c) 2002 impress corporation All rights reserved.