GDC2013 Low-Level Thingking in High-Level Shading Languages #gdc13j
- ajinotataki
- 1400
- 0
- 0
- 0
次はLow-level Thinking in High-level shading languages #gdc13j
2013-03-29 08:00:01背景として。昔は手でシェーダーの最適化をしていたが、今はLow-level shader languagesはしんだと。誰もつかってない。今のコードを最適化しても無駄。それよりもコードをみやすくした方がいいよ。という状況。 #gdc13j
2013-03-29 08:07:54#gdc13j ローレベルのシェーディング言語は死に、アーティストのためにシェーディングネットワーク(ボックスと矢印の)がおうこうしはじめた。
2013-03-29 08:09:02コンパイラが最適化をしてくれるからいじゃんって。でも、やつらはルールを破ることをしないってのが問題。 #gdc13j
2013-03-29 08:09:37でも、計算式を書いたまま実行コードにしてたりして、結構頭良くないこともあると。定数の計算を展開したりしないのかな? #gdc13j
2013-03-29 08:10:56#gdc13j 読みやすいシェーダコードは軟弱だ、コンパイルされたコードをみると悲鳴を上げる人がいる。みたいな感じ?そうは言ってないと思うけど。w
2013-03-29 08:13:07かっこの展開や、より早いコードを生成する命令を使った書き方へ書き換えた方がいいという内容ですね。あとでスライド見るのがよいかと。 #gdc13j
2013-03-29 08:17:51abs/neg -> input, saturate -> outputとすると命令ステップ数が減ると #gdc13j
2013-03-29 08:20:44#gdc13j Saturate は自由に使えて、Minと Maxは無い。Saturateを使って計算する。
2013-03-29 08:22:44ハードウェア命令に直結している関数を使うようにする。ものによっては直結していないので、それをよく知るべきなんですな。 #gdc13j
2013-03-29 08:24:43rcp(), rsqrt(), sqrt()は直結。exp(), log()はちがうと。exp2(), log2()は直結。pow(x,y)はexp2(log2(x) * y)とするべきと。 #gdc13j
2013-03-29 08:24:52日頃からアセンブラで書くと良いデスよ。;-) http://t.co/W3KGFf9LjQ RT @ajinotataki: 勉強になるが、こういうのってもっと知ろうとするにはどうすればいいんだろ #gdc13j
2013-03-29 13:55:15#gdc13j もちろんReflect関数はi-2.0*dot(i,n)*nとかくとか。normalizeはrsqrt。
2013-03-29 08:32:46#gdc13j そう言えばいつからかSoftimageがシェーだをコンパイルしたログを吐かなくなったので、こういうのが見れなくなりましたね。昔の XSI5.11とかならコンパイルログを確認しながら勉強できるかも。
2013-03-29 08:36:53スカラー値とベクター値の計算はスカラー値を先にまとめてやるようにしないと、途中から全部ベクター値にされちゃって無駄にコードが増えると #gdc13j
2013-03-29 08:37:19このての命令長がどうなるか調べるには、ビデオチップメーカーのコンパイラをつかって、直接コードをいれるとステップ数がみれたりするのでよいです #gdc13j
2013-03-29 08:38:01実際のディファードの例で、Lowlevelで最適化をすると1、2時間で5ー10%早くなうるのにたいして、Highlevelで最適化では数週間かかって15%遅くなるか2倍早くなるかてな感じとのこと。 #gdc13j
2013-03-29 08:41:19#gdc13j 1ー2時間の作業でシェーダーは7%短く、ディレクションライトなら5% ポイントライトなら10%早くなると。
2013-03-29 08:41:51