我正在使用directx 11 制作应用程序。我想首先使用实例化,所以为了简单起见,我将整个管道组织为始终使用实例化。这意味着目前如果我想在我的场景中绘制一个几何图形,它仍然会通过实例渲染。
我的问题是(是)实例化引入了什么开销?一般来说,这种方法是一种不好的做法吗?如果是这样,是否有关于如何决定何时使用实例化以及何时不使用的规则?
一个对我没有帮助的类似问题:与实例渲染相关的开销是多少?
我正在使用directx 11 制作应用程序。我想首先使用实例化,所以为了简单起见,我将整个管道组织为始终使用实例化。这意味着目前如果我想在我的场景中绘制一个几何图形,它仍然会通过实例渲染。
我的问题是(是)实例化引入了什么开销?一般来说,这种方法是一种不好的做法吗?如果是这样,是否有关于如何决定何时使用实例化以及何时不使用的规则?
一个对我没有帮助的类似问题:与实例渲染相关的开销是多少?
多年来,硬件实例化与仅绘制多次的性能图表中的“拐点”已经改变。在硬件实例化的早期,第一代卡几乎从来没有成功过。随着 GPU 的发展并提供更多硬件支持以使其更快,它得到了显着改进。
对于 DirectX 12 类硬件(最低 Direct3d 硬件功能级别 11.0),您可以指望实例化是绘制相同对象数千次的良好胜利。如果您谈论数十次,那么它将取决于许多因素,您实际上只能通过运行性能试验来解释。
特别是对于“点精灵”,即特殊效果的粒子系统,有许多不同的方法。对于 Xbox One 类 GPU 硬件,只为顶点绘制一堆非常快,并且顶点硬件实例化只会在大量粒子上胜过它(尽管它会使用更少的 VRAM,因此这可能是一个考虑因素)。对于“DirectX 12 Ultimate”类 GPU 硬件,Mesh Shader 实际上是绘制粒子系统的最快方式。请参阅GitHub 上的PointSprites示例。