サイズが2の累乗でないテクスチャを使用する必要がありますか?


40

OpenGLとDirectXの初期の頃、テクスチャサイズは2のべき乗である必要がありました。これは、シフトなどを使用して、フロート値の補間を非常に迅速に実行できることを意味していました。

OpenGL 2.0(およびその前の拡張機能)以降、2のべき乗以外のテクスチャディメンションがサポートされています。

2のべき乗のテクスチャは、最新の統合されたディスクリートGPUでパフォーマンス上の利点がありますか?2のべき乗以外のテクスチャにはどのような利点がありますか?

かなりのデスクトップ人口に、2のべき乗以外のテクスチャをサポートするカードがありますか?


回答:


15

最新の統合された個別のGPUで2のべき乗のテクスチャに固執することでパフォーマンス上の利点はありますか?

最新のGPUのほとんどは、2のべき乗(NPOT)以外のテクスチャをサポートし、それらを適切に処理します。パフォーマンスの低下はごくわずかです。ただし、考慮すべき問題はほとんどありません。

  • NPOTテクスチャを使用する場合、次のサイズのPOTテクスチャと同様に、RAMのスペースが増えます。技術的には、そこに何かを置くために使用できるスペースを無駄にします。

  • NPOTテクスチャの処理は、次のサイズのPOTと比較して著しく遅くなる可能性があります(OpenGL 2.1では最大30%パフォーマンスが低下しました)。

  • 古いGPUとオンボード/オンチップGPUはそれほど高度ではなく、NPOTテクスチャをサポートすることがよくありますが、サポートは非​​常に遅く、扱いにくいです。

  • 古いGPUでさえ、NPOTテクスチャの受け入れ/表示をまったく拒否する場合があります。

  • ミップマップ補間によって引き起こされるエッジのアーティファクトが存在する可能性があります。25x25テクスチャには、32x32サイズに詰めるためにピクセルが追加された黒いフリンジが含まれる場合があります。

PSモバイルデバイスについてはよくわかりませんが、POTテクスチャに関してはさらに多くの制限があるかもしれません。

2のべき乗でないテクスチャがある場合、どのような利点がありますか?

私の知る限り、2つの利点しかありません。

  • パックされていない場合は、HDDのスペースが少なくなります(パックされた空の領域はほとんど追加されません)
  • NPOT-> POTコンバーターの作成にかかる時間を節約できます。リリースバージョンには1つ必要ですが、インターフェイス/モデルの設計とプロトタイピングにNPOTテクスチャを使用するだけで十分です。

2のべき乗以外のテクスチャをサポートするカードを持っていないデスクトップユーザーが大勢いますか?

私の知る限り、PCでのテスト-はい。これには、速度低下/マイナーバグGPUの大部分と、NPOTをまったく処理しないカードの小部分が含まれます。


6

2のべき乗ではないテクスチャの一般的な使用法の1つは、後処理効果に使用される「画面サイズ」または「半画面サイズ」(など)のレンダリングターゲットテクスチャです。

これらの場合、ミップマップは不要であり、バッファーは常に非圧縮であるため、ここで奇数のテクスチャサイズを使用すると問題が少なくなります


4

古いハードウェア上のNPOTテクスチャには制限がありました。このOpenGL wikiで述べたよう、一部の古いハードウェアはミップマップを持たないNPOTを必要とし、圧縮テクスチャは4x4ピクセルのアライメントを必要としますが、新しいハードウェアはそれを完全に処理する必要があります。

私の経験では、POTの代わりにNPOTテクスチャを使用すると、比較的新しいハードウェアでも大きなパフォーマンスヒットが発生します。問題が何なのかわかりません。レンダリング状態の組み合わせによっては、実際にソフトウェアでレンダリングが行われる可能性があります。したがって、正当な理由がない限り、できるだけPOTを使用することをお勧めします。

POTの代わりにNPOTを使用する理由について-たとえば、1600x1200などのNPOT寸法の画像がある場合、2048x2048ピクセルの表面を使用すると、多くのビデオメモリが浪費されます。


3
メモリで圧縮されたテクスチャ形式(たとえば、PVRまたはDXT)を使用している場合、次の2のべき乗にスケールアップすると、圧縮されていないがより小さいNPOTテクスチャよりも大幅に少ないテクスチャメモリが使用されます。
テトラッド

3
あなたの言い回しは少しあいまいなので、これがあなたの言いたいことと重複している場合は申し訳ありません-NPOTテクスチャをサポートする最新のハードウェアであっても、圧縮テクスチャには4の倍数のピクセルサイズが必要です。

1
あなたがそれらをアップロードするとき、私は現在のハードウェアがドライバーでまだタイル張り/スウィズルテクスチャーであることを期待するでしょう。これにより、テクスチャのレイアウトが変更され、ハードウェアによりアクセスしやすくなります。コンソール(XNAは含まれません)では、独自のツールチェーンでこのレイアウトの最適化を手動で実行する必要があります。これらはPOW2でのみ動作するはずです。
ロジャーパーキンス

-1

2のパワーのテクスチャにより、古いGPUだけでなく、あらゆるタイプのGPUのパフォーマンスが約30%向上します(ハイエンドGPUと平均的なGPUの違いは30%高速です)。特定の距離に適切なテクスチャサイズを提供します。テクスチャのアンチエイリアスのように機能します。暗い線のアーティファクトはゲームエンジンで処理する必要があり、AAAエンジンはそれらをうまく処理します。


これが唯一の2のべき乗のテクスチャの(すでに指定)利点を提供し、それはあなたが使用する理由である、質問自体に対処しないしない上記の利点与え-power-の-2つのテクスチャを。
ジョシュ

申し訳ありませんが、私は質問を誤解し、2のべき乗で、あなたは2048年、1024年、512、などに制限されている、おそらくこれが主な理由である
ユセフghatavi

また、2の非電源は常にカメラに近いとなるようなGUIテクスチャや一人称文字のテクスチャとしてミップマップを必要としないテクスチャに便利です
ユセフghatavi

-3

私のプログラマーアートのサイズは正しいだけです。

画面の左上にテクスチャを設定したい場合、テクスチャの左上に0,0を設定して、そこにあるすべてのテクスチャを正しい場所に表示することができることを知ることは、表示ロジックを確かに単純化します。 0alphaパディングを追加する必要がある場合、画面の端に対するテクスチャの配置はより複雑になります。さらに、もちろん、0alphaはまだアルファブレンドする必要があります。不透明なテクスチャを見る場合は、アルファチャンネルを使用しない方がいいかもしれません。


6
通常、テクスチャではなくポリゴンを画面上に配置します。ポリゴンには、必要なUVを指定できます。必ずしも0から1にする必要はありません。テクスチャの幅が30しかない場合は、0.9375にすれば問題ありません(これが、POTテクスチャが優れているもう1つの理由です-UVは正確に表現できます)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.