ページ 11

DirectX9でのシェーダ描画に関して

Posted: 2017年10月08日(日) 14:58
by tomtom
環境・・・VisualStudio2015/C++

こんにちは。
今回、DirectX9にて、HLSL言語を用いてシェーダ描画をしたいと思っています。
そこで、.fxファイルにシェーダプログラムを書いていっているのですが、一つ疑問が。
例えば、自機、地面、建物のオブジェクトがあり、そのうち地面だけに他と違うエフェクトをつけたいとなった場合、どのようにすればいいのでしょうか。
.fxファイルを地面描画専用としてまた別でもう一つ作るのでしょうか?
その場合、VC側はどのように設計すればよいでしょうか?

プログラムの処理というより設計の問題だと思いますが、よろしくお願いします。

Re: DirectX9でのシェーダ描画に関して

Posted: 2017年10月09日(月) 03:25
by manntera
fxファイルを増やして分岐させるのも一個の手段ですね。
後は、シェーダー内でif文で分岐したり(非推奨)
計算ロジックだけでif文無しで分岐っぽい事をさせてみたりね。
グローバル変数で、groundEnabeleみたいなのをつけて、
地面を描画する時には、CPU処理からgroundEnabeleに1を入れます。

コード:

a=i.pos;
a=(b*groundEnabele)+(c*(1-groundEnable));
こうしてやると、aの値に足されるのは、
地面である場合はbの値が適用され、
地面出ない場合はcの値が適用される事になります。
こんな具合でシェーダーを一つにまとめてみるのも手段ですね。
DrawCallの回数を抑え込む為に時々上記の様なやり方はしますが、
まぁそこまで気にしなくて良いと思うのでfxファイルを分岐しちゃっていいと思います。

Re: DirectX9でのシェーダ描画に関して

Posted: 2017年10月09日(月) 11:19
by lunnear
同ファイルでテクニックを増やせばいいだけじゃないですか?
先で書かれている通りファイルを増やすのもいいと思いますけど。

Re: DirectX9でのシェーダ描画に関して

Posted: 2017年10月09日(月) 13:23
by tomtom
mannteraさん

なるほど。
CPU側からfxのフラグ変数のようなものに値を入れるのもありですね。
参考にさせていただきます。


lunnearさん
それも案の一つにあったのですが、そうすると一つの.fxファイルが長くなってしまいませんか?
ファイルが長くなるのは個人的にはあまり気に入らなくて・・・