Ahoj všichni, tady AL. Vítejte u prvního nahlédnutí do zákulisí Mortumuse.
Zatímco Fin je pohřbený v serverových dolech a zápasí s databázemi, předplatnými a vším tím děsivým čarováním s distribuovanými systémy, které udržují svět naživu, já jsem na druhém konci a starám se o to, aby každý švih mečem, krok, záblesk pochodně a kus brnění vypadal a cítil se správně na vaší obrazovce.
Stavba dark fantasy MMO není něco, co si poskládáte drag-and-dropem z asset storu. Ten drsný, oldschoolový pocit, o který usilujeme — tíha boje, vrzání brnění, hrůza při spatření dalšího hráče na obzoru — vznikne jedině tehdy, když jsou nástroje pod tím postaveny přímo pro to. Takže dnes odkrývám oponu nad pár vlastními Unity systémy, které jsme na klientské straně slepili dohromady: těmi, které nikdo nikdy neuvidí, ale které všichni pocítí.
Jdeme na to.
Vizuály, loot a PvP soukromí
Pokud existuje jedna pravda o MMO hráčích, je to tahle: milujeme výbavu. A ve full-loot PvP hře jako je Mortumus není výbava jen dávka dopaminu — je to informace. To, co má někdo na sobě, vám prozradí, co vám může udělat.
Tajemství v bezpečí — Equipment Visualizer
Brzy jsme si uvědomili, že máme problém, který spousta MMO tiše ignoruje: pokud klient zná přesné item ID každého kusu výbavy na každém hráči v dohledu, odhodlaný cheater si to může vytáhnout z paměti a znát vaše přesné staty dřív, než se rozhodne vás ganknout.
Takže náš Equipment Visualizer dělá něco trochu paranoidního. Pro vaši vlastní postavu čte z plné služby výbavy — vidíte o své výbavě všechno. Ale pro každého jiného hráče čte pouze ořezaný "vizuální" blob, který server publikuje. Vidíte meč, ne tabulku statů. Item ID cizích hráčů prostě nikdy neopustí Finův server.
Drobnost. Taky to ale dělá memory-scraping cheaty výrazně méně užitečné. Dobrý obchod.
Animační stack
Bojový systém založený na skillu stojí a padá s animacemi. Pokud nečtete nápřah, nemůžete reagovat. Pokud zásah nedopadne, boj působí beztížně. Pokud smrt vypadá jako by se model prostě… vypnul, ztratíte polovinu atmosféry.
Player Animation Coordinator
Začali jsme jako většina: jedna obrovská třída animačního kontroleru, která se snaží spravovat všechno. Pohyb, kouzla, smrt, zásahy, idle — všechno v jednom souboru. Asi za dva týdny to byl chaos.
Takže jsme to rozbili na části. Teď je Player Animation Coordinator malý vstupní bod, který spouští sadu malých specializovaných modulů: pohyb, rotace, útok, kouzlo, reakce na zásah, smrt, idle. Každý se stará o jednu věc. Každý je čitelný sám o sobě. Hledání bugů zabere minuty místo hodin.
Čistší kód pro mě. Ostřejší boj pro vás.
Responzivita boje — Attack Animator & Spell Animator
Tady je ten klasický MMO problém: server-autoritativní boj je jediný způsob jak zastavit cheatování, ale čekání na potvrzení serveru u každého castu se cítí jako melasa.
Náš Spell Animator trochu podvádí — ale poctivě. Když zmáčknete klávesu kouzla, animace castu se přehraje okamžitě — lokálně predikovaná, takže to cítíte jako instant. Pak Finův server zvaliduje, jestli byl cast skutečně legální (cooldown hotový, dost many, platný cíl atd.). Pokud potvrdí, nic se nemění. Pokud odmítne, čistě z toho vyklouzneme.
Attack Animator dělá stejný tanec pro melee a navíc škáluje rychlost švihu tak, aby odpovídala kadenci útoků, kterou server přiřadí vaší zbrani. Vaše oči vidí responzivní boj. Server vidí svět, kterému se nedá lhát.
Ten sladký bod mezi "cítí se dobře" a "hraje férově" je přesně místo, kde celá tahle hra žije.
Zvuky říše
Audio je 50 % atmosféry a lidé vždycky podceňují, kolik práce to dá.
Budování atmosféry — Audio Manager & Music Region System
Tradiční hry mění hudbu tvrdým střihem, když překročíte neviditelnou čáru. Je to trhavé. My to děláme pomocí 3D polygonových zón. Music Region System nám umožňuje malovat do světa oblasti libovolného tvaru — strašidelný háj, prokletá kaple, přístup k bossovi — a jak procházíte dovnitř a ven, Audio Manager plynule crossfaduje soundtrack. Žádné střihy. Žádné restartování stejné skladby, když šlápnete přes hranici.
A protože to celé běží přes poolované audio zdroje s routingem přes skupiny mixeru, stojí to v podstatě nic na rozpočtu snímků.
Character Audio Manager
Každý krok v Mortumuse je navázaný na animaci vaší postavy a povrch pod vámi — kámen zní jako kámen, bláto jako bláto. Zvuky kouzel jsou vázané na schopnost, švihy zbraní na zbraň. Character Audio Manager sedí mezi animačními eventy a Audio Managerem, takže můžeme měnit SFX balíčky podle rasy/třídy bez zásahu do herního kódu.
Maličkosti. Spousta jich. Sčítají se.
Na břehu vody
Každý dark fantasy svět má vodu. Bažiny, řeky, zatopené ruiny, moře na kraji prokletého mysu. A voda je jedna z těch věcí, které snadno vypadají falešně — zvlášť tam, kde se setkává se zemí. Ta ošklivá polygonální vodní linie, kde se mesh protíná s terénem, je poznávací znamení laciné hry.
Náš základ pro vodu
Vodu jsme nestavěli od nuly. Unity ve skutečnosti dodává fantastický demo projekt Boat Attack, který obsahuje jeden z nejlepších URP vodních systémů — reálné odrazy, lom světla, vztlak, prostě všechno. Takže jsme začali s vodou z Boat Attacku jako základem, protože vynalézat to kolo znovu by nás stálo měsíce bez reálného přínosu.
Jenže Boat Attack byl postavený pro, no… lodě. Hezké čisté oceánské pobřeží. Chování pobřeží, které vypadá skvěle na písečné pláži, vypadá hrozně kolem blatitých, rákosových, nepravidelných vodních cest, které v Mortumuse skutečně chceme. Takže jsme museli jít chirurgicky.
Vlastní shader — Water Shoreline
Místo přímé editace Unity balíčku (což by se rozbilo s každou aktualizací) jsme napsali tenký vlastní shader "WaterShoreline", který vyměňuje jen tu část pipeline, která se stará o břeh. Všechno ostatní — odrazy, flow mapy, kaustika — jde přímo z Boat Attacku. Přepisujeme jen to, co potřebujeme.
Dvě velké změny:
Tvrdý 2metrový cutoff pěny je pryč. Výchozí pás pěny v Boat Attacku má fixní hloubkový cutoff, který vám dá ten uniformní "bílý prstenec" kolem každého břehu. Nahradili jsme ho měkčím útlumem plus scrollujícím šumovým polem, takže pěna teď postupně mizí a rozpadá se do organických jazyků a prstů místo dokonalé stuhy.
Měkká alfa břehové linie. Ten problém polygonální vodní linie proti terénu? Fadeujeme samotnou vodu do průhlednosti přes poslední půlmetr hloubky. Vodní linie úplně zmizí. Terén prostě tmavne, jak jde pod vodu, přesně tak, jak to dělá skutečný mokrý břeh.
Náš říční systém
S vodou z Boat Attacku je to takhle: rovnou z krabice zvládá oceány krásně, ale vlastně neví, co je řeka. Voda se může vlnit na místě, ale nemůže téct po proudu a kolem zatáčky jako skutečná řeka. To je problém, když polovina vašeho dark fantasy světa má být bažinatá, říční a nasáklá.
Takže jsme na tom postavili říční systém.
Řeka v Mortumuse je vytvořena jako cesta toku — jednoduchá lomená čára bodů, která sleduje páteř řeky od pramene k ústí. Designéři pokládají body tam, kam chtějí, aby voda tekla, a shader udělá zbytek: pro každý pixel vodní plochy zjistí, který segment cesty toku je nejblíž, a použije jeho směr jako lokální proud. Výsledek: voda u rovného úseku teče rovně, voda na vnitřní straně zatáčky se stáčí se zatáčkou a všechno mezi tím plynule přechází.
Textury, normály a pěna se posouvají ve směru toku místo bezcílného plování. Skutečně vidíte, jakým směrem řeka teče.
Všechno se dá ladit živě ze ShoreFoamTuner, malé inspector komponenty, kterou hodíme do jakékoli scény s vodou. Slidery pro měkkost pěny, škálu šumu, sílu šumu, rychlost driftu, alfa útlum. Změňte náladu celého jezera bez toho, abyste se dotkli materiálu.
Komunita a trash talk: Chat & sociální systémy
Oldschoolové MMO je stejně tak o lidech jako o hře. Pokud sociální nástroje působí špatně, svět působí prázdně.
Overhead Chat System
Text ukotvený přímo nad hlavou postavy, sledující ji při pohybu, mizející s vzdáleností — to je absolutní klasika žánru a něco, za co jsme ochotni položit život.
Promění skupiny ve skutečné konverzace. Umožní vám trash talkovat někoho uprostřed boje. Umožní, aby poslední slova umírajícího hráče byla něco hloupého a vtipného místo řádku systémového logu. Overhead Chat System řeší pooling, distance culling a sledování ukotvení, takže to škáluje i když dvacet lidí na sebe křičí v těsném dungeonu.
Vypadat k světu
Buďte upřímní — strávíte trapně moc času na obrazovce postavy. Všichni to děláme. Je to nejhezčí zrcadlo ve hře.
Systém náhledu postavy
Naše figurka není předrenderovaný 2D obrázek — je to živá 3D scéna renderovaná do UI render textury. Plné osvětlení, reálná geometrie, každý kus výbavy na vás v reálném čase. Otáčejte, zoomujte, zírejte. Je to typ funkce, která vůbec nemění gameplay, ale naprosto mění to, jak se hra cítí jako vaše.
Plnění tašek: Icon Studio
Tady je špinavé malé tajemství vývoje MMO: ikony. Potřebujete jich stovky. Každý meč, každý lektvar, každý kus odpadového lootu z truhly potřebuje svůj vlastní malý čtvereček 64x64, který je čitelný v přeplněném inventáři. A všechny musí vypadat, jako by patřily do stejné hry.
Nemůžete jen vyfotit 3D model a říct si, že hotovo. Osvětlení musí být konzistentní. Úhel kamery musí být konzistentní. A — tohle je ta část, kterou všichni podceňují — rámování musí odpovídat velikosti mřížky, kterou předmět zabírá v inventáři. Dýka 1x1 a velký meč 2x3 potřebují naprosto odlišné kompozice, jinak oba vypadají špatně.
Naše řešení: Icon Studio
Icon Studio je vlastní okno Unity editoru, které jsme postavili, aby jeden člověk (obvykle já, mumlající) mohl vychrlovat stovku konzistentních ikon bez ztráty příčetnosti.
Workflow: vhoďte seznam item prefabů. Řekněte nástroji, jakou velikost mřížky každý zabírá v inventáři — 1x1, 2x2, 2x3, 1x4, cokoli. Zarámujte kameru jednou. Uložte rámování jako preset. Zmáčkněte Generate.
Kouzlo je v tom, že velikost mřížky není kosmetická — řídí skutečný render. 2x3 předmět se renderuje v 2x šířce a 3x výšce (ze základu 512px), takže když sedí ve vašem inventáři, proporce jsou správné, ne roztažené. Dlouhý meč skutečně vyplní slot 1x4 diagonálně. Lahvička lektvaru se skutečně vejde do 1x1. Inventář vyvolává pocit, že organizujete reálné předměty.
Navíc nástroj řeší: průhledná nebo vlastní pozadí pro každý předmět, zachycení póz kostí, aby předměty založené na kostře mohly uložit svou zobrazovací pózu bez narušení herního rigu, a presety pro celé kategorie předmětů — všechny sekery se renderují se stejnou kamerou, všechny lektvary s jinou. Konzistence zadarmo.
Výsledek je, že každá ikona ve hře — ty, které se dobře čtou na 32 pixelech v husté inventářové mřížce — byla renderována ze skutečného herního modelu, ve tvaru, jaký předmět skutečně zabírá ve vašem batohu. Žádné outsourcované 2D arty. Žádné nekonzistentní osvětlení. Žádná dýka, která v UI nějak vypadá větší než velký meč.
Je to typ nástroje, který nikdo nevidí. Je to taky důvod, proč inventář nevypadá jako pytel nesourodého stock artu.
Do příště
Žádný z těchto systémů není hlavní tahák Mortumuse. Nikdo nekoupí hru proto, že kroky zní hezky nebo proto, že kostlivci explodují do fyzikálních kousků. Ale tohle jsou kosti pod vším — neviditelná práce, díky které ty velké věci působí správně, když na ně dosednou.
S tímto základem na místě můžeme s Finem stavět ten ponurý, brutální, full-loot svět, který jsme dva roky načrtávali do sešitů — tempem, při kterém nás nepřepadne chuť hodit počítače do řeky.
— AL