Minecraft'a benzeyen mağaralar nasıl üretilir?


34

Bir süredir 3D prosedürel dünya üzerinde çalışıyorum ve mağara sistemleri eklemeye başlamak istiyorum. Şu anda daha yumuşak arazi için Marching Cubes ile birlikte arazi üretimi için 2D / 3D Perlin Gürültüsü kullanıyorum. Uzun zamandan beri birbiriyle bağlantılı mağaralar söz konusu olduğunda güdük oluyorum.

Minecraft'ın mağara sistemleri gibi bir şey daha elde etmeyi umuyorum. Çok bağlantılı görünüyorlar, neredeyse her yöne rastgele ayrılıyorlar ve mağaradaki hemen hemen her nokta boyunca eşit derecede bir yarıçapa sahip oldukça dairesel bir görünüme sahip olacak (en iyi ifadeler değil, başka türlü nasıl yazılacağından emin değiller) .

İstediğim gibi mağaralar üretmek için en büyük zorluk, dünyayı anında yaratmak istediğimdir. Dünya şu anda chunk tarafından chunk tarafından üretiliyor, oyuncunun olduğu yerden başlıyor ve oradan dışarıya doğru çıkıyor. Dünyanın hiçbir yerini yaratmak istemezdim ve sonra bir gezinme deseni, hücresel otomatlar vb. Kullanarak mağaraları kazmak isterdim.

Bunun için kullanılabilecek iyi bilinen herhangi bir algoritma var mı? Öyleyse, benzer bir şeyi nasıl yaptıklarını paylaşmak isteyen var mı? Herhangi bir yardım için çok minnettar olurum.

İyi bir örnek: görüntü tanımını buraya girin


5
Buraya bir göz atın ve aşağı kaydırın.
William Mariager

Son 24 ay içinde, yapmaya çalıştığınız şeyi nasıl yapacağınız konusunda derinlemesine tartışılan bir oyun geliştirici dergisi sorunu var. Sitelerine isabet ederdim.
Joey Green,

@JoeyGreen Derginin adı ne? Yoksa kendi sitelerine bir bağlantınız var mı?
jumpnett

1
Buna oyun geliştirici dergisi denir. gdmag.com . Son 10+ yıl boyunca abonelik alabilir ve derginin pdf versiyonlarını alabilirsiniz. Eğer kaydolursanız, önceki sayıları araştırmanın ve istediğiniz konuyu bulmanın bir yolu vardır.
Joey Green,

Yanıtlar:


30

Minecraft mağaraları "perlin kurtları" yöntemi ile üretilir. Jeneratör arazide yayılıyor ve bir tüneli açıyor. Minecraft gelmez o arazide bağlantısız cepler bırakmak eğilimindedir, çünkü mağara oluşumu için gürültü perlin 3d kullanın. Minecraft mağaraları, çok erken Alfa sürümlerinden bu yana 3d Perlin gürültüsü ile oluşturulmamıştır.

İşte "perlin solucanı" yöntemiyle oluşturulan Gnomescroll mağaraları .

Gnomescroll Mağara Sistemi İlk Kişi Görünümü 1

Gnomescroll Mağara Sistemi İlk Kişi Görünümü 2

Gnomescroll Mağara Sistemi Üçüncü Kişi Görünümü 2

Bunlar libnoise öğreticisinden çıkan "Perlin Worms" kütüphanesidir. Teknik Minecraft'ta üretilen mağaraları yakından üretir.

Linoise Eğitimi Perlin Solucanlar

Yılan parametreleri, mağara sisteminin kalitesini etkiler ve mağaraların ne kadar dikey olduklarını ve yönlerini ne kadar hızlı değiştirdiklerini belirler. Minecraft branşındaki mağaralar ve mağara tünelinin yarıçapı mağaraların uzunluğu boyunca değişmektedir.

Minecraft mağaraları yığın olarak yığın halinde oluşturur. Gereken yaklaşım karmaşıktır ve hiç kimse henüz sunucu mühendislerinin ilgisini çekmemiş olsa da Minecraft'ın mağara jeneratörünü mükemmel bir şekilde tersine çevirmedi.

En muhtemel yaklaşım, sonsuz harita oluşturuldukça ve dışa doğru genişledikçe yılan mağaralarını yığın öbek oluşturur. Mevcut parçadaki mağaralar, bazı N'ler için en yakın N parçalarındaki mağara tohumlarının fonksiyonlarıdır. Mağaraları tohumlamak için yığın koordinatlarının bir fonksiyonu olan rasgele bir sayı üreteci kullanarak, bir parça için mevcut parçadaki mağaraları hesaplamak mümkündür. sonsuz harita yalnızca sınırlı bir öbek yarıçapı içindeki öbekleri değerlendirirken.


