3D dünya için nasıl bir Navigasyon Izgarası oluşturulur?


11

Bu soruna bir çözüm bulmaya çalışıyorum. Ben 3D uzay için kareler şeklinde x, y katlanmış koordinatlara kilitlenmiş köşe ızgara biçiminde bir gezinti kafes oluşturmaya çalışıyorum. Ama bununla ilgili bir yol bulmaya çalışırken sorun yaşıyorum.

Recast kütüphanesine bakmayı denedim. Oldukça sağlam bir yöntem, ancak görünüşe göre daha büyük haritalar ve açık alan ile yavaşlıyor. Ayrıca yükseklik haritası ile dünya alanı için nasıl köşe ve kenar ürettiklerini bilmiyorum.

Bir sonraki düşüncem Unreal Engine 3'ün eskiden yaptıklarını yapmaktı.

https://udn.epicgames.com/Three/NavigationMeshReference.html

Bu kafes oluşturmak için raycast kullanmak olacaktır. Rayiklerin nasıl durduracağını anlayamadım.

Yani ... bir sonraki seçeneğim kutu, muhtemelen bir kutu dökümdü. Gücü 2 olan bir boyuta sahip bir alt bölüm oluşturun. Kutuyu ızgaraya hizalayın ve dikdörtgen prizmaları ışın olarak aşağıya doğru çekin. Zeminin bir parçası olan bir geometri parçasına düşerse ve dikdörtgen kesişmiyorsa, orada bir kare bırakın. Ve birimin sınırlarına ulaşılana kadar devam edin. Kenarların birleştirilmesi gerekip gerekmediğini kontrol etmek için, iki çift köşe arasındaki eğimin yürünebilir eğimde olup olmadığını kontrol edebileceğimi varsayalım, bu doğruysa birleştirin.

Başlıca problemlerim ... bu pek uygun görünmüyor. Düşünmeden, tahminde süreç çok katmanlı bir seviye için O (N ^ 3) 'tür. Hangi oldukça kötü alabilirsiniz.

Ve son bit otomatik olarak bu karelerden dikdörtgen gruplar oluşturmak içindir. Bunu nasıl yapacağımdan tam olarak emin değilim. Unreal uygulaması onları eğimlerle ayırır. Ancak, ızgara biçimini korumaya çalışıyorum. Yani bu tamamen gerekli değil. Sorun hala, yol bulma sürecini döşeme başına temele ayırmak için büyük dikdörtgen fayanslar oluşturmaya devam ediyor. Fayanslar çok büyük veya çok küçük olamaz.

Yani sorular ...

Bu kirişli navmesayı üretmenin etkili bir yolu ne olurdu? Ve fayans oluşturmak için iyi bir yol ne olurdu?


Mesh'i ne zaman üretmeyi umuyorsunuz? Derleme zamanı, Yükleme zamanı veya Gerçek zamanlı? Aynı sorunla mücadele ettik ve senaryomuz için aşırı yüklenmeye karar verdik (üst üste binen yollar olmadan yukarıdan aşağıya bir atıcıda yükleme zamanı üretimi), dört ağaç tabanlı bir yaklaşımla gitmeye karar verdik. Bu bizim için yeterince işe yaradı. Bu yüzden sorduğum şey, buna gerçekten ihtiyacınız var mı, yoksa ilk gereksinimlerinizi karşılayan en kolay çözüm nedir, çünkü bu bir zaman alıcı olabilir. Eğer iyi bir çözüm yönetiyorsanız, bunu nasıl düzelttiğinizi duymak isterim.
Niels

@Niels Önceden inşa etmeyi, sonra oyuna yüklemeyi planlıyorum.
moonshineTheleocat

O zaman zaman tüketimi ilk dezavantajdan fazla olmamalıdır, çünkü oyuncu onu beklemeyecektir. Çalıştığınız bir şeyden sonra her zaman optimize edebilirsiniz.
Niels

Seviyeniz ne kadar büyük? Büyük oyunlarda yeniden kullandık ve sorun yaşamadık - sadece tiie değerlerini ayarlamanız gerekiyor.
Steven

"Izgaralı" biti kaçırdığınızı düşünüyorum. Bu, yeniden kullanılan karolarla tam olarak aynı değildir. Böyle bir şeyi yapmak için yeniden biçimlendirmeyi nasıl yeniden anlamaya çalışıyorum. Ama çoğunlukla kabus oldu.
moonshineTheleocat

