Game Developers Conferenceレポート

対NVIDIA GeForce4Ti!
ATI RADEON8500で実現される最新3Dグラフィックスの実際
~NPR、トゥーンシェイダー、PTM、ちぢれ毛シェーダー~

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

開催地:San Jose McEnery Convention Centerなど

 GDCにおいてATIは「Advanced Pixel Shading Techniques」(先進的なピクセルシェーダーのテクニック)というセッションの中で、RADEON8500を使った、シェーディングテクノロジーの技術解説を行なった。
 ここでは、この中で解説されたテクノロジーのうち興味深いものをピックアップして紹介していく。


●3Dグラフィックスのポストプロセッシングとは?

この考え方を利用すればレンダリング結果を白黒表示させることなどお手の物

 Direct X8.1フル対応のRADEON8500のプログラマブルピクセルシェーダー(以下PPS)1.4は、高度なテクスチャの従属参照が可能だが、これを利用するとかなりユニークなビジュアルを作り出せるという。

 まず、映像をテクスチャ領域にレンダリングする。この映像に対してPPS1.4の従属テクスチャ参照機能を駆使して別の映像へ加工変換、これを最終的に表示すれば、元の映像とは印象の違ったものを表示することができる。
 このような「映像を表示前にポストプロセッシングする様式」については、アンチエリアシングがすでになじみ深い。そしてPPS1.4を駆使すれば、アンチエリアシング以外のビジュアル・ポストプロセッシングも自由自在だというのだ。

 たとえばもっとも基本的なアイディアとしては、「映像の白黒化」というのが挙げられる。白黒映像の濃淡情報というのはフルカラー映像のRGB要素に対して 0.3R+0.59G+0.11B という演算を行なうことで求められる。
 3D映像を表示前にまずテクスチャ領域にレンダリングし、上記のような処理系のシェーダプログラムを経てから表示させれば3D映像を白黒化して表示させることができる。これはゲーム中のビジュアルカットシーンなどで適用すれば、「回想」をイメージさせるシーンを演出することが可能になるだろう。


●トゥーンシェイダーの秘密~NPRレンダリングが生み出す新感覚ビジュアル

 もし、上記の白黒化よりも複雑な演算ピクセルシェーダープログラムを作ったとしたら、もっとユニークなビジュアルも実現できそうだ。
 その具体例としてこのセッションで取り挙げられたのがノンフォトリアリスティック(NPR)な映像表現だった。

 ノンフォトリアリスティック(NPR)とはいったい何か。これはフォトリアリスティック(写真品質)に対極をなす用語で、具体的には
 ・絵画的
 ・漫画的

な表現技法で3Dグラフィックスをレンダリングことをいう。
 NPRレンダリングを直訳すれば「非」写真品質レンダリング……ということになる。

 ポリゴン数の少ない3D映像、テクスチャの粗い3D映像は、「非」フォトリアリスティックであはあるが、一般にNPRとはこのことを指しているわけではない。「ハイクオリティな3D映像を独特な表現手段で印象的に見せる」という意味合いで捉えるのが正しい。

 最近の3Dゲーム作品でもっとも有名なNPR実例としてはセガのXbox用3Dアクションゲーム「JSRF ジェット・セット・ラジオ・フューチャー」を挙げることができるだろう。このゲームでは「トゥーン(Cartoon、すなわちアニメのこと)シェイダー」、「セル(Cell)・シェイダー」とよばれる、セルアニメ的な表現で3D映像をレンダリングするシステムを採用している。

 トゥーンシェイダーで重要となるのは、

 ・濃淡の変化をわざとおおざっぱにして独特な陰影表現にする
 ・輪郭線の描画

といった要素だ。

 前者の実現方法は意外にもシンプル。
 まず、どういう濃淡にするかということを表した一次元テクスチャを用意する。
 そして、その映像をレンダリングする際に、普通にシェーディングして得た色情報をそのまま最終的なドット色とせず、パラメータとして一次元テクスチャから色情報を従属読み取りし、そっちの色を最終的なシェーディング結果として描画する。

 少々難しいので直感的な説明をしよう。
 ある程度の明るさの青は青だが、ある程度の暗さの青は黒にしてしまうような変換テーブルのようなものを一次元テクスチャとして用意する。実際にシェーディングした結果で、「薄い青」は「青」に変換して描画、「濃い青」は「黒」として描画してしまう……こんな感じだ。

 さて、輪郭線の描画は少々面倒だ。
 これには、いくつかのアプローチがある。
 ひとつはペイントソフトや二次元画像処理でお馴染みの「勾配フィルタ」を使ってエッジを検出する方法だ。プログラマブルピクセルシェーダで勾配フィルタの処理系を書き、これで検出したエッジを、元のレンダリング結果と合成すれば輪郭付きの3D映像のできあがりと言うことになる。

 ただ、こうした勾配フィルタによって抽出された輪郭線は映像のジオメトリ構造を考慮できていないので、やや違和感がある場合がある。

