# Процедурна генерація в іграх: як вона працює
Source: https://thelockoftime.world/uk/blog/procedural-generation-in-games
Що таке процедурна генерація, які типи й алгоритми ігри використовують для рівнів і світів і чим вона відрізняється від випадкової генерації.


Процедурна генерація — це техніка, за якої гра створює свій вміст — рівні, ландшафт, здобич, ворогів, цілі планети — за допомогою алгоритмів і правил під час гри, а не коли дизайнер розставляє кожну деталь вручну. Подай у систему початкове число (**сід**), і вона збере новий прохідний результат, що лишається в межах, заданих дизайнерами.

Саме тому гра жанру roguelike може дати тобі інше підземелля на сотому забігу, а Minecraft — згенерувати світ із більшою площею поверхні, ніж у Землі. Нижче — що цей термін означає насправді, як алгоритми працюють простою мовою і де весь підхід дає збій.

## Що таке процедурна генерація

Слово, до якого тягнеться більшість, — це "випадковість", і саме це хибне уявлення варто прояснити першим. Процедурна генерація ближча до **дібраної випадковості**. Дизайнери будують сировину — шаблони кімнат, набори тайлів, запаси предметів, типи ворогів, правила ландшафту — і пишуть інструкції, як ці деталі поєднуються. Потім алгоритм комбінує їх, зазвичай відштовхуючись від сіда, у щось нове, що все одно дотримується правил.

Тож коли гру описують як *процедурно згенеровану*, це не означає, що розробники кинули кубики й випустили те, що випало. Це означає, що вони створили систему, яка збирає вміст на ходу, замість того щоб напряму робити кожен готовий рівень. Сід — ключова деталь: той самий сід завжди дає той самий результат, тому гравці можуть обмінюватися кодами сідів, щоб переграти точний світ друга, а розробник — відтворити помилку, знову запустивши планування, яке її спричинило.

Майстерність живе в обмеженнях. Слабка система дає кашу; сильна дає різноманіття, яке все одно відчувається задуманим.

## Процедурна генерація проти випадкової генерації

Їх вживають як синоніми, але це не одне й те саме, і саме ця різниця — уся причина, чому процедурна генерація працює.

**Випадкова генерація** обирає значення без правил. Кинь число, постав стіну, іди далі. Полишений сам на себе, цей підхід спокійно замуровує вихід за незнищенною стіною, лишає тебе в кімнаті без дверей або складає трьох елітних ворогів на стартовій клітинці.

**Процедурна генерація** огортає цю випадковість правилами й обмеженнями, застосованими до дібраних деталей. Вона все ще може кидати жереб на кімнату, але перевіряє, що є шлях від входу до виходу, що з наявною здобиччю можна перемогти, а складність потрапляє в прийнятну смугу. Випадковість — це двигун; обмеження — це кермо.

Простіше кажучи: випадковість — це підкинути монету, а процедурна генерація — підкинути її з дизайнером поруч, який каже "не цю". Кожна хороша процедурна система — це насправді набір відбійників навколо випадкового числа.

## Типи процедурної генерації

"Процедурна генерація" — це парасолька. Ігри застосовують її до дуже різних частин свого вмісту, і більшість великих ігор використовують кілька типів одночасно.

- **Рівні та підземелля.** Класичне застосування. Роуґлайки на кшталт Spelunky, [Dead Cells і The Binding of Isaac](/uk/blog/best-roguelike-games) щозабігу зшивають нове планування зі зроблених вручну кімнат, тож простір, який ти вчишся читати, ніколи не буває цілком тим самим двічі. Це природно пасує до [перманентної смерті](/uk/blog/what-is-a-roguelike), адже фіксована карта плюс остаточна смерть були б лише перевіркою пам'яті.
- **Ландшафт і світи.** Minecraft, No Man's Sky і Valheim генерують суходоли, біоми, печери й планети з математики, а не ліплять їх. Саме це робить практично нескінченні світи можливими для малої команди.
- **Здобич і предмети.** Diablo і Borderlands кидають характеристики зброї та спорядження з таблиць — базовий тип, модифікатори, рідкість — тож дві одиниці зброї "тієї самої" моделі можуть гратися цілком по-різному. Славнозвісне гасло "у Borderlands 87 мільярдів стволів" — це процедурна здобич у двох словах.
- **Текстури й моделі.** Функції шуму можуть малювати мармур, деревну текстуру, хмари чи іржу без того, щоб художник промальовував кожен піксель, і можуть розсипати каміння, траву й дерева по карті.
- **Завдання і сюжет.** Найрідкісніший і найважчий тип. Dwarf Fortress симулює цілі історії — війни, міграції, ворожнечу, — тоді як ШІ-режисер у Left 4 Dead перекроює хвилі ворогів і випадання предметів на ходу, щоб тримати напругу високою. Саме в сюжетній генерації процедурні системи найчастіше показують свої шви.

