3D Perlin Gürültü ile oluşturulduğunda yüzer arazi nasıl kaldırılır?


10

Şu anda 3D Küpleri ile birlikte rastgele arazi oluşturmak için 3D Perlin Gürültü kullanıyorum.

Benim sorunum, arazimde makul yükseklikler elde etmek için gürültü işlevini ölçeklemede yatıyor gibi görünüyor. Sadece bir oktav kullanılırsa, gürültüye ilişkin tüm noktalar açık bir şekilde enterpole edilir ve bu da oldukça düzgün veri sağlar. Ancak, çıkıntılar / mağaralar / tırtıklı arazi elde etmek için, değişken genliklere sahip birden fazla oktav kullanmam ve / veya elde edilen değerleri haritadan istediğim 'maksimum' yüksekliğe ölçeklendirmem gerekiyor.

Bir şey kaçırıyor olabilirim, ancak 3D perlin gürültüsüne sahip yürüyen küpleri kullanarak, düzenli olarak yüzer arazi parçaları alıyorum.

Bunu nasıl düzeltebileceğim veya başka gürültü işlevleri varsa, açıkladığım gibi sonuçlar almak için kullanabileceğim herhangi bir fikir var mı? Tepeler / vadiler / dağlar / göller / vs istiyorum. Haritanın geri kalanından ayrılan kayan bitlere gerek yoktur. Bence bu, Minecraft'ın bazen kuşakta gökyüzünde süzülen bir arazisi olduğunda sahip olduğu şeyle benzer bir sorun olduğuna inanıyorum.

Yardımlarınız için teşekkürler, Efsaneler

Yanıtlar:


9

Muhtemelen yüzer araziden tamamen kurtulmanın tek yolu bağlantıyı test etmektir. Haritanızın boyutuna bağlı olarak, bu bir seçenek olabilir. Bunu, dünyanızın en altındaki gibi bir taban noktası seçerek yapabilirsiniz. Sonra tüm voksellerinizin şunlardan biri olduğundan emin olun:

  1. Baz istasyonuna bağlı.
  2. Tabana bağlı bir voksel bağlı.

Muhtemelen bilinen bir bağlantı noktasından (dünyanızın alt kısmı gibi) başlayıp, daha sonra ilk olarak bağlı voksellerin çapraz geçişini yapmak oldukça iyi çalışır. Gitirken vokselleri bağlı olarak işaretlediğinizden emin olun. Bunu yığın başına yapabilirsiniz.

Ayrıca, yüzer araziyi en aza indirgemek, ancak tamamen kaldırmak için daha az pahalı yol vardır.

  • Gradyan sapması : Katı voksellerin gradyanla yerleştirilmesini saptırabilirsiniz. Degrade işlevi, "zemin seviyesinin" üzerine çıktıktan sonra biraz keskin bir şekilde düşecektir. Bu makale bir degrade kullanmaktan bahsediyor ve başka düzgün ipuçları var.

  • Yükseklik harita gürültüsü : Bunun yerine yükseklik haritası olarak gürültü üretebilirsiniz. Bu, çıkıntıları ve mağaraları kaldıracaktır, ancak bunları ek bir çıkarıcı gürültü katmanı ile simüle edebilirsiniz.

  • Daha az gürültülü gürültü : Arazi sesinizde daha az oktav kullanın ve çıkıntılar ve mağaralar almak için eksiltici gürültü üretin.


Arazi sadece bitişik yığın üzerinden bağlanabilir, eğer oradan bir çıkıntı varsa.
Loren Pechtel

@Loren: Yine de gayet iyi. Motor parçaları tam dizine göre ele almanıza izin verdiği sürece, sorun olmadan çalışır.
Phil

@LorenPechtel Her yığın için yapabileceğinizi söyleyebilirim, ancak bir yığının kenarına geldiğinizde bitişik parçaları kontrol etmeniz gerekir. Bu, yeni arazi oluştururken ve bitişik parçayı oluşturmamışken bir sorun olabilir. Potansiyel yüzer araziye sahip olduğunuz bu duruma geldiğinizde, bitişik yığın oluşturabilir veya "ana kaya" veya geçerli yığınla bilinen bir bağlantı bulana kadar vokselleri ayrıştırmak için gürültü algoritmasını kullanabilirsiniz.
MichaelHouse

0

cevaplamak için çok geç olabilir, ama şimdi bu voksel arazi oluşturma olayıyla başladım, Perlin Noise ile ve bu yüzen parçalar olmadan araziyi yaratmanın bir yolunu buldum. Bunun size yardımcı olabileceğini düşünüyorum. Bu yüzden, araziyi oluşturmak için önce o yükseklik haritasından pikselleri okuduğumdan bir yükseklik haritası oluşturuyorum. Şimdi ilginç kısım geliyor, bu yükseklik haritasındaki her pikselin "parlaklık" (aslında gri tonlamalı) değerini okudum ve bu bana haritanın belirli bir kısmı için yükseklik veriyor, sonra bu yükseklik haritasının arazim yukarıdan görüntülendiğinde, yani bir yükseklik haritasındaki bir pikselin gri tonlama değeri (arazim "maxHeight" ile eşlendikten sonra) ise, diyelim ki 30, bu, arazimin o belirli noktasında y ekseninde yalnızca 30 voksel üreteceğim ve bu da bana yüzen parça olmayan bir arazi verdiğim anlamına geliyor. Mağaralar vb. İstiyorsanız, bu mağaraları oluşturmak için orijinalin (yüzeyin altında) başka bir gürültü uygulayabilirsiniz. Umarım bu sizin için çalışır.


1
Bunun yukarıdaki cevabımdaki ikinci madde işaretine benzediğine inanıyorum.
MichaelHouse
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.