【发布时间】:2018-04-29 12:01:46
【问题描述】:
我目前正在努力寻找一种好的方法来渲染许多(数千个)略有不同的模型。模型本身是一个带有一些顶点偏移的简单立方体,想想一个倾斜的四边形面。每个“块”的顶点都有不同的偏移量,所以基本上我在类固醇上有一个体素引擎,因为每个块都不是一个完美的立方体,而是一个倾斜的立方体。要渲染这个形状,需要 48 个顶点,但可以切割为 24 个顶点,因为只有 3 个面是可见的。通过索引,我们处于 12 个顶点(每个面 4 个)。
但是,现在我已经有了世界上每个方块的顶点,我该如何渲染它们呢?
我尝试过的:
实例化渲染。听起来不错,因为我的模型不一样,所以不起作用。 我可以将远处的块简化为立方体并使用 glDrawArraysInstanced/glDrawElementsInstanced 渲染它们。
将所有内容放在一个巨大的 VBO 中。这比单独渲染每个立方体具有更好的性能,但有一个大网格的缺点。这是不可取的,因为我需要每个立方体具有不同的纹理、光照等……在那个巨大的网格中选择单个立方体是不可能的。
我知道平截头体剔除和遮挡剔除,但我面前的一些立方体已经出现问题(在 128x128 世界中测试)。
我的要求:
画几千个模型。
每个模型都有顶点偏移,以使块不那么立方体,存储在另一个 VBO 中。
每个块都必须是一个单独的对象,因为您应该能够放置/移除块。
有什么好的性能建议吗?
【问题讨论】:
-
我建议基于块的方法,每个块一个 VBO。此外,您可能根本不应该渲染不可见的三角形(通过在体素变化时仔细生成所述 VBO)。