3

私が現在制作しているゲームには、2 つのシェーダーがあります。

  • 1 つはテクスチャ アトラスのスプライト用で、
  • 個別にロードされる 1 つのパーティクル形状のテクスチャ。(ジェネレーターのパーティクルは GL_POINTS であるため、このテクスチャをアトラスから除外することにしました)。

現在、これらのそれぞれを個別のテクスチャ ユニットにバインドしてから、各シェーダのユニフォームをそれぞれのテクスチャ ユニットに設定しています。この方法でテクスチャを一度だけバインドするのはきれいですが、これを採用するのが悪い方法である理由があるかどうか疑問に思っていました.

私はこの方法に関する議論を広範囲に検索しましたが、これを行っている人は多くないようで、その安全性について私自身の心に疑問を投げかけています.

誰かがこの方法を自分で使用したことがありますか、またはそれが良い考えではない理由を知っていますか?

4

1 に答える 1

1

間接的に、はい、私はこの方法を使用していますが、安全です。しかし、これはレンダリング エンジン レベルでの最適化の副作用です。

同じテクスチャを何度もバインドしないようにすると、(おそらく) ある程度のパフォーマンスが得られます。私のエンジンでは、何かをレンダリングする前に、まだバインドされていない場合にのみ、マテリアルのテクスチャをバインドします。(マテリアルとテクスチャでエンティティをソートすると効率的)

複数の textures-unit を同時に使用できるため、テストはテクスチャ ユニット レベルで実行されます。

この最適化は、大きなシーンのコストに見合うだけの価値があります。(少なくとも 30 のテクスチャを含む何百もの描画呼び出し)。

あなたの場合、2 つのテクスチャと 2 つのシェーダーしかないため、なぜいくつかのテクスチャ バインディングを削除しようとするのですか? 勝ったパフォーマンスを測定できますか? そのために柔軟性を犠牲にしましたか?

ヴィヴィアン

于 2013-04-21T15:29:25.260 に答える