我正在尝试创建一个包含单位立方体(或球体)的600x600x600网格。只有一些立方体存在。所以,基本上我正在尝试使用由小立方体或球体组成的类似物。
问题1 :渲染这样的结构成本很高。它需要3个嵌套循环(每次600次迭代)。有没有办法解决这个问题?
我认为将附近的立方体组合成一个(oct-trees),因为在我的情况下不会有太多的间隙。但我想要一个通用的解决方案。您认为上面渲染这样一个场景需要多长时间(看起来像250x250x250的场景)?
问题2 :实例呈现是否与我的问题有关?
注意:这里我将体素表示为一个立方体,而这又需要6个四边形。
答案 0 :(得分:1)
我过去做过体素渲染引擎。以下是一些我可以建议的快速优化,可以为您提供良好的速度提升:
如果做得恰当,这三件事将会给你一大部分你正在寻找的提升。之后,它会根据您的需求和要求进行微调。
答案 1 :(得分:0)
确实可以通过将各种立方体组合成一个大立方体来处理问题1。体素引擎通常将多个单独的盒子组合在一起。这可能是最好的方式。 其次,您可以为每个体素使用布尔变量,也可以为包含这些体素的块使用布尔变量,并将其设置为1以进行渲染,否则设置为0。 根据您的要求,您将需要一个体素类,一个块类和一些其他抽象。
答案 2 :(得分:0)
也许创建一个几何着色器,为网格中的每个点复制一个框。对着色器进行智能编程,使其不会输出偏离View的侧面,也不会出现有" active"相邻的盒子。
问题是为几何着色器提供600 * 600 * 600大小的布尔值。如果复合"对象"可能你需要在立方体的每一行/每列上提供起始位置和结束位置,因此:1,4,90,345表示填充位置从1到4,从90到345表示立方体。
答案 3 :(得分:0)
问题1:
我不会'知道如何渲染3个嵌套循环。我看到一个600 ^ 3体素的巨大循环。您要做的最后一件事就是逐个渲染每个体素,因为您的GPU是流式多核处理器,除了空间翻译外,您的数据几乎相同。公平地说,这个数字可能有点太高了。目前,在11ms渲染时需要大约64,000个立方体,但如果你有静态场景设置,你可能会更快地得到它。请参阅:SVO Rendering: OpenGL or Custom renderer?
你可以做的另一件事是LOD场景,即只渲染真正需要的东西。你真的对远处的体素感兴趣吗?如果它们具有子像素大小,您也可以改为渲染四元素冒号。
问题2:
实例渲染绝对是解决方案的一部分,VBO和VAO也是如此,但还有其他方法,例如只发送坐标并在几何着色器中生成实际几何体。另请参阅http://sol.gfxile.net/instancing.html
如果你有一个静态场景,你可以再提高5倍的性能。