Prosedürel olarak üretilmiş bir dünyada özellik bölgelerini nasıl tanımlayabilirim?


26

Bir ada inşa ediyorum. Klasik heightmap çözümünü kullanıyorum: bir tepe inşa işleviyle haritanın köşelerinden kaçınarak irtifa yapıyorum. Daha sonra perlin gürültüsü, biyomların üstesinden gelmek için bazı iklim değişkenleri veriyor. Şimdi, bir şekilde bağlı olan iki zorlukla karşı karşıyayım:

  • Cüce Kalesinde, dünya kuşağının zarif yönlerinden biri, oyun alanlarını nasıl "biliyor" gibi göründüğü ve dikdörtgen şekiller olmasa da isimleri veriyor. Ormanlarımı, nehirlerimi, tepelerimi… haritamı taramak ve alanlarını yorumlamak için ne tür bir algoritma kullanabileceğim hakkında herhangi bir fikrimi “tanıyabilmek” isterdim? Peki bunu nasıl saklarsınız? Ben "döşemeler nesnesinin" vektöründen oluşan bir temel C ++ grafiğini kullanıyorum.

  • Bu ada sadece doğal bölgelere değil, politik alanlara da bölünmelidir. Dağları ve nehirleri “doğal sınırlar” yapmak için kullanabilirim, ancak prosedürel olarak oluşturduğum haritayım bir krallık oluşturacak güzel “yerleşim bölgelerine” sahip olduğumu garanti etmiyor; Kendimi mikro krallıkların çevrelediği dev bir "şerit şekilli" siyasi alana sahip bulabilirim. Bir başka olasılık, bir şehir veya kale için uygun alanları aramak olabilir. Sonra, etrafındaki politik bir alanı "büyütün". Fakat yine de, kendimi geliştirmeye çalışmadan önce bazı iyi bilinen algoritmalara sahip olmak istiyorum.

Bu soru, biraz fazla belirsiz olarak yorumlanabilir, bu yüzden tekrar ifade etmenin bir yolu olabilir: usule göre oluşturulmuş bir dünyayı oyun için uygun alanlara nasıl (değiştirmeden!) Bölmek? Yardımlarınız için şimdiden teşekkürler.


Düzeltme için teşekkür ederim ve ingilizcemin kötü kalitesi için üzgünüm :)
Raveline

İngilizcen harika, sadece "başlık" tercihen StackExchange sitelerinde bir soru olarak ifade edilir.
dlras2

Yanıtlar:


21

Amitp , poligonal harita oluşturma konusundaki görevinde açıklandığı gibi, çeşitli bölgeleri tanımlamak için su havzalarının kullanılmasını önermektedir . Su havzaları en iyi demosunu kullanarak bir harita üreterek görülür . Kıtaları alt bölümlere ayırmak için su havzalarını kullanmanın avantajı, kıyılara dik sınırlar sağlaması, dağların ise genellikle paralel sınırlar sağlamasıdır.

Coğrafi bölgeleri alt bölümlere ayırıyor olsaydım, haritamdaki çeşitli biyomlarda dağ, su havzası ve kenar tespiti kombinasyonunu kullanırdım.

Ayrıca, siyasi bölgelerin genellikle birçok coğrafi bölgeye yayıldığını belirteceğim. Her bölge için bir cazibe derece tayin ardından, ilk coğrafi bölgeleri üretecek (bir sahil oluşuyor? İyi çiftlik arazi orada altındır) ve seyahat maliyeti (dik arazi? Ağır ağaçlar ?.) Sonra kullanarak favori pathing algoritması , bir oluşturmak istenen bölgeler arasında hareketin ısı haritası. Bunlar sizin yolunuz olacak ve siyasi sınırlarınızı oradan inşa edebilirsiniz. Bu sınırlar genellikle içlerinde birçok karayolu ve aralarında daha az karayolu olacaktır.


1
Yardımın için teşekkürler. Amit'in çözümünü zaten biliyordum ve oldukça zarif bulmama rağmen, arkasındaki matematik hakkında yeterince bilgim yok (onları incelemeliyim, ki er ya da geç, ama şimdi değil!). Havza açısından düşünmek bana kesinlikle yardımcı olabilir ve nehir kuşağı algoritmasını düzeltmek çok zor olmamalı. Yollar ve siyasi sınırlar oluşturma konusundaki çözümünüzü seviyorum, tam olarak nasıl uygulayacağımı düşünmeliyim ama fikir harika!
Raveline

@Raveline - Politik sınırları oluşturmayı kullanıyorsanız, burada yorum yapın ve bana bildirin! Nasıl sonuçlandığını görmek isterim.
dlras2

13

Dan Rasmussen'in cevabına eklemek için :

Ben Gürültü Perlin gelen anahtarlı ana nedenlerinden (biri bu proje poligonlar (kullanarak) Bu projeyi ) çokgenler bazı güzel sağlamalarıdır yapıyı geniş alanları (siyasi bölgeleri, ormanlar, vb çöller, adlandırılmış alanları, sınırları,) atamak için. Yapıdan başlamak ve daha sonra haritayı oluşturmak poligon görüntülemeye benziyor - nispeten kolay bir şey. Haritadan başlamak ve ardından yapının çıkarımı, bilgisayar görüsüne benzer - nispeten zor ama mümkün bir şey. Hem yapıyı hem de haritayı istiyorum, bu yüzden yapının tepesinde bir harita oluşturmanın nispeten kolay olan yoluna gitmeye karar verdim (düğümler ve kenarlar).

O zaman bile, ürettiğimden daha büyük yapılar istediğimi öğrendim. Su havzaları bu büyük yapıları inşa etmek için bir girişimdi, ancak çokgenleri birlikte gruplamak için daha fazla yaklaşım denemeliyim. Mutlu olduğum bir şey bulamadım.

Cüce Kalesinin nasıl yaptığını bilmiyorum. Bu adamlar ne kadar zekice olursa olsun, sofistike bir "bilgisayar görüşü" algoritmasına sahip olsalar bile şaşırmam.


Akıl yürütmeyi anlıyorum, ama yolunuzun o kadar kolay olduğundan emin değilim ... Projem oldukça alçak gönüllü olduğundan, çok karmaşık olmayan bir şey eklemeye çalışacağım, ancak çok daha fazla algoritma çalışmak anlamına geleceği için çokgenler olmadan ima etti. (Not: web siteniz harika bir ilham kaynağıdır ve bayıldım!)
Raveline

3
poligonal harita oluşturma makalesi mükemmeldi.
Raine

3

İlk sorunuz için, en iyi tahminim doğal bölgelerinizin sınırlarını (orman, tepeler, ...) bulmak için bir kenar algılama algoritması kullanmak olacaktır. Bu tür bir problem için birçok algoritma vardır.

İkinci soru için, kendi fikrinizi bir kale (genellikle iyi savunma için ve temiz suya yakın bir tepenin üstüne) oluşturmak için kullanabilir, ardından her kalenin etrafındaki bölgelere sahip olmak için bir voronoi algoritması kullanabilirsiniz. Sınırları daha gerçekçi hale getirmek için gürültüyü veya biyom sınırlarınızı kullanabilirsiniz.

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.