XNA 3.1で何かを作っているので、ピクセルシェーダを介して適用される別々のエフェクトがたくさんあります。これらは、特殊攻撃、環境などのあらゆる種類のソースから来ています。私が抱えている問題は、フレームレートが大幅に低下していることに気付いていることです。複数のピクセルシェーダを効率的に組み合わせる
現時点では、シーン全体をRenderTarget2Dに描画しています。次に、すべてのエフェクトを適用します。私は(IDが実行時にパラメータを変更するために使用されている)の影響とそのIDを含むSortedDictionaryを格納し、私はそれを反復し、他の後、各エフェクト1を適用しています:
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つのファイルに結合し、テクスチャを取り込まずに複数のパスを実行できると考えました。しかし、これが可能かどうかはわかりません。私はそれをやっているよりも良い方法がなければならないと思うが、これを行うにはどうすればよいのか正確にはわからない。
で見たいと思うかもしれません。 「[質問には「タイトル内に「タグ」を含める必要がありますか」(http://meta.stackexchange.com/questions/19190/)」を参照してください。コンセンサスは「いいえ、そうすべきではありません」です。 –
ありがとう。私はタグを見なければならないのではなく、彼らが一目で助けてくれるかどうかを知ることができるようにそれらを含める傾向があります。 – Hoeloe
タグには、文字化けしたタイトルよりも優れた仕組みが含まれています。 「お気に入りのタグ」を設定すると、それらのタグを含むメッセージが強調表示されます。これらのタグを含むメッセージを非表示にする「無視されたタグ」があります。 –