Ağa bağlı bazı oyunlar neden enterpolasyon kullanıyor, bazıları ise uzaktan hareket için yol bulma kullanıyor?


21

Bu biraz açık bir soru ama birinin ikisine de iyi bir sebep verdiğini görmek isterim.

Her ikisine de hızlı bir örnek için:

Enterpolasyon modeli

Müşterinin pozisyon aldığı sık sık güncellenen Vana modelinin ve uzaktan kumandaların bu veriler üzerinde enterpolasyon kullanarak pozisyonlarını güncellediğini düşünün.

Yol bulma

Bu modelde, kullanıcının bir hedef gönderdiğini ve herkesin kendisine yol gösterdiğini düşünün.

Ne tür oyunlar her biri için uygundur ve ne zaman biri kullanılmalıdır?


2
Bir GDSE için biraz geniş değil mi?
Kromster, Monica

@KromStern Onunla mücadele ettim, bu nedenle "açık soru" Her ne kadar, her ikisini de yapma tecrübesi olan birinin kendisine objektif bir cevap verebilecek kadar yeterince odaklandığını ve yeterince objektif olduğunu düşünüyorum. Olumlu oylarınız / oy verenlerinizle oy verin :)
Vaughan

Belki bu bölümü eklerseniz daha iyi olur: "BCD kısıtlamaları ile A sorunum var". Şu anda çok geniş ve bağlamı yok, "Ne seçerim, E veya F?" ABCD hakkında hiç bir şey söylemeden.
Kromster, Monica

1
Kontroller büyük bir kısmı. Dolaşmak için WASD veya joystick kullanıyor musunuz? İnterpolasyon iyi uyuyor. Fare ile hedef hedefi tıklamak? Yol bulma çok daha iyi geliyor.
Luaan

Yanıtlar:


43

Ağ kodu üzerinde iki gerçek zamanlı AAA ağlı oyun üzerinde çalıştım, biri akıllı telefonlar için diğeri de el terminali için.

"Neden" sorunuzu doğrudan cevaplamak için, bazı oyunlar birbirlerini diğerlerinden daha iyi kullandıklarından birini veya diğerini kullanırlar. Bu sadece oyun türüne değil, aynı zamanda ne tür bir ağdan bahsettiğimize de bağlı. (Bağlantılı çarşı dolapları 3G üzerinden oynanması gereken oyunlara kıyasla farklı koşullara sahip) Bazı oyunlar aslında her ikisini de hatta tamamen kullanıyor veri senkronize etmek için farklı yaklaşımlar!

Sadece konumsal verileri değil, iki ağ istemcisi arasında senkronize edebileceğiniz hemen her tür veriyi genelleştirmek ve dikkate almak istiyorum.

İki olasılık yerine, sert ve yumuşak güncellemeler arasında bir spektrum önermek istiyorum.

  • Çok zor güncellemeler, herhangi bir enterpolasyon türü olmadan, durumu diğer müşterideki durumu hemen değiştiren, olayların kritik nitelikte olduğu (bir oyuncu öldüğü) olduğu için, interpolasyonun uygulandığı bir veri türü olmadığı için (çevrimiçi bir durumdur) farklı olaylardır. satranç oyunu, sohbet mesajları, vb.) veya ağınızın bunu yapmanıza izin verdiği için (sanırım oyun durumunun saniyede 60 kez güvenilir bir şekilde gönderilmesini sağlayan bağlantılı çarşı dolaplarının olasılık alanı dahilinde olduğunu düşünün).

    Bu yöntemle, ağ gecikmeleri kaçınılmaz olarak gecikmeli güncellemeler olarak gösterilir ve etrafta atlayan karakterlerle kendini gösterir.

  • Interpolasyon / interpolasyon güncellemeleri ile zor, çok zor güncellemelere benzer, ancak sürekli olarak değişen veriler için, her değiştiğinde verileri güvenilir bir şekilde göndermenin pratik olarak mümkün olmadığı. Bir konum ve hız vektörü göndermeyi düşünün; iki nokta arasında verileri enterpolasyon yapabilmeli ve onlardan sonra bunları tahmin edebilmelisiniz. Gelen veriler ekstra tekliflerinize uymuyorsa, acil durum planınız olmalıdır. Konum güncellemesi gerektiren oyunların çoğunun bu yöntemi kullandığını söyleyebilirim.

  • Senkronizasyon ile zor güncellemeler, ara / ekstrapolasyon ile zor ile aynıdır, ancak nadiren yalnızca senkronizasyon gerektirir. Bunu bir dövüş oyunundaki saat gibi ara / ekstrapolat için çok önemsiz olan veriler için kullanmalısınız (bir kere her iki tarafa da ayarlandıktan sonra, daha sonra tekrar senkronize etmek gerekmez)

  • Gecikmeli sert güncellemeler, zor güncellemelere benzer, ancak gördüğünüz geçmişte verilerdir. Japonya'da bir başkasına karşı bir şarkı çalabileceğiniz birçok müzik arcade oyununda, aslında geçmişte, muhtemelen saatler önce veya hatta günler önce kaydedilen oyuncu verilerine karşı oynadığınızdan şüpheleniyorum. Tabii ki, bu tür güncellemeler sadece diğer oyuncu ile gerçekten etkileşimde bulunmadığınızda kullanılabilir.

  • Yazılım güncellemeleri, planlama verileri göndermekten ve planı tüm ana bilgisayarlarda çalıştırmaktan oluşur. Buna "yol bulma" diyorsunuz. Bunun gibi verileri senkronize etmek için gereken veri miktarı çok daha düşüktür; yüzlerce düşmanı senkronize ederken olduğu gibi, verilerin kullanıcıya nasıl sunulduğuna dair bazı tutarsızlıklardan kurtulabildiğiniz zaman bu güncelleme türlerini kullanabilirsiniz.

    Veri güncellemelerini kendileri planlamak elbette istediğiniz kadar yumuşak / yumuşak olabilir.

  • Çok yumuşak güncellemeler, bir eylemin sonucunun gerçekleşmeden önce güvenilir bir şekilde hesaplanabildiği durumlarda kullanılır. Siz sadece sonucu gönderirsiniz ve diğer müşteri bunu tekrar oynatır. Örneğin, bazı tarayıcı ve akıllı telefon oyunları başkalarıyla savaşmanıza izin verir, ancak asıl savaşın çözülmesi saatler alır (Travian benzeri oyunlar düşünün). Bu oyunların, savaş başladığı anda sonucu hesaplaması çok olasıdır ve bu savaşın sonuçlarını görüyorsunuz.

    Bunun bir başka ağa bağlı olmayan örneği, savaş canlandırmalarının etkin olduğu Medeniyet 4'te olacaktır. Birine saldırdığınızda, savaşın sonucu derhal hesaplanır, ancak bir canlandırmanın oynatıldığını görürsünüz. Sizi temin ederim, savaş canlandırıldığı gibi hesaplanmıyor.

