我正在寻找一个伪随机数生成器,当它在生成每个数字之前被赋予种子时,它将专门用于快速工作。到目前为止,我见过的大多数生成器都假设您设置一次种子,然后生成一长串数字。到目前为止,唯一看起来与我看到的有点相似的是 Perlin Noise,但它生成的数据过于“平滑”——对于类似的输入,它往往会产生类似的结果。
生成器的声明应该类似于:
int RandomNumber1(int seed);
或者:
int RandomNumber3(int seedX, int seedY, int seedZ);
我认为拥有良好的 RandomNumber1 就足够了,因为可以通过散列其输入并将结果传递给 RandomNumber1 来实现 RandomNumber3,但我编写了第二个原型,以防某些实现可以使用独立输入。
此生成器的预期用途是将其用于程序内容生成器,例如通过将树木放置在网格中并确定每个位置的随机树种和随机空间偏移来生成森林。
生成器需要非常高效(低于 500 个 CPU 周期),因为在渲染过程中会实时大量创建程序内容。