Advanced Programmable Shading: Beyond Per-vertex and Per-pixel Shading

Slides:



Advertisements
Similar presentations
1 広島大学 理学研究科 尾崎 裕介 石川 健一. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ 2.
Advertisements

G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
Imagire Day CEDEC 2009続・レンダリスト養成講座 田村 尚希 川瀬 正樹 シリコンスタジオ株式会社.
FPGA 株式会社アプライド・マーケティング 大越 章司
ゲーム開発者向け最新技術論文の解説・実装講座
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
豊洲 304教室 15 JULY コンピュータグラフィックス 2008年度版.
プログラミング演習3 李 亜民クラス 第2回 ラスタライズ.
Chapter11-4(前半) 加藤健.
CGアニメーションの原理 基本技術 対象物体の動きや変形の設定方法 レンダリング技術
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
今日の内容 レンダリングの種類 レンダリングの予備知識 レンダリング手法 レンダリングの高速化の工夫 サンプリング
ラスタグラフィックス (raster graphics)
11章 ボリュームレンダリングを学ぶ 本来は目に見えない内部情報をレンダリングし可視化する技術
LZ圧縮回路の設計とハード・ソフト 最適分割の検討 電子情報デザイン学科 高性能計算研究室 4回生 中山 和也 2009/2/27.
3DCG技法についての 調査報告 ○○県立○○高等学校 1年は組 グループ0.
粒子シミュレーション可視化ツール Zindaiji3開発の進展状況 武田隆顕@cfca.
IGD Working Committee Update
On the Enumeration of Colored Trees
平成23年8月 情報学群 岡田 守 このスライドは, 前川佳徳編著による「コンピュータグラフィックス」(オーム社)を基に作成されている.
地理情報システム論 第3回 コンピュータシステムおける データ表現(1)
CADの概要2 電子制御設計製図Ⅰ 2009年4月14日 Ⅲ限目.
App. A アセンブラ、リンカ、 SPIMシミュレータ
レンダリングにおいて写実性を高めるための処理である,シェーディングとテクスチャマッピングについて述べる.
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
ピクセル レス サンプリング 高桑昌男 国際情報科学芸術アカデミー.
高山建志 五十嵐健夫 テクスチャ合成の新たな応用と展開 k 情報処理 vol.53 No.6 June 2012 pp
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
第11回 オブジェクト(ベクトル,頂点,面)のクラス化とフラットシェーディング
3次元剛体運動の理論と シミュレーション技法
CG講座 裏 Mental-ray編.
ビデオデータベース.
決定木とランダムフォレスト 和田 俊和.
Hough変換 投票と多数決原理に基づく図形の検出
Java Bytecode Modification and Applet Security
Computer Graphics 第10回 レンダリング(4) マッピング
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
通信機構合わせた最適化をおこなう並列化ンパイラ
FPGA 株式会社アプライド・マーケティング 大越 章司
可視面・不可視面の判定方法と隠れ面(不可視面)の消去法について述べる.
DirectX勉強会 第2回.
テキスト 1 行目 テキスト 2 行目 テキスト 3 行目 (初級) 森の背景の上にフェード インするアニメーション化されたキャプション
A Simple Algorithm for Generating Unordered Rooted Trees
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4
09. メモリ・ディスアンビギュエーション 五島 正裕.
Bottom-UpとTop-Down アプローチの組み合わせによる 単眼画像からの人体3次元姿勢推定
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Handel-Cを用いた パックマンの設計
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
第9章 学習アルゴリズムとベイズ決定側 〔3〕最小2乗法とベイズ決定側 発表:2003年7月4日 時田 陽一
保守請負時を対象とした 労力見積のためのメトリクスの提案
コンピュータアーキテクチャ 第 5 回.
ポッツスピン型隠れ変数による画像領域分割
SpectreとMeltdown ITソリューション塾・第27期 2018年3月20日 株式会社アプライド・マーケティング 大越 章司
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
ゲームのタスクシステム 導入編 レベル2くまー By keychan.
コンピュータアーキテクチャ 第 5 回.
情報処理Ⅱ 2005年10月28日(金).
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
スライドの終わりまでテキストが繰り返しスクロールされます • スライドの終わりまでテキストが繰り返しスクロールされます •
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
サンプル見出し テキスト 1 行目 テキスト 2 行目 テキスト 3 行目 (中級) 図の背後でタイトルを移動させるアニメーション効果
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
0.1 DXライブラリの導入 必要なファイルの準備.
Presentation transcript:

Advanced Programmable Shading: Beyond Per-vertex and Per-pixel Shading Meltdown Tokyo 2001 Advanced Programmable Shading: Beyond Per-vertex and Per-pixel Shading

DirectX7 グラフィックス パイプライン(GeForce / GeForce2) 頂点のトランスフォーム & ライティング T & L セットアップ ラスタライザ テクスチャ ブレンディング 頂点単位のテクスチャ - フレームバッファ アンチエイリアス

