Процедурна генерація — це техніка, за якої гра створює свій вміст — рівні, ландшафт, здобич, ворогів, цілі планети — за допомогою алгоритмів і правил під час гри, а не коли дизайнер розставляє кожну деталь вручну. Подай у систему початкове число (сід), і вона збере новий прохідний результат, що лишається в межах, заданих дизайнерами.
Саме тому гра жанру roguelike може дати тобі інше підземелля на сотому забігу, а Minecraft — згенерувати світ із більшою площею поверхні, ніж у Землі. Нижче — що цей термін означає насправді, як алгоритми працюють простою мовою і де весь підхід дає збій.
Що таке процедурна генерація
Слово, до якого тягнеться більшість, — це "випадковість", і саме це хибне уявлення варто прояснити першим. Процедурна генерація ближча до дібраної випадковості. Дизайнери будують сировину — шаблони кімнат, набори тайлів, запаси предметів, типи ворогів, правила ландшафту — і пишуть інструкції, як ці деталі поєднуються. Потім алгоритм комбінує їх, зазвичай відштовхуючись від сіда, у щось нове, що все одно дотримується правил.
Тож коли гру описують як процедурно згенеровану, це не означає, що розробники кинули кубики й випустили те, що випало. Це означає, що вони створили систему, яка збирає вміст на ходу, замість того щоб напряму робити кожен готовий рівень. Сід — ключова деталь: той самий сід завжди дає той самий результат, тому гравці можуть обмінюватися кодами сідів, щоб переграти точний світ друга, а розробник — відтворити помилку, знову запустивши планування, яке її спричинило.
Майстерність живе в обмеженнях. Слабка система дає кашу; сильна дає різноманіття, яке все одно відчувається задуманим.
Процедурна генерація проти випадкової генерації
Їх вживають як синоніми, але це не одне й те саме, і саме ця різниця — уся причина, чому процедурна генерація працює.
Випадкова генерація обирає значення без правил. Кинь число, постав стіну, іди далі. Полишений сам на себе, цей підхід спокійно замуровує вихід за незнищенною стіною, лишає тебе в кімнаті без дверей або складає трьох елітних ворогів на стартовій клітинці.
Процедурна генерація огортає цю випадковість правилами й обмеженнями, застосованими до дібраних деталей. Вона все ще може кидати жереб на кімнату, але перевіряє, що є шлях від входу до виходу, що з наявною здобиччю можна перемогти, а складність потрапляє в прийнятну смугу. Випадковість — це двигун; обмеження — це кермо.
Простіше кажучи: випадковість — це підкинути монету, а процедурна генерація — підкинути її з дизайнером поруч, який каже "не цю". Кожна хороша процедурна система — це насправді набір відбійників навколо випадкового числа.
Типи процедурної генерації
"Процедурна генерація" — це парасолька. Ігри застосовують її до дуже різних частин свого вмісту, і більшість великих ігор використовують кілька типів одночасно.
- Рівні та підземелля. Класичне застосування. Роуґлайки на кшталт Spelunky, Dead Cells і The Binding of Isaac щозабігу зшивають нове планування зі зроблених вручну кімнат, тож простір, який ти вчишся читати, ніколи не буває цілком тим самим двічі. Це природно пасує до перманентної смерті, адже фіксована карта плюс остаточна смерть були б лише перевіркою пам'яті.
- Ландшафт і світи. Minecraft, No Man's Sky і Valheim генерують суходоли, біоми, печери й планети з математики, а не ліплять їх. Саме це робить практично нескінченні світи можливими для малої команди.
- Здобич і предмети. Diablo і Borderlands кидають характеристики зброї та спорядження з таблиць — базовий тип, модифікатори, рідкість — тож дві одиниці зброї "тієї самої" моделі можуть гратися цілком по-різному. Славнозвісне гасло "у Borderlands 87 мільярдів стволів" — це процедурна здобич у двох словах.
- Текстури й моделі. Функції шуму можуть малювати мармур, деревну текстуру, хмари чи іржу без того, щоб художник промальовував кожен піксель, і можуть розсипати каміння, траву й дерева по карті.
- Завдання і сюжет. Найрідкісніший і найважчий тип. Dwarf Fortress симулює цілі історії — війни, міграції, ворожнечу, — тоді як ШІ-режисер у Left 4 Dead перекроює хвилі ворогів і випадання предметів на ходу, щоб тримати напругу високою. Саме в сюжетній генерації процедурні системи найчастіше показують свої шви.
Поширені алгоритми й техніки
Тобі не потрібно їх програмувати, щоб зрозуміти, що робить гра. Ось робочі коні, простими словами.
- Функції шуму (Perlin, Simplex). Замість сирих випадкових значень, що скидаються на перешкоди, шум дає плавні, природні на вигляд градієнти. Візьми його вибірку по сітці й прочитай значення як висоти — і отримаєш хвилясті пагорби, гори й долини; це хребет майже будь-якого згенерованого ландшафту, включно з Minecraft. Simplex — швидший наступник Perlin із меншим викривленням від сітки.
- Клітинні автомати. Почни з випадкового розсипу клітинок "стіна" й "підлога" і повторно застосовуй просте правило сусідства (клітинка стає стіною, якщо достатньо сусідів — стіни). Після кількох проходів шум осідає в органічні на вигляд печери. Це основний трюк для природних систем печер.
- BSP і кімната-й-коридор. Двійкове розбиття простору рекурсивно ділить прямокутник на менші прямокутники, кладе в кожен кімнату й з'єднує їх коридорами. Це надійний, читабельний метод за багатьма класичними плануваннями підземель.
- Колапс хвильової функції. Свіжий улюбленець. Ти даєш йому маленький зразок тайлів і правила, які тайли можуть стояти поряд із якими, і він заповнює цілу карту так, щоб кожне локальне розміщення лишалося дозволеним — наче розв'язувати судоку з художніх тайлів. Чудово підходить для цілісних містечок, підземель і візерунків.
- L-системи. Граматика перепису, яка починається з символу й повторно розширює його за правилами. Наведи її на розгалужені структури — і вона видасть переконливі дерева, рослини, річкові мережі й блискавки.
Більшість реальних ігор зчіплюють кілька з цих: шум для ландшафту, клітинні автомати для печер усередині нього, L-систему для лісів згори.
Чому ігри її використовують
- Реіграбельність. Якщо рівні та здобич змінюються в кожному забігу, гра лишається непередбачуваною ще довго після того, як ти опанував її системи. Це серце жанру roguelike і його легшого родича — roguelite.
- Масштаб. Побудувати вручну світ розміром із Minecraft чи No Man's Sky просто неможливо. Процедурна генерація дає змогу малій команді випустити майже нескінченний обсяг простору.
- Обсяг пам'яті. Згенерований світ ледь існує на диску — ти зберігаєш сід і правила, а не готові терабайти. No Man's Sky вміщає вісімнадцять квінтильйонів планет у завантаження звичайного розміру, бо зберігає рецепт, а не страви.
- Несподіванка. Навіть розробники не знають точно, що дасть конкретний сід, тож гра ще може здивувати тих, хто її створив.
Компроміс
Ціна — авторський задум. Рівень, зроблений вручну, може мати продуманий ритм — тиху ділянку перед засідкою, навмисно скадрований краєвид, ворога, розставленого так, щоб заскочити тебе саме тоді, коли мало здоров'я. Згенерований міняє частину цієї майстерності на різноманіття, і за слабких обмежень результат здається шаблонним, "бездушним" чи безладним — наче пазл, складений із деталей, що не пасують одна одній.
Чесний режим збою — це світ "широкий, але мілкий": технічно нескінченний, емоційно плаский. No Man's Sky на релізі — повчальний приклад: квінтильйони планет, що починали зливатися після кількох десятків.
Тому найсильніші процедурні ігри зазвичай гібридні. Spelunky і Dead Cells генерують загальне планування, але збирають його з кімнат, які людина спроєктувала й налаштувала, тож кожен забіг свіжий, але кожна кімната чесна. Генератор бере на себе розташування; людина далі бере на себе майстерність усередині кожної деталі. Навіть Dwarf Fortress і Caves of Qud, десь настільки процедурні, наскільки ігри взагалі бувають, спираються знизу на написані вручну системи, графіку й правила — генератор примножує працю дизайнерів, а не замінює її. Він також змінює те, як відчуваються смерть і перезапуск: згенерований світ робить початок наново новою задачею, а не повторенням попередньої.
У KUTO: The Lock of Time — нашій грі — ми стоїмо на цьому гібридному боці спектра. Епохи, крізь які ти б'єшся — Стародавній Єгипет, доба вікінгів, неоновий кіберсіті — це зроблені вручну планування, а не повністю згенеровані, які потім варіюють, щоб сутички з Косою Кроноса й обраними тобою силами часу не розгорталися однаково щоразу. Це авторський простір із місцем для різноманіття, а не процедурна гра жанру roguelike. Додай KUTO до бажаного в Steam.
Поширені запитання
- Що таке процедурна генерація в іграх?
- Процедурна генерація — це коли гра створює вміст — рівні, ландшафт, здобич, ворогів — за допомогою алгоритмів і правил під час гри, а не коли дизайнер розставляє кожну деталь вручну. Відштовхуючись від початкового числа, яке називають сідом, система створює новий прохідний результат, що лишається в межах, заданих дизайнерами.
- Які бувають типи процедурної генерації?
- Поширені типи — це планування рівнів і підземель (ігри жанру 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.