Sebuah Poisson-Disk pengambilan sampel distribusi akan memungkinkan Anda untuk memilih titik acak jarak minimum terpisah & algoritma Bridson ini secara efisien dapat memecahkan masalah di O (n) - cukup cepat untuk real time yang disediakan menghitung bintang Anda tidak terlalu besar.
Algoritma Bridson membagi wilayah keluaran menjadi kisi-kisi sel yang berukuran relatif terhadap jarak minimum yang diizinkan, sehingga hanya satu titik yang dapat muncul di setiap sel. Kemudian, ketika Anda mempertimbangkan untuk menambahkan titik baru, Anda hanya perlu memeriksa koleksi sel tetangga yang berbentuk disk sebagai lawan dari seluruh daftar titik. Misalnya, perhatikan gambar berikut:
Saat memeriksa untuk melihat apakah kandidat titik biru terlalu dekat dengan titik yang ada, Anda tidak perlu memeriksa setiap titik yang ada. Alih-alih, Anda dapat membatasi pencarian ke titik-titik di sel tetangga (yang dapat Anda temukan dengan cepat menggunakan tabel pencarian). Mike Bostock memiliki animasi yang bagus yang menunjukkan algoritma sedang berlangsung.
Implementasi standar hanya berkaitan dengan jarak minimal tetap antara titik. Artikel pengambilan sampel Poisson Disk Herman Tulleken (termasuk kode sumber) membahas adaptasi untuk memvariasikan jarak minimum di berbagai bagian gambar; pada dasarnya seperti algoritma dithering . Menggunakan perlin noise / simplex noise seperti yang ditunjukkan dalam artikel cloud mungkin memberikan peta bintang yang tampak lebih alami. Misalnya, saya menggunakan gambar di sebelah kiri untuk menghasilkan yang benar:
Untuk melakukan ini, ketika mempertimbangkan kandidat poin, saya pertama-tama memeriksa nilai gambar input, yang menghasilkan nilai dari 0 hingga 1. Saya kemudian skala ini ke jarak min & max yang diinginkan antara titik; dalam hal ini saya memilih 5 & 20 piksel. Jadi ketika menempatkan sebuah titik di daerah gelap, bintang-bintang saya bisa sedekat 5 piksel satu sama lain & ketika menempatkan bintang di daerah terang, mereka bisa terpisah hingga 20 piksel.
Perlu dicatat bahwa percepatan Bridson tidak tepat bekerja dengan pengambilan sampel jarak variabel karena titik keluaran tidak menggunakan jarak minimum seragam. Namun Anda masih dapat menggunakan kotak keluaran untuk mengurangi pencarian. Kotak yang lebih kecil menghasilkan pencarian yang lebih cepat untuk tetangga terdekat dengan mengorbankan peningkatan memori untuk tabel pencarian yang lebih besar.