Bok svima, AL ovdje. Dobrodošli u prvi pogled iza kulisa Mortumusa.

Dok je Fin zakopan u serverskim rudnicima i bori se s bazama podataka, pretplatama i svom tom zastrašujućom magijom distribuiranih sustava koja održava svijet živim, ja sam na drugom kraju i brinem se da svaki zamah mačem, korak, treperenje baklje i svaki komad oklopa zapravo izgleda i osjeća se kako treba na vašem ekranu.

Izgradnja dark fantasy MMO-a nije nešto što možete složiti drag-and-dropom iz asset storea. Taj sirovi, oldschool osjećaj koji jurimo — težina borbe, škripanje oklopa, strah kad vidite drugog igrača na horizontu — dolazi samo kad su alati ispod svega građeni specifično za to. Zato danas povlačim zavjesu s nekoliko prilagođenih Unity sustava koje smo sklepali na klijentskoj strani: onih koje nitko nikad neće vidjeti, ali koje će svi osjetiti.

Krenimo.

Vizuali, plijen i PvP privatnost

Ako postoji jedna istina o MMO igračima, ovo je to: obožavamo opremu. A u full-loot PvP igri poput Mortumusa, oprema nije samo doза dopamina — to je informacija. Ono što netko nosi govori vam što vam može učiniti.

Drži u tajnosti, drži na sigurnom — Equipment Visualizer

Rano smo shvatili da imamo problem koji mnogi MMO-i tiho ignoriraju: ako klijent zna točan item ID svakog komada opreme na svakom igraču u vidokrugu, odlučan varalica može to izvući iz memorije i znati vaše točne statove prije nego što odluči napasti vas.

Zato naš Equipment Visualizer radi nešto pomalo paranoično. Za vašeg vlastitog lika, čita iz punog equipment servisa — vidite sve o svojoj opremi. Ali za svakog drugog igrača, čita samo pojednostavljeni "vizualni" blob koji server objavljuje. Vidite mač, ali ne i statistike. Item ID-ovi stranaca jednostavno nikad ne napuštaju Finov server.

Sitnica. Ali čini memory-scraping cheatove puno manje korisnima. Dobra razmjena.

Animacijski stack

Borba temeljena na vještini živi ili umire na animaciji. Ako zamah nije čitljiv, ne možete reagirati. Ako udarac ne pogodi kako treba, borba se čini bez težine. Ako smrt izgleda kao da se model jednostavno… isključio, gubite pola atmosfere.

Player Animation Coordinator

Počeli smo onako kako većina počne: jedna ogromna klasa animation controllera koja pokušava upravljati svime. Kretanje, čarolije, smrt, udarci, idle — sve u istom fileu. Za otprilike dva tjedna bio je totalni kaos.

Zato smo ga rastavili. Sada je Player Animation Coordinator mala ulazna točka koja pokreće skup malih, specijaliziranih modula: kretanje, rotacija, napad, čarolije, reakcije na udarce, smrt, idle. Svaki posjeduje jedan posao. Svaki je čitljiv sam za sebe. Bugovi se pronalaze u minutama umjesto satima.

Čistiji kod za mene. Preciznija borba za vas.

Responzivnost borbe — Attack Animator & Spell Animator

Evo klasičnog MMO problema: server-autoritativna borba je jedini način da se zaustavi varanje, ali čekanje da server potvrdi svaki cast osjeća se kao melasa.

Naš Spell Animator malo vara — ali pošteno. Kad pritisnete tipku za čaroliju, animacija casta se odmah pokreće — lokalno predviđena, pa se osjeća instant. Onda Finov server potvrđuje je li cast zapravo bio legalan (nije na cooldownu, dovoljno mane, valjan target itd.). Ako potvrdi, ništa se ne mijenja. Ako odbije, čisto izlazimo iz toga.

Attack Animator radi isti ples za melee, i čak skalira brzinu zamaha da odgovara kadenci kojom server kaže da vaše oružje napada. Vaše oči vide responzivnu borbu. Server vidi svijet kojem se ne može lagati.

Ta slatka točka između "osjeća se dobro" i "igra se pošteno" — tu ovaj cijeli game živi.

Zvukovi kraljevstva

Audio je 50% atmosfere i ljudi uvijek podcjenjuju koliko posla to zahtijeva.

Postavljanje atmosfere — Audio Manager & Music Region System

Tradicionalne igre mijenjaju glazbu tvrdim rezom kad prijeđete nevidljivu liniju. To je naglo. Mi to radimo s 3D poligonskim zonama. Music Region System nam omogućuje crtanje proizvoljno oblikovanih područja u svijetu — ukleti gaj, prokleta kapelica, prilaz bossu — i dok hodate unutra i van, Audio Manager glatko preliva soundtrack. Bez rezova. Bez restartanja iste pjesme ako samo prijeđete granicu.

