Ölçek 03 - Ağ
Paket Kaybı ve Netcode: Eksik Bilgi Nasıl Doldurulur?
Karakterin bir an duraklayıp sonra olması gereken yere sıçraması, çoğu oyuncunun aşina olduğu bir görüntü. Bunun arkasında kaybolan paketler ve o kaybı doldurmaya çalışan bir tahmin mekanizması var. Bu yazıda mekanizmanın nasıl çalıştığını ve netcode tercihlerinin neyi değiştirdiğini anlatıyorum.
Eksik veri geldiğinde konum düzeltilir; sıçrama dediğimiz şey bu düzeltmenin kendisidir.
Kaybolan paket ne demek?
Bağlantınız, oyun verisini küçük parçalar hâlinde gönderir. Bu parçalara paket denir. Paket kaybı, gönderilen parçaların bir kısmının hedefe hiç ulaşmamasıdır ve yüzde olarak ifade edilir.
Kayıp oranı %0-1 aralığındayken deneyim neredeyse etkilenmez; sistem eksik bilgiyi fark ettirmeden tamamlar. %3 üzerine çıkıldığında ise ani duraklamalar ve geri sarma hissi başlar. Karakterin bir an duraklayıp sonra olması gereken yere "atlaması", tam olarak bu telafinin görünür hâlidir.
Eksik bilgi nasıl doldurulur?
Kaybolan her paket, konumun tahminle doldurulması demektir. Sistem, elindeki son bilinen konumu ve hızı kullanarak bir sonraki konumu tahmin eder. Tahmin doğruysa hiçbir şey fark etmezsiniz. Yanlışsa, doğru veri geldiğinde karakter olması gereken yere düzeltilir ve siz bunu sıçrama olarak görürsünüz.
Bu düzeltmenin ne kadar sert olacağı bir tasarım tercihidir. Ani düzeltme doğru ama rahatsız edicidir; yumuşatılmış düzeltme konforlu ama kısa süre yanlış bilgi gösterir. Hangisinin seçileceği, modun ne kadar hassas olduğuna bağlıdır.
Netcode: sayıların uzlaştırılma biçimi
Ping, tick rate, girdi gecikmesi ve paket kaybını tek bir davranışta birleştiren kural setine netcode denir. Netcode ölçülen bir sayı değildir; bu yüzden ölçüt tablolarında yer almaz. Buna karşılık deneyimi hepsinden çok belirler, çünkü diğer değerlerin çeliştiği anlarda kimin haklı sayılacağına o karar verir.
En bilinen çelişki şudur: siz ekranınızda rakibi köşede görüp ateş ediyorsunuz, rakip ise kendi ekranında çoktan köşeyi dönmüş durumda. İkiniz de doğru görüyorsunuz; aradaki fark gecikmeden geliyor. Netcode, bu iki gerçeklikten hangisinin geçerli sayılacağına dair bir tercihtir.
İki temel netcode tercihi
| Tercih | Kimi haklı sayar | Avantajı | Bedeli |
|---|---|---|---|
| Geriye sarma | Ateş edeni | Nişan tutarlı hissettirir | Köşeden vurulma hissi |
| Sunucu anı | Sunucunun o anki durumunu | Kaçan taraf korunur | Isabetler saymıyor gibi gelir |
| Karma yaklaşım | Gecikme eşiğine göre değişir | İki uç arasında denge | Davranış tahmin edilemez olabilir |
Hiçbir tercih iki tarafı da tam memnun edemez; seçim, hangi rahatsızlığın kabul edileceğidir.
Kritik hesap neden sunucuda yapılır?
Vuruş kaydı, hasar hesabı ve kaynak sayımı merkezde yapılır. Bunun ilk sebebi güvenliktir: istemci verisiyle oynamak sonucu değiştiremez. İkinci ve daha az konuşulan sebebi ise tutarlılıktır.
İki oyuncunun aynı olayı farklı görmesi, adalet hissini en hızlı bozan durumlardan biridir. Hesap tek bir yerde yapıldığında, olayın tek bir doğru sürümü olur; tartışma "ne oldu" üzerinden değil, "neden öyle hesaplandı" üzerinden yürür. İkincisi açıklanabilir bir tartışmadır, birincisi değildir.
Sık karıştırılan iki belirsizlik
Hattan gelen belirsizlik ile tasarımdan gelen belirsizlik farklı şeylerdir. Paket kaybı yüzünden yaşanan sıçrama bir tasarım tercihi değildir; bağlantı sorunudur. Bir modun rastgelelik içermesi ise bilinçli bir tercihtir. İkisini ayırmak, şikâyetin doğru yere gitmesini sağlar.
Kaybı azaltmak için
- Kablosuz bağlantıda sinyal gücü düştükçe kayıp oranı hızla artar; yönlendiriciye yaklaşmak çoğu zaman en etkili adımdır.
- Aynı ağda yüksek trafikli bir indirme varsa kayıp oranı yükselir; oturum boyunca bunları durdurun.
- Eski veya aşırı ısınan yönlendiriciler kayıp üretir; yeniden başlatmak geçici de olsa fark yaratır.
- Kayıp sürekliyse tempo baskısı düşük başlıklara geçin; Sezon Atölyesi ve Karar Defteri bu durumdan etkilenmez.
Önceki ölçüt
Kare Hızı ve Girdi Gecikmesi
Sonraki ölçüt