jMonkey优化类似于Java3D的

2022-09-01 07:03:22

编辑:为了进行实时绘制,开始使用lwjgl,这是jmonkeyengine和jocl的基础,在opengl和opencl之间的“互操作性”中,现在可以实时计算和绘制100k粒子。也许jmonkey引擎的地幔版本可以解决这个拉呼开销问题。

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

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

enter image description here

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

具有优化(无法更改球体位置):

enter image description here

现在,即使三角形数增加,它也是29 fps。

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

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

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

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

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

对于优化的情况,这里是1 fps,对象编号减少:batchNode.batch();

enter image description here

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

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

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

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

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

行进立方体算法将大大减少三角形数。如果你不能给出任何答案,任何行进立方体(或任何O(n)凸壳)算法的java都将被接受!数据:x,y,z 数组作为源,三角形条阵列作为目标(等值面网格点)

谢谢。

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

1)立方体形岩群被重力坍塌:enter image description here

2)排斥力开始显现:enter image description here

3)排除力+引力使群形成更平滑的形状:enter image description here

4)组形成一个球体(如预期):enter image description here

5)然后,一个巨大的恒星体接近:enter image description here

6)即将触摸:enter image description here

7)冲击时刻:enter image description here

在Barnes-Hutt算法和截断电位的帮助下,粒子数量将增加10倍(也许是100倍)。

与行进立方体算法不同,包裹n体的鬼布可以给出低分辨率的船体(比BH更容易,但需要更多的计算)

鬼布会受到nbody(重力+排斥)的影响,但nbody不会受到包裹它的布料的影响。不会渲染 Nbody,但布网将以较低的三角计数渲染。

enter image description hereenter image description here

如果MC或更高版本有效,这将使程序渲染约200倍的颗粒的包装布。


答案 1

很抱歉....

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

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

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

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

祝你好运,已经没有使用JMonkey了一点,但很高兴看到其他人这样做并且它继续增长!

编辑

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

也许尝试2D形状作为冲击表面,虽然我知道这不是你最好的选择,但它可能会让你了解形状的数量可能会产生什么影响以及有多宏伟。如果是这样,那么一个途径可能是考虑如何去除一些颗粒,如果不是这样,你不必担心。我几乎可以肯定它会。

最后:

也许不能实时渲染?花一分钟将帧绘制到缓冲区然后播放,当您播放时,您将有另外40个左右的帧,依此类推......也许大约30秒的价值就是你所需要的。


答案 2

在JMonkeyEngine wiki中有一组非常可靠的文档,其中讨论了很多关于如何利用你所引用的转换,可以在这里找到:高级空间概念

此外,还有相当多的关于网格及其渲染的信息,您可以在此处查看:多边形网格


推荐