A budući da sve ovo radi kroz poolane audio izvore s mixer-group routingom, košta praktički ništa u frame budgetu.

Character Audio Manager

Svaki korak u Mortumusu vezan je uz animaciju vašeg lika i površinu ispod vas — kamen zvuči kao kamen, blato zvuči kao blato. Zvukovi čarolija vezani su uz sposobnost, zamasi oružja uz oružje. Character Audio Manager sjedi između animacijskih eventova i Audio Managera tako da možemo zamijeniti SFX pakete po rasi/klasi bez diranja ikojeg gameplay koda.

Sitnice. Puno njih. Zbrajaju se.

Rub vode

Svaki dark fantasy svijet ima vodu. Močvare, rijeke, potopljene ruševine, more na rubu prokletog rta. A voda je jedna od onih stvari koje lako izgledaju lažno — pogotovo tamo gdje susreće kopno. Taj ružni poligonalni rub vode gdje se mesh presijeca s terenom znak je jeftino izgledajuće igre.

Naša vodena baza

Nismo gradili vodu od nule. Unity zapravo isporučuje fantastičan demo projekt zvan Boat Attack koji uključuje jedan od najboljih URP vodenih sustava — pravi odrazi, refrakcije, plutanje, sve. Zato smo krenuli s Boat Attack vodom kao temeljem, jer bi ponovno izumljivanje tog kotača koštalo mjesece bez prave koristi.

Ali Boat Attack je građen za, pa… čamce. Lijepe čiste oceanske obale. Ponašanje obale koje odlično izgleda na pješčanoj plaži izgleda užasno oko blatnih, trskovitih, nepravilnih vodotoka kakve zapravo želimo u Mortumusu. Morali smo biti kirurški precizni.

Prilagođeni shader — Water Shoreline

Umjesto uređivanja Unity paketa direktno (što bi se pokvarilo svaki put kad bismo ga ažurirali), napisali smo tanki prilagođeni shader "WaterShoreline" koji zamjenjuje samo dio pipelinea odgovornog za obalu. Sve ostalo — odrazi, flow mape, kaustike — dolazi ravno iz Boat Attacka. Prepisujemo samo ono što moramo.

Dvije velike promjene:

Tvrdi cutoff pjene od 2 metra je nestao. Defaultni foam band Boat Attacka ima fiksni depth cutoff, što daje onaj uniformni "prsten bijelog" oko svake obale. Zamijenili smo ga mekšim padom plus scrollajućim noise poljem, tako da pjena sada blijedi postupno i razbija se u organske jezičke i prste umjesto savršene vrpce.

Mekana alpha obale. Onaj problem poligonalnog ruba vode-naspram-terena? Fadeamo samu vodu u transparentnost kroz zadnjih pola metra dubine. Rub vode potpuno nestaje. Teren samo postaje tamniji kako odlazi pod vodu, onako kako prava mokra obala izgleda.

Mortumus water shoreline with soft foam and natural alpha blending

Naš sustav rijeka

Stvar je u tome da Boat Attack voda izvrsno radi s oceanima, ali zapravo ne zna što je rijeka. Voda se može mreškati na mjestu, ali ne može teći nizvodno i oko zavoja kao prava rijeka. To je problem kad bi pola vašeg dark fantasy svijeta trebalo biti močvarno, riječno i natopljeno.

Zato smo izgradili sustav rijeka povrh toga.

Rijeka u Mortumusu je autorirana kao put toka — jednostavna polilinija točaka koja prati kralježnicu rijeke od izvora do ušća. Dizajneri postave točke gdje žele da voda teče, a shader odradi ostatak: za svaki piksel vodene površine, izračuna koji je segment puta toka najbliži i koristi smjer tog segmenta kao lokalnu struju. Rezultat: voda kod ravnog dijela teče ravno, voda na unutarnjoj strani zavoja se zakreće sa zavojem, a sve prelazi glatko između.

Teksture, normale i pjena se scrollaju duž tog smjera toka umjesto da besciljno plutaju. Zapravo možete vidjeti u kojem smjeru rijeka teče.

Mortumus river with directional water flow Unity editor showing the river flow path authoring system

Sve se može podešavati uživo iz ShoreFoamTunera, male inspektor komponente koju stavimo na bilo koju scenu s vodom. Slideri za mekoću pjene, noise scale, noise strength, brzinu drifta, alpha falloff. Promijenite atmosferu cijelog jezera bez diranja materijala.

