Untuk menghasilkan medan voxel
( A ) Metode umum adalah untuk menghasilkan peta ketinggian menggunakan Perlin noise. Heightmap pada dasarnya adalah gambar monokrom yang mewakili ketinggian berbeda oleh kegelapan atau terang pikselnya.
Anda akan melihat masing-masing piksel dalam peta tinggi ini untuk membuat "tumpukan" voxel hingga ketinggian yang berbeda (sumbu z) di lokasi yang berbeda (x, y), sesuai dengan kecerahan piksel itu pada gambar heightmap. Karena gambar derau Perlin halus (tidak ada tepi cahaya yang tajam melawan gelap), hasilnya Anda akan memiliki medan yang bergulir dengan lancar.
(B) Anda dapat membangun secara bertahap dengan menciptakan lanskap dari polyhedra yang berbeda. Buat bentuk vektor polihedral yang mendekati bentuk voxel yang Anda inginkan. Menggunakan metode 3D-point-in-polyhedron (paling sering, point-in-convex-hull), periksa titik mana dari grid dunia Anda yang termasuk dalam volume polihedral itu. Misalnya, tentukan piramida di ruang angkasa. Setelah memeriksa setiap titik di wilayah lokal ruang dunia Anda terhadap volume piramidal itu, Anda akan tahu titik mana yang termasuk di dalamnya, dan Anda dapat mengatur sel-sel itu sebagai "sekarang" yang berarti mereka menjadi voxel daripada ruang kosong. Anda sekarang memiliki piramida voxel di ruang Anda. Anda dapat terus menambahkan bentuk apa pun bersama-sama, dengan cara ini, hingga Anda membentuk medan.
(c) (Benar-benar sama dengan b ) Tulis alat pemodelan. Voxatron menunjukkan bagaimana tampilannya. Ini hanya membuat bentuk voxel di dunia pengganti (editor) dan kemudian mengimpornya ke dunia game runtime Anda yang sebenarnya. Saya percaya Voxlap memiliki editor open source pertama untuk voxels. Anda dapat menempatkan voxel individual, atau Anda dapat menggunakan "brush" voxel dengan berbagai bentuk / volume untuk menarik voxel ke dunia Anda.
Apa yang Anda perlukan untuk membangun gim berbasis voxel Anda sendiri
Saya memasukkan bagian ini karena jalan voxel tidak mudah, setidaknya tidak saat ini. Akhir-akhir ini, banyak penelitian sekali lagi dimasukkan ke dalam mesin voxel oleh para pemain besar, menuju aplikasi rendering dan fisika.
Kesederhanaan mungkin menjadi masalah, karena secara dinamis membangun dunia dari voxels mentah adalah pendekatan prosedural untuk konstruksi dunia dan ini pada dasarnya tidak sederhana . Maaf, akan ada beberapa istilah teknis di sini. Menulis mesin voxel adalah pekerjaan yang cukup serius dan membutuhkan pengetahuan di berbagai bidang pengembangan mesin game, terutama dalam hal konsep spasial, dan ini berarti memahami matematika vektor 3D, matriks dan kalkulus dasar ke tingkat yang wajar.
Karena itu, "pembuatan medan voxel" Anda memerlukan konteks untuk bekerja, karena mesin voxel tidak sepenuhnya tersebar luas. Mari kita lanjutkan ke deskripsi dasar tentang cara kerja mesin voxel.
Voxels adalah blok bangunan dasar dunia Anda. Posisi mereka ditentukan oleh grid 3D array-diindeks (array) daripada ruang floating-point terus menerus (seperti yang digunakan dalam game 3D berbasis vektor). Ini akan menjadi "atom" dari dunia Anda. Ketinggiannya bisa 3 kaki seperti pada gim seperti Minecraft, atau bisa lebih kecil dari yang bisa dilihat mata karakter virtual Anda, kecuali terkumpul bersama dalam jumlah besar - sedikit lebih mirip molekul. Ada dua macam:
- Cubic mesh voxels ( example ) - ini adalah jenis yang lebih baru, digunakan untuk kesederhanaan dan mudah digunakan dalam hubungannya dengan teknologi grafis modern. Digunakan dalam game seperti MineCrat dan Dungeon Keeper.
- Titik voxels ( contoh , contoh ) - voxel asli. Masing-masing adalah individu, titik yang dapat di collidable dalam ruang, meskipun mungkin dikelilingi oleh volume pembatas bola. Mereka lebih sederhana, sehingga Anda dapat memiliki lebih banyak di dunia Anda, dan dengan demikian Anda dapat membuatnya lebih kecil, yang umumnya menguntungkan. Dua game yang menggunakan ini adalah Comanche dan remake 1990-an dari Lords of Midnight.
Apa pun caranya, pendekatan Anda untuk memanipulasi voxel di dunia Anda hampir sama, sebagai berikut.
Untuk membangun dan memindahkan objek di dunia Anda, Anda membutuhkan alat matematika yang disebutkan di atas. Misalnya, untuk membuat dinding: Bangun kotak dimensi yang sesuai dalam ruang 3D, menggunakan vektor. Gunakan matematika matriks untuk mengubah kotak Anda ke rotasi dan posisi yang Anda inginkan di dunia 3d Anda (dalam ruang vektor terus menerus). Untuk mesin voxel, langkah tambahan adalah sekarang menggunakan algoritma 3D point-in-polyhedron untuk menentukan voxel mana yang termasuk dalam ruang yang diputar.
Pada dasarnya, ini adalah cara Anda membangun sebagian besar objek di dunia Anda. Di luar itu, Anda bisa menulis alat sendiri untuk "memodelkan" karakter dengan cara yang Anda katakan, Maya atau 3DS Max. Tetapi karena Anda memodelkan karakter Anda dari voxel alih-alih titik, tepi dan wajah, metode Anda akan jauh berbeda. Jika Anda memutuskan untuk memutar objek-objek ini di dunia Anda, Anda perlu menggunakan transformasi matriks untuk melakukannya.
Medan yang dapat dirusak semudah mengeluarkan satu voxel pada suatu waktu sesuai dengan beberapa metode yang Anda pilih, atau menggunakan operasi CSG (Constructive Solid Geometry) pada volume besar voxel untuk menghapusnya sesuai dengan beberapa volume yang telah ditentukan; misalnya, jika memotret sinar laser melalui batu, Anda mungkin menggunakan volume silinder untuk mengurangi voxel di sini sinar menembak melalui batu. CSG adalah proses yang relatif sederhana menggunakan kisi spasial 3D yang membentuk dunia voxel Anda, dan memeriksa setiap sel di bagian kisi dasar (dalam hal ini batu) terhadap kisi lain (dalam hal ini, sinar laser)
Untuk memiliki "aliran" material (seperti yang ditunjukkan oleh Vigil dalam komentarnya tentang pasir), Anda perlu melihat dinamika fluida dan automata seluler. Ini digunakan oleh penulis Dwarf Fortress, Tarn Adams, dalam apa yang pada dasarnya juga dunia voxel (meskipun voxel jauh lebih besar dalam kasus ini, sebanding dengan Dungeon Keeper, prinsipnya tetap sama). Ini adalah topik canggih dan bukan keharusan untuk mesin voxel sebagaimana didefinisikan, jadi saya akan meninggalkan ini sebagai "rintisan" untuk penelitian Anda sendiri.
CSG dan dinamika fluid membawa saya, terakhir, ke optimasi. Mesin Voxel yang saat ini sedang dikembangkan hampir secara eksklusif memanfaatkan sparse voxel octrees (SVOs) yang merupakan metode pengelompokan ruang voxel ke berbagai resolusi, sebagaimana dibuktikan dalam video ini yang memamerkan mesin Atomontage yang akan datang. Menggunakan octrees / SVO lebih merupakan keharusan daripada pilihan optimasi, karena overhead pemrosesan yang terlibat dalam pemrosesan satu grid seragam besar. Oktree pada dasarnya adalah pohon (grafik asiklik terarah) di mana setiap node memiliki 8 atau nol node anak tergantung pada apakah ruang yang diwakilinya berisi volume fisik. Diagram yang menunjukkan bagaimana oktri membagi ruang untuk membentuk voxel ada di sini .
Implementasi open source voxel terbaik yang saya tahu adalah Voxlap Engine milik Ken Silverman , yang digunakan untuk Voxelstein3D. Ini ditulis dalam C ++, dan mengimplementasikan operasi CSG untuk deformasi medan.