"Noi incoraggiamo gli individui, consapevolmente curiosi, a passare dalla complessità alla semplicità, dall'interno all'esterno e, a metà strada fra la ricerca e la negazione del significato, vogliamo che i curiosi facciano una dannata scelta". Wachowski

giovedì 14 novembre 2013

NET CODE: (pt.7) I SUONI

Riprendiamo il discorso sull'architettura di un multiplayer cercando di capire i segreti dietro ad una componente molto importante di Battlefield e più in generale di un FPS: i suoni.
Prima di continuare, essendo arrivato al settimo articolo, suggerisco ai nuovi di partire dal primo articolo (link) dato che darò come presupposto la conoscenza di quanto precedentemente detto.
Lo suggerisco anche perché il prossimo articolo sarà sul network smoothing factor, un parametro di Battlefield 4 da sistemare per bene e sul quale c'è mooooolta ignoranza.
Volendo parlare dei suoni, la prima classificazione che possiamo fare è la seguente:

i suoni prodotti da azioni generate da un client (console o pc)
i suoni prodotti da azioni generate da altri client.
Alla prima categoria, appartengono, ad esempio il suono della propria arma che spara, il suono dei propri passi, il suono di un vetro rotto in prima persona, etc.
Nella seconda categoria, i suoni sono generati (intendo riprodotti, play) sul nostro client, ma sono causati da altri giocatori.
Se avete capito dove voglio andare a parare, perciò, vale la regola che un suono generato da una azione di un client generico verrà riprodotto sugli altri client con un ritardo che è dovuto alla somma del vostro lag più il lag dell'avversario.
Facciamo un esempio.
Diciamo che un avversario accanto a voi si getta un medkit, ma voi non riuscite a vederlo. Sicuramente, però, se prestate attenzione all'audio, sentirete la classica esclamazione che fa il personaggio nel gioco.
Se ad esempio i miei avversari sono americani e sento "HERE IS YOUR MEDKIT" senza vedere nessuno sulla minimappa, capisco che forse non sono da solo e che quindi devo stare attento.
Il problema, in questo caso, è che il mio client ha prodotto quel suono solo nell'istante nel quale lo stesso ha ricevuto tale informazione dal server, una informazione che, a sua volta, ha inviato il client del mio avversario.
Il ritardo totale, perciò, è la somma dei ritardi, il client avversario con il server e il server con il vostro client.
Su questo tipo di eventi il sistema non può compensare in alcun modo il ritardo, visto che l'evento è istantaneo e non predicibile e non persiste nel tempo come il correre, ad esempio.
Voglio dirvi che tutte le volte che ascoltate un strillo nemico, un vetro rotto, dei passi, un paracadute aperto, un cancello chiuso, il suono del metal detector, un rumore di un carro, etc, vi arriverà con la somma dei ritardi, il vostro più quello del vostro avversario. State in guarda. Potrebbe essere troppo tardi
Ci sono però dei suoni che hanno un comportamento diverso.
Avete presente il classico suono del lock e il successivo suono intermittente di imminente colpo? Sono sicuro di si. Beh quei suoni sono ritardati solo del vostro lag, solo del ritardo tra il vostro client ed il server. Vediamo perché.
In questo articolo del blog ufficiale di battlefield (link) Alan Kertz afferma che, ad esempio, i missili guidati dal lock hanno una traiettoria controllata dal server.
Se proprio mi devo esporre, per la prima volta, in una considerazione che non ha una fonte attendibile direi che la classica variazione di traiettoria subito dopo il lancio di un missile guidato dal lock rappresenta il momento nel quale il server prende il controllo della traiettoria.
Avete presente quando lanciate uno stinger o un igla o un javelin? Fa una traiettoria balistica, poi ad un certo punto il missile cambia completamente traiettoria, si alza improvvisamente. Secondo me la prima traiettoria è generata dal vostro client. Quando poi il missile si impenna, allora la posizione è governata dal server.
Visto questo, torniamo all'audio.
L'audio del segnale intermittente è generato sul vostro client con un ritardo pari al vostro lag.
Il client, con ritardo, ottiene la posizione del missile dal server.
Ecco perciò che magari, a causa di lag eccessivi, potreste iniziare a sentire il suono intermittente mentre, nello stesso istante, il server potrebbe aver già convalidato la collisione del missile.
Ogni volta che ascolto il segnale intermittente tiro subito i flare. Potete immaginare che i vostri flare devono arrivare al server per evitare la collisione.
Non fidatevi perciò dell'audio, questo è il consiglio.
Dopo aver visto i suoni, nel prossimo articolo della serie "architettura di un multiplayer", vedremo il network smoothing factor. Avreste mai pensato ai risvolti audio di una architettura multiplayer?

2 commenti:

  1. quello che posso affermare è che in bf4 i suoni fanno davvero ribrezzo! alle volte mi trovo in una stanza da solo con un intero team nemico nelle vicinanze e non sento il minimo passo! oppure quando ti trovi ad un micron il carro armato avversario del quale non avevi udito il benchè minimo segnale acustico!!! imperdonabile tutto ciò!!! ritorno sempre a bc2: li sentivo i passi della gente a 100mt di distanza!!! i mezzi poi anche di più...ma che succede più si va avanti è più peggiorano le cose!?!? booooooooh

    RispondiElimina
  2. pensavo di essere l'unico a non sentire passi e rumnore di carri..

    RispondiElimina