だから私は XNA 3.1 で何かを作っており、ピクセル シェーダーを介して適用される個別の効果がたくさんあります。これらは、特殊攻撃、環境など、あらゆる種類のソースから発生します。私が抱えている問題は、フレーム レートが大幅に低下していることです。
現在、シーン全体を RenderTarget2D に描画しており、これにすべての効果を適用しています。効果とその ID を含む SortedDictionary を保存し (ID は実行時にパラメーターを変更するために使用されます)、それを反復処理して、各効果を次々に適用します。
foreach(KeyValuePair<Ref<int>,Effect> p in renderEffects)
{
Effect r = p.Value;
g.SetRenderTarget(0, MainGame.MainRenderTarget);
//Change RenderTarget to allow code to grab existing texture in the same draw area.
levelDraw = MainGame.LevelRenderTarget.GetTexture();
//Change back to draw back to this texture, allowing render effects to be layered.
g.SetRenderTarget(0, MainGame.LevelRenderTarget);
MainGame.StartDraw(MainGame.GameBatch);
//Starts the sprite batch and sets some parameters
r.Begin();
r.CurrentTechnique.Passes[0].Begin();
MainGame.GameBatch.Draw(levelDraw, new Rectangle(0, 0, levelDraw.Width, levelDraw.Height), Color.White);
r.CurrentTechnique.Passes[0].End();
r.End();
MainGame.GameBatch.End();
}
現在、これにより、わずか 3 つの効果を重ねると顕著なフレーム ドロップが発生し、10 を適用すると 60FPS から 16FPS に低下しますが、これはもちろん容認できません。これを行うためのより効率的な方法があるかどうか疑問に思っています。テクスチャが 1 つしかないことを考えると、エフェクトを 1 つのファイルに結合し、テクスチャを取り戻さずに複数のパスを実行できる可能性があると考えました。ただし、これが可能かどうかはわかりません。
これを行うための最良の方法が正確にはわかりませんが、私がやっている方法よりも良い方法があるに違いないと思います。