3D模型预算。重要的是三角形或顶点的数量更多


12

当我为3D游戏制作模型时,应该在预算多边形(三角形)或顶点中采取什么措施?我用两套40000立方体进行了一个实验,其中一个立方体有8个顶点和12个三角形,另一组有24个顶点和12个三角形。所有这些都是在Unity中完成的,并且两者都是程序生成的。令我惊讶的是,两套乐器的表现几乎相同,两者之间的差别很小。

这是否意味着我不应该担心顶点数而只关注三角形数?

编辑:我做了另一个实验,我创建了一个包含19602个三角形和10000个顶点的平面,以及另一个具有相同数量的三角形但有39204个顶点的平面。我都产生了4000。现在,较少的顶点赢得了14 fps到19 fps的帧。因此,我想一般来说,少即是好,但只有大的差异。


9
编写您的游戏并解决出现的问题。这种问题可能永远不会出现,您正在浪费时间:P
Vaillancourt

Answers:


16

让我们想象一个大的网格,就像我们可能用于地形的网格一样。我们将n在一次绘制调用中渲染值得的三角形,覆盖我们1080p屏幕的一半。

如果我们焊接所有顶点并且没有平滑/纹理接缝,则每个三角形都有3个顶点,并且每个顶点由6个三角形共享,因此我们有n/2顶点。

要渲染此图像,我们需要:

  • 至少运行顶点着色器n/2几次

    (“至少”,因为我们用于顶点结果的缓存非常大。有时,我们最终将逐出已经变换的顶点,然后再次需要它以共享它的以后的三角形,然后在其上重新运行顶点着色器。因此,我们所得到的节省并没有纸张上的那么多)

  • 剪辑和剔除n三角形。

  • 光栅化和插值至少1920x1080 / 2或大约100万像素的帧缓冲区(因为我们说过我们的地形大约覆盖了一半的屏幕)。

    (“至少”是因为GPU在四像素像素上工作的方式,多边形边缘之外的一些片段仍会被光栅化,然后被遮罩,这意味着我们对片段进行了两次处理。遮挡自身,如果我们不足够幸运地首先将最前面的多边形绘制到深度缓冲区中)

  • 对所有> = 1百万个片段运行片段着色器。

  • 将约一百万个结果混合到帧和深度缓冲区中。

好的,现在让我们解开所有顶点,以便现在3n可以渲染顶点,比以前增加六倍!我们的步骤是...

  • 运行顶点着色器3n时间。

    (由于每个缓存仅使用一次,因此不会由于缓存而产生星号,尽管这意味着缓存无法随时为我们节省时间)

  • 剪辑和剔除n三角形。

  • 光栅化和内插至少1920x1080 / 2或大约100万像素的帧缓冲区。

  • 对所有> = 1百万个片段运行片段着色器。

  • 将约一百万个结果混合到帧和深度缓冲区中。

...等等,除第一步外,其他所有步骤都是一样的!因此,GPU在典型的绘制调用中所做的大部分工作都与所使用的顶点数没有直接关系。屏幕覆盖率,透支和三角形总数构成了更多的成本。

这并不意味着顶点是完全自由的。如果可以共享顶点,则可以从缓存中获得一些适度的节省,尤其是在顶点着色器复杂或硬件的顶点管线较弱的情况下(例如某些较旧的控制台)。但是,鉴于顶点数跟踪与三角形数成正比或减去一个常数因子成正比,因此通常不像总网格成本那样令人感兴趣。


将这些顶点发送到内存的成本如何?
米哈尔Leszczyński

7
除非您每帧更改顶点缓冲区,否则您只需支付一次上传费用。您的纹理和帧缓冲区可能是任何给定帧中较大的视频内存和带宽消耗。这仍然意味着顶点当然不是免费的,并且在可行时最好共享它们,但是即使是游戏性能不佳的原因,未共享的顶点也很少。
DMGregory

就像我在游戏中做森林之类的时候,这会增加。开始时,我最初是使用绘图调用(我使用自己的引擎,这可能无法完全符合您的问题)来仅绘制带顶点的模型,这本身还可以,性能还不错。但是,当我开始使用索引时,由于共享了某些顶点并对其进行了缓存,因此确实实现了性能提升,因此某些计算没有进行两次。最重要的是,仅原始转换测试并不是最佳的指标转换与三位数计数。您的管道可能会受到太多的影响。正如其他答案所暗示的。
ErnieDingo

2

都不行

除非您真正谈论大量的tris(百万),否则您关心的是:

  • 渲染像素数
  • 片段着色器的成本
  • 绘图调用的次数(该限制在很大程度上取决于设备)。

24个顶点乘以4000立方得到96'000个顶点。

640x380像素提供243'200片段,大多数设备支持更大的分辨率。

您可以使用1'000'000多维数据集重新运行您的实验,并进行批量处理以避免绘制调用瓶颈(1个单个模型用于1,000'000多维数据集)。


2
这在很大程度上取决于场景以及渲染方式。如果您的场景自然具有相对较少的透支,则顶点处理当然可以控制您的性能。同样,对于某些API,绘图调用的数目也不是问题,因为绘图调用之间的状态会发生变化。
Nicol Bolas

1

值得一提的是,如果您正在执行WebGL应用程序,则在用户下载文件大小方面,顶点数很快就会成为瓶颈。三角形的数量相同,但顶点的数量通常是DCC软件中显示的数量的2-3倍。在这种情况下,更好的展开方式可以减少缝隙,从而大有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.