Age of Empires II rastgele haritaları gibi hissettiren rastgele haritaları nasıl oluşturabilirim?


18

Age of Empires II'nin rastgele haritalar üretme şeklini seviyorum (iyi çeşitlilik, iyi biyom geçişleri, kaotik hissetmeden haritalar rastgele hissedildi), ancak stili çoğaltmak için mücadele ediyorum. Örneğin, Perlin gürültüsünü kullanmaya çalıştım, ama her şey ya çok homojen çıkıyor ya da değilse, Perlin değeri -> arazi sezgiselleri çeşitli dünya türlerini yapmak için çok hassas ve kırılgandır.

AoE2 harita tipini "Bilinmeyen" tanıtılan "100.000 olası harita" yı hatırlıyorum, bazı tohum numaralarının kullanımını önerdi, ancak gördüğüm çeşitliliği üretmek için tohum numaralarını nasıl kullanacağımdan emin değilim.

AoE2 rastgele haritaları gibi rastgele haritalar oluşturmak için hangi algoritmaları ve sezgisel tarama yöntemlerini kullanabilirim?

Daha spesifik olmak için düzenleyin:

Sorunum hakkında daha fazla düşünüp AoE2'nin rastgele harita motoru hakkında sevdiğim şeyleri inceleyerek, en büyük sorunumun su ve bitki yaşamının haritadaki dağılımını yönetmek olduğuna inanıyorum . Şimdi de bunu aklıma "anlamlı mantık geçişleri" ile bağladığımı görüyorum, ama bu farklı bir problem (Perlin gürültüsünü sürekli kullanmamın çözmeyi zorlaştıracağını umuyorum).

Haritalama motorları hakkında sevdiğim şeyleri vurgulayan birkaç AoE2 rastgele harita ekledim, bu da kendi çabalarımın çoğaltamadığını. Tüm ekran görüntüleri rastgele harita tipinden ("Özel" -> "Bilinmeyen") alınır. Oyuna takımadalar gibi belirli coğrafyaları kullanma talimatı vermedim.

Aşağıda kendi harita motorumdan görüntüler var. Her piksel bir AoE2 harita döşemesine karşılık gelir.

Projem için bir sorun, haritaların AoE2 haritalarından çok, çok daha büyük olmasını istiyorum. Bu nedenle, kullandığım motor ne olursa olsun, AoE2'nin kullandığı gibi harita başına tek bir dar biyom seti değil, her haritada tam bir biyom dizisi oluşturabilmelidir.

Age of Empires II harita

İç göller

İşte iç gölleri ve bir çeşit nehir görünümlü şeyleri içeren bir örnek. Haritanın nasıl dağılmış büyük miktarda su içerdiğini seviyorum, ama bu su hala biraz konsantre - imparatorluğunuzu inşa etmek için kullanılabilir büyük arazi alanları var. Tüm oyunu şehrinizi suyun etrafında planlayarak harcamanıza gerek yok.

Bağlı adalar

İşte oyunun adaları sürülebilir bataklıklarla birleştirecek kadar akıllı olduğu benzer bir örnek. Gürültüye dayalı bir algoritmanın bataklığı nasıl yaratacağını ve sadece bu yerleri hayal edemiyorum. Ayrıca, oyunun araziyi nasıl yarattığına dikkat edin, böylece her oyuncu kendi özel, büyük bir arazi alanına sahip olur. Rastgele arazi yamaları yaratmadı, sonra her bir oyuncunun başlaması için en az korkunç olanın hangisi olacağını tahmin edin.

Ada

Bu harita da suyun yoğun kullanımını yapar, ama böyle değil birçok iç göl bulunmaktadır. İlk görüntüyle karşılaştırın. AoE2'nin aynı yapı taşlarını kullanarak tamamen farklı coğrafyalar yaratma şeklini seviyorum. Perlin gürültüsünü kullanma girişimim burada başarısız oldu - ya kara kütlesini cüce eden muazzam genişleyen okyanuslar ya da 10.000 Göller Diyarı alıyorum. Ben de zor adaları için ikisini de buldum ve bağlı kıtaları (Kuzey / Güney Amerika düşünüyorum).

Kuru, gür Kuru çöl