## Поширені алгоритми й техніки

Тобі не потрібно їх програмувати, щоб зрозуміти, що робить гра. Ось робочі коні, простими словами.

- **Функції шуму (Perlin, Simplex).** Замість сирих випадкових значень, що скидаються на перешкоди, шум дає плавні, природні на вигляд градієнти. Візьми його вибірку по сітці й прочитай значення як висоти — і отримаєш хвилясті пагорби, гори й долини; це хребет майже будь-якого згенерованого ландшафту, включно з Minecraft. Simplex — швидший наступник Perlin із меншим викривленням від сітки.
- **Клітинні автомати.** Почни з випадкового розсипу клітинок "стіна" й "підлога" і повторно застосовуй просте правило сусідства (клітинка стає стіною, якщо достатньо сусідів — стіни). Після кількох проходів шум осідає в органічні на вигляд печери. Це основний трюк для природних систем печер.
- **BSP і кімната-й-коридор.** Двійкове розбиття простору рекурсивно ділить прямокутник на менші прямокутники, кладе в кожен кімнату й з'єднує їх коридорами. Це надійний, читабельний метод за багатьма класичними плануваннями підземель.
- **Колапс хвильової функції.** Свіжий улюбленець. Ти даєш йому маленький зразок тайлів і правила, які тайли можуть стояти поряд із якими, і він заповнює цілу карту так, щоб кожне локальне розміщення лишалося дозволеним — наче розв'язувати судоку з художніх тайлів. Чудово підходить для цілісних містечок, підземель і візерунків.
- **L-системи.** Граматика перепису, яка починається з символу й повторно розширює його за правилами. Наведи її на розгалужені структури — і вона видасть переконливі дерева, рослини, річкові мережі й блискавки.

Більшість реальних ігор зчіплюють кілька з цих: шум для ландшафту, клітинні автомати для печер усередині нього, L-систему для лісів згори.

## Чому ігри її використовують

- **Реіграбельність.** Якщо рівні та здобич змінюються в кожному забігу, гра лишається непередбачуваною ще довго після того, як ти опанував її системи. Це серце жанру [roguelike](/uk/blog/what-is-a-roguelike) і його легшого родича — [roguelite](/uk/blog/what-is-a-roguelike).
- **Масштаб.** Побудувати вручну світ розміром із Minecraft чи No Man's Sky просто неможливо. Процедурна генерація дає змогу малій команді випустити майже нескінченний обсяг простору.
- **Обсяг пам'яті.** Згенерований світ ледь існує на диску — ти зберігаєш сід і правила, а не готові терабайти. No Man's Sky вміщає вісімнадцять квінтильйонів планет у завантаження звичайного розміру, бо зберігає рецепт, а не страви.
- **Несподіванка.** Навіть розробники не знають точно, що дасть конкретний сід, тож гра ще може здивувати тих, хто її створив.

## Компроміс

Ціна — авторський задум. Рівень, зроблений вручну, може мати продуманий ритм — тиху ділянку перед засідкою, навмисно скадрований краєвид, ворога, розставленого так, щоб заскочити тебе саме тоді, коли мало здоров'я. Згенерований міняє частину цієї майстерності на різноманіття, і за слабких обмежень результат здається шаблонним, "бездушним" чи безладним — наче пазл, складений із деталей, що не пасують одна одній.

Чесний режим збою — це світ "широкий, але мілкий": технічно нескінченний, емоційно плаский. No Man's Sky на релізі — повчальний приклад: квінтильйони планет, що починали зливатися після кількох десятків.