DirectX8 グラフィックス パイプライン(GeForce3) 高次曲面 サーフェス 頂点 プログラム可能な シェーダ 頂点単位のシェーディング セットアップ ラスタライザ テクスチャ シャドウ 3D アドレス操作 テクスチャ プログラム可能な テクスチャ ピクセル単位のシェーディング ブレンディング フレームバッファ アンチエイリアス

プログラム可能な頂点処理 GeForce ファミリーが PC にハードウェア T&L を導入した トランスフォーム & ライティング GeForce3 (次世代) は開発者による T&L プログラムを 可能にする 頂点プログラム 開発者は現在次のようなカスタム プログラムが可能 頂点トランスフォーム 頂点ライティング 特殊効果 (レイヤ化されたフォグ、ボリューム ライティング、 モーフィング…)

標準 T&L に対するカスタム サブルーチン 頂点入力 定数メモリ レジスタ プログラム可能な 頂点プロセッサ 頂点出力 128 bits Meltdown Tokyo 2001 標準 T&L に対するカスタム サブルーチン 頂点入力 定数メモリ 128 bits 4 floats 16 エントリ レジスタ プログラム可能な 頂点プロセッサ A0 addr addr 128 bits 4 floats data data 128 命令 12 エントリ 128 bits 4 floats 頂点出力 128 bits 4 floats 96 エントリ 13 エントリ

このすべてがプログラム可能になったとき 開発者は何をすべきか ? 高次曲面 サーフェス ? 頂点 プログラム可能な シェーダ 頂点単位のシェーディング セットアップ ラスタライザ テクスチャ シャドウ 3D ? アドレス操作 テクスチャ プログラム可能な テクスチャ ピクセル単位のシェーディング ブレンディング フレームバッファ アンチエイリアス

? これまでは、おおむね… curved surfaces (より良い) vertex programmable T & L shaders 高次曲面 surfaces サーフェス (より良い) ? vertex programmable T & L shaders per - vertex shading setup セットアップ rasterizer ラスタライザ (より良い) tex - addr shadows ops 3d tex テクスチャ ブレンディング texture programmable blending per - pixel shading fb フレームバッファ antialias アンチエイリアス

それによって何がおきたのか? ハードウェアにおけるプログラマブル頂点シェーダとピクセル シェーダの登場はグラフィックスの長い歴史の中で最も根本的な変化だ ! しかし、多くの開発者はゲーム内で使ってはいない、あるいは単純なマルチパス シェーダをシングルパスにする程度のためにしかそれを使っていない。

もっと大きなチャンスが 複雑なレンダリング手法は CPU、頂点シェーダ、ピクセル シェーダそれぞれの実行部分に 「因数分解」できる。 プログラマブル頂点処理とピクセル処理の真の パワーは「プログラマ」がもっと複雑で多様な アルゴリズムをハードウェア上で展開できるところにある。

CPU GPU Pixels 以下のプロセスに代わって… CPU は次の処理を行う 三角形 GPU は次の処理を行う & テクスチャ ゲーム コード AI 物理演算 シーン管理 GPU は次の処理を行う T&L ラスタ化 テクスチャリング / シェーディング 描画 三角形 & テクスチャ GPU Pixels

CPU GPU Pixels 以下のことを考えてみよう... データ 途中の 結果 ゲーム コード、AI、物理演算、 シーン管理 GPU は依然として次の処理を行う T&L、ラスタ化、テクスチャリング / シェーディング、描画 そして、もっと 途中の 結果 データ GPU Pixels

頂点シェーダ / ピクセル シェーダを使った新手法 ステンシル シャドウに対して (自動的に !!!) シャドウ ボリュームを生成 順序依存のないトランスペアレンシ (深度ピーリング) DX8.1 PS1.3 が必要 texm3x2depth モーション ブラー / 被写界深度 (Depth of Field)

ステンシルを使ったシャドウ ボリューム パワフルなテクニックによってすばらしい結果が可能に

レビュー: ステンシルを使ったシャドウ ボリューム 個々のポイント ライト光源が空間を分割する シャドウ領域 非シャドウ領域 シャドウ ボリュームのサーフェスはこれらのシャドウ領域と非シャドウ領域との境界 アイデア : オブジェクトがシャドウ領域の境界内にあれば、そのオブジェクトはシャドウの影響を受けることが分かる [Crow 77] によって最初に説明された

シャドウ ボリュームをキャストした NVIDIA ロゴのシーン シャドウ ボリュームの表示 遮蔽物と光源によってシャドウ ボリュームをキャスト シャドウ ボリューム内のオブジェクトは影付けされるべき 光源 シャドウ ボリュームをキャストした NVIDIA ロゴのシーン シャドウ ボリュームの表示

シャドウ ボリューム アルゴリズム アルゴリズムの概観 : シーンと光源の位置を与え、シャドウ ボリュームを決定する (思ったより難しいが、我々はそれを容易にする !) 2パスでシーンをレンダリングする ライトを有効にしてシーンを描画し、 非シャドウ領域のフラグメントだけをアップデートする ライトを無効にしてシーンを描画し、 シャドウ領域のフラグメントだけをアップデートする 問題のシャドウ ボリューム生成部分に焦点を当てよう

