- Омелянчук Тимур - Славетний, Величний, Шляхентний, Геніальний сер Тимур I. Головний ентуізаст цього проекту. Організатор масових репресій в країнах Варшавського договору. Самотушки написав Perlin Noise в перший день проекту (а це тіпу нічого собі).
- Оксентюк Олександр - Сумлінний, Справедливий, Далекоглядний лорд Олександр. Генератор ідей. Зробив сайт та все що його стосується.
- Арламовська Олеся - Легендарна, Незламна, Мудра міні Олеся. Робила презентацію, поки інші були на парах. Творець системи генерації біомів.
- коновал северин - сігма сігма бой. Неймовірна людина, яку до того ж змусили писати звіт. Організатор найбільшої суперечки в групі та робитель клітинних автоматів.
- Данилків Павло - no comments.
Проєкт може працювати у двох режимах: як веб-додаток (інтерактивно) та як консольна утиліта (CLI) для пакетної генерації.
Просто перейти за посиланням -> https://genplan.pp.ua (після захисту працювати не буде, бо ми бідні студенти, пожалійте)
Запуск через Docker. Перейдіть у папку site та виконайте команду:
cd site
docker compose up --buildПісля успішного запуску відкрийте у браузері http://localhost:5000. У бічній панелі ви зможете налаштувати параметри (Subdivisions, Noise, Seed) та побачити генерацію планети в реальному часі.
Для генерації та збереження результатів локально (у корінь проєкту). Потрібен Python 3.10+ та встановлені залежності з requirements.txt.
Експорт 2D-карти (PNG):
python src/main.py --seed 67 --radius 3 --subdivisions 7 --format png --output my_mapЕкспорт 3D-моделі (OBJ):
python src/main.py --seed 777 --radius 3 --subdivisions 7 --format obj --output my_planetВ основі генерації поверхні лежать ключові концепції дискретної математики:
-
Теорія графів: Тривимірна сітка (ікосфера) моделюється як неорієнтований граф
$G = (V, E)$ , де$V$ — множина вершин, а$E$ — множина ребер. Для роботи алгоритмів (зокрема тектоніки) будується список суміжності, що дозволяє за$O(1)$ знаходити сусідів будь-якої вершини. -
Топологія та Ейлерова характеристика: Ікосфера є триангульованим планарним графом (розгорнутим на сферу), який задовольняє формулу Ейлера:
$V - E + F = 2$ (LOL). - Детерміновані Хеш-функції: Для забезпечення того, щоб один і той самий сід генерував однакову планету на будь-якому ПК, використовується кастомний безстанний генератор псевдовипадкових чисел (Stateless PRNG) з побітовими зсувами (Avalanche effect).
Для формування великих континентів та океанів (макрорельєфу) використовуються Клітинні автомати (Cellular Automata), які симулюють рух тектонічних плит.
- Ініціалізація: На графі випадково обираються "епіцентри" тектонічних плит. Їм призначається випадкова цільова висота (океанічна впадина або материковий щит).
- Flood Fill (Поширення): Процес розширюється графом (широкий пошук BFS). На кожній ітерації активні клітинки "захоплюють" своїх вільних сусідів, передаючи їм свої властивості.
- Зіткнення (Колізії): Коли дві плити зустрічаються, алгоритм розраховує змішування їх висот, створюючи "шви" — гірські хребти або розломи.
- Переваги: Автомати формують більш природні, "рвані" та органічні обриси континентів (подібні до реальної географії). Вони відмінно імітують фізичний процес тектоніки плит та взаємодію на кордонах.
-
Недоліки: Значно важчі в обчисленні — складність
$O(V \cdot iterations)$ . Вимагають зберігання графа суміжності у пам'яті. Їх важко розпаралелити, оскільки стан кожної клітини залежить від її сусідів.
На згенеровані континенти накладається Шум (Perlin Noise) для створення дрібних деталей: гір, пагорбів, нерівностей.
Замість класичної 2D розгортки (яка створює "стягування" полюсів), алгоритм оцінює шум безпосередньо у 3D Декартовому просторі за координатами вершини
Для реалізму використовується метод накладання кількох "шарів" шуму (октав):
- Octaves (Октави): Кількість шарів.
- Lacunarity (Лакунарність, зазвичай 2.0): З кожною октавою частота шуму подвоюється (деталі стають дрібнішими).
- Persistence (Персистенція, зазвичай 0.5): З кожною октавою вплив (амплітуда) шару зменшується вдвічі.
Кінцева формула:
-
Переваги: Шум оцінюється за
$O(1)$ для будь-якої точки в просторі, не вимагає графа суміжності. Шум генерує нескінченну кількість деталей без збільшення витрат пам'яті. - Недоліки: Шум не має "глобальної структури". Якщо використовувати тільки його, планета виглядатиме як набір випадкових плям без логічних континентів чи ліній гірських хребтів.
Симбіоз алгоритмів: Саме тому проєкт використовує обидва підходи. Автомати створюють логічний каркас континентів, а шум заповнює цей каркас деталями.
Останній крок генерації — розрахунок клімату. Біом вершини визначається на основі перетину двох факторів:
-
Температура: Визначається близькістю до екватора (абсолютне значення
$Y$ ) та висотою (Altitude/Lapse rate — гори завжди холодні). - Вологість: Найвища біля екватора та океанів, спадає у глибині континентів.
Перетин цих даних через 2D-таблицю (Lookup Table) формує реалістичне забарвлення: Низька висота - Океан. Екстремальний холод - Сніг або Тундра. Теплий клімат - розподіл між лісами та пустелями.
Щоб планета генерувалась та відображалась у браузері без зависань:
- Numba JIT: Усі складні цикли та математичні функції Python компілюються у машинний код, прискорюючи виконання до рівня C/C++.
- Binary Packing: Flask-сервер не серіалізує масиви у важкий JSON.
numpyмасиви конвертуються в сирі байти (.tobytes()) і передаються через WebSockets. - Three.js BufferGeometry: Фронтенд напряму вантажить отримані байти у буфери відеокарти (WebGL), виконуючи анімацію перетворень (Morphing) між етапами тектоніки, шуму та фарбування.
архітектура - перлін нойз - аргпарс - перекус - генерація планет - біоми - сон - тектоніка
-
[ Тимур ] - Враження неймовірні, враження, що ми все на колінкі робимо. Ну, тема — класна, Перлін нойз — класний, клітинний автомат — нафіг він тут взагалі існує я не знаю.
-
[ Олеся ] - Мені дуже подобається шукати фотки людей.
-
[ Олеся ] (дубль 2) - Дуже чудовий проект, мені дуже подобається наааш сайт, воно виглядає дуже потужно, дуже класні каляри, бо я їх вибирала, іі всьо. Ну, чудовий проект. Чудова дрім тім.
-
[ Олександр ] - Я не знаю, вроді нормально, я люблю коли планета генерується, не люблю коли не генерується. Мені сподобалося коли мені згенерувало об'єкт 33 міліона рядків кода і в мене комп завіс. Лол.
-
[ Павло] - no comments.
Северина нема, бо інтерв'ювера не інтерв'юють.
Лука чіл гай. чіл гай.
Завдання прикольне
У ході виконання проекту було розроблено комплексну систему процедурної генерації ландшафту планет. Реалізовано два підходи — шум Перліна та клітинні автомати, що додає поверхні планети реалістичної деталізації. Розроблено кліматичну модель, що автоматично розраховує температуру та вологість для кожної вершини, враховуючи широту (від екватора до полюсів) та висоту над рівнем моря. Створено можливість для збереження результатів у форматі 2D-карт (PNG) та повноцінних 3D-моделей (OBJ). Результати проекту та візуалізація алгоритмів інтегровані у зручний веб-інтерфейс, що демонструє роботу системи та дозволяє взаємодіяти з параметрами генерації.