jMonkey优化类似于Java3D的

编辑:对于实时绘图,在opengl和opencl之间的“互用性”中开始使用基于jmonkeyengine和jocl的lwjgl,现在可以实时计算和绘制10万个粒子。 也许地狱版本的Jmonkey引擎可以治愈这个drawcall开销问题。

几天来,我一直在Eclipse(java 64位)学习jMonkey引擎(ver:3.0),并尝试使用GeometryBatchFactory.optimize(rootNode);优化场景GeometryBatchFactory.optimize(rootNode); 命令。

没有优化(具有改变球体位置的能力):

在这里输入图像说明

好的,只有1-fps源于pci-express带宽+ jvm开销。

通过优化(无法改变球体的位置):

在这里输入图像说明

现在即使增加三angular形数字也是29 fps。

Java3D有一个setCapability()方法,它使得一个场景对象能够被优化的forms读写。 jMonkey引擎3.0必须能够这个主题,但我找不到任何痕迹(search教程和示例,失败)。

问题:如何在jMonkey 3.0中设置场景optimized节点的read/write position/rotation/scalefunction? 如果你不能回答第一个问题,你能告诉我为什么我使用优化命令时三angular形数字增加了吗? 我必须创build一个新的方法来访问graphics卡,并自己改变variables(jogl也许?)?

场景信息:16k粒子(16×16分辨率的球体)+ 1分光线(及其4096分辨率的阴影)。

我相信我们可以轻松地通过pci-express在毫秒内发送几千个浮点数。

  • 附加信息:我使用Aparapi-kernels更新粒子位置需要10毫秒(16k * 16k交互来计算力量)(不会改变任何东西在优化模式:()可以aparapi访问这些优化的数据?

对于batchNode.batch(); 优化,这里是1 fps又减less对象数字:

在这里输入图像说明

对象数目现在只有几百,但fps仍然在1!

只发送球体位置到GPU,并让它计算顶点位置可能比计算CPU上的顶点,加上巨大的数据发送到CPU更好。

没有人在这里帮忙? 已经尝试过batchNode,但没有足够的帮助。

我不想改变3D API,因为JMonkey人已经改造了车轮,我很满意目前的情况。 只是试图挤一点点的performance(取消阴影提供了百分之百的速度,但质量也很重要!)。

这个Java程序将成为一个小行星撞击现场模拟器(将有select的小行星的大小,质量,速度,angular度)与行进立方体algorithm与LOD(将数百万颗粒)。

Marching-cubesalgorithm会大大减less三angular形数量。 如果你不能给出任何答案的问题,任何行军立方体(或任何O(n)凸包)algorithm的Java将被接受! 数据:x,y,zarrays为源,三angular形条阵为目标(等值面网格点)

谢谢。

以下是一些有关stream的示例(分辨率低得多):

1)由引力引起的立方体形岩体的塌陷: 在这里输入图像说明

2)排斥力开始显现出来: 在这里输入图像说明

3)排斥力+引力使组形成更加光滑的形状: 在这里输入图像说明

4)组形成一个球体(如预期): 在这里输入图像说明

5)然后,一个巨大的星体接近: 在这里输入图像说明

6)关于触摸: 在这里输入图像说明

7)影响的时刻: 在这里输入图像说明

在Barnes-Huttalgorithm和截断势能的帮助下,粒子数量将会增加10倍(也许是100倍)。

而不是Marching-Cubesalgorithm,包装nbody的鬼布料可以给出低分辨率的船体(比BH更容易,但需要更多的计算)

鬼布会受nbody影响(重力+排斥),但是nbody不会受到缠绕布料的影响。 Nbody不会被渲染,但布网将被渲染与较低的triange数。

在这里输入图像说明在这里输入图像说明

如果MC或以上的工作,这将使程序渲染约200倍的粒子的包装布。

非常抱歉….

您可以批量保持静态的场景(或子节点)中的所有几何体。

批处理意味着具有相同材质的所有几何都被组合成一个网格。 如果仅使用less量(大约最多32个)材质总数,则此优化仅起作用。 回报是在游戏初始化时分批需要额外的时间

因此,三angular形的变化是因为它们已经被组合成一个网格……唯一的build议是,如果这是必要的,试图获得网格和变化点,但在这一点上,我不认为这使得感。

也许尝试一个不同的优化方法。

祝你好运,一点都不用JMonkey,但很高兴看到其他人做,并继续增长!

编辑

顺便说一句,尽量减lessmath的方法可能是使用半个球体的立方体,对地球的影响可能不会影响另一方(除非球体不是地球,而是地球的一小部分样本)一个球体)…

也许尝试2D形状作为冲击面,但我知道这不是你最好的select,它可能会让你知道形状的数量可能会有多大的影响和多大。 如果是这样,那么一条途径可能就是考虑如何去除一些粒子,如果不是的话,你就不用担心。 我几乎肯定会的。

最后:

也许不要实时渲染? 花一分钟把帧画到缓冲区然后播放,到播放的时候你将会有另外的40帧左右的帧等等,也许大概30秒的价值是你所需要的。

在JMonkeyEngine wiki中有一套相当扎实的文档,它介绍了如何利用所提到的转换,这些转换可以在这里find: 高级空间概念 。

此外,还有相当多的关于网格和它们的渲染的信息,您可以在这里查看: 多边形网格 。

Interesting Posts