6

I.シェーダー効果を切り替えるには、どちらが良いですか?1.大きなシェーダープログラムを使用し、シェーダープログラムで均一なif / else句を使用して、差分効果を使用します。2.呼び出し間でプログラムを切り替えます。

II。大きなテクスチャを使用するのが良いですか、それともいくつかの小さなテクスチャを使用するのが良いですか?また、テクスチャのアップロードにはコストがかかりますが、テクスチャをバインドするのはどうですか?

4

1 に答える 1

13

まあ、おそらくいくつかのパフォーマンステストを書いて試してみるのが最善でしょうが、一般的には。

  • 小さいシェーダーは大きいシェーダーよりも高速です。
  • 1つのテクスチャは多くのテクスチャよりも高速です
  • テクスチャのアップロードが遅い
  • テクスチャのバインドは高速です
  • プログラムの切り替えは遅いですが、通常、2つの小さなプログラムを1つの大きなプログラムに結合するよりもはるかに高速です。

特にフラグメントシェーダーは、フレームの何百万回も実行されます。1920x1080のディスプレイには200万ピクセルがあるため、オーバードローは発生しませんでした。これは、シェーダーがフレームごとに200万回実行されることを意味します。フレームの200万回、または1秒あたり1億2000万回の実行で、1秒あたり60フレームをターゲットにしている場合は、小さい方が良いでしょう。

テクスチャに関しては、GPUにはテクスチャ用のキャッシュがあり、次に必要なピクセルが以前に読み取ったピクセルに近い場合、それらはすでにキャッシュにある可能性があるため、ミップはミップなしよりも高速です。それらが遠くにある場合、それらはキャッシュにありません。これは、テクスチャからのランダムな読み取りが特に遅いことも意味します。ただし、ほとんどのアプリは、テクスチャをかなり直線的に読み取ります。

プログラムの切り替えは非常に遅いため、使用するプログラムでモデルを並べ替えて、最初にプログラムAを使用するすべてのモデルを描画し、次にプログラムBを使用するすべてのモデルをランダムな順序で描画するよりも一般的に高速になります。しかし、他にもエフェクトのパフォーマンスに影響を与えるものがあります。たとえば、大きなモデルが小さなモデルを覆い隠している場合、最初に大きなモデルを描画することをお勧めします。これは、小さなモデルが深度テスト(zバッファ)に失敗し、そのフラグメントシェーダーがどのピクセルに対しても実行されないためです。したがって、これはトレードオフです。実際にできることは、特定のアプリケーションをテストすることだけです。

また、正しい方法でテストすることも重要です。 http://updates.html5rocks.com/2012/07/How-to-measure-browser-graphics-performance

于 2012-07-29T18:52:12.483 に答える