Тому найсильніші процедурні ігри зазвичай **гібридні**. Spelunky і Dead Cells генерують загальне планування, але збирають його з кімнат, які людина спроєктувала й налаштувала, тож кожен забіг свіжий, але кожна кімната чесна. Генератор бере на себе розташування; людина далі бере на себе майстерність усередині кожної деталі. Навіть Dwarf Fortress і Caves of Qud, десь настільки процедурні, наскільки ігри взагалі бувають, спираються знизу на написані вручну системи, графіку й правила — генератор примножує працю дизайнерів, а не замінює її. Він також змінює те, як відчуваються [смерть і перезапуск](/uk/blog/roguelike-death-mechanic): згенерований світ робить початок наново новою задачею, а не повторенням попередньої.

У KUTO: The Lock of Time — нашій грі — ми стоїмо на цьому гібридному боці спектра. Епохи, крізь які ти б'єшся — Стародавній Єгипет, доба вікінгів, неоновий кіберсіті — це зроблені вручну планування, а не повністю згенеровані, які потім варіюють, щоб сутички з Косою Кроноса й обраними тобою силами часу не розгорталися однаково щоразу. Це авторський простір із місцем для різноманіття, а не процедурна гра жанру roguelike. [Додай KUTO до бажаного в Steam](https://store.steampowered.com/app/4755510).


## FAQ
**Що таке процедурна генерація в іграх?**
Процедурна генерація — це коли гра створює вміст — рівні, ландшафт, здобич, ворогів — за допомогою алгоритмів і правил під час гри, а не коли дизайнер розставляє кожну деталь вручну. Відштовхуючись від початкового числа, яке називають сідом, система створює новий прохідний результат, що лишається в межах, заданих дизайнерами.

**Які бувають типи процедурної генерації?**
Поширені типи — це планування рівнів і підземель (ігри жанру roguelike на кшталт Spelunky), ландшафт і цілі світи (Minecraft, No Man's Sky), здобич і характеристики предметів (Diablo, Borderlands), текстури й моделі з шуму, а також завдання чи сюжетні події (Dwarf Fortress, ШІ-режисер у Left 4 Dead). Більшість ігор поєднують кілька з них.

**Чи процедурна генерація — це те саме, що випадкова генерація?**
Ні. Випадкова генерація обирає значення без правил; процедурна генерація застосовує правила й обмеження до дібраних будівельних блоків. Чиста випадковість може замурувати вихід або скласти непрохідний бій — а процедурна система гарантує, що результат прохідний і чесний у межах задуманої складності.

**Які алгоритми використовують для процедурної генерації?**
Основні — це функції шуму на кшталт Perlin і Simplex для висоти ландшафту, клітинні автомати для органічних печер, BSP і кімната-й-коридор для підземель, колапс хвильової функції для планувань із тайлів, що дотримуються локальних правил, і L-системи для розгалужених структур на кшталт дерев і річок.

**Що таке сід у процедурній генерації?**
Сід — це початкове число, яке подається в алгоритм. Той самий сід завжди дає той самий результат, тому гравці можуть ділитися кодами сідів, щоб переграти світи одне одного, а розробники — відтворити конкретне планування, щоб його налагодити.

**Чому ігри жанру roguelike використовують процедурну генерацію?**
Ігри з забігами потребують нового вмісту щоразу. Фіксована карта перетворює десятки перезапусків на вправу із запам'ятовування, тож процедурна генерація робить кожен забіг новою задачею — і саме це тримає жанр реіграбельним після сотень годин.

**Які недоліки процедурної генерації?**
Ціна — авторський задум. Рівень, зроблений вручну, може мати точний ритм та ідеально розставленого ворога; згенерований міняє частину цієї майстерності на різноманіття. За слабких обмежень вміст здається шаблонним чи безладним — тому більшість студій поєднують зроблені вручну деталі зі згенерованим збиранням.

**Чи використовує KUTO: The Lock of Time процедурну генерацію?**
KUTO стоїть на гібридному боці. Її епохи — Стародавній Єгипет, доба вікінгів, неоновий кіберсіті — це зроблені вручну планування, а не повністю згенеровані, які потім варіюють, щоб сутички з Косою Кроноса й твоїми силами часу не розгорталися однаково щоразу. Це авторський простір із місцем для різноманіття, а не процедурна гра жанру roguelike.