Yanıtlar:


1

Temel bir 3D dünyası, çoğu oyun motorunda uygun şekilde inşa edilebilen bir gezinme ağıyla temsil edilebilir. Aktör çokgen kenarları boyunca hareket edebilir.

Bu basit bir çözüm olurdu. Yol bulma ve bir navmesh oluşturma için birçok algoritma vardır.

Bir süre önce okuduğum bir şeyi paylaşmak istiyorum.

Example01

Bu, oyun dünyamızı kare kiremitlere ayırabileceğimiz olası bir çözümü açıklıyor. oyuna kare bir karo eklendiğinde (oyuncu bir alana / prosedürel araziye yaklaştığında) bir kare karo eklenir. Bununla birlikte, artık tüm navmesh'u hesaplamak zorunda değiliz. sadece bu kutucuk için hesaplar ve mevcut grafiğe ekleriz. Burada önemli performans artışı.

Example02

Bir sonraki sorun, bir önceki örnekten gelen pürüzlü harekettir. Gelecekteki dönüşleri göz önünde bulundurarak ve yönü genelleştirerek zikzak hareketini çok azaltacağını ve hareketi akıcı hale getireceğini anlayabiliyorum. Ayrıntılı animasyonlu oyunlar vermiyor ama navigasyonun çoğunlukla pişirildiğini varsayacağım bazı açık dünya oyunlarında bunu fark edebilirsiniz.

Soruya gelince , navlun üreten algoritmalar listesinde Kromster'ın cevabını kontrol etmenizi tavsiye ederim .

Ayrıca , örneklerin bir parçası olduğu Sol 4 Ölü AI Sistemleri'ni de inceleyin. Çok daha ilginç konular ele alındı

İyi şanslar.


0

neden sadece oyuncu için yerel hale getirmek değil, oyuncu takip eden küçük bir ızgara yapmak ve her kavşak altında enine edilebilir olup olmadığını kontrol eder, orada bir zemin var gibi ve orada olup olmadığını görmek için bir ışın döküm yapmak yaklaşmakta olan herhangi bir tarafta bir duvar / bina ..


İyi bir fikir, ama nihai hedefler için uygun bir fikir değil. Büyük bir dünyayı desteklemem ve yapay zekanın bir kıtanın bir tarafından kıtanın başka bir tarafına geçmesine izin vermem gerekiyor. Bu kadar yapılabilir ama daha yüksek düğümleri oluşturmak için sabit bir nav ızgara olması gerekir.
moonshineTheleocat

0

Bu her yerde gördüğüm bir problem. Hile "endişelerin ayrılması" dır. "Ne diyeceksin?", Düşündüğünü duydum. Ekranda görüntülenen "veri yapısı" ne DEĞİLDİR. Görsel oluşturmak için görsellerin verilerden ayrı tutulması önemlidir. Bunu yapmak, altta yatan yeni yazılım sürümleri yayınlandığında oyununuzu daima "geleceğe kanıtlar".

Oyun dünyanızı temsil edecek bir veri yapısı (aka: model) oluşturun. Sonra veri yapısı modelinin bir "görünümünü" oluşturun. Dünyayı bir dama tahtası ızgarasından altıgen ızgaraya değiştirmek istiyorsanız, veri yapısı (model) aynı kalır, ancak ekran farklı bir görünümü "boyar" (oluşturur).


4
Endişeleri ayırmak genel olarak iyi bir uygulama olmakla birlikte, bu cevap şu anda soruyu cevaplamaya özgü detaylara açıktır (yani, belirli bir dünya geometrisi setinden uygun bir ızgara tabanlı yol bulma modelinin nasıl oluşturulacağı). Bu model ne olursa olsun, seviyeyi çizmek için kullanılan verilerden ayrı olması gerekir, ancak soruyu cevaplamak için bu yol bulma modelini oluşturmak için hala bir yönteme ihtiyacımız var.
DMGregory

-2

Çift dizi yapın. Ve sonra bir nesne / nesneler geçilemiyorsa, diziye konumun geçilemez olduğunu bildirmek için bir yöntem kullanın. Bir AI hareket etmeye çalıştığında, çift diziye bakacak ve pasif olup olmadığını göreceklerdir.


4
Bu diziyi doldurma yöntemi zor kısmıdır. ;)
DMGregory
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.