Bir küre üzerinde nasıl prosedürel gürültü üretebilirim?


15

Bir kürenin yüzeyinde işlemsel gürültü oluşturmak istiyorum (örn. İşlemsel olarak gezegenler veya mermer dokulu toplar üretmek için). Tabii ki, sadece standart bir gürültü algoritması alıp kürenin üzerine haritalandırabilirim, ancak bunun kutuplara veya başka yerlere çarpıklıklar gibi bir uçağın bir küreye yansıtılmasıyla ilgili tüm sorunları var.

Ses gürültüsü üretebileceğimi ve küreyi "kesebileceğimi" sanıyorum, ancak bu gereksiz yere verimsiz görünüyor - ve gürültünün ızgara tabanlı bazı eserleri varsa, bunlar yine de küre üzerinde eşit olarak görünmeyecekti. Ayrıca, en azından Simplex parazit durumunda, 2D parazitleri 3D parazitten kesmek genellikle 2D parazit üretmekten farklı görünür.

Bu sorunlardan kaçınmanın herhangi bir yolu var mı, ör. Küre üzerinde doğal olarak gürültü üretmek? Gürültü en azından Perlin gürültüsünün kalitesine , ideal olarak Simplex gürültüsüne sahip olmalıdır .


Belki de GPU Gems 3'te görüldüğü gibi triplanar projeksiyon ? Soru, farklı projeksiyonlar arasında harmanlandığında gürültünün bulanık mı yoksa başka türlü istenmeyen mi olacağıdır.
Nathan Reed

Yayına başka bir olası yöntem ekledim. Sorunuzu daha ayrıntılı gereksinimlerle açıklığa kavuşturmaya değer olabilir. Örneğin, 2B bir 3D parazitli dilim neden görsel gereksinimlerinizi karşılamıyor? Performans gereksinimleriniz nelerdir?
John Calsbeek

@JohnCalsbeek Dürüst olmak gerekirse, elimde zor şartlar yok. Bu sadece merak ettiğim bir soruydu, hangisi özel beta için bir şans vereceğimi düşündüm. Tabii ki, bir 2D dilimin 3D gürültüsünden kesilmesi birçok uygulama için yeterli olacaktır, ancak eminim bazı performans etkileri ve anizotropiler (fark edilebilir veya olmayabilir). "Kürenin 3D gürültüyü kesmesi en iyi seçenektir, çünkü ..." kesinlikle geçerli bir cevaptır.
Martin Ender

Bir kürede gürültü yapan bu shadertoy'a göz atabilirsiniz: shadertoy.com/view/4sfGzS
Alan Wolfe

Yanıtlar:


15

Sadece 3D gürültü ile devam etmeyi ve kürenin yüzeyinde değerlendirmeyi düşünürdüm.

Kürenin yüzeyi alanında doğal olarak yer alan gradyan gürültüsü için, yüzeyde doğal bağlantı bilgilerine sahip, her bir hücrede kabaca eşit alana sahip düzenli bir örnek nokta desenine ihtiyacınız vardır, böylece bitişik değerleri enterpole edebilir veya toplayabilirsiniz. Bir Fibonacci ızgarası gibi bir şeyin işe yarayıp yaramayacağını merak ediyorum :

Bir kürenin yüzeyinde fibonacci ızgarası

Dört komşunuzun indekslerini ve mesafesini belirlemenin ne kadar iş olacağını belirlemek için matematikte çiğnemedim (her durumda iyi tanımlanmış dört komşuya sahip olup olmadığınızı bile bilmiyorum), ve 3D gürültüsü kullanmaktan daha az verimli olabileceğinden şüpheleniyorum.

Düzenleme: Birisi matematik ile çiğnedi! Küresel Fibonacci Haritalaması hakkındaki bu yeni makaleye bakınız . Görünüşe göre onu küre gürültüsüne uyarlamak kolay olacaktır.


Bir küreyi oluşturuyorsanız, sadece bir kürenin yüzeyindeki gürültüyü değerlendirmekle kalmaz ve kürenizi gürültü kafesinizin çözünürlüğüne göre süslemede sorun yaşıyorsanız , kürenin yüzeyinde jeodezik bir ızgara oluşturabilirsiniz (alt bölümlere ayrılmış bir ikosahedron, genelde):

Jeodezik küre

Kürenin her tepe noktası, gradyan gürültüsü için rastgele oluşturulmuş bir eğime sahip olabilir. Bu bilgiyi piksel gölgelendiricisine almak için (değer gürültüsü gibi doğrudan enterpolasyon istemiyorsanız), bu makalenin barycentric koordinatlarla tel kafes oluşturma gibi bir tekniğe ihtiyacınız olabilir : her köşe, üçgendeki bu tepe noktasının barycentric koordinatlarını içeren . Daha sonra SV_PrimitiveIDpiksel gölgelendiricisinden (veya OpenGL eşdeğerini) okuyabilir, bulunduğunuz üçgene bağlı olarak köşelerden üç gürültü gradyanını okuyabilir ve enterpolasyonlu barycentric koordinatları kullanarak istediğiniz gürültü hesaplamasını kullanabilirsiniz.

Bu yöntemin en zor kısmı, her tepe noktasında gürültü değerlerine bakmak için üçgen kimliğinizi üç örneğe eşlemek için bir şema ile geliyor.

Küre modelinizden daha iyi bir çözünürlükte birden fazla oktav veya gürültüye ihtiyacınız varsa, köşeleri olan kaba bir jeodezik ızgara yapabilir ve piksel gölgelendiricisinde birkaç alt bölüm yapabilirsiniz. yani üçgen bölünmüş rakam hangi barycentric koordinatlar, gelen olur örgü ayrıca tessellated olsaydı olmak ve sonra ilkel kimliği ve barycentric koordinatlar o üçgenin için ne olacağını anlamaya.


2
Daha önce hiç Fibonacci ızgaralarını duymamıştım; bu oldukça havalı!
Nathan Reed

Bu büyüleyici bir kağıt. Parametre, gürültü oluşumuna farklı yaklaşımlara izin verecek şekilde kare bir kareye veya altıgen bir ızgaraya daha yakın olacak şekilde ayarlayabileceğiniz gibi görünüyor.
trichoplax

Döşemenin kenarlarına yakın olan bazı kötü olmayan sonuçlar aldım (kenar sarılı), ancak elde etmeye çalıştığınız etkiye ve kesin gürültü parametrelerine bağlıdır. Spikey / ince taneli olanlar ile iyi değil, biraz bulanık gürültü için harika çalışıyor.
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.