0

私は実際に C# と xna を使用して小さな 3D ゲームを作成しています。かなり遅くなってきているものがあるので、これらの最適化を始めています。

複数のテクスチャ/サンプラーを使用するピクセル シェーダーがあります。

texture MountainTexture;
texture GrassTexture;
texture IceTexture;
texture SandTexture;
sampler moutain = sampler_state {
   texture = (MountainTexture);
   MinFilter = Linear;
   MagFilter = Linear;
   MipFilter = Linear;
   AddressU = Wrap;
   AddressV = Wrap;
};
sampler ice = sampler_state {
   texture = (IceTexture);
   ...
};
sampler grass = sampler_state {
   texture = (GrassTexture);
   ...
};
sampler sand = sampler_state {
   texture = (SandTexture);
   ...
};

ピクセル シェーダー関数は、レンダリングされるピクセルごとにこれらのサンプラーの 1 つまたは 2 つを使用します。シェーダーが各ピクセルに対してこれらのサンプラーを 1 つだけ使用するようにすると、フレームレートが ~ x2 倍に改善されることに気付きました。

だから私は疑問に思っていました:-同じシェーダーの複数のサンプラーでtex2Dを使用すると、GPUは正確に何をしますか? なぜそんなに遅いのですか?Shader.Parameters["myTexture"].SetValue(myTexture)-とでテクスチャを渡すことの違いは何GraphicsDevices.Texture[10] = myTextureですか?

複数のサンプラーでシェーダーを使用するときにパフォーマンスを向上させる方法はありますか? (テクスチャが大きすぎて、すべてを 1 つのテクスチャに収めることができません)。

どうもありがとうございました !

4

1 に答える 1

0

「(テクスチャが大きすぎて 1 つのテクスチャにまとめられません)」

私はあなたがあなたの問題を見つけたと思います。巨大なテクスチャ。

http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.htmlの uvDetective のようなシェーダーを使用して、テクスチャに実際に必要なサイズを見つけることをお勧めします。考えられるすべてのノブを 11 に回していると思いますが、そうしないでください。ゲームです。

于 2013-10-22T06:09:57.790 に答える