mercoledì 2 settembre 2015

Soltanto una serie di tubi...


https://flic.kr/p/9tYsSH
Ipotizziamo di avere un bel motore grafico 3D in grado di visualizzare oggetti, avatar e quant'altro. Per poter "condividere" la simulazione con altri client avete la necessità di comunicare alcuni dati sugli oggetti presenti a video. E da questo nascono infiniti problemi che devono essere risolti: quale protocollo usare nella comunicazione? Ma soprattutto quali dati trasmettere? Cercando idee e suggerimenti in rete ho visto che pochi esperti trattano queste tematiche a livello tecnico e divulgativo. Per fortuna di chi vuole approfondire queste tematiche, uno sviluppatore, Glenn Fiedler, ha creato alcuni articoli introduttivi sulla programmazione via internet di giochi. Scopriamo quindi subito che è necessario abbandonare come protocollo TCP ed adottare UDP. Questo scelta è dettata dal fatto che il protocollo TCP è stato creato  per una comunicazione sicura nell'invio e ricezione del dato, situazione questa che non può essere adottata nei moderni MMO che hanno tempi di reazione dell'ordine dei millisecondi. Non è possibile in nessun modo attendere la verifica dell'avvenuta consegna del pacchetto e l'eventuale reinvio, questo creerebbe dei ritardi su una comunicazione che è già piena di ritardi. Il "lag" o ritardo è infatti intrinseco al funzionamento di internet che non può essere considerato come una "serie di tubi", ma come una rete di reti dove milioni di router, switch e computer dialogando ricevendo e ritrasmettendo pacchetti. Non dobbiamo poi dimenticare il limite fisico di propagazione della luce che comunque su lunghi tragitti inizia ad essere sensibile (se si parla di millisecondi). Ecco allora la strategia vincente:  trasferire piccole quantità di dati (quanto più possibile compresse ed in formato binario), su protocollo UDP (che è anche più snello del TCP), riscrivendo un semplice sistema per il sequenziamento dei diversi pacchetti e la conferma della ricezione. Nei tutorial e negli esempi tutto questo viene spiegato nel dettaglio, ma soprattutto vengono mostrate alcune strategie di "lag compensatio" ovvero compensazione del ritardo e di "prediction" ovvero di predizione ad esempio della posizione degli oggetti. Queste ultimi concetti sono molto utili soprattutto negli FPS in cui è essenziale una corretta gestione degli obiettivi colpiti e della posizione degli avversari. Non sono riuscito a capire se questi algoritmi siano utili nei Metaverse alla SecondLife e se ad esempio siano stati utilizzati proprio in SL per minimizzare l'onnipresente lag delle sim.

Sito principale: http://gafferongames.com/networking-for-game-programmers/
Codice di esempio: https://code.google.com/archive/p/netgame/

Studiare tutto questo non è certo uno scherzo, ma per fortuna esistono delle librerie che hanno già implementato queste logiche (o parte di esse). Soprattutto ENET sembra essere la soluzione ideale per l'ottima documentazione e per i numerosi esempi in rete. Riporto qui di seguito una breve lista di librerie:


Un bello studio che dimostra i problemi nell'utilizzo del TCP nei giochi:
Con questo secondo post credo ci sia tutto il materiale necessario per la creazione di una semplice demo. Uno spazio tridimensionale in cui inserire oggetti e magari spostarli, ruotarli e scalarli. Possiamo dire che ci potremmo trovare dinanzi ad un microscopico abbozzo di "Metaverse". Parlo di abbozzo perchè mancano ancora tantissime possibilità che che non sono state nemmeno indagate. Manca infatti l'utilizzo di un motore fisico, i sistemi per la gestione delle collisioni, l'uso di mesh animate e tantissimo altro. Questo a dimostrare l'estrema complessità di questi software che richiedono anni ed anni di pratica oltre a conoscenze che spaziano dalla matematica alla programmazione avanzata cross-platform.  Per non parlare poi della VR che aggiunge ulteriore complessità al sistema. Se infatti, secondo i consigli di Oculus, i motori grafici per avere un'ottima visualizzazione in VR devono girare a ben 75 FPS, allora tutte le latenze di rete devono essere attentamente valutate ed aggirate per creare l'illusione perfetta di un' ambiente virtuale tridimensionale condiviso.

Nessun commento:

Posta un commento