3
Bu "perlin kurtları" olayı hakkında bilgi edinmek için biraz bilgi ya da kaynak ekleyebilir misiniz?
David Gouveia

1
Bu "perlin solucanlar" konulu
HaltingState 15

Zorunlu değil, ancak bu son paragrafı açıklarsanız, çok memnun olurum. Bir solucan oluşturmak için solucan başına bir başlangıç ​​noktasına ihtiyacınız olacağını varsayalım; bu, N'nin bir solucanın maksimum uzunluğu olduğu herhangi bir oyuncunun N topluluğunun içinde olması gerekir.
Efsaneler 14:12

3
Kesinlikle. Her solucanın bir başlangıç ​​noktası vardır ve belirli yığın yarıçapının dışına çıkarsa sonlandırılır. Belirsiz olarak yığın koordinatlarının bir fonksiyonu olan sözde rastgele sayı dizisini üreten rastgele bir sayı üreteci vardır. Bu rasgele sayılar, bu düğümde solucanların nereden ve ne kadar köken aldığını belirler. Solucanlar ayrıca dallanabilir. Eğer solucanlar daha “yerel” ise ve küçük bir öbek yarıçapından daha fazla havalandırmıyorsa, işlem yükü azalır.
HaltingState

Belki de duymak istediğim tam olarak değil, ne bekliyordum. Tekrar teşekkürler HaltingState. :)
Efsaneler

7

Arazinin sağlam olduğu alanların içinde bir noktalar bulutu oluşturacağım - farklı yoğunluklarla deneyler yapabilirsiniz. Sonra tüm noktaları bağlamak için minimum yayılma ağacı gibi bir algoritma kullanırdım - bu her alanın erişilebilir olmasını sağlayacaktır. Sonra düğümden düğüme büyük boşluklu (havadan oluşan) alanlar çizin (yani kalın bir voksel çizgisi).


Bununla tam olarak ne demek istediğinizi tam olarak anlayamayabilirim, ancak dünya üretirken öbek yığınında bunu nasıl yapabilirim?
Efsaneler

Muhtemel bir yol, her bir yığın içindeki minimum yayılma ağacını ayrı ayrı oluşturmak, ardından iki yığın arasında en yakın iki düğümü bularak her bir yığınını bağlamaktır. Varsayılan arazi algoritmanızla bir yığın doldurulduktan sonra, minimum yayılma ağacının etrafında oyulabilirsiniz.
Gavan Woolery,

1
Bir başka (daha kolay) çözüm, daha az verimli ve muhtemelen "gürültülü" olmasına rağmen, bir yolu oymak için Brownian hareketi kullanmaktır (rastgele dolaşan bir karınca gibi).
Gavan Woolery


1

Tünel olup olmadığını belirlemek için her yığın için değerler atamak için bir gürültü işlevi kullanın ve sonra mağaraların nereye yerleştirileceğine karar vermek için bunları kullanın. Tünelleri istiyorsanız, daha fazla gürültü işlevi (farklı tohumlarla) kullanın ve tünellerin olup olmadığını belirlemek için değerlerini kullanın. Bundan sonra, tünelleri oluşturmak için sıradan "çizim" işlevlerini kullanın. Her şeyi daha gerçekçi hale getirmek için, bahsedilen mağaraların / tünellerin orijin noktaları için rastgele yer değiştirme yapmak üzere daha fazla gürültü kullanın.

Birden fazla gürültü işlevini kullanmak istemiyorsanız, daha büyük mesafelerde problama yapabilirsiniz - örneğin, (2,2,2) 'deki öbek için noise3d (2,2,2) yapmak, noise3d (2,2, 16) ve (2,2,16) 'ı bir değer, (2,2,17)' yi ikinci değer, vb. İçin kullanın.

Dünyadaki mağara yoğunluğunu değiştirmek için, bahsedilen değerleri etkileyebilecek başka bir daha düşük frekans işlevi kullanın.

Bu durumun dağınık mağaralara neden olması durumunda, söz konusu birbirine bağlı noktaların mesafesini artırın veya algoritmayı ayarlayın.

Minecraft'ın böyle mağaralar yapıp yapmadığından emin değilim (sanırım olmasına rağmen), ancak bu çözüm tatmin edici sonuçlar vermeli.


-5

burada

Yukarıdakiler gibi mağaraların çoğu Perlin solucanı kullanmasına rağmen , bazı insanlar bunu elle yapmayı tercih eder. Bu yolla blok için tam olarak bloklarını istedikleri gibi yapabilirler. Perlin kurdu kullanarak yapılan bir mağara yanlış olabilir ve mağarayı sadece 5 feet yüksekliğinde ve 6 feet genişliğinde yapabilir, bu 10 feet yüksekliğinde ve 15 feet genişliğinde olmasını isteyebileceğiniz gibi yanlış olabilir.

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.