Netcode - Netcode - Wikipedia

Netcode bir battaniye terimi en çok kullanılan oyuncular ağda bir şekilde ilgili her şey için çevrimiçi oyunlar, genellikle istemciler ve sunucular arasındaki senkronizasyon sorunlarına atıfta bulunur. Oyuncular genellikle bir oyunda bağlantı sorunlarıyla karşılaştıklarında "kötü ağ kodları" hakkında iddialarda bulunurlar, ancak bu sorunların nedenleri tamamen motorlarının kontrolü dışında olabilir (bazı yaygın nedenler: yüksek gecikme sunucu ve istemci arasında, paket kaybı, Ağ tıkanıklığı, vb.). Çerçeve oluşturma süresi veya tutarsızlık gibi ağ kalitesiyle ilgisi olmayan harici faktörlerden bile kaynaklanabilirler. kare hızları.[1][2] Bir terim olarak Netcode, gerçek olarak tanınmadığından yalnızca oyun topluluğunda kullanılma eğilimindedir. bilgisayar Bilimi terim.[3][4]

Netcode türleri

Tüm oyuncuların girdilerinin oyunun aynı simülasyonunda veya örneğinde anında yürütüldüğü yerel bir oyunun aksine, çevrimiçi bir oyunda, ilgili oyunculardan gelen girdilerin anında alındığı birkaç paralel simülasyon (her oyuncu için bir tane) vardır. diğer oyunculardan gelen aynı çerçeve için girişler belirli bir gecikmeyle gelir (oyuncular arasındaki fiziksel mesafeye, oyuncuların ağ bağlantılarının kalitesine ve hızına bağlı olarak daha fazla veya daha az).[5] Çevrimiçi bir maç sırasında, oyunların oyuncuların girişlerini her kare için belirli bir süre içinde alması ve işlemesi gerekir (ör. 16Hanım 60'daFPS ) ve eğer bir uzak oynatıcının belirli bir karenin (örneğin, kare numarası 10'un) girdisi bir başkası zaten çalışırken (örneğin, kare numarası 20, 160 ms sonra) gelirse, oyuncu simülasyonları arasında senkronizasyon giderilir. Bu çatışmayı çözmenin ve oyunun sorunsuz çalışmasını sağlamanın iki ana çözümü vardır:

Gecikmeye dayalı

İki oyuncunun girişlerinin yürütülmesi ve senkronizasyonuna ilişkin diyagram (90 ms ping eşler arası bir modelde gecikme tabanlı ağ kodu kullanan çevrimiçi bir oyunda.

Bu soruna klasik çözüm, gecikmeye dayalı bir ağ kodunun kullanılmasıdır. Uzak bir oyuncunun girişleri geç geldiğinde, oyun iki girişi senkronize etmek ve bunları aynı anda çalıştırmak için yerel oyuncunun girişlerini aynı anda geciktirir. Yerel oyuncu girişlerinin anında çalışmaması oyuncular için can sıkıcı olabilir (özellikle aralarında yüksek gecikme olduğunda), ancak genel olarak değişiklik çok da fark edilmiyor. Bu sistemle ilgili asıl sorun tutarsızlığıdır, çünkü uzak oynatıcının girişlerinin gecikmesi, beklenmedik şekilde dalgalanabilen mevcut gecikmeye bağlı olarak değişebilir. Oyuncular arasındaki gecikme, uzak oyuncunun girişi örneğin 3 karelik (48 ms) bir ara belleğe gönderilemeyecek kadar yüksek olduğunda, oyun beklemeli ve ekranların "donmasına" neden olmalıdır (gecikme tabanlı bir ağ kodu simülasyonun söz konusu karedeki tüm oyunculardan girdileri alana kadar devam etmesine izin verin).[6] Bu gecikme değişken olabileceğinden, bu, çevrimdışı oyuna (veya çevrimdışı oyuna kıyasla) daha tutarsız ve tepkisiz bir deneyime neden olur. LAN oyun) ve zamanlamaya duyarlı ve hızlı tempolu türlerde oyuncu performansını olumsuz yönde etkileyebilir. Dövüş oyunları.[7]

Geri alma

Eşler arası modelde geri alma net kodunu kullanan çevrimiçi bir oyunda iki oyuncunun girişlerinin (aralarında 90 ms ping ile) yürütülmesi ve senkronizasyonuna ilişkin diyagram.

