利用可能なすべてのテクスチャユニットを使用することは良い習慣ですか?


9

バンプマッピングのように、メッシュに複数のテクスチャを適用するときは、通常、テクスチャを最初のいくつかの固定テクスチャユニットにバインドします。異なるテクスチャの異なるメッシュ。しかし、なぜglActiveTextureこれほど多くのテクスチャユニットをサポートするのかと常に疑問に思っていました(前のリンクでは、少なくとも80と表示されています)。

そのため、テクスチャを管理する1つの可能な方法は、使用可能な各ユニットに個別のテクスチャをバインドし、それらを有効のままにして、均一なサンプラーインデックスを更新することです。これにより、テクスチャスイッチの数が減り、レンダリングのパフォーマンスが向上します。テクスチャが最大テクスチャユニットよりも少ない場合は、テクスチャをバインド解除する必要はありません。

これはリアルタイムOpenGLアプリケーションの標準的な方法ですか(これはD3Dにも当てはまると思います)?そして、このアプローチを取ることによる明らかでないパフォーマンスへの影響はありますか?おそらくメモリオーバーヘッド?

回答:


11

最近のハードウェアには、OpenGLによって公開されているようなテクスチャバインディングポイントの概念はありません。むしろ、シェーダーユニットは記述子(単なる一種のファットポインター)を使用します。記述子は、ビデオメモリに常駐している限り、任意のテクスチャをアドレス指定できます。これがバインドレステクスチャのようなものを可能にするものです。そのため、現在の実装で利用可能な大量の「テクスチャユニット」は、APIのこの無関係な部分をハンドウェーブしようとしているだけです。

とはいえ、実行しようとしていることを実装する推奨方法(テクスチャの再バインドを回避する)は、テクスチャ配列を使用することです。同じフォーマットとサイズ。このプレゼンテーションには、最新のOpenGLを使用してレンダリングするときにドライバーのオーバーヘッドを削減するためのこれらの手法やその他の手法の詳細が含まれています。ゼロドライバーオーバーヘッドへのアプローチ


そのプレゼンテーションは以前に見たことがありますが、とても良いです。最初の段落であなたが何を言っているのか私は知りませんでしたので、その情報に感謝します!
2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.