Gerçek Zamanlı Dinamik Yol Bulma?


19

Şu anda bazı yol bulma araştırması yapıyorum ve simülasyonum şudur: Başlangıç ​​ve bitiş noktası temsil edilen bir 3d sahnem var, yol bulmaya yardımcı olmak için gezinme ağları, yol noktaları ve çokgenler oluşturabiliyorum.

Bir A * algoritması ve bazı varyantlarını denedim ve mükemmel çalışıyorlar. Ancak, şimdi 'dinamik' yol bulma ile daha çok ilgileniyorum. Örneğin, A noktasından B noktasına bir yol bulurken, yeni bir engel aniden ortaya çıkarsa, algoritmamın hemen bir yolu yeniden planlayabilmesini ve sıfırdan tekrar aramaya başlamamasını istiyorum.

D * algoritması hakkında bazı okumalar yaptım ve bunun ihtiyacım olan şey için uygun olup olmadığını merak ediyorum ya da bu bir overkill gibi görünüyor.

Yani sorularım temel olarak: Gerçek Zamanlı Dinamik Yol Bulma için hangi algoritma en iyi olurdu? VEYA bunun yerine hangi teknik kombinasyonunu kullanabilirim?


Hangi algoritmayı kullandıklarından emin değilim, bu yüzden bu bir cevap değil, ama bu taklit etmeye çalıştığınız şey olduğunu hayal ediyorum: youtube video
MichaelHouse

A * 'yı genişletmeye ne dersiniz? Açık / kapalı kümelerinin düğümlerinde depolananları istediğiniz şekilde genişletmek ve düşünmek için A * 'yı genişletmek.
user712092

Sizinle aynı cevabı arıyordum ve HPA * hakkında bir makale buldum ve video oyunu ile ilgili. Hala makale arıyorum ve muhtemelen uygulayacağım. Şimdiye kadar performansı iyileştirmek bana mantıklı geliyor ve hem statik hem de dinamik ortamda kullanılabilir. İşte makale
NelsonPunch

Yanıtlar:


19

D * oldukça ilgili - uygulamayı denemenizi tavsiye etmiyorum. İyi finanse edilen ve akıllı / deneyimli insanlar tarafından geliştirilen projeler bile, D * lite kullanılır, çünkü D * doğru bir acıdır.

Left 4 Dead'ün yol bulma tartışmasını içeren bu sunumla ilgilenebilirsiniz:

http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf

Bir yaklaşım, bir temsilci için genel bir yol elde etmek için kaba bir seviye A * araması kullanmak ve daha sonra bir temsilcinin yerel ortamını ayrıntılı bir seviye A * araması yapmaktır. Bu şekilde, arazi değişirse kurs ayrıntısı A * aramasını hızlı bir şekilde yeniden hesaplayabilir ve daha sonra ortamın küçük bir bölümünü aramak için ince ayrıntıyı A * aramasını hızlı bir şekilde yeniden hesaplayabilirsiniz. Bu mükemmel değil. Engelleriniz birçok oyun için iyi olan çoklu ders detay grafik düğümlerini engelleyemediği sürece çalışır. 100'den az temsilciniz varsa tavsiye ettiğim yöntem budur.

Yüzlerce veya binlerce aracıyı desteklemek istiyorsanız, süreklilik kalabalıkları gibi bir şey uygulayabilirsiniz. Bu araştırmaya bakın: http://grail.cs.washington.edu/projects/crowd-flows/ Bu, dinamik bir ortamda binlerce aktörü destekleyebilecek tamamen CPU tabanlı bir yöntemi tartışıyor.

On binlerce veya yüz binlerce aracıyı desteklemek istiyorsanız, GPU yardımı ile sürekli kalabalık gibi bir şey uygulayabilirsiniz. İlgili araştırma için buraya bakın: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf

İşte süreklilik kalabalığını gösteren bir video: http://www.youtube.com/watch?v=lGOvYyJ6r1c (Bir şehirde dolaşan yüzlerce insanı etkileyen otomobiller ve stop lambaları gibi büyük dinamik engelleri görmek için 4.10'a geçin.)


Bağlantılar için teşekkürler. D * Lite okuduğum kadarıyla doğru görünüyor
Andrei

9

Basit direksiyon davranışlarına baktınız mı?

http://www.red3d.com/cwr/steer/

Yerel engellerden kaçınmak için bunları A * yolunuzdan sapmak için kullanabilirsiniz ve işiniz bittiğinde yolunuza geri dönebilirsiniz.

Aynı zamanda çoklu davranışları birleştirmek oldukça kolaydır.


+1. Bunun neden reddedildiğinden emin değilim. Bu basit ve muhtemelen
askerin