Bu görüntüyü üstündeki görüntüyle karşılaştırın. Bir haritanın kuraklığının su seviyesine bağlı olmadığını gösterirler. İlk resimde neredeyse sudan yoksun, ancak ormanlar ve çimenler var. İkinci görüntü orta miktarda su içerir, ancak bir çöldür. Bunun mümkün olduğunu seviyorum (dünyanızda New Mexico veya Sahara ve Kosta Rika'ya sahip olmayı düşünün).

Kendi haritalarım

Harita oluşturmanın iyi bir yolunun, her biri farklı bir veri boyutunu temsil eden birden fazla Perlin gürültüsü katmanı katmanlamak olduğunu bir sürü yerde okudum. Popüler önerileri takiben, burada Whittaker tablosundan arazi türlerini seçerek yükseklik ve nem ile gittim .

İki perlin haritası aldım, her birinden değerleri basit bir şekilde tamsayılara ölçtüm if perlin_val < x { i=some_int } else if perlin_val < y..., sonra (yükseklik, nem) tamsayı çiftlerini bir arazi tipi tablosu (örneğin, [1,0] -> tropikal çöl, [1,1) ile eşledim ] -> otlak). Okyanuslar bu sisteme dahil edildi - yükseklik = 0 tanımlı okyanus.

g1_success

İyi bir varyasyon var ve birçok yönden gerçek bir dünya gibi hissediyor, ancak birkaç sorun var:

  • İlk olarak, okyanus derinliklerinde bir model yoktur. Kıyıya yakın sığ suların ve derin suların daha da dışarıya çıkmasını beklersiniz, nerede olduğu konusunda kafiye veya sebep yok

  • İkincisi, suyun tamamı okyanuslarda yoğunlaşır; göller veya nehirler yoktur, çünkü Perlin gürültüsü aniden bir kıtanın ortasında daha düşük bir değere düşmez.

  • Her biyomun miktarları arasında bir denge oluşturmak çok, çok zordur. Ben bu özelliği:

    • Perlin gürültüsü normal bir dağılım izler, bu nedenle her boyut eşlemesinin olasılığının nasıl ayarlanacağını tahmin etmek zordur

    • Birden çok boyutu dengelemeye çalışmak zordur - belki daha fazlasını isterim (2,3) bu yüzden elde etme ihtimalini yükseltirim (n, 3). Şimdi çok fazla var (3,3) ve her şey yanlış görünüyor.

    • Gürültüyü düzgün veriye sahip olacak kadar yakınlaştırdığımda, Perlin değerlerinin tam bir örneğini alamıyordum. Bu yüzden haritadaki dağılımlarımı önümde düzeltiyor, yeni bir rastgele harita yüklüyorum ve çok farklı sonuçlar elde ediyorum.

X-Ayrı su

Nehirler / göller sorununu üçüncü Perlin değerlerinden su yaparak düzeltmeye çalıştım. Bir ikili su / toprak kararı, daha sonra yukarıdaki şeylerin tümünü karaya uygulayın. Bu, su dağıtımını kontrol etmeyi büyük ölçüde kolaylaştırır (yine de mükemmel değil, ama daha iyi), ancak mantıklı olmayan birçok biyom geçişi olduğu sorununu ortaya çıkarır. Örneğin, yemyeşil otlakların ortasında açıklanamayan çöl yamaları, sahilde kar, vb. Ayrıca yukarıda belirtilen nedenlerden dolayı kara biyomlarının oranlarını kontrol etmek hala zordur.

Tek boyutlu hata

Yukarıdaki sorunlara baktığımda, Perlin gürültüsünü sadece bir boyuta eşleyen daha basit bir algoritma denedim. Şimdi 0 = derin okyanus -> 1 = sığ okyanus -> 2 = plaj ... -> N = kardan çıkan bir dizi arazi tipim var. Bu adalar ve kıtalar verirken ve her bir arazinin oranını dengelemeyi çok kolaylaştırırken, arazi türleri çok fazla kümelenmiştir. Her kara kütlesi, genellikle yüzeyine dağılmış arazi tipleri olmayan bir yükseklik haritasına benzemektedir. Her kara kütlesi yaklaşık olarak aynı özelliklere sahiptir, her zaman aynı sırada ve her zaman aynı halka benzeri şekildedir.


Orijinal geliştirme ekibinde olmayan birisinin sorunuzu gerçekten cevaplayabileceğinden emin değilim, ancak tohumun beklediğinizden çok daha düşük olduğunu öneririm. Tohum neredeyse kesinlikle temel harita türü başına farklı haritalar üretir ve bunların hepsini herhangi bir kombinasyona dahil etmek büyük olasılıkla 100.000'e ulaşmasını sağlar.
Magus

