PC用眼鏡【管理人も使ってますがマジで疲れません】 解約手数料0円【あしたでんき】 Yahoo 楽天 NTT-X Store

無料ホームページ 無料のクレジットカード 海外格安航空券 ふるさと納税 海外旅行保険が無料! 海外ホテル

log

2010.10.01 C++:if文を使わないHLSLの計算方法

今まで速度を計らずにトゥーンインクを使用していたんですが、
実はトゥーンシェーディングよりもトゥーンインクの方が重かった
のでした。。(といっても、これはもちろん環境に依るんですけど;)

そこで、ちょっとくらい早くなるかなと思い、if文の部分をif文を
使わずに記述してみましたが、、うーんほとんど変わらないなあ。
現在トゥーンインクを使用した状態で6体以上表示させると一気に
25fpsまで下がってしまうのですが。せいぜい1fps程度向上して
いるような、していないような。まぁ、if文はまだ1つしか使用して
いないので微妙な感じです。

とりあえず、if文を使わない書き方を少しだけメモしてみます。
・aを1.0以上の場合は0.0にループ丸めしたいとき
→端数丸めを使う:a -=trunc(a);
・ブールbによる値切り替えb ? z=c : z=dをしたいとき
→z = b*c + (1-b)*d;

if文くらいだったら使わずに記述できるのかもしれないですね。
というか、そろそろ日記の分類がいい加減になってきました。
今回の分類をC++にしたけど、全くC++と関係ないからなあ苦笑。

comment

たけなか 2010.10.01-05:01 Edit

とりあえずclear()でZバッファ以外クリアしないようにしたのと
カリング処理をOFFにしていたのをONにしたことで、10体表示しても
26fpsまででるようになりました。けど、これはどうしてもFPSが
でないときのための最終防衛のつもりだったので、これから先は
GPU周りで無駄な処理が一切使えなくなってしまいました。

ほんとは他にもDOFとか影生成とかやりたかったんですが。厳しいなあ。
トゥーンインクによって頂点シェーダ負荷が2倍になったことで
処理が重くなったんだとすれば、おそらくキャラの手のポリゴンを
減らすことで軽くなりそうな気がするが、、うーん。
もし原因がピクセルシェーダ側だったら、これをやっても速度が
変わらないけど、さすがにトゥーンインクでピクセルシェーダ負荷が
上がるとも思えないし、やっぱり頂点シェーダかな。