加速单纯形噪声
Speed up Simplex Noise
我想制作一个 Java 程序,其中移动的天空是由 Simplex Noise 生成的,但我遇到了性能问题(帧率太低)。我正在使用 https://github.com/KdotJPG/OpenSimplex2/blob/master/java/OpenSimplex2F.java 噪声 class。
我生成天空的函数,每帧都重新生成它:
private void generate() {
float y = offset;
for (int i = 0; i < frame.getHeight(); i++) {
float x = offset;
for (int j = 0; j < frame.getWidth(); j++) {
double a = noise.noise2(x, y) + 0.25f * noise.noise2(2 * x, 2 * y) + 0.125f * noise.noise2(4 * x, 4 * y);
a = a / (1 + 0.25 + 0.125);
a = (a + 1) / 2;
a *= 100;
Color color = Color.getHSBColor(220f / 360f, a / 100f, 1f);
background.setRGB(j, i, color.getRGB());
x += noiseResolution;
}
y += noiseResolution;
}
}
其中 background
是 BufferedImage
我正在画的,offset
表示移动了多少噪音。
我试图保存每帧 background
的像素数组,并将其转换为应该移动的像素数,然后我只生成新的像素。不幸的是,因为它渲染得太快了,它应该移动的像素数量是例如。 0.2,所以我无法按分数转换数组索引。
所以我想唯一的办法是以某种方式以另一种方式生成它,但我完全不知道如何。
谢谢!
不确定 Java,但在带有 DirectX、OpenGL 或任何类似低级接口的 C++ 中,这应该可以在 HLSL (DirectX) 或 GLSL (OpenGL) 的 GPU 上轻松完成。我实现了 5D Simplex 噪声,甚至放大到它填满了我的大屏幕,在我 9 岁的电脑上,我的老旧的嗡嗡声显卡仍然每秒处理几百帧。这是它的样子。
https://www.youtube.com/watch?v=oRO1IGcWIwg
如果您可以 运行 来自 Java 的片段着色器,我认为这将是可行的方法。我认为 Java 中有一些 OpenGL 接口,因此您可能想看看它。
我想制作一个 Java 程序,其中移动的天空是由 Simplex Noise 生成的,但我遇到了性能问题(帧率太低)。我正在使用 https://github.com/KdotJPG/OpenSimplex2/blob/master/java/OpenSimplex2F.java 噪声 class。
我生成天空的函数,每帧都重新生成它:
private void generate() {
float y = offset;
for (int i = 0; i < frame.getHeight(); i++) {
float x = offset;
for (int j = 0; j < frame.getWidth(); j++) {
double a = noise.noise2(x, y) + 0.25f * noise.noise2(2 * x, 2 * y) + 0.125f * noise.noise2(4 * x, 4 * y);
a = a / (1 + 0.25 + 0.125);
a = (a + 1) / 2;
a *= 100;
Color color = Color.getHSBColor(220f / 360f, a / 100f, 1f);
background.setRGB(j, i, color.getRGB());
x += noiseResolution;
}
y += noiseResolution;
}
}
其中 background
是 BufferedImage
我正在画的,offset
表示移动了多少噪音。
我试图保存每帧 background
的像素数组,并将其转换为应该移动的像素数,然后我只生成新的像素。不幸的是,因为它渲染得太快了,它应该移动的像素数量是例如。 0.2,所以我无法按分数转换数组索引。
所以我想唯一的办法是以某种方式以另一种方式生成它,但我完全不知道如何。
谢谢!
不确定 Java,但在带有 DirectX、OpenGL 或任何类似低级接口的 C++ 中,这应该可以在 HLSL (DirectX) 或 GLSL (OpenGL) 的 GPU 上轻松完成。我实现了 5D Simplex 噪声,甚至放大到它填满了我的大屏幕,在我 9 岁的电脑上,我的老旧的嗡嗡声显卡仍然每秒处理几百帧。这是它的样子。
https://www.youtube.com/watch?v=oRO1IGcWIwg
如果您可以 运行 来自 Java 的片段着色器,我认为这将是可行的方法。我认为 Java 中有一些 OpenGL 接口,因此您可能想看看它。