GPUPPURの目標など

 未踏ユースの提案書に書いたGPUPPURの目標などについて、そのままコピペで下に貼ります。かなり高い目標を設定してしまったと思うのですが、GPUPPURを広く使ってもらうようになるためにはこれぐらい実装しないとダメなんだろうなぁ。

目的
 3Dグラフィックスを描画するソフトウェアGPUPPURを開発する。
GPUPPURの目標を以下に示す。
・ ライブラリ利用者の創造性を発揮することができ、独創的な映像を生み出すことができる。
・ カスタマイズや特殊な機能を使わない限りは、様々なプラットフォームへ簡単に移植すること、様々なハードウェアに対応することを可能にする。
・ カスタマイズすることによって、特定のハードウェア、OS上でしか動かすことができないが、ハードウェアの能力をフルに発揮できるアプリケーションの開発を可能にする。
GPUPPURが以下の機能を持てるように開発する。
・ アプリケーション開発時、または実行時に、描画する図形の量、使いたいエフェクトに応じてラスタライズ法とレイトレーシング法のどちらを使うか、または両方を組み合わせて使うかを選択することができる。
・ ラスタライズ法、レイトレーシング法等を統一されたインターフェースで利用することができる。
・ ラスタライズ法やレイトレーシング法の実装方法を変更したり追加したりすることができ、コンパイル時、実行時にどの実装を使用するか選択できる。また、移植性が低くなるが実装独自の機能を利用することができる。
GPUPPURをオープンソースで公開し、GPUPPURを利用するユーザは自由にGPUPPURを改変して利用できるようにする予定である。但し、GPUPPURから使用するライブラリのライセンスによって利用に制限が掛かる場合がある。オープンソース化によって、
C++のtemplateを使用した柔軟性の高い設計とカスタマイズ性
・ ユーザの実装した関数をGPUPPUR内にインライン化することによる最適化
・ GPUPPUR内の関数をユーザコード内にインライン化することによる最適化
コンパイラがGPUPPURを特定のCPU向けに最適化してくれる機会を増やす。gccにはathlonpentium4向けの最適化オプションが用意されている。もしバイナリで配布するとなると特定のCPUに最適化してないバイナリを配布するか、それぞれのCPUに最適化された複数のバイナリを配布しなければいけないので面倒。
・ ユーザがGPUPPURを自由に改変できる。
・ GPUPPURが実際に何をやっているか理解できる。
GPUPPURを応用したソフトウェアを開発できるようにドキュメント、サンプルプログラムの作成も行う。
GPUPPURの性能を実感できるようにデモプログラムの作成も行う。

GPUPPURの実装内容
 GPUPPURの実際の3Dグラフィックス描画機能として、レイトレーシング法を使用するGPUPPURay(Graphics Processing Unit and Physical Processing Unit for Raytracing and Rasterizingの略)とラスタライズ法を使用するGPUPPURas(Graphics Processing Unit and Physical Processing Unit for Rasterizingの略)を実装する。どちらの実装も従来のGPUとCPUだけで計算していた3Dグラフィックスよりも複雑で高速な描画を、GPUとPPUを活用することによって実現することを目指す。GPUとPPUが利用できる一般的なPC上で動作できるようにする。
GPUPPURas、GPUPPURayに実装する共通の機能を以下に示す。
・ 三角形メッシュのレンダリング
・ PS上でのプログラマブルなライティング処理
テクスチャマッピング
GPUを利用するためにOpenGLDirect3Dを使用したそれぞれの実装を行い、環境に合わせて適切な方を利用できる。PPUを利用するためにPhysXを利用するが、それらのAPIを直接呼び出すことができる。
GPUPPURayに以下の機能を実装する。
・ 球体、平面、箱、カプセル等の形状のレンダリング
レイトレーシング法による影、反射、屈折の表現
レイトレーシング法による計算結果としてピクセルの色と深度値を出力することによって、レイトレーシング法とラスタライズ法を組み合わせて画像を生成することができる。
GPUPPURasには以下の機能を実装する。
・ 高速で汎用的な可視判定よって、表示されない三角形の処理を行う無駄を無くす。

GPUPPURayとGPUPPURasは、PPUをPhysXAPIを通して利用し、GPUOpenGLDirect3Dを通して利用する。