非常に遅いdirect3Dテクスチャサンプリング


9

そのため、Direct3D 9を使用して小さなゲームを作成し、地形にマルチテクスチャリングを使用しています。私がしているのは、3つのテクスチャとブレンドマップをサンプリングし、ブレンドマップのカラーチャネルに基づいて、3つのテクスチャから全体の色を取得することだけです。とにかく、2つ以上のテクスチャをサンプリングすると、フレームレートが大幅に低下します。120+fpsから50弱までです。

これは、スローダウンの原因となっているHLSLコードです。

float3 ground = tex2D(GroundTex, multiTex).rgb;
float3 stone  = tex2D(StoneTex, multiTex).rgb;
float3 grass  = tex2D(GrassTex, multiTex).rgb;
float3 blend  = tex2D(BlendMapTex, blendMap).rgb;

私はそれを間違っていますか?テクスチャサンプリングなどに関する情報やヒントを誰かが持っているとしたら、それは素晴らしいことです。

ありがとう。


どのようなハードウェアをお持ちですか?4つのテクスチャサンプルは、新しいハードウェアでは問題になりません。
Axel Gneiting

私はRadeon X1950を持っています。ええ、それは2年前です。多分それは最高のハードウェアではないと思います。どう思いますか ?
dotminic

回答:


9

速度を上げたい場合は、テクスチャアトラスと呼ばれるものを使用できます。

ウィキペディア —テクスチャアトラスは大きな画像、つまり多くの小さなサブ画像を含む「アトラス」であり、それぞれが3Dオブジェクトの一部のテクスチャです。サブテクスチャは、アトラス上のオブジェクトのuvmapのテクスチャ座標を変更することでレンダリングでき、基本的にはテクスチャが画像のどの部分にあるかを伝えます。多くの小さなテクスチャが頻繁に使用されるアプリケーションでは、多くの場合、より効率的です。グラフィックスハードウェアによって1つの単位として扱われるテクスチャーアトラスにテクスチャーを格納します。

GPUが単一の大きなテクスチャを4回サンプリングする方が、それぞれ1回ずつサンプリングされる4つの画像よりも効率的です。これは、テレインテクスチャアトラスの例です。

代替テキスト


1
アドバイスのおかげで、テクスチャアトラスを使用してシェーダーを実装しました。109fpsしか「取得できません」が、55fpsからはすっきりと改善されています。ありがとう!
dotminic 2010年

1
良い答えは+1です。そのテクスチャアトラス画像をどこで入手できますか。独占的ですか、それとも無料で使用できますか?
Cameron

4

考慮すべきもう1つのことは、テクスチャフォーマットです。生の32bppテクスチャですか?その場合、4ビット/ピクセル(スペースの1/8を占める)である圧縮されたDXT1テクスチャ、または8ビット/ピクセルのアルファチャネルが必要な場合はDXT5の使用を検討してください。

テクスチャデータのサイズを小さくすると、テクスチャメモリの帯域幅要件が減少し、テクスチャキャッシュのパフォーマンスが向上します。

また、最高品質の異方性フィルタリングを設定していないことを確認してください。かなりのコストがかかる可能性があります。


thxのアドバイスをお願いします。次回は試してみます。
dotminic

3

テクスチャにミップマップはありますか?

ミップマッピングを使用しない場合、テクスチャサンプリングは特に高価になる可能性があります(キャッシュミスの負荷)


はい、テクスチャにはミップマップがあります。DirectXテクスチャツールから* .ddsとしてエクスポートしました。しかし、どこにでも高解像度のテクスチャがたくさんある商用ゲームでテクスチャをどのように使用するのでしょうか 1つのテクスチャアトラスをサンプリングして、すべてをGPUで地形をレンダリングしているときに109 fpsのフレームレートを取得しています。
dotminic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.