XNA 精灵排序模式速度和着色器 (4.0)
本文关键字:排序 精灵 模式 速度 XNA | 更新日期: 2023-09-27 18:35:21
晚上/下午;
我正在着手编写一个小型自定义 2D XNA 引擎供我个人使用。在决定如何绘制 2D 精灵时,我陷入了困境:
首先,我想在某个时候实现一些自定义着色器效果。我在互联网上读到的每个教程都说我因此被迫使用SpriteSortMode.Imcutate,除了一个教程,它说在XNA 4.0中不再需要。
此外,我不确定哪种精灵排序模式对我的方法最快,无论阴影效果如何。不同精灵的排序/分层绝对是必要的(即在游戏精灵前面有一个HUD,在背景前面有一个游戏精灵等);但是实现自定义排序列表并按顺序调用 Draw() 或使用 BackToFront/FrontToBack 选项会更快吗?
提前谢谢你。
从 XNA 4.0 开始,您可以在任何精灵排序模式下使用自定义着色器效果。XNA 3.1 中的即时精灵排序模式非常糟糕。(见 http://blogs.msdn.com/b/shawnhar/archive/2010/04/05/spritesortmode-immediate-in-xna-game-studio-4-0.aspx)
关于排序,我会说从头到尾对透明精灵进行排序,对不透明的精灵进行从前到后排序。参见:http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritesortmode.aspx
那里还有一个额外的有趣模式(至少对于 2D 引擎),它是纹理排序模式,它根据需要纹理的绘制调用进行排序,从而减少状态更改。对于主要游戏精灵来说,这可能是一个巨大的性能胜利。
而且,在您的探查器另有说明之前,我不会太担心性能。SpriteBatch 执行了相当多的批处理(是的,真的),这将是最大的性能改进,因为它最大限度地减少了状态更改的数量。
我能想到的提高性能的唯一另一种方法是使用实例化,但我认为使用 XNA 这可能是一个坏主意(理想情况下,您至少需要 SM3.0 硬件和自定义顶点着色器;我不确定它如何与 SpriteBatch 类配合使用)。