1

私のエンジンでは、頂点/ピクセル シェーダー ファイルのペアから Cg シェーダーを読み込みます。シェーダーをスタックして結合できるようにしたいと考えています (ライティング + マテリアルなど)。シェーダーを個別の関数に分割し、それらから単一のシェーダー スクリプト文字列を作成する以外に、Cg で異なるシェーダーをスタックする良い方法を知っていますか?

4

1 に答える 1

2

DirectX 11 の動的シェーダー リンケージ機能に似た機能が必要なように思えますか? Cg のインターフェース機能を使用すると、同様のことを実現できます。シェーダーを再構成できるため、照明の計算方法の変更やマテリアル タイプの変更などを簡単かつきれいに行うことができます。

たとえば、シェーダーを書きたいが、照明の計算方法を変更できる必要があるとします。何らかの形で光を計算する関数を持つ Light インターフェイスを定義できます。他の場所では、CoolLight や UberLight などの Light インターフェイスを実装します。実行時に、他のパラメーターを指定するのとほぼ同じ方法で、Light インターフェイスのどの実装を使用するかを指定できます。

これが必要かどうかを確認するには、Cg のユーザー マニュアル ( http://developer.download.nvidia.com/cg/Cg_2.2/CgUsersManual.pdf ) を参照することをお勧めします。「Shared Parameters and Interfaces」を検索すると、小さな例があります。

于 2009-06-14T09:50:15.307 に答える