使用单个绘制调用时区分模型

Differentiate models when using single draw call

我正在尝试使用单个绘制调用为多个模型绘制几何图形。因此,所有几何图形都在相同的 vertex/index 缓冲区内调整大小。不同模型的几何图形共享相同的顶点格式,但每个模型的顶点数量可以不同。

在 vertex/fragment 着色器中,有什么技术可以用来区分不同的模型,以访问它们适当的 transforms/textures/etc?

这些是静态模型吗?对于传统的静态批处理:

您只需要相对于批次原点进行一次转换(作为离线数据打包步骤的一部分,相对于批次原点定位各个模型)。

您可以将纹理批处理到单个图集中(每个对象具有不同坐标的单个 2D 图像,或者每个对象具有不同层的纹理数组)。

如果你这样做,你不需要不同的组件模型——它们实际上只是“一个大模型”。具有良好的性能特性...

对于更现代的方法,您可以尝试使用多个“drawCount”值的间接绘制来索引您想要的设置。这允许使用可变缓冲区偏移量和三角形计数,但使用的其余状态需要相同。

作为纹理数组的替代方案,使用无绑定纹理,您可以通过编程方式 select 在运行时在着色器中使用哪个纹理。但是您通常仍然希望它至少 warp-uniform 以避免性能下降。