【问题标题】:DirectX - when to use instancing and when not?DirectX - 何时使用实例化,何时不使用?
【发布时间】:2022-02-14 08:26:23
【问题描述】:

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

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

一个对我没有帮助的类似问题:What overhead is associated with instanced rendering?

【问题讨论】:

  • 关于使用实例化的好处,它是渲染粒子系统(火、烟等)的理想选择。我在 DirectX 12 游戏中使用实例化来制作火效果。实例化渲染还应该用于使用共享相同网格(例如小行星场、敌舰等)但纹理、位置和大小不同的多种游戏对象填充您的场景。

标签: rendering directx geometry-instancing


【解决方案1】:

多年来,硬件实例化与仅绘制多次的性能图表中的“拐点”发生了变化。在硬件实例化的早期,第一代卡几乎从来没有成功过。随着 GPU 的发展和提供更多硬件支持以使其更快,它得到了显着改进。

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

特别是对于“点精灵”,即用于特殊效果的粒子系统,有许多不同的方法。对于 Xbox One 类 GPU 硬件,只为顶点绘制一堆非常快,而顶点硬件实例化只会在大量粒子上胜过它(尽管它会使用更少的 VRAM,所以这可能是一个考虑因素)。对于“DirectX 12 Ultimate”类 GPU 硬件,Mesh Shader 实际上是绘制粒子系统的最快方式。请参阅 GitHub 上的 PointSprites 示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多