DirectX - 何时使用实例化,何时不使用实例化?

Gre*_*tel 2 directx rendering geometry-instancing

我正在使用 directx 11 制作一个应用程序。我首先想利用实例化,因此为了简单起见,我组织了整个管道以始终使用实例化。这意味着目前如果我想在场景中绘制单个几何体,它仍然会经过实例渲染。

我的问题是实例化会带来什么开销?一般来说,这种方法是一种不好的做法吗?如果是这样,是否存在关于如何决定何时使用实例有益、何时不有益的规则?

一个类似的问题对我没有帮助:与实例渲染相关的开销是多少?

Chu*_*urn 7

多年来,硬件实例与仅多次绘制相比性能图中的“膝盖”已经发生了变化。在硬件实例化的早期,第一代卡几乎从未取得过胜利。随着 GPU 的发展并投入更多硬件支持以加快速度,它得到了显着改进。

对于 DirectX 12 类硬件(最低 Direct3d 硬件功能级别 11.0),您可以依靠实例化来绘制相同对象数千次。如果您谈论的是数十次,那么它将取决于许多因素,您实际上只能通过运行性能试验来解释。

特别是对于“点精灵”,即用于特效的粒子系统,有许多不同的方法。对于 Xbox One 类 GPU 硬件,仅绘制一堆顶点就非常快,而顶点硬件实例仅在大量粒子方面胜过它(尽管它会使用较少的 VRAM,因此这可能是一个考虑因素)。对于“DirectX 12 Ultimate”级 GPU 硬件,网格着色器实际上是绘制粒子系统的最快方法。请参阅GitHub上的PointSprites示例。