Я ищу генератор псевдослучайных чисел, который бы специализировался на быстрой работе, когда ему дают начальное число перед генерацией каждого числа. Большинство генераторов, которые я видел до сих пор, предполагают, что вы устанавливаете seed один раз, а затем генерируете длинную последовательность чисел. Единственное, что выглядит несколько похожим на то, что я видел до сих пор, это Perlin Noise, но он генерирует слишком «гладкие» данные - для похожих входов он имеет тенденцию давать схожие результаты.
Объявление генератора должно выглядеть примерно так:
int RandomNumber1(int seed);
Или:
int RandomNumber3(int seedX, int seedY, int seedZ);
Я думаю, что наличия хорошего RandomNumber1 должно быть достаточно, поскольку можно реализовать RandomNumber3, хэшируя его входные данные и передавая результат в RandomNumber1, но я написал 2-й прототип на случай, если какая-то реализация может использовать независимые входные данные.
Предполагаемое использование этого генератора - использовать его для генерации процедурного контента, например, для генерации леса путем размещения деревьев в сетке и определения случайных видов деревьев и случайных пространственных смещений для каждого местоположения.
Генератор должен быть очень эффективным (менее 500 циклов ЦП), потому что процедурный контент создается в огромных количествах в реальном времени во время рендеринга.