Saya mencari untuk menghasilkan suara yang terlihat seperti ini:
(gambar milik Understanding Perlin Noise )
Saya pada dasarnya mencari kebisingan dengan banyak "riak" kecil. Berikut ini tidak diinginkan:
Apakah ada cara sederhana untuk melakukan ini? Saya telah melihat perlin dan simplex selama seminggu sekarang dan sepertinya saya tidak pernah bisa membuatnya berfungsi dalam JavaScript, atau ketika saya melakukannya, saya tidak memiliki parameter yang benar untuk menghasilkan gambar seperti itu, atau itu luar biasa lambat.
Saya mengerti bahwa 3 gambar yang saya posting mungkin dapat dicapai dengan algoritma yang sama tetapi pada skala yang berbeda, tetapi saya tidak membutuhkan algoritma itu. Saya hanya perlu algoritma yang sangat sederhana untuk mencapai sesuatu seperti pada gambar pertama idealnya. Mungkin semacam kabur akan melakukan pekerjaan itu, tetapi saya tidak bisa mendapatkan hasil.
Saya mengembangkan ini dalam JavaScript tetapi segala jenis kode atau bahkan penjelasan yang sederhana dan terperinci akan berhasil.
Jawaban:
Sementara jawaban yang ada memberikan cara yang baik untuk mencapai apa yang ditunjukkan gambar dalam pertanyaan, komentar mengungkapkan bahwa tujuannya adalah untuk menghasilkan gambar seperti yang ditunjukkan di bawah ini:
Jenis kebisingan ini sangat berbeda dari kebisingan yang ditunjukkan pada gambar pertanyaan, karena membentuk gumpalan tertutup yang terisolasi.
Ternyata kebisingan jenis ini disebut turbulensi yang (menurut artikel CPU Permata ini ) diimplementasikan sebagai berikut (di mana
noise
fungsi Perlin-noise Anda mengembalikan nilai dari -1..1):Menghentikan implementasi JavaScript Perlin-noise ini dengan fungsi turbulensi yang dijelaskan di atas menghasilkan noise yang sangat mirip dengan gambar di atas:
Kode JavaScript yang digunakan untuk menghasilkan gambar di atas dapat ditemukan di jsFiddle ini .
sumber
return Math.abs(this.noise(x,y,z)*2)-.5
.Contoh gambar Anda sangat mirip noise merah muda. Itu dihasilkan seperti ini:
Pertama, kami memiliki semacam noise acak yang halus. Biasanya, ini dicapai dengan menghitung nilai pseudo-acak pada titik dengan koordinat bilangan bulat, dan menginterpolasi nilai-nilai ini entah bagaimana. Hasilnya pada tahap ini terlihat seperti ini:
Selanjutnya, kami mengambil suara ini dan "memerasnya", meningkatkan frekuensinya. Rumus paling sederhana untuk ini adalah n2 (x, y) = n1 (x f, y f). Dengan cara ini, pola noise diperas sebanyak dua kali di kedua direksi. Algoritma noise yang lebih baik juga memutar dan / atau menerjemahkan pola noise pada langkah ini, untuk memecah keteraturan.
Kemudian, pola terjepit ini dikalikan dengan beberapa nilai (kurang dari 1) dan ditambahkan ke pola pertama. Akibatnya, kami menambahkan variasi frekuensi kecil yang lebih tinggi di atas pola frekuensi rendah. Hasilnya terlihat seperti ini:
Langkah 2 dan 3 dapat diulang beberapa kali, menambahkan detail yang lebih halus dan lebih halus. hasil bersih biasanya terlihat seperti contoh Anda dengan palang merah. Namun, perhatikan bahwa kami memiliki 3 parameter dalam algoritme kami untuk dimainkan:
Berikut ini beberapa contohnya:
Ketekunan tinggi:
Lacunaritas tinggi:
Lacunaritas rendah:
Bermain dengan parameter ini bukan satu-satunya hal yang dapat Anda lakukan. Salah satu teknik bagus yang dapat menambahkan karakter ke pola noise adalah menggunakan perturbation , yaitu menambahkan beberapa noise ke input koordinat fungsi noise Anda.
Misalnya, Anda memiliki beberapa fungsi yang menghasilkan suara yang diberikan koordinat dan benih acak:
Noise(x,y, seed)
. Daripada Anda dapat menggunakan sesuatu sepertiNoise(x+Noise(x,y,234), y+Noise(x,y,6544), seed)
untuk mendapatkan nilai yang terganggu. Ini dapat menyebabkan pola seperti ini (gangguan diterapkan pada pola melingkar di sini, bukan ke kebisingan):Jika Anda ingin mempelajari lebih lanjut, saya sarankan Anda melihat libnoise (C ++) atau CoherentNoise (C #). Sayangnya, saya tidak tahu ada perpustakaan generasi kebisingan Javascript.
sumber
Kode dikomentari. Penghargaan diberikan kepada Sean McCullough. http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
Juga, jika Anda menggunakan PRNG dengan itu Anda dapat dengan mudah mendapatkan hasil yang dapat dipasang kembali dengan mudah
sumber
Gunakan tekstur yang dihasilkan sebelumnya, atau letakkan generator tekstur suara perlin di server dan permintaan untuk gambar kebisingan perlin.
sumber