Önceki ağ koduna alternatif bir sistem geri alma ağ kodudur. Bu sistem, yerel oyuncunun girişlerini hemen çevrimdışı bir oyunmuş gibi çalıştırır (gecikme tabanlı ağ kodunda olduğu gibi gecikmesinler) ve onları beklemek yerine uzaktaki oyuncunun veya oyuncuların girdilerini tahmin eder ( önceki tikteki ile aynı girişi yapacaktır). Bu uzak girdiler geldiğinde (örneğin, 45 ms sonra), oyun iki şekilde hareket edebilir: tahmin doğruysa, oyun olduğu gibi, tamamen sürekli bir şekilde devam eder; tahmin yanlışsa, oyun durumu geri alınır ve oyun, diğer oyuncuya veya oyunculara bir "atlama" olarak görülen düzeltilmiş durumdan devam eder (örnekte 45 ms'ye eşdeğer).[1] Bazı oyunlar bu "sıçramaları" gizlemek için (diğer oyuncuların eylemlerine tepki vermek için gittikçe daha az zaman olduğundan oyuncular arasındaki gecikme arttıkça sorunlu hale gelebilir) sabit bir giriş gecikmesi ve ardından geri alma kullanılır. . Geri alma, tahminler genellikle doğru olduğundan ve oyuncular farkına bile varmadıklarından, gecikmelerin veya kullanıcıların bağlantılarındaki tutarsızlıklarla ilgili diğer sorunların gizlenmesinde oldukça etkilidir. Yine de, bir müşterinin oyunu yavaşladığında (genellikle aşırı ısınmadan dolayı) bu sistem sorun yaratabilir, çünkü yarık sorunları makineler arasında eşit olmayan oranlarda bilet değişimine yol açabilir. Bu üretir görsel aksaklıklar Bu, girdileri daha yavaş bir hızda alan oyuncuların oynayışını zorlaştırırken, oyunu yavaşlayan oyuncu diğerlerinden normal bir oranda girdi alarak diğerlerine göre bir avantaja sahip olacaktır (bu, tek taraflı geri alma olarak bilinir).[8] Bu dengesiz girdi akışını (ve dolayısıyla eşit olmayan çerçeve akışını) ele almak için, geç girişlerin tüm makinelere ulaşmasını beklemek (gecikme tabanlı ağ kodu modeline benzer) veya daha ustaca çözümler gibi mantıksal çözümler vardır. şu anda kullanılan Skullgirls, oyun söz konusu sorunla karşılaştığında çeşitli makinelerdeki oyunların örneklerini kademeli olarak senkronize etmek için atlanan kareleri kurtarabilmesi için her yedi karenin sistematik olarak çıkarılmasından oluşur.[9]

Geri alma ağ kodu, oyun motorunun durumunu geri döndürebilmesini gerektirir, bu da mevcut birçok motorda değişiklik yapılmasını gerektirir ve bu nedenle, bu sistemin uygulanması sorunlu ve pahalı olabilir. AAA Dragon Ball FighterZ yapımcısı Tomoko Hiroki ve diğerleri tarafından yorumlandığı gibi (genellikle sağlam bir motoru ve yüksek trafikli bir ağa sahip) türü oyunlar.[10]

Bu sistem genellikle bir Eşler arası mimari ve dövüş oyunları, aynı zamanda yaygın olarak kullanılan geri alma ağ biçimleri vardır. müşteri sunucusu mimariler (örneğin, agresif planlayıcılar içinde bulunan Veritabanı Yönetim Sistemleri geri alma işlevi içerir) ve diğerlerinde video oyunu türleri.[1]

Adlı popüler bir MIT lisanslı kütüphane var GGPO bir oyunda geri alma ağını uygulamaya yardımcı olmak için tasarlanmıştır (özellikle dövüş oyunları).[11]

Ağ kodu sorunlarının olası nedenleri

Gecikme

Gecikme çevrimiçi oyunlarda kaçınılmazdır ve oyuncunun deneyiminin kalitesi kesinlikle buna bağlıdır (oyuncular arasında ne kadar fazla gecikme olursa, oyunun girdilerine yanıt vermediği hissi o kadar artar).[1] Oyuncuların ağındaki gecikmenin (büyük ölçüde bir oyunun kontrolünün dışında olduğu) söz konusu tek faktör değil, aynı zamanda oyun simülasyonlarının çalıştırılma şeklindeki gecikme de söz konusu. Bir kaç tane var gecikme tazminatı Gecikmeyi gizlemek veya bununla başa çıkmak için kullanılan yöntemler (özellikle yüksek gecikme değerleriyle).[12]

Tıklama oranı

Bir oyun simülasyonunun tek bir güncellemesi tik olarak bilinir. Simülasyonun bir sunucuda çalıştırılma hızına genellikle sunucunun işlem hızı denir; bu aslında bir istemcinin sunucu eşdeğeri kare hızı, herhangi bir işleme sistemi yok.[13] Tıklama oranı, simülasyonu çalıştırmak için gereken süre ile sınırlıdır ve dalgalanan bir tik hızı nedeniyle ortaya çıkan istikrarsızlığı azaltmak ve CPU ve veri aktarım maliyetlerini azaltmak için genellikle kasıtlı olarak daha da sınırlandırılır. Daha düşük bir işlem hızı, sunucu ve istemciler arasındaki oyun simülasyonunun senkronizasyonundaki gecikmeyi artırır.[14] Gibi oyunlar için Tickrate birinci şahıs nişancılar genellikle saniyede 120 kene arasındadır (böyle Yiğit durumu), Saniyede 60 tik (gibi oyunlarda Counter-Strike: Global Offensive ve Overwatch ), Saniyede 30 tıklama ( Fortnite ve Battlefield V konsol sürümü)[15] ve saniyede 20 kene (polemik vakalardır) Görev modern savaş çağrısı, Call of Duty: Warzone ve Apex Efsaneleri ).[16][17] Daha düşük bir tıklama oranı da doğal olarak simülasyonun hassasiyetini azaltır,[13] çok ileri götürülürse veya istemci ve sunucu simülasyonları önemli ölçüde farklı oranlarda çalışıyorsa sorunlara neden olabilir.

