The Book of Shaders by Patricio Gonzalez Vivo & Jen Lowe

Українська - Bahasa Indonesia - Tiếng Việt - 日本語 - 中文版 - 한국어 - Español - Portugues - Français - Italiano - Deutsch - Русский - Polski - Türkçe - English


Due East over Shadequarter Mountain - Matthew Rangel (2005)

Fraktal Brown Hareketi

Gürültü, farklı insanlar için farklı şeyler ifade eder. Müzisyenler onu rahatsız edici sesler açısından düşünür, iletişimciler parazit olarak ve astrofizikçiler kozmik mikrodalga arka plan radyasyonu olarak. Bu kavramlar bizi çevremizdeki dünyadaki rastgeleliğin arkasındaki fiziksel nedenlere geri götürür. Ancak daha temel ve daha basit bir şeyle başlayalım: dalgalar ve özellikleri. Dalga, bazı özelliklerin zaman içindeki dalgalanmasıdır. Ses dalgaları hava basıncındaki dalgalanmalardır, elektromanyetik dalgalar elektrik ve manyetik alanlardaki dalgalanmalardır. Bir dalganın iki önemli özelliği genliği ve frekansıdır. Basit bir doğrusal (tek boyutlu) dalganın denklemi şöyle görünür:

Son iki alıştırmayı yaparak bir sinüs dalgasını "modüle etmeyi" başardınız ve az önce AM (genlik modülasyonlu) ve FM (frekans modülasyonlu) dalgalar yarattınız. Tebrikler!

Dalgaların bir diğer ilginç özelliği, resmi olarak süperpozisyon olarak adlandırılan, toplanabilme yetenekleridir. Aşağıdaki satırları yorum yapın/yorumdan çıkarın ve ayarlayın. Farklı genliklere ve frekanslara sahip dalgaları bir araya getirdikçe genel görünümün nasıl değiştiğine dikkat edin.

Müzikte her nota belirli bir frekansla ilişkilendirilir. Bu notaların frekansları, gam adını verdiğimiz bir deseni izler; burada frekansın iki katına çıkması veya yarıya inmesi bir oktav atlamaya karşılık gelir.

Şimdi sinüs dalgası yerine Perlin gürültüsünü kullanalım! Perlin gürültüsü temel formunda sinüs dalgasıyla aynı genel görünüm ve histe sahiptir. Genliği ve frekansı bir ölçüde değişir, ancak genlik makul ölçüde tutarlı kalır ve frekans bir merkez frekans etrafında oldukça dar bir aralıkla sınırlıdır. Bir sinüs dalgası kadar düzenli değildir ve gürültünün birkaç ölçeklenmiş versiyonunu toplayarak rastgelelik görünümü oluşturmak daha kolaydır. Sinüs dalgalarının toplamını da rastgele göstermek mümkündür, ancak periyodik, düzenli doğalarını gizlemek için birçok farklı dalga gerekir.

Frekansları düzenli adımlarla (lacunarity) art arda artırdığımız ve gürültünün genliğini (gain) azalttığımız, gürültünün farklı yinelemelerini (oktavlar) ekleyerek daha ince bir ayrıntı düzeyi elde edebilir ve daha ince detaylar alabiliriz. Bu teknik "fraktal Brown hareketi" (fBM) veya basitçe "fraktal gürültüsü" olarak adlandırılır ve en basit formunda aşağıdaki kodla oluşturulabilir:

Her ek oktavla eğrinin nasıl daha fazla detay kazandığına dikkat edin. Ayrıca daha fazla oktav eklendikçe öz-benzerliğe de dikkat edin. Eğriye yakınlaştırırsanız, daha küçük bir kısım bütünle aşağı yukarı aynı görünür ve her bölüm diğer herhangi bir bölümle aşağı yukarı aynı görünür. Bu, matematiksel fraktalların önemli bir özelliğidir ve biz döngümüzde bu özelliği simüle ediyoruz.

Aşağıdaki kod, fraktal görünümlü bir desen oluşturmak için fBm'nin iki boyutta nasıl uygulanabileceğinin bir örneğidir:

Bu teknik genellikle prosedürel manzaralar oluşturmak için kullanılır. fBm'nin öz-benzerliği dağlar için mükemmeldir, çünkü dağları oluşturan erozyon süreçleri geniş bir ölçek aralığında bu tür bir öz-benzerlik veren bir şekilde çalışır. Bu kullanımla ilgileniyorsanız, Inigo Quiles'in gelişmiş gürültü hakkındaki bu harika makalesini kesinlikle okumalısınız.

Blackout - Dan Holdsworth (2010)

Aşağı yukarı aynı tekniği kullanarak türbülans olarak bilinen başka efektler elde etmek de mümkündür. Özünde bir fBm'dir, ancak fonksiyonda keskin vadiler oluşturmak üzere işaretli gürültünün mutlak değerinden oluşturulmuştur.

for (int i = 0; i < OCTAVES; i++) {
    value += amplitude * abs(snoise(st));
    st *= 2.;
    amplitude *= .5;
}

Bu algoritma ailesinin bir diğer üyesi, keskin vadilerin bunun yerine keskin sırtlar oluşturmak üzere ters çevrildiği sırttır (ridge):

    n = abs(n);     // kıvrımlar oluştur
    n = offset - n; // kıvrımları üstte olacak şekilde ters çevir
    n = n * n;      // kıvrımları keskinleştir

Yararlı varyasyonlar oluşturabilecek bir diğer değişken, gürültü bileşenlerini toplamak yerine çarpmaktır. Sonraki gürültü fonksiyonlarını döngüdeki önceki terimlere bağlı bir şeyle ölçeklemek de ilginçtir. Böyle şeyler yaptığımızda, fraktalın katı tanımından uzaklaşıp nispeten bilinmeyen "multifraktal" alanına geçiyoruz.

Alan Bükme (Domain Warping)

Inigo Quiles bu diğer büyüleyici makaleyi yazdı, bir fBm'nin uzayını bir fBm ile bükmenin nasıl mümkün olduğu hakkında. Akıl patlatıcı, değil mi? Inception'daki rüyanın içindeki rüya gibi.

 f(p) = fbm( p + fbm( p + fbm( p ) ) ) - Inigo Quiles (2002)

Bu tekniğin daha az aşırı bir örneği, bulutlara benzer doku üretmek için kaydırmanın (wrap) kullanıldığı aşağıdaki koddur. Sonuçta öz-benzerlik özelliğinin hâlâ mevcut olduğuna dikkat edin.

Doku koordinatlarını bu şekilde gürültüyle kaydırmak çok faydalı, çok eğlenceli ve ustalaşması çok zor olabilir. Güçlü bir araçtır, ancak iyi kullanmak için oldukça fazla deneyim gerektirir. Bunun için faydalı bir araç, koordinatları gürültünün türevi (gradyanı) ile kaydırmaktır. Ken Perlin ve Fabrice Neyret tarafından yazılan "flow noise" başlıklı ünlü makale bu fikre dayanır.

Araç kutunuz için