Voxel Space
Demo Web: Mesin Voxel Space
Sejarah
- Pada 1992, CPU berjalan 1000 kali lebih lambat daripada sekarang, dan akselerasi GPU belum dikenal luas atau sangat mahal.
- Game 3D hanya dihitung di CPU, dan mesin render hanya merender poligon berwarna tunggal.
- Pada 1991 dirilis game Gunship 2000 dari MicroProse dan pada 1992 game Comanche dari NovaLogic.
- Comanche menawarkan grafis yang mengagumkan untuk zamannya, menampilkan tekstur, shading, bayangan, dan lain-lain.
Algoritma rendering
- Comanche menggunakan teknologi bernama Voxel Space, yang berdasarkan pada ide serupa dengan ray casting.
- Mesin Voxel Space adalah mesin 2.5D, jadi tidak menyediakan semua kebebasan yang biasanya ditawarkan oleh mesin 3D.
Peta ketinggian dan peta warna
- Cara paling mudah untuk merepresentasikan terrain adalah dengan menggunakan peta ketinggian dan peta warna.
- Pada game Comanche digunakan peta ketinggian dan peta warna berukuran 1 byte beresolusi 1024 * 1024.
- Peta-peta ini bersifat periodik sehingga tidak dapat merepresentasikan struktur yang kompleks, tetapi peta warna sudah mencakup shading dan bayangan, sehingga tidak perlu menghitung pencahayaan saat proses rendering.
Algoritma dasar
- Algoritma rendering mesin 3D ini sangat sederhana.
- Mesin Voxel Space merasterisasi peta ketinggian dan warna untuk menggambar garis-garis vertikal.
- Membersihkan layar, lalu merender dari belakang ke depan untuk menjamin occlusion.
- Menentukan baris pada peta sesuai dengan jarak optik dari pengamat.
- Merasterisasi baris agar sesuai dengan jumlah kolom layar.
- Mengambil ketinggian dan warna untuk segmen garis pada peta 2D.
- Melakukan proyeksi perspektif pada koordinat ketinggian.
- Menggambar garis vertikal dengan ketinggian hasil proyeksi perspektif dan warna yang sesuai.
Menambahkan rotasi
- Dengan algoritma di atas, Anda hanya bisa melihat ke utara.
- Untuk melihat sudut lain, perlu menulis beberapa baris kode untuk memutar koordinat.
Peningkatan performa
- Terdapat beberapa trik untuk meningkatkan performa.
- Alih-alih merender dari belakang ke depan, Anda juga bisa merender dari depan ke belakang.
- Perlu y-buffer tambahan agar occlusion terjamin.
- Menyesuaikan tingkat detail: menampilkan lebih banyak detail di dekat kamera dan lebih sedikit di kejauhan.
Tautan
- Halaman demo proyek web
- Pengenalan mesin terrain Voxel
- Situs web pribadi
Peta
Lisensi
- Bagian perangkat lunak berada di bawah lisensi MIT.
- Teknologi Voxel Space mungkin masih dipatenkan di beberapa negara.
- Peta warna dan peta ketinggian bukan bagian dari lisensi karena berasal dari rekayasa balik game Comanche.
1 komentar
Komentar Hacker News
Aku merindukan zaman ketika algoritma yang canggih dan elegan menghadirkan pengalaman yang terasa ajaib. Pada masa sumber daya perangkat keras terbatas, pengembang memajukan permainan dengan teknik dan kreativitas baru.
Video yang terkait dengan program bernama mars.com terasa menarik.
Metode rendering ini memang menarik, tetapi sulit untuk diklasifikasikan sebagai voxel karena tidak bisa merender volume acak. Ini sebenarnya implementasi yang rapi dari renderer heightmap.
Mungkin saja diskusi tahun 2020 atau 2017 masuk ke dalam judul. Pada 2021 juga ada diskusi tentang repositori yang sama.
Saat pertama kali belajar pemrograman, aku ingat pernah membuat program di QBasic untuk membuat heightmap terrain dan merendernya dengan gaya isometrik. Itu salah satu hal yang membuatku terus melanjutkan pemrograman.
Aku membuat game dengan teknik ini menggunakan Adventure Game Studio. Tidak dioptimalkan untuk versi lama mesin, tetapi akan kubarui suatu hari nanti.
Sebagian besar game modern punya gunung-gunung yang berlubang, tapi metode ini membuat gunung tampak lebih padat.
Aku ingat saat pertama kali memainkan game Comanche. Rasanya seperti sesuatu yang datang dari masa depan, seolah langsung dari film.
Proyek software renderer itu menyenangkan dan cocok untuk proyek akhir pekan. Aku pernah mengimplementasikan algoritme serupa sebelumnya, tapi implementasi saat ini jauh lebih cepat dan jauh lebih sederhana.
Aku ingin hidup di garis waktu alternatif di mana GPU itu berbasis voxel.