Mevcut bant genişliği miktarındaki ve ağ iletişimi tarafından alınan CPU süresindeki sınırlamalar nedeniyle, bazı oyunlar daha az önemli bilgilerin sıklığını ve önceliğini sınırlarken belirli hayati iletişimlere öncelik verir. Tıklama hızında olduğu gibi, bu, senkronizasyon gecikmesini etkili bir şekilde artırır. Oyun motorları, bant genişliği kullanımına yardımcı olmak için ağ üzerinden gönderilen bazı değerlerin hassasiyetini azaltmanın yanı sıra, güncellemelerin (bir simülasyonun) belirli bir istemciye ve / veya oyun dünyasındaki belirli nesnelere gönderilme sayısını sınırlayabilir. . Bu hassasiyet eksikliği bazı durumlarda fark edilebilir.[13][18]

Yazılım hataları

Makineler arasındaki çeşitli simülasyon senkronizasyon hataları da "ağ kodu sorunları" kapsamına girebilir. Bunlar, simülasyonun bir makinede diğerinden farklı şekilde ilerlemesine neden olan veya kullanıcı olması gerektiğini algıladığında bazı şeylerin iletilememesine neden olan hataları içerebilir.[2] Geleneksel olarak, Gerçek zamanlı strateji oyunlar (örneğin Age of Empires ) simülasyonun tüm istemcilerde tam olarak aynı şekilde çalışacağının varsayıldığı kilit adımlı eşler arası ağ oluşturma modellerini kullandıklarında; ancak, bir istemci herhangi bir nedenle adım dışına çıkarsa, senkronizasyon çözme birleşebilir ve kurtarılamaz olabilir.[13][19]

Taşıma katmanı protokolü ve iletişim kodu: TCP ve UDP

Bir oyunun seçimi taşıma katmanı protokol (ve yönetimi ve kodlaması), algılanan ağ sorunlarını da etkileyebilir.

Bir oyun bir Geçiş kontrol protokolü (TCP), oyuncular arasında gecikme süresi artacaktır. Bu protokol, veri alışverişinde bulunabilecekleri ve okuyabilecekleri iki makine arasındaki bağlantıya dayanmaktadır. Bu tür bağlantılar çok güvenilir, kararlı, sıralı ve uygulaması kolaydır ve İnternette yaptığımız hemen hemen her işlemde (web taramasından e-posta göndermeye veya bir IRC ). Bununla birlikte, bu bağlantılar, bu tür bir protokol olduğu için, hızlı aksiyon oyunlarının gerektirdiği ağ hızlarına pek uygun değildir (Gerçek Zamanlı Akış Protokolleri ), verileri doğrudan (güvenlik için hızdan ödün vererek) değil, makineler arasında kurulan bağlantı yoluyla gönderilecek (belirli bir bilgi hacmine ulaşılıncaya kadar gönderilmeyecekleri) paketler halinde otomatik olarak gruplandırır. Bu tür bir protokol ayrıca, bir paketi kaybettiklerinde veya paketler yanlış sırada geldiğinde veya çoğaltıldığında çok yavaş yanıt verme eğilimindedir; bu, gerçek zamanlı bir çevrimiçi oyun için çok zararlı olabilir (bu protokol, bu tür yazılımlar için tasarlanmamıştır. ).