Zajednica i provokacije: Chat & društveni sustav

Oldschool MMO je jednako o ljudima koliko i o igri. Ako se društveni alati ne osjećaju dobro, svijet se osjeća prazno.

Overhead Chat System

Tekst usidren točno iznad glave lika, prati ga dok se kreće, blijedi s udaljenošću — to je apsolutni temelj žanra, i nešto za što ćemo se boriti do zadnjeg daha.

Pretvara grupe u prave razgovore. Omogućuje vam da nekome bacite provokaciju usred borbe. Čini da posljednje riječi umirućeg igrača budu nešto glupo i smiješno umjesto sistemske log linije. Overhead Chat System upravlja poolingom, distance cullingom i anchor trackingom tako da skalira čak i kad dvadeset ljudi viče jedni na druge u skučenom dungeonu.

Izgled je bitan

Budimo iskreni — potrošit ćete neugodnu količinu vremena na ekranu lika. Svi to radimo. To je najljepše ogledalo u igri.

Sustav pregleda lika

Naš paper doll nije baked 2D renderom — to je živa 3D scena renderirana u UI render texture. Puno osvjetljenje, prava geometrija, svaki komad opreme na vama u stvarnom vremenu. Rotirajte, zumirajte, gledajte. To je vrsta featurea koja uopće ne mijenja gameplay, ali apsolutno mijenja kako se igra osjeća kad je posjedujete.

Mortumus character creation screen with live 3D preview

Punjenje torbi: Icon Studio

Evo prljave male tajne MMO razvoja: ikone. Trebate ih stotine. Svaki mač, svaki napitak, svaki komad smeća koji nađete u škrinji treba svoju malu 64x64 sličicu koja se jasno čita u pretrpanom inventaru. I sve moraju izgledati kao da pripadaju istoj igri.

Ne možete samo screenshotati 3D model i reći da je gotovo. Osvjetljenje mora biti konzistentno. Kut kamere mora biti konzistentan. I — ovo je dio koji svi podcjenjuju — kadriranje mora odgovarati veličini grida koji stavka zauzima u inventaru. Bodež 1x1 i dvoručni mač 2x3 trebaju potpuno različite kompozicije ili oba izgledaju krivo.

Naše rješenje: Icon Studio

Icon Studio je prilagođeni Unity editor prozor koji smo izgradili tako da jedna osoba (obično ja, mrmljajući) može izbaciti stotinu konzistentnih ikona bez da poludi.

Tijek rada: ubacite listu item prefabova. Kažite alatu koju grid veličinu svaki zauzima u inventaru — 1x1, 2x2, 2x3, 1x4, što god. Kadrirajte kameru jednom. Spremite kadriranje kao preset. Pritisnite Generate.

Magija je u tome što grid veličina nije kozmetička — pokreće stvarni renderom. Stavka 2x3 se renderira na 2x širinu i 3x visinu (baznih 512px), tako da kad sjedi u vašem inventaru proporcije su ispravne, ne rastegnute. Dugački mač zaista ispunjava 1x4 slot dijagonalno. Bočica napitka zaista stane u 1x1. Inventar se osjeća kao da organizirate prave predmete.

Povrh toga, alat upravlja: transparentnim ili prilagođenim pozadinama po stavci, bone pose captureom tako da stavke na bazi skeleta mogu snimiti svoju display pozu bez ometanja gameplay riga, i presetima za cijele kategorije stavki — sve sjekire se renderiraju s istom kamerom, svi napici s drugačijom. Konzistentnost besplatno.

Krajnji rezultat je da je svaka ikona u igri — one koje se dobro čitaju na 32 piksela u gustom inventory gridu — renderirana iz stvarnog in-game modela, u stvarnom obliku koji ta stavka zauzima u vašoj torbi. Bez outsourceane 2D umjetnosti. Bez neusklađenog osvjetljenja. Bez bodeža koji nekako izgleda veći od dvoručnog mača u UI-ju.

To je vrsta alata koju nitko ne vidi. To je također razlog zašto inventar ne izgleda kao torba pomiješane stock umjetnosti.

Do sljedećeg puta

Nijedan od ovih sustava nije naslovni feature Mortumusa. Nitko neće kupiti igru jer koraci zvuče lijepo ili zato što se kosturi raspadaju u fizičke komade. Ali ovo su kosti ispod svega — nevidljivi rad koji čini da se velike stvari osjećaju ispravno kad sjednu povrh njih.

S ovim temeljima na mjestu, Fin i ja možemo graditi stvarni mračni, brutalni, full-loot svijet koji smo skicirali u bilježnicama dvije godine — tempom koji nas ne tjera da bacimo računala u rijeku.

— AL