Görebildiğiniz gibi, verileri senkronize etmenin birçok yolu vardır ve eminim başkalarını da hayal edebildiğinizden emin olabilirsiniz. En basit çevrimiçi oyunların tümü, büyük olasılıkla, senkronize ettikleri verinin türüne, oyun türüne ve hatta ağın durumuna bağlı olarak bu yöntemlerin bir karışımını kullanır (gecikme düşük olduğunda sert güncelleştirmeleri kullanın ve gecikme arttığında daha yumuşak güncellemeler.


1
Bu biraz kalite anlayışı. Kurtarıldı ve saklandı.
Jitsu

Victor, ganimete gider, bilgilendirici cevap için teşekkürler!
Vaughan Hilts

3

Valve'ın geliştirme süreci hakkında hiçbir fikrim yok, bu yüzden bu tamamen benim görüşüm, fakat:

Enterpolasyon : Örneğin, FPS'ler gibi hızlı tempolu oyunlar için daha iyi olacağını söyleyebilirim, oyuncular arasında zamanında bir düşman için tutarlı bir konumun olması önemlidir. Enterpolasyon, bazı paketler düşürülse bile (AFAIK, çoğu çok oyunculu FPS, TCP / IP yerine UDP kullanmaktadır; bu, ne bütünlüğü ne de paketlerin geldiği sırayı garanti edemez), ekranda yumuşak bir harekete sahip olacağınız anlamına gelir.

yol bulma : Zaman oyununuz için çok önemli bir unsur değilse ve algoritmanız yeniden çalıştırıldığında tutarlı bir yol bulursa, yol bulma ilginç olabilir, çünkü sık sık göndermenizi gerektirmez ve bu nedenle her birinin konumu ile ağır güncellemeler göndermeniz gerekmez. varlıktır. Bunun, örneğin ağ tabanlı isteklerin miktarını sınırlandırabileceğiniz bir dönüşe dayalı sistem için uygun göründüğünü söyleyebilirim (dönüşün başında bir, dönüş bittiğinde tüm istemcilerin "aklı başında olmasını sağlamak için bir " belirtmek, bildirmek.

Bir kez daha, hiçbir zaman bir ağ oyununda ya da büyük bir oyun stüdyosunda çalışmamıştım, ama okuduklarımdan bazen böyle giderdim :)


0

Panda Pijama cevabı oldukça iyi.

Temel olarak, soru, birden fazla müşteriyi diğerlerinin durumunun aynı farkındalığına sokacak olan, gönderebileceğiniz minimum veri miktarına ve bu gecikme istemcilerinin farklı bir durumda olabileceği gecikme ile nasıl başa çıkacağınıza bağlı.

Böylece tüm etkileşimler elden önce biliniyorsa prosedürel olarak oluşturulmuştur, çünkü tüm değişkenler biliniyorsa sonuç bilinir. Örneğin, bir kişiyi bir odada izole etme, işleme yöntemlerini bildiğiniz ve ona bazı veri kümelerini verdiğinizden, sonuçları doğru bir şekilde tahmin edebilirsiniz. Bu nedenle diğer tüm müşterilere, bu müşterinin hesaplamasını tamamlamasını beklemeden sonuçları verebilirsiniz.

Ancak bir yöntemden bahsetmedi. Zorla sonuçlar.

Sistem, bir varlık tarafından bir eylem beklerse ve diğer işlemler bu eyleme bağlıysa ve diğer hesaplamalar bu işlemi hesaba katar ve beklenen sonuçla önceden işlenmiştir. Ardından senkronizasyonu sürdürmek için, doğru yerde olmayan bir varlık doğru şekilde yoluna koyulurken tüm sistem durdurulur.

Gerçek dünyaya bir örnek, uygun tazminatın bana gönderilmesini sağlamak için bir tutma düzenindeki diğer tüm varlıklardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.