我应该给每个角色自己的VBO还是应该将它们批量化为一个VBO?


10

我正在制作3D第一人称视角游戏。我应该给每个角色自己的VBO,还是应该将所有角色批量到一个VBO中?优点/缺点是什么?


这是一个重复的问题。关于什么,我不太确定,但这是骗子。
DeadMG 2011年

类似,但是我不认为这是重复的,首先,这是Open-GL(我不确定是否存在任何特定的区别),而另一个问题是关于DirectX11(因此大概使用镶嵌细分,这会改变事情)。
Thomas Russell

Answers:


11

这实际上是性能和灵活性之间的选择,但我会列出我的意见。

一个单一的VBO

积极方面是:

  • 只需一个抽奖电话即可绘制场景。这样可以提高性能。尽管您的应用程序可能需要多个绘图调用,但是您仍然可以拥有一个VBO,让计数和偏移量决定您的绘图。
  • 不需要在对象之间更改状态。这样可以提高性能。

不利的一面是:

  • 难以管理,尽管这取决于您如何编写代码,设计是否正确等。
  • 不好管理我的意思是这样的东西更新的VBO,正确设置为每个对象等偏移

个人VBO:

积极方面是:

  • 易于实现。
  • 从一开始就易于管理。

不利的一面是:

  • 状态变化很多。这会降低性能。
  • 很多抽奖电话。它将降低性能。

摘要

我建议您分析您的应用程序;获得您可以看到的数据的真正瓶颈。可以将过早的优化显示为不必要(在这种情况下)。但是,话虽如此,如果您发现应用程序中确实存在性能损失,那么鉴于个别的VBO:s场景,您可以开始实施单个VBO。

但是,只要不需要(对象数量少,总体状态变化不多等),我建议您使用单独的VBO:s,除非您发现这样做不起作用。

编辑

我忘了提起多个抽奖电话是可以的。在性能关键时刻,最重要的事情是使状态变化保持在最低水平。您可以简单地设置要处理的索引数和每个绘制调用的偏移量,这很好。但是,请保持状态变化尽可能小,并尽量减少绘制调用,这就是这个答案的最大招呼,或者至少是我想说的。


如果您仅执行1次绘制调用,那将使您为每个网格(而不是每个顶点)状态变化(均匀性等)烦恼。也强制全部或不绘制所有内容。当然,您可以将其分解,以便只有1个VBO多次绘制调用,但是如果要添加一个新网格,该怎么办?
deceleratedcaviar

1
@Daniel:只需将新网格物体更新/添加到VBO中即可。我忘了提起多个抽奖电话是可以的。在性能关键时刻,最重要的事情是使状态变化保持在最低水平。您可以简单地设置要处理的索引数和每个绘制调用的偏移量,这很好。但是,请保持状态变化尽可能小,并尽量减少绘制调用,这就是这个答案的最大招呼,或者至少是我想说的。:-)
Wroclai

在2005年,批次,批次,批次得出的结论是,您可以在1 GHz CPU上承受10,000至25k的批次,而您完全可以通过单独处理绘图调用来完全限制CPU。每60Hz帧转换成几百个批次,将所有内容鞋类拼成一个VB并不是必需的,但是如果将具有相似特征(寿命,更新率,属性)的几何图形捆绑到同一VB中,这肯定会有所帮助。
拉尔斯·维克伦德

1
我认为您也应该考虑平截锥体剔除。
塔拉2014年
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.