7

OpenGL アプリケーションで 2 の累乗でないテクスチャを使用することが安全かどうかについて、物議を醸す意見を聞いてきました。最新のハードウェアはすべて NPOT テクスチャを完全にサポートしていると言う人もいれば、サポートしていない、またはパフォーマンスに大きな影響があると言う人もいます。

私が尋ねている理由は、画面のサイズ (2 の累乗ではない場合があります) のフレーム バッファーに何かをレンダリングし、それをテクスチャとして使用したいからです。この場合、パフォーマンスと移植性に何が起こるかを理解したいと思います。

4

4 に答える 4

10

随分前 (2004 年) の OpenGL-2 以来、任意のテクスチャ サイズが OpenGL のコア部分として指定されてきました。それ以降に設計されたすべての GPU は、NP2 テクスチャを問題なくサポートします。唯一の問題は、パフォーマンスがどれほど優れているかです。

ただし、GPU がプログラム可能になって以来、固定関数のテクスチャ ギャザー アクセスの予測可能なパターンに基づく最適化は一種の時代遅れになり、GPU は現在、一般的なデータの局所性のために最適化されたキャッシュを備えており、パフォーマンスも今ではそれほど問題ではありません。実際、P2 テクスチャでは、フォーマットに合わせてデータをアップスケールする必要がある場合があります。これにより、必要なメモリ帯域幅が増加します。ただし、メモリ帯域幅は最新の GPU の最大のボトルネックです。そのため、わずかに小さい NP2 テクスチャを使用すると、実際にはパフォーマンスが向上する場合があります。

要するに、NP2 テクスチャを安全に使用でき、パフォーマンスも大きな問題ではありません。

于 2012-10-14T09:24:35.100 に答える
3

最新のグラフィックス ハードウェア (ATi/AMD/nVidia の最後の 10 世代ほどと Intel の最後の 2 世代) 上のすべての最新の API (OpenGL ES の一部のバージョンを除く) は、NP2 テクスチャを問題なくサポートします。それらは、特に後処理のために、かなり長い間使用されてきました。

ただし、2 のべき乗テクスチャほど便利であるとは言えません。主なケースの 1 つはメモリ パッキングです。ドライバーは、多くの場合、テクスチャが 2 のべき乗である場合にはるかに適切にメモリにパックできます。ミップマップを使用してテクスチャを見ると、ベースとすべてのミップを元の幅の 150%、元の高さの 100% の領域に詰め込むことができます。また、特定のテクスチャ サイズが、最適なメモリ アクセス状況を提供するストライド (テクスチャ行サイズ、バイト単位) でメモリ ページを並べる可能性もあります。NP2 では、この種の最適化の実行が難しくなるため、メモリの使用とアドレス指定の効率が大幅に低下する可能性があります。効果に気付くかどうかは、ドライバーとアプリケーションに大きく依存します。

オフスクリーン エフェクトは、おそらく NP2 テクスチャ、特に画面サイズのテクスチャの最も一般的な使用例です。現在市場に出回っている、あらゆる種類の後処理または遅延レンダリングを実行するほとんどすべてのゲームには、1 ~ 15 個のオフスクリーン バッファーがあり、その多くは画面と同じサイズです (一部の効果では、半分または 1/4 サイズが便利です)。これらは一般に、ミップマップを使用しても十分にサポートされています。

NP2 テクスチャは広くサポートされており、デスクトップやコンソールでほぼ確実に使用できるため、それらを使用しても問題なく動作するはずです。サポートされていない可能性のあるプラットフォームやハードウェアが心配な場合は、最も近い 2 のべき乗のサイズを使用する (品質がわずかに低下する可能性がありますが、機能します) か、エフェクトを完全に削除する (明らかな結果を伴う) などの簡単なフォールバックがあります。

于 2012-10-14T07:03:48.583 に答える
2

OpenGL 2.0 を使用したクロス プラットフォーム開発を通じて、ゲームの作成 (+4 年) と iOS および Android のテクスチャ アトラスの使用に多くの経験があります。

一部のデバイス (特に安価なハードウェアを搭載した安価なデバイス) は依然として動的なテクスチャ サイズをサポートしていないため、最大サイズが 2048x2048 の PoT テクスチャを使用してください。世の中には非常に多くのデバイスがあり、どの種類の GPU に直面するかわかりません。

PoT テクスチャを使用していない場合、iOS デバイスにも黒い四角とアーティファクトが表示されます。

ただのヒント。

于 2015-08-06T12:50:43.990 に答える