シャドウ ボリュームの計算 思ったより難しい 単一の三角形なら簡単、光源と逆方向に三角形から3つの無限ポリゴンを射影するだけ 複雑なオブジェクトでは、オブジェクトの 2D 輪郭の射影が良い近似だが、この計算は困難 これ以外の2つの新しい GPU 頂点シェーダ手法 クイック&ダーティ (高速、負荷が低い、必ずしもうまくいかない) 強固 (必ずうまくいくが、計算コストがより多くかかる)

困難な方法: ポリゴン モデルに関するシャドウ ボリュームを計算 概要: モデルの「可能な輪郭」エッジを決定する ライトをオブジェクト空間にトランスフォーム モデル内の全ポリゴンの平面方程式を計算 (静的モデルでの事前計算が可能) モデル内の全ポリゴンに対して、オブジェクト空間でのライトの位置がポリゴン平面の後ろか前かを確かめる i.e. ポリゴン平面からライトの位置への平面距離がプラスかマイナスか ? ライトと逆向きになっているポリゴンのエッジを探す これらのエッジは輪郭線の可能性がある

クイック&ダーティな方法: 頂点シェーダを使ったステンシル シャドウ ボリュームの生成 実際のポリゴン モデルを使用 (全くそのまま) 頂点シェーダで頂点法線 N と L の内積をテスト 前を向いている頂点は変更しない 後ろを向いている頂点を遠くに押し出す ライトから近似的な輪郭線を押し出す効果が得られ、シャドウ ボリュームが生成できる 近似 – 閉じた、細かくスムースにテセレーションされたオブジェクトでのみ動作する (単一の三角形や立方体を想像して欲しい)

強固な方法: 頂点シェーダを使ったステンシル シャドウ ボリュームの生成 実際のポリゴン モデルを修正 全エッジに退化四角形を追加 新しい退化四角形頂点の法線は実際のジオメトリのものを使う 頂点シェーダで頂点法線 N と L の内積をテスト 前を向いている頂点は変更しない 後ろを向いている頂点を遠くに押し出す ライトから輪郭線を押し出す効果が得られ、シャドウ ボリュームが生成できる 全てのオブジェクトに対し、いつでも動作する (単一の三角形を想像して欲しい)

順序依存のないトランスペアレンシ: Good… Bad.

順序依存のないトランスペアレンシ (深度ピーリング) このアルゴリズムは「暗黙のソート」を使って複数の深度レイヤを抽出する 最初のパスで最前面のフラグメントの色 / 深度を得る それに続く各パスで、次に近いフラグメントの色 / 深度をピクセル単位ベースで得る (抽出する) 2つの深度バッファを使って直前の最も近いフラグメントと現在のフラグメントを比較 2つ目の「深度バッファ」はテクスチャとの比較 (読み込み専用) に使用

レイヤ 0 レイヤ 1 レイヤ 2 レイヤ 3

レイヤ 0 レイヤ 1 レイヤ 2 0 深度 1 0 深度 1 0 深度 1 深度ピーリングの各連続パスで各深度レイヤを剥ぎ取っていく。上の画像では、最も近い(最も左) サーフェスを黒い太線で示し、隠面を黒い細線で示し、「剥ぎ取られた」サーフェスを灰色の線で示している。

擬似コード for (i=0; i<num_passes; i++) { clear color buffer A = i % 2 B = (i+1) % 2 depth unit 0: if(i == 0) disable depth test else enable depth test bind buffer A disable depth writes; set depth func to GREATER depth unit 1: bind buffer B clear depth buffer enable depth writes; enable depth test; set depth func to LESS render scene save color buffer RGBA as layer I }

1 レイヤ 2 レイヤ 3 レイヤ 4 レイヤ

頂点シェーダ / ピクセルシェーダを使って モーションブラー / 被写界深度を表現 モーション ブラー スクリーンショット :

被写界深度: スクリーンショット

頂点シェーダを積極的に使うことは安全で重要 いつでも頂点シェーダを使うことは「安全」 多くのハードウェア プラットフォームがサポートしている メインストリームの GPU がこの秋リリースされる CPU は頂点シェーダを十分にエミュレートできるので、CPU によるフォールバックがOK 頂点シェーダとピクセル シェーダに対応したコンテンツの設計が「重要」 頂点シェーダ、ピクセル シェーダを採用し、トップダウンからコンテンツを作成 スケールダウンとフォールバックのほうがスケールアップ よりずっと簡単

謝辞 アイデア、スライド、デモ、画像への援助に対して John Carmack, Rui Bastos, Mark Kilgard, Sim Dietrich, Matthew Papakipos, Cem Cebonoyan, Greg James, Matthias Wloka, Erik Lindholm, Doug Rogers, Cass Everitt, (そして忘れてしまったこれ以外の方々) に感謝する デモ / サンプル ソース コードやホワイトペーパーは http://www.nvidia.com/developer にあります