News 2003年9月6日 01:16 PM 更新

NVIDIAが「開発の鉄人」に伝授した高速化テクニックとは

NVIDIAの開発者向けセミナーでは、シェーダープログラムの高速化テクニックがいろいろと紹介されたが、その中に「低いバージョンを使いましょう」の一言が。独自にバージョンを拡張するNVIDIAらしからぬテクニックだが、そこから彼らの「ターゲット」の変化が見えてくる

 9月4日から5日にかけて東京で開催された「CESAデベロッパーズカンファレンス 2003」(CEDEC2003)。ゲームなどのエンターテイメント関連開発者を対象に、高速化手法や最新人工知能技術から、「ハリウッド映画、その産業構造と文法」といったセッションなど、ゲーム産業に関する広範囲なセミナーが行われた。

 初日の4日には、PCゲームに大きな影響を与えるマイクロソフト主催の「meltdown」がCEDEC2003に協賛する形で行われ、最新のレンダリングテクニックの紹介や、次世代Direct Xで実装される機能の紹介が行われている。

 そして2日めの5日。同じ協賛セッションとして開かれたのが、NVIDIAのセミナーイベント「NIVDIA 開発の鉄人 2003」(NVIDIA Iron Developer Conference 2003)だ。

 グラフィックプログラマーをメインターゲットにしたこのイベント。昨年開催された「開発の鉄人2002」では発表直前だったNV30(今でいうところのGeForce FX 5800 Ultra)や、それに実装されるCine FXの概要説明、DirectX 9の解説などに注目が集まった。

 今年は注目される新製品はないものの、その分、「グラフィックパイプラインのパフォーマンスと最適化」「シェーダーの統合と最適化」といった、プログラミング手法解説のセッションや、高性能GPUと3DグラフィックAPIによって可能になった高度な特殊効果の紹介など、本来の開発者に向けた内容を充実させている。

 今年のイベントは「NVIDIAデモの秘密」「グラフィックパイプラインのパフォーマンスと最適化」「現象シミュレーション:液体、気体、および固体」「シェーダーの統合と最適化」の四つのセッションで構成されていた。


「NVIDIAデモの秘密」と「シェーダーの統合と最適化」のレクチャーを行ったKevin Bjorke氏。NVIDIAのデペロッパーリレーションに所属し、次世代ハードウェア向けシェーダー開発に従事している


「グラフィックパイプラインのパフォーマンスと最適化」「現象シミュレーション:液体、気体、および固体」のレクチャーを行ったJuan Guardado氏。セッションの合間も携帯電話が手離せないほど忙しいGuradado氏は英国NVIDIAに勤務。この業界の出発点がMatroxだった彼は、現在NVIDIAのテクニカルデベロッパーリレーションに所属している

 「NIDIAデモ」の秘密では、GeForce FXシリーズのキャラクターとして一躍有名になった「Dawn」「Ogre」をはじめとする、一連のデモプログラムで取り入れられている描画機能を、実際の画面で効果を見せながら解説を行った。

 最も有名なデモ「Dawn」では、髪の毛を使ったヘアレンダリング、マルチサンプルアンチエイリアス処理の効果や、フラグメントシェーダーによる皮膚の太陽光透過効果の実例を紹介、透過効果を描画するためにデモで実際に使っている処理手順やアルゴリズム、関数が説明された。

 「現象シミュレーション:液体、気体、および固体」では、描画にリアリティを盛り込むために使われる「ゆらぎ」を表現するための「ノイズ」手法や、発光効果で効果的な「ブラー」処理やレンダリングの方法、そして、セルオートマタ手法を用いた時系列的に影響しあうテクスチャアニメーション「波紋描画」の実例などが紹介された。


マルチサンプルアンチエイリアス処理を施されたDawnの髪の毛。OpenGLで線をアンチエイリアスする場合、GL_LINE_SMOOTHとGL_MULTISAMPLEの二通りの手法が用意されているが、Dawnでは処理速度を重視したGL_MULTISAMPLEを採用している


デモ「The Time Machine」は、朽ち果てていくトラックの表面に広がる「サビ」や「気泡」が印象的。この気泡を表現する「動的バンプマッピング」の時系列変化のアルゴリズムとテクニックの解説。このほかにも、「Toys」で使われたバイリニア補間法によるピントボケ表現や、「Ogre」で使われたオクルージョンなどが紹介された

 「グラフィックパイプラインのパフォーマンスと最適化」「シェーダーの統合と最適化」は、ともに実際の開発工程においてパフォーマンスを上げるためのTipsが紹介されるセッション。

 「グラフィックパイプラインのパフォーマンスと最適化」では、グラフィック処理の各ステージに内在するボトルネックの解消に焦点を当て、ボトルネックが潜んでいる箇所の検出作業フローや、そのために必要なベンチマークテクニックをグラフィック処理の各ステージごとに紹介するなど、実践的な情報が提供されている。

 「シェーダーの統合と最適化」では現在のビデオチップと3D APIの必須機能ともいうべきプログラマブルシェーダーのメリットや、その開発言語としてNVIDIAが供給している「CgFX」の解説、メジャーな3D CG作成ソフトとの連携状況などが紹介された。


Guardado氏が「ここが一番大事ところです。家に帰ったら大きく印刷してトイレに貼っておきましょう」と述べたボトルネック発見作業フロー。描画処理の下流から順にベンチマークでチェックを行い、ボトルネックを見つけ出していく

 セッションの最後にはCgFXの制約(レンダーツーテクスチャがサポートされていないなど)や、その解決策の説明(サポートされていないシャドウマップの代わりにステンシルシャドウを利用する)が行われた。

 その中で、シェーダープログラムを行う場合に、パフォーマンスを向上させるテクニックとして以下のような方針が示されている。

  • リアリズムをそれほど求められないとき、シェーダーのバージョンはより低いものを採用し、データ精度は32ビット浮動小数点ではなく、16ビット、もしくは12ビット浮動小数点を採用する

  • 高いリアリズムが求められる場合でも、パフォーマンスに大きく影響する「複雑な演算式」は、別なシンプルな計算に置き換えて極力排除すること

  • 演算よりも高速に処理できる「あらかじめロードしておいたテクスチャ」を利用する

  • 不必要に高度な処理や、必要のない条件計算をプログラムの中に盛り込まないこと

 シェーダーのバージョンを独自に拡張して2.0+としたり、GeForce FXで高クロック駆動をアピールしているNVIDIAとしては、ちょっと意外な感じもしないではない。

 このような「無駄無理を排除する」テクニックは、制約の多いハードウェアや、機能の少ない言語でプログラミングする場合、普通に求められるところ。最先端の「開発の鉄人」で、「シェーダーの低いバージョンを」と説明するのは、NVIDIAが、PCゲームで求められる高性能だけなく、制約の多いゲーム専用機やHandheld、さらには携帯電話などをターゲットにしたゲームを重要視していることを、如実に示しているのかもしれない。

関連リンク
▼ NVIDIA
▼ CEDEC 2003

[長浜和也, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.