Псевдослучайные миры: как создаются локации с помощью процедурной генерации и ГПСЧ
Краткое описание применимости в левелдизайне.
Автор YouTube-канала DigiDigger опубликовал познавательное видео о разнице между генераторами случайных чисел и процедурной генерацией. Он объяснил, на каких принципах строится каждый подход, а также рассказал, как всё это применяется при создании игр. Мы выбрали из видео главное.
В играх используется не настоящий рандом, а псевдо-рандом. Он отличается тем, что работает на основе конкретной формулы, которая позволяет высчитывать набор случайных чисел. Но они только выглядят случайными на первый взгляд.
Например, возьмём число пи, которое представляет собой необъятную последовательность чисел. На её основе мы создадим случайную последовательность. Так как пи — это всегда одинаковый набор чисел, то нужен такой компонент, который позволит получить случайный ряд. Seed — это именно такой компонент — число, которое влияет на то, какой получится производная последовательность.
Например, seed может обозначать, с какого числа исходной последовательности начнётся формирование производной. Поэтому, если использовать один и тот же seed на одной и той же исходной последовательности, то всегда будет получаться один и тот же результат. Чтобы это изменить, seed можно привязать к постоянно меняющейся переменной, например, к текущему времени.
Всё это важно для генераторов псевдослучайных чисел и для процедурной генерации. Несмотря на то, что эти понятия часто могут подменять друг друга, между ними есть определённая разница. В играх генераторы псевдослучайных чисел используются тогда, когда нужно создать контент на основе заранее созданных элементов. А процедурная генерация применяется в том случае, если нужно создать оригинальный контент.
Генератор псевдослучайных чисел используется, например, в The Binding of Isaac. Разработчики изначально создали игровые комнаты и весь необходимый контент, а игра самостоятельно расставляет их в случайном порядке.
Благодаря такому подходу, каждое прохождение не похоже на предыдущее, но при этом разработчики сохраняют высокий контроль над финальным качеством контента.
Процедурная генерация устроена иначе: она применяется в том случае, если нужно создать контент с нуля. При этом важное значение имеют карты шума. Для примера возьмём генерацию уровней в Terraria.
Всё начинается с определения линии горизонта.
Но полностью плоская поверхность — это не очень интересно с точки зрения геймплея, поэтому нужно найти способ сделать ландшафт разнообразнее. Чтобы решить эту проблему, и нужна карта шума.
Можно подобрать разнообразные параметры процедурной генерации, чтобы получить совершенно разные типы ландшафта. Соответственно, многое зависит от самой карты шума.
Схема пещер и подземных туннелей генерируется по сходному принципу. Главное — подобрать подходящую карту шума, рисунок которой будет напоминать ветвящиеся переходы.
Этот же подход работает ещё и в 3D-окружении. Например, карту шума можно использовать для определения высоты ландшафта.
Для создания системы пещер в 3D можно использовать сразу две карты шума. Тогда в месте пересечения оттенков разного тона появятся пустоты.
Когда ландшафт и система подземелий готовы, можно приступать к наполнению мира. И этот этап полностью зависит от условий, заданных разработчиками. Например, трава и деревья растут только на поверхности, а летучие мыши спаунятся только в подземельях.
Большое преимущество процедурной генерации заключается в том, что она позволяет создавать гигантские миры и целые галактики с миллионами звёзд. При этом всё это будет появляться по ходу прохождения и не будет занимать лишнее место на жёстком диске.
Разработчики не собираются добавлять кооператив в игру, несмотря на просьбы, — они сфокусированы на одиночном контенте.
Иммерсивная ролевая игра выйдет в Steam в 2025 году — сперва в раннем доступе.
В играх зачастую используется не рандом, а псевдорандомНет, во всех играх всегда используется псевдорандом, потому что компьютер в принципе не способен генерировать случайные числа.
Более того, в статье пишется, будто генераторы псевдослучайных чисел это что-то такое, что используется всякими рогаликами или симуляторах. Нет, генераторы используются почти во всех играх без исключения. Системы частиц зависят от генераторов, "ИИ" всех персонажей зависят от генераторов, подсчёт урона зависит от генераторов. И т.д. и т.п.
А если брать значение микросекунд таймера, тогда ведь случайное число будет зависеть от температуры процессора, а значит и от внешней среды?
Ну мне кажется, это не основная проблема статьи.
Понятно, что все алгоритмы так или иначе псевдослучайные с большим периодом.
Но с практической точки зрения их используют как случайные - инициализируют чем нибудь случайным и потом не ожидают, что они будут повторяться.
В то время как для некоторых целей, принципиально используют псевдослучайные ровно для воспроизводимости генерации. Иногда даже пишут специальные - например иерархические, или применяют алгоритмы, которые не требуют предвычислений (то есть если в ЛК алгоритме для нахождения 1001 числа нужно найти 1000 предыдущих, то в таких можно найти сразу 1001 - это удобно, если ты хочешь сгенерировать кусок вселенной с 93 по 101 км, не генерируя остальную вселенную)
Комментарий недоступен
https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BD%D0%B3%D1%80%D1%83%D1%8D%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4
Тот самый метод, который нарисован на картинке
обычно когда непонятно объясняют, это значит сами не понимают
зато, поумничали
При этом всё это будет появляться по ходу прохождения и не будет занимать лишнее место на жёстком диске.А вот изменения этих миров вполне себе будут.
Жаль и слова нет про новомодный WFC.