Distorsi, kebisingan mulus dan cara bekerja dengannya.Kami menghasilkan sebuah planet
Salah satu cara paling sederhana untuk menghasilkan planet adalah dengan menggunakan noise. Jika kami memutuskan untuk memilihnya, maka kami memiliki beberapa opsi yang memungkinkan. Mari kita lihat masing-masing dan tentukan yang terbaik:
- Perlin Noise adalah pilihan termudah. Kebisingan Perlin dikembangkan oleh Ken Perlin pada tahun 1983, ia memiliki beberapa kelemahan - artefak visual dan kecepatan ketika menghasilkan gambar besar yang agak rendah dibandingkan dengan opsi lain.
- Simplex Noise (Simplex Noise) - dikembangkan oleh Ken Perlin pada tahun 2001 sebagai upaya untuk menghilangkan cacat noise Perlin; ini adalah solusi yang sangat layak dan cepat, tetapi memiliki kelemahan serius: penggunaan kebisingan simpleks tiga dimensi dilindungi oleh paten, yang membuatnya cukup mahal.
- Open Simplex Noise - KDotJPG dikembangkan dengan satu tujuan sederhana: untuk membuat versi modern dari noise simplex, relatif cepat dan tanpa distorsi.
Dari ketiganya, saya pribadi lebih suka Open Simplex Noise, yang saya gunakan dalam proyek pribadi saya. Perlu dicatat bahwa dalam implementasi OpenSimplexNoise saat ini
, pekerjaan tambahan akan diperlukan untuk mendapatkan akses mudah ke
skala, oktaf dan generator . Ada banyak informasi di Internet tentang apa yang masing-masing elemen ini lakukan, dan saya sangat menyarankan Anda mempelajarinya. Namun, dalam artikel saya, saya tidak akan membicarakan hal ini.
Inilah yang terlihat seperti Open Simplex Noise dengan 16 oktaf.Kebisingan mulus
Kebisingan tidak ada habisnya, yang berarti bahwa jika kita hanya membuat kanvas dengan rasio aspek 2: 1 untuk mendapatkan
proyeksi dengan jarak yang sama , itu tidak akan diulang ketika
ditumpangkan pada bola (saya ucapkan terima kasih kepada situs web yang menakjubkan ini), tetapi pada jahitan horizontal dan di kutub perbedaan besar.
Noise dibuat tanpa jahitan.Perhatikan lapisan besar yang muncul ketika suara diaplikasikan pada bola.Ada banyak cara untuk memperbaikinya; Misalnya,
dalam postingan Red Blob Games
[ terjemahan Habré] yang luar biasa ini, cukup menghasilkan pulau menggunakan fungsi yang menerima jarak ke pusat sebagai variabel dan menetapkan ketinggian 0 pada tepinya untuk meminimalkan jahitan.
Namun, ini bukan yang kita butuhkan. Kami ingin menghasilkan sebuah planet dengan kemungkinan keberadaan kutub utara dan selatan, dan untuk ini kita akan membutuhkan perhitungan matematika yang lebih kompleks.
Hamparan bola
Metode yang dapat menghasilkan planet berbentuk bola adalah mengubah koordinat Cartesian dari kanvas kita menjadi koordinat bola, menghasilkan noise berdasarkan koordinat ini, dan kemudian mengubah noise tersebut kembali ke koordinat Cartesian dan menerapkannya pada kanvas.
Namun, implementasi ini memiliki keterbatasan, yang penyebabnya ditampilkan dalam
pos luar biasa oleh Ron Valstar . Yang paling penting, bentuk benua dalam kasus ini terlihat sangat aneh dan terdistorsi, dan oleh karena itu kami tidak akan menggunakan opsi ini.
Hamparan kebisingan bola. Bentuk dan distorsi aneh membuat benua cukup jelek.Tapi setidaknya tidak ada lagi jahitan.Hamparan kubik
Sebagai hasilnya, saya menggunakan metode kedua, yang diambil dari pos oleh Ron Valstar dan serangkaian artikel oleh acko
Making Worlds . Mereka menggambarkan generasi bola dunia melalui generasi kubus dan "inflasi" nya, seolah-olah itu adalah balon, sampai itu adalah contoh bentuk bola.
Gambar diambil dari acko.net. Ini menjelaskan konsep peta kubik dengan cara sederhana yang divisualisasikan.Sekarang kita hanya perlu menghasilkan enam wajah, yang cukup sederhana, ada banyak cara untuk melakukan ini.
Pada akhirnya, saya memutuskan untuk membuat array dan mengisinya dengan data. Saya mengkonversi koordinat 2D dari kanvas ke koordinat 3D dari kubus, dan kemudian menghasilkan suara untuk masing-masing koordinat 3D ini sehingga saya menyimpannya ke nilai koordinat 2D yang sesuai.
Dengan cara ini, kita dapat membuat peta kubik yang dapat dengan mudah dikonversi ke proyeksi
dengan spasi yang sama
menggunakan kode indah yang ditulis oleh Bartosz .
Algoritma menghasilkan peta kubik.Transformasi yang sama dari peta kubik.Globe peta kubik yang diberikan di maptoglobe.com .Seperti yang Anda lihat, sebuah peta yang sama jaraknya memiliki bentuk yang jauh lebih indah, dan ketika ditumpangkan pada sebuah bola, itu menciptakan hasil yang mirip dengan superposisi bola, tanpa semua kekurangannya. Omong-omong, proyeksi berjarak sama dapat dengan mudah dikonversi oleh program yang berbeda, misalnya,
NASA G.Projector , menjadi hampir semua jenis kartu.
Kesimpulannya
Menghasilkan seluruh planet bisa tampak seperti tugas yang menakutkan, dan meskipun kebisingan ketika digunakan dengan benar adalah alat yang cukup kuat, ia memiliki masalah sendiri yang telah dihadapi banyak orang selama berabad-abad, misalnya, menaburkan bola dunia pada kanvas 2D dengan distorsi minimal.
Solusi yang saya usulkan menciptakan planet-planet yang dihasilkan secara kasar yang tidak memperhitungkan lempeng tektonik, sungai, rantai pulau, dan bahkan gunung, dan karenanya hanya dapat digunakan sebagai demonstrasi atau sebagai dasar untuk simulasi yang lebih kompleks.
Bahkan, itu hanya membuat matriks nilai dalam rentang nilai tertentu. Untuk gambar skala abu-abu, ini 0-255. Nilai-nilai tersebut kemudian dikonversi ke piksel yang menciptakan gambar yang mirip dengan gambar pertama dalam skala abu-abu, atau ke gambar dalam rentang dari -11000 hingga 8000 untuk mensimulasikan perbedaan ketinggian dunia nyata, setelah itu piksel diwarnai sesuai dengan interval ketinggian
(misalnya, nilai dari 0 5 diwarnai dengan warna pasir untuk mensimulasikan pantai) .
Dalam membangun alam semesta, Tuhan menggunakan matematika tingkat tinggi.
- Paul Dirac