ジオメトリを考慮しているわけではなく、二次元の映像フィルタなので輪郭抽出の精度は完璧ではないが、まぁそれっぽいものは抽出できている

 そこで、一般的なトゥーンシェイダーでは、視点方向を表す視点ベクトルと、表示オブジェクトモデル上の各頂点における法線ベクトルとの関係をテストし(内積や外積を求めて)、輪郭と判断できれば輪郭を書く…というアプローチを取っている。

 この手法は理想的な輪郭を得られるが、そのオブジェクトモデルの頂点数が多くなると処理速度が遅くなるという欠点がある。
 講演者のJason L. Mitchell氏は「『ジェットセットラジオフューチャー』はこの方法を使っているが、そのためにキャラクタのポリゴン数が非常に少ないのがわかる」とコメント。「RADEON8500のPPS1.4ならではの方法がある」と続けた。
 これも映像の白黒化のところで解説したポストプロセッシングの考え方で行なっていく。
 つまりシーンを表示前に一度テクスチャ領域にレンダリングし、これをもとにピクセルシェーダプログラムで演算を行なって最終的な映像を得る…という発想だ。

 まず、シーンをピクセル色ではなく法線ベクトル情報でレンダリングする。
 普通「レンダリング」というとシェーディング処理によってそのドットの色を算出し、これを描画していく。これが通常だと最終的な表示映像となるわけだ。
 しかし、この場合ではプログラマブルピクセルシェーダで陰影処理をせずに、そのピクセルにおける法線ベクトルを算出して、それを別に用意したテクスチャバッファに書き込んでいくのだ。
 三次元ベクトルはxyzの3つで表現されるわけだがこれをピクセルでいうところのRGBに書き込んでやるわけだ。この処理系でできた映像は「World Space Normals」(グローバル空間座標系における法線配置図)とする。

 同様の手順で今度は視点からのシーンをZバッファレンダリングする。
 Zバッファレンダリングとは、やはり映像の色を描画するのではなく、視点からどのくらい離れたところに描画対象があるのかという情報を書き込んでいくレンダリングのこと。余談だがZバッファレンダリングはシャドウ生成の際にも利用される。こうしてできた映像は「Eye Space Depth」(視点空間深度)とする。

 ここまでで得られたふたつの映像を、今度はまた別のピクセルシェーダプログラムで処理して、別のバッファに輪郭を描画する。
 具体的には各画素ごとの法線ベクトルの向き(World Space Normalsから取得)と、視点からの距離の関係(Eye Space Depthから取得)が丁度、輪郭線を描画するのに適した条件と判断できれば、輪郭線を形成するための黒いドットを打っていく。
 実際にはそのままだと輪郭線が細いので、同時にDilate(膨張)処理も行なう(これは輪郭線描画時に同時に行なえる)。
 そしてこの輪郭線が描かれたバッファと、最終的な出力映像とマスク合成すれば太い輪郭線の描かれたトゥーンシェーダー画像が得られる…と、こういうわけだ。
 この方式は描画対象のキャラクタやオブジェクトが超多ポリゴン構成であっても効率的かつ美しく、なおかつ正確な輪郭描画ができるメリットがあるという。

 ちなみに輪郭抽出時に生成したふたつの情報バッファは必ずしも最終描画時の画面解像度と同じでなくてもいい。バイアスをかけて処理すれば問題はないし、ビデオメモリの節約にもなる。

このようなステップで輪郭線を描画する この方法ならばポリゴン数の多いキャラクターや複雑なシーンでも正確に輪郭描画ができるという

この技術を応用して開発されたのが鉛筆画風シェーダー

 この技術を応用し、World Space Normalsにおける法線ベクトルの方向に応じてノイズ(汚し)描画をくわえたのが、画面に示した「鉛筆画風シェーダー」の映像だ。
 3D映像なので当然視点は変更可能。ただし、光源と視点の関係が変化すると、映像の汚れ方も変わっていくので「二次元のようで三次元のような」、「三次元のようで二次元のような」……という、一種独特な雰囲気のビジュアルになる。

 ATIが示した今回の例はテクノロジーデモ的ではあったが、最適化を進めれば、非常に高速に処理できるようになるはず。こうしたトゥーンシェーダーを一歩推し進めたビジュアルを採用した3Dゲームは近い将来、必ず出てくることだろう。


