Teraslı dağ özellikleri


10

Birkaç gün önce bir portföy / blog sitesinde bulduğum bir prosedür arazi etkisini çoğaltmak istiyorum .

Teraslı arazi

Siteden alıntı yapıldığında, teraslama, "güzel kanyon özellikleri oluşturmak için [son yüksekliği] belirli bir yükseklik aralığında bir sönümleme değeri ile çarparak üretildi."

Merak ediyordum, kimse bunun için daha teknik bir örnek veya prosedür sağlayabilir mi? Geçtiğimiz hafta boyunca, prosedürel arazi / doku yöntemleri ve uygulamaları hakkında çok fazla araştırma yapıyordum ve öğrendim, ancak hala 'kelepçelemenin' ne olduğunu ayrıntılı olarak açıklayan hiçbir şeyle karşılaşmadım ve hayal kırıklığına uğradım.


Ha, gerçekten temiz. Ne demek istediğini de anlayamıyorum. Ahbana bir e-posta göndermeyi denedin mi ("kişi" altında bulunabilir)?
Draco18s artık SE

FYI: Alıntı ve kaynağınızda terim 'sönümleme', ancak daha sonra sorunuzda 'sıkıştırma' kullanıyorsunuz.
Pikalek

Yanıtlar:


11

Projelerinin ne yaptığını bilmiyorum ama yüksekliğe yeniden şekillendirme işlevi uygulayabilirsiniz. İşte h0.0'dan 1.0'a kadar olan ve 0.0'dan 1.0'a kadar yeni bir yükseklik döndüren bir örnek :

function R(h) {
    var W = 0.4; // width of terracing bands
    var k = Math.floor(h / W);
    var f = (h - k*W) / W;
    var s = Math.min(2 * f, 1.0);
    return (k+s) * W;
}

Çizildiğinde şu şekilde görünen bir işlevdir - x ekseni orijinal yükseklik ve y ekseni yeni yüksekliktir:

Yükseklik yeniden şekillendirme işlevi

Kendi koduma uyguladım ve bunu aldım:

Teras fonksiyonunun çıkışı

Düzgün efektler elde etmek için herhangi bir yeniden şekillendirme işlevi koyabilir veya bunları zincirleyebilirsiniz. Çıktının düz bölümleri olduğunda teraslar alırsınız.


Yemin ederim sorucunun sorusunda bir terasa çıkan düzgün bir yol var, ama tekrar baktığımda bunun bir yanılsama olduğuna eminim. Ama gözlerim hala hayır konusunda ısrar ediyor, orada bir yükseklik değişikliği var (görüntünün merkezi üst köşeye / sol üst kenara). Eğer yükseliş olmazsa, bu cevap doğrudur.
Draco18s artık SE

1

Sönümleme , salınımlarını azaltma, kısıtlama veya önleme etkisi olan bir salınım sistemi içinde veya üzerinde bir etki için fizik terimidir.

Kaynak makalenizin bir yazım hatası olabileceğini ve genellikle belirli bir aralıkla bir değeri kısıtlamayı ifade eden sıkıştırma anlamına geldiğinden şüpheleniyorum .

Görsel efekti elde etmek için, arazi inşa edilirken gürültü bantlarını sıkıştırarak benzer bir şey elde edebilirsiniz, ancak @amitp tarafından verilen çözüm orijinal tanımla daha yakından eşleşir ve muhtemelen uygulanması ve ayarlanması daha kolaydır.

Üçüncü seçenek erozyon tekniklerini kullanmak olabilir. Eğimli arazinin bir bölümünü bırakarak bir uçurum ve plaj kombinasyonu oluşturmak için bir tane . İşte zirveleri platolara aşındırabilen bir başka .


0

Çok uzun bir aradan sonra , etkinin nasıl elde edildiğini anlıyorum ve inanılmaz derecede basit. Bu etkinin 4 kısmı vardır:

  • Arazinin başlangıç ​​yükseklik haritası
  • En düşük teras yüksekliği h1 ve en yüksek teras yüksekliği h2 olan bir teras 'aralığı' tanımlamak
  • Teras yüksekliği aralığında zemini düzleştiren sönüm değeri
  • H1 ve h2 değerlerini değiştirmek için ikinci, daha uzun menzilli bir yükseklik haritası, yani teraslar arasındaki sürekli rampalar bu şekilde oluşur (daha büyük veya daha küçük teraslar oluşturarak h1 ve h2'yi bağımsız olarak artırmak veya azaltmak için üçüncü bir yükseklik haritası kullanılabilir)

Efekti oluşturma prosedürü aşağıdadır:

h1 = 1
h2 = 2
damp = .01

h = gen_noise(position)
hm = heightmod_noise(position)
if h1+hm <= initial_terrain_height =< h2+hm
  th = h * damp
elseif h2+hm < h
  th = h - (h2-h1) * damp
else
  th = h

(Tabii ki, teraslama etkisi uygulandıktan sonra arazinin yüksekliği)

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.