Ciao a tutti, qui AL. Benvenuti al primo sguardo dietro le quinte di Mortumus.
Mentre Fin è sepolto nelle miniere del server a lottare con database, sottoscrizioni e tutta quella spaventosa magia dei sistemi distribuiti che tiene il mondo in vita, io sono dall'altra parte a fare in modo che ogni fendente, ogni passo, ogni tremolio di torcia e ogni pezzo di armatura abbia davvero l'aspetto e la sensazione giusta sullo schermo.
Costruire un MMO dark fantasy non è il tipo di cosa che puoi mettere insieme con il drag-and-drop da un asset store. La sensazione grezza e oldschool che stiamo cercando (il peso del combattimento, lo scricchiolio della tua armatura, il terrore di vedere un altro giocatore all'orizzonte) emerge solo quando gli strumenti sotto sono costruiti apposta. Quindi oggi tiro su il sipario su alcuni dei sistemi Unity personalizzati che abbiamo messo insieme lato client: quelli che nessuno vedrà mai, ma che tutti sentiranno.
Partiamo.
Grafica, Loot e Privacy nel PvP
Se c'è una verità sui giocatori di MMO, è questa: amiamo l'equipaggiamento. E in un gioco full loot PvP come Mortumus, l'equipaggiamento non è solo una scarica di dopamina, è informazione. Quello che qualcuno indossa ti dice cosa può farti.
Tienilo segreto, tienilo al sicuro: Equipment Visualizer
Presto ci siamo resi conto di avere un problema che molti MMO ignorano in silenzio: se il client conosce l'ID esatto di ogni pezzo di equipaggiamento di ogni giocatore visibile, un cheater determinato può estrarlo dalla memoria e conoscere le tue stats esatte prima di decidere di tenderti un'imboscata.
Quindi il nostro Equipment Visualizer fa qualcosa di leggermente paranoico. Per il tuo personaggio, legge dal servizio di equipaggiamento completo: vedi tutto del tuo equipaggiamento. Ma per ogni altro giocatore, legge solo un blob "visuals" ridotto che il server pubblica. Vedi la spada, non la scheda delle stats. Gli ID degli oggetti degli sconosciuti semplicemente non lasciano mai il server di Fin.
È una piccola cosa. Rende anche i cheat di memory scraping molto meno utili. Buon affare.
Lo Stack delle Animazioni
Il combattimento basato sull'abilità vive o muore con l'animazione. Se il windup non è leggibile, non puoi reagire. Se il colpo non arriva, il combattimento sembra senza peso. Se la morte sembra il modello che semplicemente... si spegne, perdi metà dell'atmosfera.
Player Animation Coordinator
Abbiamo iniziato come fanno tutti: una classe controller di animazione gigantesca che cercava di gestire tutto. Movimento, incantesimi, morte, colpi, idle, tutto nello stesso file. Dopo circa due settimane era un disastro.
Quindi l'abbiamo diviso. Ora il Player Animation Coordinator è un punto di ingresso minuscolo che avvia una pila di moduli piccoli e specializzati: movimento, rotazione, attacco, incantesimo, reazioni ai colpi, morte, idle. Ognuno ha un compito. Ognuno è leggibile da solo. I bug si trovano in minuti invece che in ore.
Codice più pulito per me. Combattimento più serrato per voi.
Reattività del combattimento: Attack Animator & Spell Animator
Ecco il classico problema degli MMO: il combattimento server-authoritative è l'unico modo per fermare il cheating, ma aspettare che il server confermi ogni cast sembra di muoversi nella melassa.
Il nostro Spell Animator bara un po', ma onestamente. Quando premi il tasto dell'incantesimo, l'animazione di cast parte immediatamente, prevista localmente, così sembra istantanea. Poi il server di Fin valida se il cast era effettivamente legale (cooldown scaduto, abbastanza mana, bersaglio valido, ecc.). Se conferma, non cambia nulla. Se rifiuta, usciamo dall'animazione in modo pulito.
L'Attack Animator fa la stessa danza per il corpo a corpo, e scala pure la velocità dello swing per combaciare con la cadenza che il server stabilisce per la tua arma. I tuoi occhi vedono un combattimento reattivo. Il server vede un mondo a cui non si può mentire.
Quel punto dolce tra "sensazione buona" e "gioco corretto" è dove vive tutto questo gioco.
I Suoni del Reame
L'audio è il 50% dell'atmosfera, e la gente sottovaluta sempre quanto lavoro richiede.
Creare l'atmosfera: Audio Manager & Music Region System
I giochi tradizionali tendono a cambiare musica con un taglio netto quando attraversi una linea invisibile. È stridente. Noi lo facciamo con zone poligonali 3D. Il Music Region System ci permette di disegnare aree dalla forma arbitraria nel mondo (un boschetto infestato, una cappella maledetta, l'avvicinamento a un boss), e mentre entri ed esci, l'Audio Manager sfuma la colonna sonora dolcemente. Nessun taglio. Nessun riavvio della stessa traccia se sfiori il confine.
E siccome tutto questo gira attraverso sorgenti audio in pool con routing per gruppi mixer, nel frame budget non costa praticamente nulla.
Il Character Audio Manager
Ogni passo in Mortumus è collegato all'animazione del tuo personaggio e alla superficie sotto i tuoi piedi: la pietra suona come pietra, il fango suona come fango. I suoni degli incantesimi sono legati all'abilità, gli swing dell'arma all'arma. Il Character Audio Manager si posiziona tra gli eventi di animazione e l'Audio Manager così possiamo inserire nuovi pack di SFX per razza/classe senza toccare codice di gameplay.
Piccole cose. Tante. Si sommano.
Il Bordo dell'Acqua
Ogni mondo dark fantasy ha dell'acqua. Paludi, fiumi, rovine allagate, il mare ai margini di un capo maledetto. E l'acqua è una di quelle cose che sembrano finte molto facilmente, specialmente dove incontra la terra. Quella brutta linea dell'acqua poligonale dove il mesh interseca il terreno è il marchio di un gioco dall'aspetto scadente.
La nostra base per l'acqua
Non abbiamo costruito la nostra acqua da zero. Unity in realtà include un fantastico progetto demo chiamato Boat Attack che comprende uno dei migliori sistemi acqua URP in circolazione: riflessi reali, rifrazioni, galleggiamento, tutto il pacchetto. Quindi siamo partiti dall'acqua di Boat Attack come fondamenta, perché reinventare la ruota ci sarebbe costato mesi senza un vero guadagno.
Ma Boat Attack è stato costruito per, beh... barche. Belle linee costiere oceaniche pulite. Il comportamento costiero che funziona benissimo su una spiaggia sabbiosa diventa terribile attorno ai corsi d'acqua fangosi, pieni di canne e irregolari che vogliamo davvero in Mortumus. Quindi abbiamo dovuto agire chirurgicamente.
Lo shader personalizzato: Water Shoreline
Invece di modificare il pacchetto Unity direttamente (cosa che si sarebbe rotta ad ogni aggiornamento), abbiamo scritto un sottile shader personalizzato "WaterShoreline" che sostituisce solo la parte della pipeline responsabile della costa. Tutto il resto (riflessi, flow map, caustics) viene direttamente da Boat Attack. Sovrascriviamo solo quello che ci serve.
I due grandi cambiamenti:
Il taglio netto della schiuma a 2 metri è sparito. La banda di schiuma predefinita di Boat Attack ha un taglio di profondità fisso, che ti dà quell'uniforme "anello bianco" attorno a ogni costa. L'abbiamo sostituita con un falloff più morbido più un campo di rumore che scorre, così la schiuma ora sfuma gradualmente e si spezza in lingue e dita organiche invece di un nastro perfetto.
Alpha morbido sulla costa. Quel problema della linea dell'acqua poligonale contro il terreno? Sfumiamo l'acqua stessa verso il trasparente nell'ultimo mezzo metro di profondità. La linea dell'acqua scompare del tutto. Il terreno semplicemente si scurisce man mano che va sott'acqua, come fa una vera costa bagnata.
Il nostro sistema fluviale
Il punto dell'acqua di Boat Attack è questo: pronta all'uso gestisce gli oceani magnificamente, ma non sa davvero cosa sia un fiume. L'acqua può incresparsi sul posto, ma non può scorrere a valle e attorno a una curva come fa un vero fiume. Questo è un problema quando metà del tuo mondo dark fantasy dovrebbe essere paludoso, fluviale e fradicio.
Quindi abbiamo costruito un sistema fluviale sopra.
Un fiume in Mortumus è creato come un percorso di flusso: una semplice polilinea di punti che traccia la spina del fiume dalla sorgente alla foce. I designer piazzano i punti dove vogliono che l'acqua scorra, e lo shader fa il resto: per ogni pixel della superficie dell'acqua, individua quale segmento del percorso di flusso è più vicino e usa la direzione di quel segmento come corrente locale. Risultato: l'acqua vicino a una sezione dritta scorre dritta, l'acqua all'interno di una curva curva con la curva, e tutto transita dolcemente nel mezzo.
Le texture, le normali e la schiuma scorrono tutte lungo quella direzione di flusso invece di andare alla deriva senza meta. Puoi davvero vedere in che direzione va il fiume.
Tutto è regolabile dal vivo tramite ShoreFoamTuner, un piccolo componente inspector che piazziamo su qualsiasi scena con acqua. Slider per morbidezza della schiuma, scala del rumore, intensità del rumore, velocità di drift, falloff dell'alpha. Cambia l'atmosfera di un intero lago senza toccare un materiale.
Community e trash talk: Chat & Social
Un MMO oldschool riguarda tanto le persone quanto il gioco. Se gli strumenti social fanno schifo, il mondo sembra vuoto.
Overhead Chat System
Testo ancorato proprio sopra la testa di un personaggio, che lo segue mentre si muove, sfumando con la distanza: è un classico assoluto del genere, e qualcosa per cui lotteremo fino alla fine.
Trasforma i gruppi in conversazioni vere. Ti permette di provocare qualcuno durante un combattimento. Permette che le ultime parole di un giocatore morente siano qualcosa di stupido e divertente invece di una riga di log di sistema. L'Overhead Chat System gestisce pooling, culling per distanza e tracking dell'ancora così da scalare anche quando venti persone si urlano addosso in un dungeon stretto.
Apparire al meglio
Sii onesto: passerai una quantità imbarazzante di tempo nella schermata del personaggio. Lo facciamo tutti. È lo specchio più bello del gioco.
Il sistema di anteprima del personaggio
Il nostro paper doll non è un render 2D statico: è una scena 3D dal vivo renderizzata in una render texture dell'UI. Illuminazione completa, geometria reale, ogni pezzo di equipaggiamento su di te in tempo reale. Ruotalo, zoomma, fissalo. È il tipo di feature che non cambia per niente il gameplay, e cambia assolutamente come ci si sente a possedere il gioco.
Riempire le borse: Icon Studio
Ecco un piccolo sporco segreto dello sviluppo di MMO: le icone. Ne servono centinaia. Ogni spada, ogni pozione, ogni pezzo di loot spazzatura che trovi in un forziere ha bisogno del suo quadratino 64x64 che si legga bene in un inventario affollato. E devono sembrare tutti dello stesso gioco.
Non puoi semplicemente fare uno screenshot di un modello 3D e chiamarla finita. L'illuminazione deve essere consistente. L'angolazione della camera deve essere consistente. E (questa è la parte che tutti sottovalutano) l'inquadratura deve corrispondere alla dimensione della griglia che l'oggetto occuperà nell'inventario. Un pugnale 1x1 e uno spadone 2x3 hanno bisogno di composizioni totalmente diverse o entrambi risultano sbagliati.
La nostra soluzione: Icon Studio
Icon Studio è una finestra editor Unity personalizzata che abbiamo costruito così una persona (di solito io, borbottando) può sfornare cento icone consistenti senza perdere la testa.
Il flusso di lavoro: inserisci una lista di prefab di oggetti. Di' allo strumento quale dimensione di griglia ciascuno occupa nell'inventario: 1x1, 2x2, 2x3, 1x4, quello che vuoi. Inquadra la camera una volta. Salva l'inquadratura come preset. Premi Genera.
La magia è che la dimensione della griglia non è cosmetica: comanda il render effettivo. Un oggetto 2x3 viene renderizzato a 2x di larghezza e 3x di altezza (di una base da 512px), così quando sta nel tuo inventario le proporzioni sono corrette, non stirate. Una spada lunga riempie genuinamente uno slot 1x4 in diagonale. Una boccetta di pozione genuinamente sta in 1x1. L'inventario sembra che tu stia organizzando oggetti reali.
Oltre a questo, lo strumento gestisce: sfondi trasparenti o personalizzati per oggetto, cattura delle bone pose così gli oggetti basati su scheletro possono salvare la loro posa di esibizione senza disturbare il rig di gameplay, e preset per intere categorie di oggetti: tutte le asce renderizzano con la stessa camera, tutte le pozioni con un'altra. Consistenza gratis.
Il risultato finale è che ogni icona nel gioco (quelle che si leggono bene a 32 pixel in una griglia inventario densa) è stata renderizzata dal modello reale del gioco, nella forma reale che l'oggetto occupa nella tua borsa. Niente arte 2D esternalizzata. Niente illuminazione incoerente. Nessun pugnale che in qualche modo sembra più grande di uno spadone nella UI.
È il tipo di strumento che nessuno vede. È anche il motivo per cui l'inventario non sembra un sacco di stock art messe insieme a caso.
Alla Prossima
Nessuno di questi sistemi è una feature da titolone di Mortumus. Nessuno comprerà il gioco perché i passi suonano bene o perché gli scheletri esplodono in pezzi con la fisica. Ma queste sono le ossa sotto tutto: il lavoro invisibile che fa sì che le cose grosse sembrino giuste quando ci si appoggiano sopra.
Con queste fondamenta al loro posto, Fin e io possiamo costruire il vero mondo cupo, brutale e full loot che stiamo scarabocchiando sui quaderni da due anni, a un ritmo che non ci faccia venire voglia di lanciare i nostri computer in un fiume.
— AL