jMonkey优化类似于Java3D的

hus*_*sik 34 java opengl java-3d jmonkeyengine aparapi

编辑:为了进行实时绘图,在opengl和opencl之间的"互操作性"中开始使用ljjgl(jmonkeyengine和jocl的基础),现在可以实时计算和绘制100k粒子.也许mantle版本的jmonkey引擎可以解决这个drawcall开销问题.

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

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

在此输入图像描述

好的,只有1-fps来自pci-express带宽+ jvm开销.

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

在此输入图像描述

现在即使三角形数量增加也是29 fps.

Java3D有一种setCapability()方法,即使在优化的形式下也能够读/写场景对象.jMonkey引擎3.0必须能够满足这个主题,但我找不到它的任何痕迹(搜索过的教程和示例,失败了).

问题:如何在jMonkey 3.0中设置场景节点的read/write position/rotation/scale功能optimized?如果你不能回答第一个问题,你能告诉我为什么在使用优化命令时三角数会增加吗?我是否必须创建一种新方法来访问图形卡并自己更改变量(可能是jogl?)?

场景信息:16k粒子(16x16 res的球体)+ 1点光源(以及4096分辨率的阴影).

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

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

对于batchNode.batch();优化的情况,这里再次使用减少的对象数1 fps:

在此输入图像描述

对象编号现在只有几百个,但fps仍然是1!

将球体位置发送到gpu并让它计算顶点位置可能比计算cpu上的顶点以及向gpu发送大量数据更好.

这里没有人帮忙吗?已经尝试过batchNode但没有帮助.

我不想改变3d api,因为jMonkey人已经重新发明了轮子,我对目前的情况很满意.只是试图挤出更多的性能(取消阴影给出100%的速度,但质量也很重要!).

这个java程序将成为一个小行星撞击场景模拟器(将有小行星大小,质量,速度,角度的选择)与带有LOD的行进立方体算法(将是数百万个粒子).

Marching-cubes算法会大大减少三角形数.如果你无法回答这个问题,那么任何行进立方体(或任何O(n)凸包)算法都将被接受!数据:作为源的x,y,z数组和作为目标的三角形条形阵列(等面网格点)

谢谢.

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

1)通过引力折叠立方体形状的岩石组: 在此输入图像描述

2)排斥力开始显现: 在此输入图像描述

3)排斥力+引力使得组形成更平滑的形状: 在此输入图像描述

4)组形成一个球体(如预期的那样): 在此输入图像描述

5)然后,一个大的恒星身体接近: 在此输入图像描述

6)即将触摸: 在此输入图像描述

7)影响的时刻: 在此输入图像描述

借助Barnes-Hutt算法和截断电位,粒子数将增加10倍(可能超过100倍).

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

鬼布会受到nbody(重力+排除)的影响,但是不会受到包裹它的布的影响.Nbody不会被渲染,但布料网格将以较低的triange数量渲染.

在此输入图像描述 在此输入图像描述

如果MC或以上工作,这将使程序渲染一个包裹布,大约200倍的粒子.

msj*_*121 4

非常抱歉....

您可以对保持静态的场景(或子节点)中的所有几何图形进行批处理。

批处理意味着具有相同材质的所有几何图形被组合成一个网格。仅当您仅使用少量(大约最多 32 种)材质时,此优化才会产生效果。代价是游戏初始化时批处理需要额外的时间

因此,三角形的变化是因为它们已全部组装成一个网格......如果有必要,唯一的建议是尝试获取网格并更改其上的点,但在这一点上我认为它不会使感觉。

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

祝你好运,有一段时间没有使用 JMonkey,但很高兴看到其他人使用 JMonkey 以及它的持续增长!

编辑

顺便说一句,一种最小化数学的方法可能是使用半个立方体球体,对地球的影响可能不会影响另一面(除非球体不是地球,而是已经作为地球的一个小样本)一个球体)...

也许尝试使用二维形状作为影响表面,尽管我知道这不是您的最佳选择,但它可能会让您了解形状的数量如何产生影响以及影响有多大。如果确实如此,那么一个途径可能是考虑如何去除一些颗粒,如果没有,您不必担心。我几乎肯定会的。

最后:

也许不实时渲染?花一分钟将帧绘制到缓冲区然后播放,当您播放时,您将拥有另外 40 个左右的帧等......也许大约 30 秒的时间就足够了。