Bu soru konu dışı gibi görünüyor çünkü bir oyun oluşturmaktan ziyade zaten mevcut olan belirli bir oyun hakkında uygulama ayrıntıları istiyor.
Trevor Powell

@TrevorPowell Bu site için konu ile ilgili soruların yönergelerini inceledikten sonra soruyu yeniden ifade ettim.
spiffytech

Bu düzenlemeyi yorumumdan yaklaşık on saniye sonra yayınladınız. Şimdi bu hizmet! ;)
Trevor Powell

1
-1 Hala çok geniş düşünüyorum. "Hissedilen haritalar" ın ne anlama geldiği konusunda net olmanız gerekir. Bu soruya cevap vermek için konuştuğunuz konuya ilişkin özel örnekler gerekiyor. Prosedürel nesil, insanların düşündüğünden daha sanatsaldır. Sanat yaratma ve algılama öznel bir konudur. Odaklanmak istediğiniz belirli bir şeyi seçin ve yalnızca bu konuyu sorun. Bu sorunun kapsamı şu anda çok geniştir.
MichaelHouse

Yanıtlar:


9

Amit Patel'in prosedürel arazi üretimi için bir tür özlü kaynak olduğunu düşündüğüm mükemmel makalesine göz atın ...

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

Yaptığı en önemli şey, gürültü haritalarını değil, arazisini modellemek için grafik yapısını kullanmaktır (Perlin ve ark.). Resimlerini gömmeyeceğim, ancak makaleyi okudum ve bence farklı bir yaklaşım hakkında düşünmenizi faydalı bulacaksınız.

CIV / AOE tipi bir oyun yapıyorsanız, kaynakların yerleştirilmesi önemli olacaktır. Önemli kaynaklarınız çok nadir olamaz veya yüksek değerli kaynaklar çok yaygın olamaz. Her çokgenin belirli bir karakteristiği olan bir bölge olduğunu varsayarsanız (makalenin çizimlerine bakın, daha mantıklı olacaktır), seçtiğiniz bazı algoritmalara göre her çokgene kaynak atama görebiliyordum. Bir çokgendeki kaynakları komşular tarafından istatistiksel olarak önyargılı hale getirerek oldukça zeki olabilirsiniz, böylece bir çölün yanındaki bir orman nadir olabilir, ancak otlakların yanındaki orman daha yaygındır.


2
Amit'in rehberi Age of Empires için çok gerçekçi bir arazi üretiyor. :)
Seth Battin

Hehe evet, doğru. Ancak değişen boyutlarda (her birinin belirli bir arazi tipi olduğu) hücreleri kullanma temel konsepti bence bir yaklaşım olarak işe yarayacaktır. Arazi yüksekliği fikrini denklemden kaldırın.
Tim Holt

Amit'in makalesini inceledim, ancak tek bir adaya sahip olmak için çok sıkı bir şekilde optimize edildi. Yüksekliği kıyıdan uzaklığın basit bir işlevi haline getirmek, birden fazla ada veya daha büyük kıtalarla garip sonuçlar doğuracak ve su dağıtım yöntemi, manzarada sonunda okyanusa akan belirgin bir tepe noktası olduğunu varsayar. Amit'in planından arazi yüksekliğini kaldıracak olsaydım, biyom dağıtım fikrini projeme nasıl uyarlayacağımdan emin değilim.
Mart'ta spiffytech

5

Age of Empires 2 için rastgele harita komut dosyaları oluşturuyorum . Benim En yenisi HD sürümü içindir.

Age of Empires 2 için nasıl harita oluşturacağınızı anlamak istiyorsanız, RMS (Rastgele Harita Komut Dosyası) için mükemmel bir rehber var .

Age of Empires, komut dosyalarının nesil kuralları için rutin yazmalarına izin veren ve çok şey öğrenebileceğiniz uzman bir sistem kullanıyor. Bölgelere gelince, bunun sadece maskeleme alanlarının maskelenmesi ve maskelenmiş alanlara farklı komut dosyaları / rutinler uygulanması şeklinde olacağını düşünüyorum. Bir metin düzenleyicide açarak mevcut harita komut dosyalarının oluşturma kurallarını kolayca görebilirsiniz. Benimkini Not Defteri'nde yazıyorum

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.