Saya akan mempertimbangkan hanya dengan noise 3D dan mengevaluasinya pada permukaan bola.
Untuk kebisingan gradien yang secara alami berada dalam domain permukaan bola, Anda memerlukan pola titik sampel yang teratur pada permukaan yang memiliki informasi konektivitas alami, dengan luas yang kira-kira sama di setiap sel, sehingga Anda dapat menginterpolasi atau menjumlahkan nilai yang berdekatan. Saya ingin tahu apakah sesuatu seperti kibor Fibonacci mungkin berfungsi:
Saya belum mengunyah matematika untuk menentukan berapa banyak pekerjaan yang harus dilakukan untuk mengetahui indeks dan jarak ke empat tetangga Anda (saya bahkan tidak tahu jika Anda akhirnya memiliki empat tetangga yang terdefinisi dengan baik dalam semua kasus), dan saya menduga itu mungkin kurang efisien daripada hanya menggunakan noise 3D.
Sunting: Orang lain telah mengunyah matematika! Lihat makalah baru ini tentang Pemetaan Fibonacci Bulat . Tampaknya akan mudah untuk menyesuaikannya dengan sphere noise.
Jika Anda merender bola, tidak hanya mengevaluasi kebisingan pada permukaan bola, dan tidak masalah dengan men-tellell bola Anda dengan resolusi kisi kebisingan Anda, Anda dapat membuat grid geodesik pada permukaan bola (icosahedron yang terbagi, biasanya):
Setiap verteks bola dapat memiliki gradien yang dihasilkan secara acak untuk kebisingan gradien. Untuk mendapatkan informasi ini ke pixel shader (kecuali jika Anda ingin interpolasi langsung seperti noise nilai), Anda mungkin memerlukan teknik seperti rendering bingkai gambar artikel ini dengan koordinat barycentric : lakukan rendering tidak indeks, dengan setiap vertex berisi koordinat barycentric dari vertex pada segitiga. . Anda kemudian dapat membaca dari SV_PrimitiveID
(atau yang setara dengan OpenGL) dalam pixel shader, membaca tiga gradien noise dari simpul berdasarkan pada segitiga apa Anda berada, dan menggunakan perhitungan kebisingan apa pun yang Anda suka menggunakan koordinat barycentric yang diinterpolasi.
Saya pikir bagian paling sulit dari metode ini datang dengan skema untuk memetakan ID segitiga Anda ke tiga sampel untuk mencari nilai-nilai kebisingan di setiap titik.
Jika Anda memerlukan beberapa oktaf derau atau derau pada resolusi yang lebih halus daripada model bola Anda, Anda mungkin dapat melakukan kisi geodesik kasar dengan simpul dan melakukan beberapa tingkat pembagian dalam shader piksel. yaitu dari koordinat barycentric, cari tahu segitiga terbagi Anda akan berada di mana jika mesh lebih lanjut tessellated, dan kemudian mencari tahu apa ID primitif dan koordinat barycentric akan untuk segitiga itu.