2026

Es uzbūvēju savu Minecraft — un sapratu, kāpēc Minecraft ir uzbūvēts tieši tā

Šogad es veidoju Antica — spēli Minecraft garā: vokseļu pasauli no blokiem, procedurālu reljefu, būves.

Antica: upes krasts un kalni

Antica, 2026. gada februāris: procedurāls reljefs — upe, tās krasts un kalni.

Sprauga pie ūdens. Veselu dienu pavadīju pie viena sīkuma: kad nolaižies ūdenī, ekrānā nedrīkst būt spraugas starp ūdeni un ne-ūdeni. Kamēr kamera šķērso virsmu, daļa kadra jau ir zem ūdens, bet daļa vēl virs tā, un robeža starp tām parasti saplīst. Es izdomāju viltīgu algoritmu, kas balstīts uz plakņu krustošanos — ūdens plaknes un kameras tuvās plaknes —, un robeža kļuva tīra. Pašā Minecraft, cik redzu, sprauga joprojām ir.

Kamera uz ūdens virsmas Unity redaktorā

Atkļūdošana Unity redaktorā: kamera atrodas tieši uz ūdens virsmas, tās redzamības piramīda dzeltenā krāsā.

Kameras plakņu krustošanās

Tas pats algoritms atkļūdošanā: kameras piramīda sarkanā krāsā un daudzstūris, kas iznāk no plakņu krustošanās.

Tad es tiku galā ar pārējo: pasaules sadalīšanu gabalos (chunks), apgaismojumu, reljefa un būvju ģenerēšanu. Un nonācu pie secinājuma, ka šeit labāk par Minecraft īsti nevar. Visi viņu lēmumi ir saistīti cits ar citu.

Apgaismojums. Tā nav staru izsekošana, bet aizpildīšana no gaismas avota aptuveni 16 bloku attālumā: gaisma izplatās no bloka uz bloku un dziest. Tas notur līdzsvaru — pietiekami ātri, lai darbotos, ar pieņemamu kvalitāti.

Gabali visas pasaules augstumā. Šķiet loģiskāk taisīt gabalus 16×16×16. Bet apgaismojumam vienmēr jāzina, kurš bloks ir pats augšējais: kur beidzas debesis. Es patiesībā tā arī sāku — ģenerēju 16 bloku kubus, domādams, ka virsmu varēšu apiet pa savienotiem gabaliem. Bet to nevar garantēt: reljefa formula var izdot kaut ko vēl augstāk, virs „griestiem”, un tad nevar pateikt, vai atrodies alā. Tāpēc gabals jāģenerē vesels, visas pasaules augstumā — tas sarežģī lietas, bet citādi gaismu nevar aprēķināt.

Gabali atkļūdošanas skatā, skatoties no pasaules apakšas

Ģenerēšana pa gabaliem atkļūdošanas skatā, skatoties no pasaules apakšas: rāmji ir gabali.

Ciemati un idempotence. Būves ir atsevišķs stāsts. No kuras puses spēlētājs arī nenāktu, ciematam šajā vietā jāiznāk vienādam. Bet ciemats netiek būvēts pēc formulas no reljefa, kā pats reljefs: tas aug rekursīvi no viena punkta — ielas, mājas un viss pārējais. Tātad šī punkta koordināta jāzina iepriekš, un šī koordināta ir iestrādāta reģionā.

Bloks, gabals, reģions. Arī glabāšana sanāca loģiska: hierarhija bloks → gabals → reģions, un reģions tiek saglabāts vesels vienā failā. Nekas starp tiem nav vajadzīgs.

Un atsevišķi — cieņa pret optimizāciju, ko Minecraft izdarīja, pārstrādājot alas. Var redzēt, cik ātri tas viss darbojas un ka viņi tajā patiešām ieguldīja darbu. Izskatās, ka zem pārsega viņiem tomēr ir mazāki gabali — tīri tehniski, lai mešeris ar tiem varētu ātri strādāt.

Ko es no tā paņēmu: pirms izdomāt savu, noskaidro, kāpēc līderis to izdarījis tieši tā. Minecraft viens lēmums ievelk nākamo: apgaismojums nosaka gabala augstumu, būvju ģenerēšana — reģionu, bet reģions — glabāšanas formātu.