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