Hoppa till innehållet

Netcode

Från Wikipedia
Diagram över hur inmatningar synkroniseras i ett spel som använder fördröjningsbaserad nätkod
Diagram över hur rollback-nätkod förutsäger inmatningar och korrigerar spelstatus i efterhand

Nätkod eller netcode är ett samlingsbegrepp för de tekniska system som hanterar kommunikation och synkronisering mellan spelare i onlinespel.[1][2] Begreppet används ofta av spelare för att beskriva problem med synkronisering mellan klienter och servrar, till exempel lagg, fördröjda inmatningar eller att spelstatus plötsligt korrigeras.[3]

Sådana problem kan orsakas av buggar, men också av faktorer som hög latens, paketförlust, nätverksbelastning eller varierande bildfrekvens.[1][3] Nätkodens syfte är i regel att dölja eller mildra dessa störningar så att flera spelare upplever en så jämn och synkron spelvärld som möjligt.[2]

Till skillnad från ett lokalt flerspelarläge, där alla inmatningar behandlas omedelbart i samma spelinstans, består ett onlinespel av flera parallella simuleringar. Varje spelares egen inmatning registreras direkt, medan andra spelares inmatningar anländer med viss fördröjning beroende på bland annat avstånd, nätverkskvalitet och anslutningshastighet.[2]

Två vanliga sätt att hantera detta är fördröjningsbaserad nätkod och rollback-nätkod.[2]

Fördröjningsbaserad nätkod

[redigera | redigera wikitext]

Fördröjningsbaserad nätkod (engelska: delay-based netcode) synkroniserar spelet genom att lägga till en avsiktlig fördröjning på den lokala spelarens inmatningar tills motspelarens inmatningar har hunnit fram.[2] På så sätt behandlas båda spelarnas kommandon samtidigt i samma bildruta.

Metoden kan fungera väl vid låg och stabil latens, men vid hög eller varierande latens blir styrningen mindre responsiv. Om fördröjningen blir större än spelets buffert kan matchen tillfälligt frysa medan spelet väntar på saknade inmatningar.[2] Detta gör modellen särskilt problematisk i genrer där exakt tajming är viktig, exempelvis fightingspel.[4]

Rollback-nätkod

[redigera | redigera wikitext]

Rollback-nätkod (engelska: rollback netcode) låter i stället spelet omedelbart behandla den lokala spelarens inmatningar och förutsäga motspelarens kommande handlingar, i stället för att vänta på dem.[1][2] När den faktiska fjärrinmatningen senare anländer finns två möjligheter:

  • om förutsägelsen var korrekt fortsätter spelet utan märkbar förändring
  • om förutsägelsen var felaktig återställs spelstatus till ett tidigare läge och simuleras om med korrekt information

För spelaren kan detta visa sig som små visuella ”hopp” eller korrigeringar, men systemet ger ofta en mer direkt känsla än fördröjningsbaserad nätkod.[1] Rollback kräver dock att spelmotorn kan återställa tidigare tillstånd, vilket kan göra implementationen tekniskt komplicerad och kostsam.[5]

En välkänd programvara för att underlätta implementation av rollback i spel är GGPO.[6]

Orsaker till problem

[redigera | redigera wikitext]

Latens är en ofrånkomlig del av onlinespel och har stor betydelse för hur responsivt ett spel upplevs.[1] Ju högre latens mellan spelare eller mellan klient och server, desto större blir risken för märkbar fördröjning, felaktiga träffar eller plötsliga korrigeringar i spelvärlden.[3]

En enskild uppdatering av spelets simulering kallas ofta för en tick. Den hastighet med vilken servern uppdaterar simuleringen kallas tickrate.[7] En lägre tickrate minskar processorkrav och bandbreddsanvändning, men innebär också att information mellan klient och server uppdateras mer sällan, vilket kan öka den upplevda fördröjningen.[7]

Buggar och desynkronisering

[redigera | redigera wikitext]

Problem som spelare beskriver som ”dålig nätkod” kan också bero på rena programfel. Om olika klienter simulerar spelvärlden på olika sätt kan det uppstå desynkronisering, där olika spelare ser olika versioner av samma händelseförlopp.[3]

Valet av transportprotokoll påverkar också hur nätkoden fungerar. TCP ger tillförlitlig och ordnad överföring men kan orsaka extra fördröjning när paket tappas bort eller måste skickas om. UDP är snabbare och vanligare i actionspel, men kräver att utvecklaren själv hanterar till exempel paketförlust och ordning på data.[8]

Begreppet nätkod används särskilt ofta i diskussioner om tävlingsinriktade onlinespel, där små skillnader i respons och synkronisering kan få stor betydelse för spelupplevelsen.[2] Det förekommer därför ofta i analyser av fightingspel, skjutspel och andra genrer med höga krav på precision.[1]