Генерація мапи

Матеріал з Minecraft Wiki
Перейти до: навігація, пошук
Шкала процесу генерації мапи

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

На місці ще не згенерованої частини мапи видно корінну породу

Алгоритм генерації кілька разів змінювався. Тепер ландшафт генерується, зберігається і завантажується з диску і вимальовується шматками по 16×16×16 блоків. У кожного шматка є значення зміщення, яке зберігається у вигляді 32-бітного цілого числа і може знаходитися у діапазоні десь від -двох млн. до плюс двох млрд. Однак світ обмежений і генерується тільки у координатах блоків до 30 млн. на усі боки. Раніше цього обмеження не було і можна було вийти за межу першого діапазону (а це приблизно чверть відстані від Землі до Сонця), тоді нові чанки починали перекривати собою старі (так звані «Далекі землі»). А після того, як подолана шістнадцята частина цієї відстані, функції, що використовують цілі числа для роботи із позиціями блоків, такі як використання інструментів і пошук шляхів, почнуть дивно себе вести.

У ранніх версіях гри для додання світу форми була використана мапа висот на основі двомірного шуму Перлина. Або, якщо бути точніше, кілька мап висот. Одна для загальної висоти, одна для шорсткості ландшафту і одна для дрібних деталей. Для кожного стовпа блоків висота дорівнювала (загальна висота + (шорсткість × деталі))×64+64. Мапи загальної висоти і шорсткості були гладкими, сильно масштабованими шумами, а деталі були дрібнішими. У цього методу була чудова перевага у швидкості, оскільки треба було провести усього 16×16×(кількість_шумів) розрахунків на шматок мапи, але його недоліком був нудний ландшафт. Зокрема через неможливість генерувати над землею виступи, які нависали.

Тепер (десь з Beta 1.3) прийшлося перейти на схожу систему, що використовує тривимірний шум Перлина. Тепер вже не генерується «висота землі». Значення шуму було разглашено як «щільність», й усі блоки з щільністю менше 0 стає повітрям, а блоки із щільністю більше або дорівнювало 0 — землею. Щоб нижній шар був твердим, а верхній — ні, до отриманого підсумку додається висота (зміщення щодо рівня моря).

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

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