编辑:为了进行实时绘图,开始使用 lwjgl,它是 jmonkeyengine 和 jocl 在 opengl 和 opencl 之间的“互操作性”中的基础,现在可以实时计算和绘制 100k 个粒子。也许地幔版本的 jmonkey 引擎可以解决这个 drawcall 开销问题。
几天来,我一直在 Eclipse(java 64 位)中学习 jMonkey 引擎(ver: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-kernels 更新粒子位置,这需要 10 毫秒(16k * 16k 相互作用来计算力)。(在优化模式下不会改变任何东西:()aparapi 可以访问那些优化的数据吗?
对于batchNode.batch();
优化的情况,这里又是 1 fps,对象数减少:
对象数量现在只有几百,但 fps 仍然是 1!
仅将球体位置发送到 gpu 并让它计算顶点位置可能比在 cpu 上计算顶点并将大量数据发送到 gpu 更好。
没人来帮忙吗?已经尝试过 batchNode 但没有提供足够的帮助。
我不想更改 3d api,因为 jMonkey 人已经重新发明了轮子,我对目前的情况感到满意。只是想提高一点性能(取消阴影可以提高 %100 的速度,但质量也很重要!)。
这个java程序将成为一个小行星撞击场景模拟器(可以选择小行星的大小、质量、速度、角度),带有LOD的行进立方体算法(将是数百万个粒子)。
Marching-cubes算法会大大减少三角形数。如果您不能给出任何答案,那么任何用于 java 的行进立方体(或任何 O(n) 凸包)算法都将被接受!数据:x、y、z 阵列作为源,三角带阵列作为目标(等表面网格点)
谢谢。
以下是有关流的一些示例(分辨率低得多):
1) 一个立方体形岩群在引力作用下的坍塌:
2)排斥力开始显现:
3)排斥力+万有引力使团形成更光滑的形状:
4)组形成一个球体(如预期的那样):
5)然后,一个巨大的星体接近:
6)即将触摸:
7) 撞击时刻:
在 Barnes-Hutt 算法和截断势的帮助下,粒子数将增加 10 倍(可能是 100 倍)。
而不是 Marching-Cubes 算法,包裹 nbody 的幽灵布可以提供低分辨率的船体(比 BH 更容易但需要更多计算)
鬼布会受到nbody(重力+排斥)的影响,但nbody不会受到包裹它的布的影响。Nbody 不会被渲染,但布料网格将以较低的三角形计数渲染。
如果 MC 或更高版本有效,这将让程序为大约 200 倍以上的粒子渲染包裹布。