跨 Godot 版本的确定性 OpenSimplexNoise

Deterministic OpenSimplexNoise across Godot versions

对于给定版本的 Godot,您可以使用 seeddocumentation)确定性地生成 OpenSimplexNoise

然而,在 documentation for RandomNumberGenerator 中有以下内容:

Note: The underlying algorithm is an implementation detail. As a result, it should not be depended upon for reproducible random streams across Godot versions.

描述了上述问题的一些解决方法here,简短的回答是编写一个自定义的便携式 RNG。

有没有办法为 OpenSimplexNoise 插入自定义 RNG 来管理确定性?还有其他解决方案吗?

Godot 开发人员警告您,他们可能会决定更改 RandomNumberGenerator 以用于将来的版本(并且已经发生了一些更改)。

不,您不能为 OpenSimplexNoise.

插入自定义随机数生成器

总之,OpenSimplexNoise不使用RandomNumberGeneratorrand。相反,它将此库作为 git 模块:smcameron/open-simplex-noise-in-c.

OpenSimplexNoise有变化吗?很少。然而,Godot 4 和 3.4 在 OpenSimplexNoise 中有一个重大变化:轴已被交换(这是一个修复)。


所以这导致我们添加自定义噪声解决方案。这可能是 C# 或 GDScript 的 OpenSimplex 噪声端口。

参见 open-simplex-noise.c from Godot source and digitalshadow/OpenSimplexNoise.cs(这是 C# 的端口,评论中也链接了一些其他端口)。


对于纹理,有几个选项:

  • 您可以创建一个绘制图像的脚本(我建议使用 lockbits)并进行设置。
  • 或者您可以扩展 Viewport(包括向场景添加 Viewport 并附加脚本)。然后你利用ViewportTexture,你可以利用着色器来创建你想要的纹理。以BastiaanOlij/godot-noise-texture-asset为参考。