组合实例VBO是一个好主意吗?

以下哪个选项更适合按实例数据?

  • 一个巨大的VBO,包含所有VAO共享的每个对象的位置,并且每个VAO都有偏移量和长度
  • 每个VAO一个VBO,仅包含其顶点数据的实例位置。
  • 更奇特的东西,例如一个用于静态物体的巨大VBO和一个用于运动物体的较小VBO

我没有使用多个VAO绘制一组实例。我的意思是跨越多个VAO的多个实例集。

雷托·科拉迪(Reto Koradi)

实际上,没有一种方法在所有情况下都是最佳的。如果只有一种方法能够始终保持最佳性能,那么OpenGL之类的API就不会提供所有这些灵活的选项。

一些因素将影响最好的因素:

  • 平台的性能特征。
  • 绘制的对象数。
  • 绘制对象的大小(顶点数)。
  • 如果在每个帧中绘制了所有对象,或者仅绘制了一个(小)子集。
  • 是否以及多长时间修改一次顶点数据。

看一些典型的用例:

  • 大型对象相对较少:无论您做什么,VBO绑定和绘图调用都不会成为瓶颈。如果这是最方便的方法,则可以为每个对象使用单独的VBO。
  • 大量小对象:将对象组存储在同一VBO中可能是有益的。可能还想研究通过单个绘制调用来绘制相关对象组的方法。
  • 每帧仅绘制一小部分“世界”,例如,游戏者在房间之间进行切换:将对象分组为VBO时,应同时绘制同时绘制的对象(例如,同一房间中的对象)相同的VBO,以及从未在不同VBO中同时绘制的对象。
  • 顶点的子集经常被修改:将“动态”顶点保留在单独的VBO中,并使其他VBO完全静态可能是有益的。

在所有这些情况下,如果您具有相同对象类型的多个实例,即具有相同几何形状的对象,那么您当然要在它们之间共享顶点数据。

现在,您可能会问有关这些通用准则的问题之一是:“许多”对象到底是什么?“很少”和“很多”之间的界限在哪里?

解决方案在很大程度上取决于硬件/平台的性能特征。至少给出一个大致的数量级,我希望最常见的平台能够处理几十万到几百万个VBO切换并每秒进行一次调用。如果您将其除以60 fps的目标,并希望避免在该领域花费大部分总性能预算,那么我将开始担心VBO绑定的数量,并在性能较低的平台上每帧调用约1000次,而如果您将高性能平台的性能提高至少一个数量级,那么高性能平台可能不会汗流sweat背。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

组合实例VBO是一个好主意吗?

来自分类Dev

将实例传递给__init__。这是一个好主意吗?

来自分类Dev

提取大量String文字是一个好主意吗?

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

使用NTFS压缩是一个好主意吗?

来自分类Dev

绑定PasswordBox密码不是一个好主意吗?

来自分类Dev

别名cd推送-这是一个好主意吗?

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

为什么避免布尔实例化是一个好主意?

来自分类Dev

一起使用HtmlCleaner和Jsoup是一个好主意吗?

来自分类Dev

匿名类实例----这是一个坏主意吗?

来自分类Dev

缓存NSMangagedObject实例是一个坏主意吗?

来自分类Dev

用薄的Cache层覆盖jQuery的$ .ajax是一个好主意吗?

来自分类Dev

为文本标签创建CSS类不是一个好主意吗?

来自分类Dev

Javascript-在闭包内使用函数构造函数不是一个好主意吗?

来自分类Dev

contextlib.redirect_stdout总是一个好主意吗?

来自分类Dev

git rebase-压缩初始提交通常不是一个好主意吗?

来自分类Dev

什么是MongoDB的严格模式,使用它是一个好主意吗?

来自分类Dev

在HttpContext.Current上发送覆盖响应不是一个好主意吗?

来自分类Dev

片段将所有导航控件委托给Activity是一个好主意吗?

来自分类Dev

将Any用作Union类型是一个好主意吗?

来自分类Dev

由heroku上的node.js服务的静态文件-这是一个好主意吗?

来自分类Dev

使用boost :: program_options解析文本文件是一个好主意吗?

来自分类Dev

使用hgignore忽略* .orig文件不是一个好主意吗?

来自分类Dev

捕获TaskCanceledException并检查Task.Canceled是一个好主意吗?

来自分类Dev

在静态文件上分块使用Transfer-Encoding:是一个好主意吗?

来自分类Dev

使用宏在C中实现通用向量。这是一个好主意吗?

来自分类Dev

临时扩展Java中的现有对象-这是一个好主意吗?

来自分类Dev

在Web应用程序中使用反射是一个好主意吗?

Related 相关文章

  1. 1

    组合实例VBO是一个好主意吗?

  2. 2

    将实例传递给__init__。这是一个好主意吗?

  3. 3

    提取大量String文字是一个好主意吗?

  4. 4

    一个好主意是为此使用复合模式吗?

  5. 5

    使用NTFS压缩是一个好主意吗?

  6. 6

    绑定PasswordBox密码不是一个好主意吗?

  7. 7

    别名cd推送-这是一个好主意吗?

  8. 8

    一个好主意是为此使用复合模式吗?

  9. 9

    为什么避免布尔实例化是一个好主意?

  10. 10

    一起使用HtmlCleaner和Jsoup是一个好主意吗?

  11. 11

    匿名类实例----这是一个坏主意吗?

  12. 12

    缓存NSMangagedObject实例是一个坏主意吗?

  13. 13

    用薄的Cache层覆盖jQuery的$ .ajax是一个好主意吗?

  14. 14

    为文本标签创建CSS类不是一个好主意吗?

  15. 15

    Javascript-在闭包内使用函数构造函数不是一个好主意吗?

  16. 16

    contextlib.redirect_stdout总是一个好主意吗?

  17. 17

    git rebase-压缩初始提交通常不是一个好主意吗?

  18. 18

    什么是MongoDB的严格模式,使用它是一个好主意吗?

  19. 19

    在HttpContext.Current上发送覆盖响应不是一个好主意吗?

  20. 20

    片段将所有导航控件委托给Activity是一个好主意吗?

  21. 21

    将Any用作Union类型是一个好主意吗?

  22. 22

    由heroku上的node.js服务的静态文件-这是一个好主意吗?

  23. 23

    使用boost :: program_options解析文本文件是一个好主意吗?

  24. 24

    使用hgignore忽略* .orig文件不是一个好主意吗?

  25. 25

    捕获TaskCanceledException并检查Task.Canceled是一个好主意吗?

  26. 26

    在静态文件上分块使用Transfer-Encoding:是一个好主意吗?

  27. 27

    使用宏在C中实现通用向量。这是一个好主意吗?

  28. 28

    临时扩展Java中的现有对象-这是一个好主意吗?

  29. 29

    在Web应用程序中使用反射是一个好主意吗?

热门标签

归档