●ポリノミアル・テクスチャマッピング~次世代テクスチャマッピングはこうなる

特に布の表現はかなりリアリティが感じられ、2Dイメージベースのテクノロジーとは思えないほどだった。負荷が小さいのであれば、ぜひとも3Dゲームのリアルタイムグラフィックスにも適用してほしいものだ

 HPが現在RADEON8500へのインプリメントとともに研究中なのがポリノミアル・テクスチャマッピング(Polynomial Texture Mapping;以下PTM)だ(なお、この研究はSIGGRAPH2001においてHPが発表している)。

 PTMとは、テクセル毎に二次多項式(Biquadratic Polynomial)の係数をテクスチャとして格納し、3Dオブジェクトを実際に描画する際に、ピクセルシェーダーで、その面の色や光源状況を再構築していくもの。

 見た目は凹凸を貼り付けるバンプマッピングと変わらないように見えるが、PTMの場合、直感的には「描画の際にドット単位に高精度な面を再構築する」というイメージになるので、なんとその凹凸同士が影を落としあったり、凹凸同士の相互反射のシミュレーションまでが可能になるのだ。DirectX 9でサポート予定の「ディスプレースメントマッピング」とは違い、凹凸でジオメトリを変形させるようなことはしないが、そのリアリティはかなり近いものがある。

 なお、HPでは、PTMテクノロジーは太古の石版などの表現や、布の表現に威力を発揮するとしている。PTMに関する情報はHPのWebサイトのPTM専用ページが詳しい。OpenGLベースで動作するデモンストレーションソフトも同ページのダウンロードコーナーにあるので興味のある人は入手して実行してみるといいだろう。

HP提供のPTMデモソフト 光を移動したところ。大きく凸出した部分の影が、それよりも低い凸部分を覆い隠すような、いわゆる「セルフシャドウイング」に近いビジュアルが実現される。これがPTMのリアリティだ


●GeForce4Tiには負けられない(?)~ちぢれ毛シェーダー

「FurGen」は正確にはデモソフトではなくユーティリティ。このテクノロジーを使えば、動物キャラクタを一層リアルに表現できるようになるはず

 毛の表現を行なうファーシェーダーは、ライバルNVIDIAのGeForce4Ti用デモソフト「WOLFMAN」で一躍有名になったが、ATIではこれを一歩発展させた、RADEON「ちぢれ毛」シェーダー「FurGen」のデモを公開した。
 これはATIがいうには、GeForce4Tiのプログラマブルピクセルシェーダ1.3では難しいという。
 とはいえ、基本的な考え方は、おそらく同じで、実際「毛ヒレ」を用いた長毛と、「ファーシェーダー」による短毛を組み合わせて表現している。
 特徴的なのは毛の色に変化が現れていたり、ちぢれ毛の表現ができるあたりだ。
 ファーシェイダーの毛は、バンプマッピングを複数のジオメトリ層に対して重ねて行なうことで表現しているが、ちぢれ毛は、この毛を構成するバンプマップをレイヤー毎に断続的な変化を与えてシェーディングすることで実現しているようだ。
 もしNVIDIAの技術者がそのセッションにいたとしたら「GeForce4Tiでも実現できる」と言ったに違いない。


●RADEON8500対GeForce4Tiの図式

 ATIのライバル的な存在であるNVIDIAは、GeForce4Tiの発表時、数々の新しいビジュアルを公開し、その先進性をアピールした。

 ATIとしては、RADEON8500はその表現能力において、依然GeForce4Tiよりも優っている……という姿勢を貫いており、今回のこのセッションはその姿勢の再アピールと見てよいだろう。


□GDCのホームページ
http://www.gdconf.com/
□関連情報
【3月23日】フェイシャル系テクノロジーの進化に注目
http://game.watch.impress.co.jp/docs/20020323/gdc05.htm
【3月22日】GDC展示会が開幕~新世代グラフィックスエンジンが続々展示
http://game.watch.impress.co.jp/docs/20020322/gdc03.htm
【3月21日】Microsoft DirectX Day開催、次世代ゲームグラフィックスの姿とは?
http://game.watch.impress.co.jp/docs/20020321/gdc02.htm
【3月20日】ゲーム開発者向けのカンファレンス「Game Developers Conference」開幕
http://game.watch.impress.co.jp/docs/20020320/gdc01.htm

(2002年3月25日)

[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.