Half-Life ve Counter-Strike gibi seminal oyunlarda çok sayıdaki ağ geliştirmeyi sürdürmek için gerekli olan derin teknik zorluklarla başa çıkmak.Başlangıçta bulunan bir motor değişikliği olarak inşa edildi, Counter-Strike yüksek hassasiyet, düşük gecikmeli ve bu başlıklar için geliştirilen bu makaleye göre, bu tür algoritmaların ardındaki modern algoritmaları ve online oyun tasarım mimarisini inceledi.
Müşteri-Server Modeli Detaylı Bilgi
Half-Life ve Counter-Strike, sunucunun tüm oyun durumunu takip eden katı bir müşteri-server mimarisi uyguladı.Her oyuncu eylemi – hareket etmek, atış veya yeniden yükleme – simülasyonu etkilemeden önce sunucu tarafından doğrulanabilir.Bu tasarım tüm bağlantılı müşterilerde tamleyici ve tutarlılığı önler.
Authoritative Server
Valve's GoldSrc motor (ve daha sonra Kaynak), sunucu tüm fizik simülasyonunu, çarpışma algılamasını, oyun kurallarını ve AI mantığını çalıştırıyor. Müşteriler tüm oyunculara geri gönderiyorlar (örneğin, sunucunun anahtar baskıları veya fare hareketleri) çünkü dünyayı doğrudan etkilemeye çalışıyor - bu girdileri, durumu güncelliyorlar ve otomatik olarak yayınlar, sağlık, olaylar ve varlık anlık görüntüler, tüm oyunculara geri dönüyorlar.
Müşteri Giriş İşleme
Her müşteri, her çerçeveye girer ve onları doğru sırayla uygular ve bunları yazara dayalı simülasyona uygular.Bu komutlar, her seferinde birden fazla müşteriden sunucuya gönderilir.Herhangi bir komuttan çok geç veya sıra dışı komutlar, işaretli olarak yapılır ve bunları doğru şekilde gerçekleştirir.Bu tasarım sunucunun zamanlamasını düzeltir.
Network Transport: Neden UDP ve Özel Güvenilirlik
Half-Life ve Counter-Strike öncelikle UDP (Kullanıcı Datagram Protokolü) üzerinde gerçek zamanlı veri değişimi için güvenmektedir, TCP'nin garanti edilen teslimata ve fayda siparişe rağmen TCP'nin üzerinden seçim yapın. karar düşük gecikmeliliğe ihtiyaç duyar ve paket kaybından hızlı bir şekilde kurtarma yeteneği tarafından yönlendirildi.
UDP vs. TCP Trade-offs
TCP güvenilir, sipariş paketi teslim sağlar, ancak önemli bir ek sunar: oyun deneyimini mahvedebilir, tekrarlama işlemine sebep olan bir sabit devre sunar ve hızlı bir şekilde geri yükleme veya yeniden başlatma modeline yol açabilir.In a fast-paced FPS, even a small delay caused by waiting for acknowledgments, retransmession can causes the game experience. UDP, by contrast, offers a best-effort delivery model with no built-in ordering or regest.
Packet Kayıplama ve Sequencing
GoldSrc netcode, UDP'nin üst kısmında kendi güvenilirlik katmanını uygular. kritik mesajlar (özellikle silah atış sonuçları veya oyuncu ölümleri gibi) yeni paketler ve talepler için geri yükleme işlemine izin verilir, böylece alıcının verigramları ve her paket için tekrar yükleme işlemine izin verilir.
Gerçek zamanlı oyun ağlarının evrimine daha derin bir bakış için, Valve'nin kendi GDC 2001 sunumu Yahn Bernier, Half-Life'da kullanılan tekniklerin kapsamlı bir genel bakışını sunar: 03.Örnek:0)Latency Compensating Methods in Müşteri/Server In-Game Protocol Design and Optimization).
Oyun oynaması Unreliable Networks
UDP ve özel güvenilirlik ile bile, oyuncular değişken gecikme, paket kaybı ve jitter deneyimliyor. anlık yanıt ve tutarlı dünya görüşlerini korumak için Half-Life ve Counter-Strike üç kritik teknik uyguladı: müşteri-side tahmini, sunucu uzlaşması ve varlık interpolasyon.
Müşteri-Side Prediction ve Server Reconciliation
Müşteri odaklı tahmin olmadan, her oyuncu eylemi milisaniyede ölçülecekti: fareye tıkla, sunucuya giden komutlar, sunucu işlemlerine ve sonuç geri seyahat eder.In a game like Counter-Strike, where Reaction times are measure in the same move and Physics as the server.
Ancak, müşterinin tahmini, sunucunun kendi durumuyla ilgili pozisyonların belirlenmesi, müşteri, sunucunun pozisyonlarına doğru yerel varlıkları doğrular veya hataların düzeltilmesini sağlar. Sunucunun her seferinde bir tahmin ve uzlaşmanın bir anlık gönderir, oyuncunun kendi durumuyla ilgili pozisyonları karşılaştırır.
Entity Interpolation
Çünkü sunucu sadece sabit bir frekansta güncelleştirme gönderir (kırık oranı), müşteri ayrık anlık görüntüler alır.İkinci olarak, ara sıra, son iki görüntü arasında bir süre içinde nesne pozisyonları oluşturmak için boşluklar doldurur: "snap" zamanları kullanarak, senaryo arasındaki pozisyona göre, sürekli hareket eder, ikinci kez güncellemekte.In Counter-Strike, interpolasyon oyuncular hareket ederken bile görünür: onlar hareket ederler: "snap" görünür gibi görünmüyorlar, çünkü motor sorunsuz bir şekilde, sürekli hareket eder.
Hitscan Silahları Için Lag Compensation for Hitscan Weapons
Counter-Strike'nin net kodundaki en yenilikçi özelliklerinden biri, hitaben silah için geri ödemedir (atıcılar, tabancalar, keskin nişancılar). Çünkü mermiler anında saldırıya uğrarsa, sunucu, hedefin pozisyonuna dayanarak vurularak, atışın kovulması gerekir - bir oyuncunun 100 ms geç kalmış ve bir düşmana sahip olması durumunda, sunucunun komutayı aldığı zaman, komut aldığında, düşmanın komutayı aldığına karar verebilir.
Valve'nin çözümü, her oyuncunun komutdaki konumunun kısa bir tarihini depolar. sunucudaki algılamayı aldığında, hedefin taksitle ödemesini sağlar. Ancak, atıcının müşterisini "geri yüklemeyi" tanıtır.
Bu tekniğin ayrıntılı bir bozulması, oyunlarda [Düzücüler için [Döneticiler]Gaffer'da bulunabilir ve Glenn Fiedler, multiplayer atıcılarda kullanılan benzer yöntemleri açıklıyor.
Tick Rate and Update Frekans
Sunucunun kene oranı, genellikle giriş ve anlık görüntüler gönderirken nasıl belirlenir. erken Counter-Strike 1.6, varsayılan sunucu akış oranı resmi sunucularda 20 Hz (20 güncelleme) idi, ancak rekabetçi sunucular genellikle özel ayarlar kullanarak 33 veya 100 Hz'e kadar uzanır.
Server Tick Rate (sv tickrate)
Cenâb oranı doğrudan sunucunun simülasyonuna adım büyüklüğüne bağlıdır. 33 Hz. Her bir işaret, sunucunun CPU ve ağı üzerindeki yükü de artırır. Tüm bekleyen komutlar, fizik, süreçler hasarı çalışır ve 64 ve 128 Hz'in tüm müşterilere tam bir anlık gönderir, ancak alt ilkeler aynı kalır.
Müşteri Interpolasyon Ayarları (lerp)
Müşteri tarafında, a interpolasyon parametresi denilen bir lerp değeri:0) (veyaİLD 1:0) Paketler kaybolduğunda, istemci ağ düzensizliklerini telafi etmek için oyuna geri döndü, ancak oyuncunun ne kadar iyi bir şekilde gördüğüne dair sürekli bir gecikmeyi seçer.
Band Wide and Data Optimizasyon
Half-Life ve Counter-Strike, çağın internet bağlantıları için tasarlanmıştır (56k modemler erken geniş bant genişliğine kadar).Skcode çeşitli optimizasyon teknikleri kullandı.
DeltaPC
Sunucu her anlık ile tam oyun durumunu göndermez. Bunun yerine, bir oyuncu bağlantıdan sonra bir temel anlık görüntüler gönderir ve bir oyuncu bir silahtan vazgeçiririrse, delta yeni amme ve muzzle flaş durumu içerir.Bu büyük oyuncu sayısı azalırsa (düşünceler hariç 32 numaraya kadar) büyük oyuncu sayısı desteklemesi önemlidir.
Değişkenler Değişkenler
Hasar, öldürme ve silah yangını gibi kritik olaylar hemen güvenilir kanalı kullanıyorsa, rutin konumsal güncellemeler kritik veriler için daha güvenilir bir kanala gönderilir. Bu sunucu, mevcut bant genişliği ve müşteri bağlantı kalitesine dayanan güncelleme oranını dinamik olarak ayarlar.Eğer bir müşteri deneyimi paketi kaybıyla, sunucu kritik olmayan güncellemelerin frekansına veya daha güvenilir bir kanala geçiş yapabilir.Bu adaptive approach maintain playability across a wide range of network conditions.
Anti-Cair Architecture (VAC and Beyond)
Half-Life ve Counter-Strike ağının tartışma konusu, istemci hafızasını veya paketlerini değiştirmeden tamamlanmamışdır (VAC) VAC öncelikle bir müşteri tarafından tarama ve sunucu-ön algılama sistemi olsa da, tasarımı sunucunun yazara dayalı netcode.
- Müşterinin aşırı uçabilir ve DLLs maçının iyi versiyonları bildiğini belirtmek.
- Video modelleri, sunucuya gönderilen atış doğru istatistiklerini analiz ederek kullanım amaçları gibi modeller.
- Bilinen hile imzalarını kullanarak yakalanan Banning hesapları.
Eleştirel olarak, sunucunun otoritesi birçok ortak hileyi engeller: bir duvarhack, yalnızca müşteriye gönderilenleri ortaya çıkarabilir ( sunucu tüm varlık pozisyonları gönderir, bu yüzden duvarhacks sunucunun “evlilik” mantığıyla azaltılır ve verileri sınırlandırarak, net kodlama yetkisinin ve dış kaynaklı sistemlerin kombinasyonu rekabetçi atıcılar için standart olarak kalır.
VAC'ın tarihi ve yetenekleri hakkında daha fazla bilgi için, bkz.D:0)Valve'nin resmi Anti-Cair sayfası[[Dönemli: 1).
Modern Netcode üzerinde Miras ve Etki
Half-Life ve Counter-Strike'de öncülenen ağ teknikleri hala her büyük online atıcı tarafından takip edilen bir şablon kurdu.The network techniques leaded in Half-Life and Counter-Strike, lag solution and GDC conversation help training an entire nesil of game developers.The choices for GoldSrc and Source netcode - authoritative servers, UDP with custom, and interpolation – ve kene tabanlı güncellemeler - bu hızlı bir şekilde internet üzerinden ulaşılamazdı, sadece bir oyun geliştiricileri için yapılan seçimler.
Etki atıcıların ötesine uzanır. Mücadele oyunları, gerçek zamanlı strateji başlıkları ve hatta yarış oyunları, tahmin ve rollback ile benzer müşteri-server veya a-to-peer mimarisine sahip. temel sorunlar (latency, paket kaybı, hile) aynı kalır ve Half-Life ve Counter-Strike için geliştirilmiş çözümler herhangi bir ağlı oyun için sağlam bir başlangıç noktası sağlar.
Kaynak netcode'un bugün nasıl yeniden bir araya geldiğinin teknik bir bakış için, [[0)Valve'nin Kaynağını Çok Ağlama Belgeleri[Dönetici: 1)
Özetle, Half-Life ve Counter-Strike'deki multiplayer ağ sadece zamanlarının bir ürünü değildi, ancak yanıt verme, adil ve ölçeklenebilir online oyun dengelemek için nasıl elde edileceğine dair temel bir başarı.Performanslar, yüksek çözünürlükte, milyonlarca oyuncunun bugün hala zevk aldığı bir deneyim yarattı - ve internetteki insanların internetteki insanları nasıl bağlantı kuracağını açıklamaya devam edecek.