1
En son oyunumuzda bu direksiyon davranışını okudum ve uyguladım. Şimdi tekrar diğer yöntemlerle değiştireceğiz. Bence önceden belirlenmiş optimal yollarla birlikte iyi çalışmaz. Birden fazla davranışın "birleşimi" genellikle kötü sonuç verir. Hala kullanmayı planlıyorsanız, aynı anda yolunuzu yönlendirmeye ve takip etmeye çalışmayın. Bunun yerine, engeli geçtikten sonra% 100 direksiyona geçin ve% 100 geri dönün.
Imi

4

Bu Gerçek Zamanlı Dinamik pathfinding hakkında değil, o * Gerçek Zamanlı Dinamik Path dair: yayınınız yığın değişim "Oyun Geliştirme" bölümünde olduğu için, burada en oyun programcıları size cevap yapardı aşağıdaki *!

Navigasyon grafiğinizdeki bir kenarın tamamen engellendiği bazı kenar durumlarda, yol bulucunun başka bir yolu yeniden hesaplamasını gerektirir, ancak çoğu zaman varlıklarınızı engeller etrafında yönlendirebilir, konum tahmini yapabilir ve doğru yönde kaçınabilirsiniz. Çoğu oyun için, özellikle de oyuncu eylemlerini veya ajan kararlarını doğru bir şekilde tahmin edemediğiniz için, dinamik ajanların konumunu zaman içinde tahmin etmek zorunda kalınmayacaktır.

Bu nedenle, tavsiyem Direksiyon Davranışları (http://red3d.com/cwr/steer/) uygulayarak başlamak, yolun imkansız hale geldiği durumları ele almak ve ardından olmayan kenar durumlarını işlemek için üstüne bir katman eklemek olacaktır. t Önceki iki çözüm tarafından ele alınır.

Bu yardımcı olur umarım


Oh hayır. "Yol izleme", yol bulma ile aynıdır. Bir masaüstü bilgisayarda engeller değiştiğinde binlerce ajanın ardından gerçek zamanlı olarak izin veren birçok yaklaşım vardır . Kesinlikle engeller hareket ettiğinde tek bir ajan için bir yol bulmak çok pahalı değildir . İşte bu yaklaşımlardan birçoğu: grail.cs.washington.edu/projects/crowd-flows Sürekli ortam kalabalıklarının GPU hızlandırılmış sürümleri mevcuttur.
Olhovsky

Buna katılmam gerekecekti. Herhangi bir motor, yol bulma ve yolu takip eden iki farklı sorun olarak ele alır; burada birincisi gezilebilir alanın bir grafik araştırmasıdır ve diğeri yerel alan içindeki optimum hareket vektörünü araştırmayı amaçlamaktadır. GPU'ya ihtiyaç duymadan AAA oyunları tarafından kullanılan ara katman yazılımı üreten bu tür kalabalık simülasyonları üzerinde çalıştım. Çoğu uygulama, akışı takip etmek ve diğer aracılardan (pathfollower) kaçınmak için bir akış alanı (yol bulucu) ve yönlendirme kullanır. Cevabımın da belirttiği gibi, bu bir "oyun programcısı" cevabıdır, akademik bir cevap değildir.
emartel

Contiuum kalabalıklar için GPU'ya ihtiyacınız olmadığını biliyorum, bu yüzden CPU tabanlı bir versiyon bağladım. Aşağıdaki yol açıklamanız hala bir yol bulma aramasıdır, yalnızca farklı bir veri düzeyinde farklı bir ayrıntı düzeyinde bir yol bulma aramasıdır. Yani gerçekten sahip olduğunuz bir yol ayrıntısı yol bulma kartı ve ince bir ayrıntı yol bulma kartı. Sonuçta bir aktörün izlemesi gereken yolu bulmaya çalışıyorsunuz . Bunun için yeni terimler icat etmek işleri karıştırıyor.
Olhovsky

1
Özür dilerim ama "izleyen yol" icat edilmiş bir terim değil. Endüstri tarafından üretilen belgeleri okuyun ve tekrar tekrar kullanıldığını göreceksiniz: sadece birkaçını bağlamak için bağlantı veya bağlantı . Maalesef sizi endüstride yaygın olarak kullanılan motorların / ara yazılımların NDA korumalı belgelerine bağlayamıyorum.
emartel

1
İlk bağlantınız cevapta verdiğim bağlantıdır btw. Tamam, yeterince adil, bu yol bulma türünü izleyen yol olarak tanımlamak adil olabilir. Sonuçta her ikisi de takip edilecek yolu bulmaya çalışıyorlar, ama bence bu durumda yanılıyorum ve ikinci bağlantınızda gördüğümüz şeyi aşağıdaki yol olarak adlandırmalıyız. Örneğin, kaba yol noktalarını kübik kıvrımlar / biezer eğrileri / yönteminizi buraya ekleyin. Bununla birlikte, cevabınızın önerdiği gibi, dinamik engeller etrafında yol bulmanın uygulanmasının mümkün olmadığına kesinlikle katılmıyorum.
Olhovsky
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.