
ATI RADEON 9800 PRO 上でリアルタイム アクリル氏作(2005/01/26)
DirectX10/Direct3D10 というと、やっぱり性能があがって機能的にすごい!そんなイメージがあります。 GPU メーカーや Microsoft が宣伝しているように綺麗な見た目のインパクトや、今までと違う画期的なシェーダー、派手なエフェクトなどのデモを想像するかもしれません。
だけどこの blog では、実際に Direct3D10 を使った描画エンジンを開発しながらその過程で調べたことやわかったこと、考えたことなどを日々細々と記録しています。見た目でわかりやすい部分にはあんまり触れてなくて、非常に地味かつ狭い分野の話が多いです。
汎用的な描画やデータの流用を考えたエンジンの設計は非常に地味で地道で、どのようにシェーダーやリソースを管理して、ツールとどう連携するかといった部分に結構時間を取られます。派手なのは地道に積み上げてきた各パーツが一気につながった最後の最後だと思います。
また Direct3D10 の利点は単に「描画性能がすごい」だけでは決してなく、設計上の自由度が上がって柔軟な設計を許容し、開発者の負担を減らす効果もあります。(まだ効果よりは、自由度があがったゆえの設計の苦しみに悩んでいるのが実情なのですが)
Vista + Direct3D10 用のサンプルプログラムです。 WindowsVista と Direct3D10 対応のビデオカードが必要です。 シェーダーだけで Cube の形状を生成して 描画しています。 頂点バッファもインデックスバッファもなしにモデルデータの表示が可能です。
シェーダーに文字列をそのまま渡して描画してみるサンプルです。1byte 頂点形式を使って 1頂点 = 1byte = ASCIIコード です。
シェーダーだけで迷路を作っています。初期画像を元にレンダリングを繰り返すだけで成長します。
作った迷路を自分で探索します。色のついた無数の点が迷路の隅々まで動き回ります。これもシェーダーだけで実現しています。
ジオメトリシェーダーでモデルを ばらばら にします。これもシェーダーのみの処理です。
ジオメトリシェーダーを使って、プリミティブタイプ QUADLIST を描画できるようにします。
半透明描画で、ピクセル単位でソートを行うシェーダーです。最大重なり回数制限あり。
でも Stencil Routed A-Buffer (PDF) の方がいいです。
ピクセル単位の半透明ソートシェーダーは、順番を維持しつつより高度な Blend アルゴリズムを実装できるという利点もあります。偏光板のシミュレートを行ってみました。
でも Stencil Routed A-Buffer (PDF) の方がいいです。