Saya ingin tahu apa praktik terbaik dalam industri pengembangan game untuk membuat dunia 3d?
Untuk lebih spesifik:
- Poin data diberikan dan statis. Setiap titik memiliki posisi, warna, dan ukuran;
- Seluruh kumpulan data jauh lebih besar dari memori yang tersedia;
- Pengguna harus dapat "memperkecil" untuk melihat gambar yang lebih besar sekaligus;
Pendekatan yang paling naif adalah dengan membagi alam semesta menjadi kubus dan hanya membuat apa yang terlihat. Saya tidak yakin bagaimana dalam skenario ini saya harus menerapkan "perkecil". Haruskah saya mengkompilasi kubus untuk setiap tingkat zoom yang memungkinkan? Atau mungkin ada pendekatan yang lebih baik?
Saya mencari solusi agnostik teknologi.
infinite universe
bisa mirip dengan melacak hubungan antara dua titik pada beberapa kurva Mandelbrot setelah memperbesar ke level yang berbeda. Pada tingkat tertentu, Anda dapat kehilangan presisi dan tidak dapat membedakan atau bahkan menemukannya lagi.Jawaban:
Ini berdasarkan spekulasi saya dan membaca kode sumber Celestia.
Celestia memungkinkan Anda terbang mengelilingi planet dan memperkecil untuk melihat seluruh galaksi. Saya melihat-lihat kode sumbernya dan menemukannya menggunakan sebuah octree, sebuah struktur untuk membagi ruang secara rekursif menjadi 8 oktan.
Pemberi render akan mengubah lingkungan dengan melintasi octree, dan tidak melintasi objek jauh secara mendalam.
Celestia juga melacak magnitudo absolut oktan, di mana magnitudo absolut oktan didasarkan pada besarnya absolut bintang di dalam oktan. Jika oktan berdekatan, Celestia merender bintang secara individual, dan jika oktan jauh, Celestia menjadikan oktan sebagai satu bintang dengan besaran oktan.
Juga, bisa ada hierarki bermakna yang melekat pada objek. Misalnya, jika Anda dekat (jari-jari dinyatakan dalam basis data) ke sebuah bintang, planet-planetnya dirender. Jika sebuah planet cukup dekat (potongan piksel pada layar), model 3D-nya ditarik.
Game luar angkasa lain yang bisa saya beri nama adalah Orbiter dan Program Luar Angkasa Kerbal, yang merupakan sumber tertutup. Saya juga melihat ke Frontier Galaxy, yang secara prosedural menghasilkan peta bintang. Ada situs web yang menganalisis cara permainan bekerja dengan pembongkarannya: http://www.jongware.com/galaxy1.html
sumber
Ada sejumlah bagian dari teka-teki ini, yang masing-masing akan memberikan lubang kelinci yang dalam dan menarik untuk dieksplorasi. Beberapa dari mereka adalah:
Dan saus rahasia Anda sendiri akan menjadi kombinasi apa dari ini, dan lainnya, teknik yang Anda gunakan, dan kapan, berdasarkan kebutuhan aplikasi khusus Anda.
sumber
Apa pun yang hierarkis dan / atau jarang akan membantu Anda di sini.
Ada banyak ruang kosong, jadi tidak harus menggunakan penyimpanan untuk mewakili ruang kosong adalah suatu keharusan. Pendekatan hierarkis yang khas akan menjadi sesuatu seperti pohon Oktober yang secara rekursif membagi ruang menjadi 8 kubus yang lebih kecil, dan Anda dapat menyimpan objek dalam kubus terkecil yang dapat mereka tempati sepenuhnya.
Sebuah octree juga cukup bagus untuk Anda dapat menanyakannya untuk daftar semua objek dalam frustum tampilan yang akan memungkinkan Anda mendapatkan daftar hanya objek yang berada dalam sudut pandang Anda dan tidak terlalu jauh. Solusi jarang bisa berupa grid jarang di mana Anda dapat meminta informasi tentang lokasi x, y, z, tetapi Anda hanya perlu menyimpan informasi untuk sel yang bukan ruang kosong.
Pendekatan hierarkis umum lainnya yang digunakan termasuk pohon bsp (mereka membagi ruang menjadi 2 ruang setengah secara rekursif) serta pohon kd yang melakukan hal serupa.
Saya pribadi berpikir bahwa sebuah octree bisa menjadi awal yang baik untuk Anda, pastikan untuk membagi hanya sebanyak yang diperlukan sehingga Anda tidak membuang memori pada ruang kosong. juga, Anda mungkin akhirnya menginginkan solusi yang berbeda untuk objek statis Anda versus objek dinamis Anda.
Beberapa solusi (seperti bsp) bisa sangat efisien, tetapi membutuhkan waktu lama untuk membuatnya jadi biasanya bukan pilihan yang baik untuk memindahkan / mengubah objek.
Semoga itu bisa membantu, beri tahu saya jika Anda memiliki pertanyaan tentang detailnya!
sumber