Oyun bunun yerine bir Kullanıcı Datagram Protokolü (UDP), makineler arasındaki bağlantı çok hızlı olacaktır, çünkü aralarında bir bağlantı kurmak yerine veriler doğrudan gönderilip alınacaktır. Bu protokol, öncekinden çok daha basittir, ancak güvenilirliği ve kararlılığından yoksundur ve PCT tarafından yönetilen makineler arasındaki iletişim için (paketler aracılığıyla veri bölümü, otomatik paket kaybı tespiti gibi) vazgeçilmez işlevleri yerine getirmek için kendi kodunun uygulanmasını gerektirir. , sağlama toplamı, vb.); bu, motorun karmaşıklığını artırır ve kendisi sorunlara yol açabilir.[20]

Ayrıca bakınız

Dış bağlantılar

Referanslar

  1. ^ a b c d Huynh, Martin; Valarino, Fernando (2019). Gerçek zamanlı eşler arası dövüş oyunlarında sürekli tutarlılık modellerinin analizi.
  2. ^ a b Battlefield 4'te "Netcode" Adresleme ". EA Digital Illusions CE. Mart 2014. Alındı 2014-03-30.
  3. ^ "Programlama ve bilgisayar bilimi terimlerinin listesi". Labautopedia.
  4. ^ "Bilgisayar programlama terimi". Bilgisayar Umut.
  5. ^ "Netcode [p1]: Fightin 'Words". ki.infil.net. Alındı 2020-12-07.
  6. ^ Personel, Ars (2019-10-18). "Dövüş oyunlarının gecikmeye dayalı ve geri alma ağ kodunu nasıl kullandığını açıklama". Ars Technica. Alındı 2020-12-07.
  7. ^ Çukur. "LAN ve Çevrimiçi e-sporlar arasındaki fark". Çukur. Alındı 2020-12-01.
  8. ^ Lee, Gerald (2020-04-08). Analiz: Geri Alma Netcode Neden Daha İyi? (Youtube).
  9. ^ Hills, Dakota 'DarkHorse' (2020-04-29). "Skullgirls, başlangıçta oyunun hayranlarından biri tarafından oluşturulan gelişmiş bir ağ kodu güncellemesi alıyor". EventHubs. Alındı 2020-12-11.
  10. ^ Hills, Dakota 'DarkHorse' (2020-12-10). "Gecikme tabanlı ağ kodu çağı, SNK'nın The King of Fighters 15 ile yaptıklarına bağlı olarak, dövüş oyunlarında nihayet bitmiş olabilir". EventHubs. Alındı 2020-12-10.
  11. ^ Pusch, Ricky (2019-10-18). "Dövüş oyunlarının gecikmeye dayalı ve geri alma ağ kodunu nasıl kullandığını açıklama". Ars Technica. Alındı 2020-12-14.
  12. ^ "İstemci / Sunucu Oyun İçi Protokol Tasarımı ve Optimizasyonunda Gecikme Telafi Yöntemleri". Valve Geliştirici Topluluğu. Alındı 2020-12-11.
  13. ^ a b c d "Kaynak Çok Oyunculu Ağ". Kapak. Alındı 2014-03-30.
  14. ^ "Titanfall, de l'importance d'un bon tickrate". gamekult.com. 2014-03-29. Alındı 2014-03-30.
  15. ^ "Battlefield V Sunucu Tik Oranı Açıklandı ve Neden Önemlidir". www.glitched.online. Alındı 2020-12-05.
  16. ^ Davison, Ethan. "Valorant'ın süper hızlı sunucuları, yayıncıları ve profesyonelleri sürüler halinde çekiyor. İşte nedeni.". Washington Post. ISSN  0190-8286. Alındı 2020-12-05.
  17. ^ "Apex Legends ağ kodu, Fortnite ve PUBG'ye kıyasla ne kadar kötü?". Dexerto. 2019-11-23. Alındı 2020-12-05.
  18. ^ "Gerçek Olmayan Ağ Mimarisi". Epik Oyunlar. Alındı 2014-09-07.
  19. ^ Glenn Fiedler. "Her programcının oyun ağı hakkında bilmesi gerekenler". Alındı 2014-09-08.
  20. ^ Fiedler Glenn (2008-10-01). "UDP - TCP". Gaffer On Games. Alındı 2020-12-14.