Ketinggian peta
Dengan peta ketinggian, Anda hanya menyimpan komponen ketinggian untuk setiap simpul (biasanya sebagai tekstur 2D) dan memberikan posisi dan resolusi hanya sekali untuk seluruh quad. Geometri lanskap dihasilkan setiap frame menggunakan geometri shader atau tessellation perangkat keras. Ketinggian peta adalah cara tercepat untuk menyimpan data lanskap untuk deteksi tabrakan.
Pro:
Penggunaan memori yang relatif rendah : Anda hanya perlu menyimpan satu nilai per titik dan tidak ada indeks. Dimungkinkan untuk meningkatkan ini lebih lanjut dengan menggunakan peta detail atau filter noise untuk meningkatkan detail yang dipersepsikan.
Relatif cepat : Geometri shader untuk pemetaan ketinggian kecil dan berjalan cepat. Ini tidak secepat medan geometri.
Pada sistem tanpa akselerasi 3D berbasis segitiga, pemetaan ketinggian marching ray adalah cara tercepat untuk membuat medan. Ini disebut sebagai grafik voxel di game yang lebih lama.
Dynamic LOD / terrain : Dimungkinkan untuk mengubah resolusi mesh yang dihasilkan berdasarkan jarak dari kamera. Ini akan menyebabkan pergeseran geometri jika resolusi turun terlalu jauh (sekitar 0:40), tetapi dapat digunakan untuk efek yang menarik.
Pembuatan / pembuatan medan yang mudah : Peta ketinggian dapat dengan mudah dibuat dengan memadukan fungsi kebisingan seperti Perlin Noise fraktal dan editor ketinggian peta yang cepat dan mudah digunakan. Kedua pendekatan tersebut dapat digabungkan. Mereka juga mudah digunakan dalam editor.
Fisika yang efisien : Posisi horizontal memetakan langsung ke (biasanya) satu hingga empat posisi dalam memori, sehingga pencarian geometri untuk fisika sangat cepat.
Cons:
Tepat satu ketinggian per koordinat x / y : Biasanya tidak ada lubang di tanah atau tebing terjal.
Kontrol kurang : Anda hanya dapat mengontrol ketinggian yang tepat dari setiap titik jika ukuran kotak cocok dengan koordinat tekstur.
Artefak : Jika empat simpul yang menentukan sub-quad tidak pada bidang yang sama, perpecahan antara dua simpul akan menjadi terlihat. Ini biasanya terjadi pada tebing curam dengan tepi yang tidak mengikuti arah mata angin.
Heightmaps adalah cara rendering terrain yang paling efisien sejauh ini dan digunakan di banyak gim baru yang tidak mengandalkan fitur medan canggih dan memiliki area outdoor yang luas. Wikipedia memiliki daftar program yang menggunakan pemetaan ketinggian , tetapi saya tidak yakin apakah itu berarti mereka hanya menggunakannya sebagai sumber daya atau juga untuk render, jadi di sini ada beberapa permainan yang cenderung menggunakannya:
Penyebab 2: Wilayah dimuat dalam sektor persegi dan tidak ada lubang di medan. Dalam demo, ada lubang yang dalam dengan segitiga membentang di sepanjang tepi tempat biasanya ada bangunan. (Daerah ini biasanya tidak dapat diakses, tetapi ada mod untuk menghapus beberapa batasan demo ...)
Sims 2 ( mungkin ): Medan lingkungan dimuat sebagai peta ketinggian, tetapi ada lubang di mana banyak (situs bangunan) ditempatkan. Ada artefak khas jika Anda membuat banyak tebing, dan cukup membosankan untuk menambahkan ruang bawah tanah ke rumah (dan menyembunyikan tebing di bawah beranda).
Permainan mesin Sumber Valve: Brush persegi panjang (geometri level statis) dapat memiliki dataran yang dipetakan di wajah mereka. Dalam permainan ini, kebiasaan yang biasa sering disembunyikan dengan kuas atau alat peraga lainnya.
Mustahil untuk mengatakan dengan pasti tanpa melihat ke shader karena setiap dataran tinggi peta dapat diterjemahkan sebagai mesh.
Voxels
Voxel terrain menyimpan data terrain untuk setiap titik dalam kisi 3D. Metode ini selalu menggunakan sebagian besar penyimpanan per detail permukaan yang berarti, bahkan jika Anda menggunakan metode kompresi seperti oktri yang jarang.
(Istilah "mesin voxel" sering digunakan untuk menggambarkan metode pemetaan ketinggian medan ray yang umum di game 3D yang lebih lama. Bagian ini hanya berlaku untuk medan yang disimpan sebagai data voxel.)
Pro:
Data 3D berkelanjutan : Voxel adalah satu-satunya cara yang efisien untuk menyimpan data berkelanjutan tentang fitur medan tersembunyi seperti urat bijih.
Mudah dimodifikasi : Data voxel yang tidak terkompresi dapat diubah dengan mudah.
Fitur medan lanjutan : Dimungkinkan untuk membuat overhang. Terowongan itu mulus.
Generasi medan yang menarik : Minecraft melakukan ini dengan melapisi fungsi kebisingan dan gradien dengan fitur medan yang telah ditentukan (pohon, ruang bawah tanah). (Baca Generasi Terrain, Bagian 1 di blog Notch untuk info lebih lanjut. Tidak ada bagian 2 pada 05.8.2011.)
Cons:
Lambat : Untuk merender data voxel, Anda harus menggunakan ray tracer atau menghitung mesh, misalnya dengan marching cubes (Akan ada artefak). Voxel tetangga tidak independen untuk pembuatan mesh dan shader lebih rumit dan biasanya menghasilkan geometri yang lebih kompleks. Merender data voxel dengan LOD tinggi bisa sangat lambat.
Persyaratan penyimpanan besar : Menyimpan data voxel menggunakan banyak memori . Sering kali tidak praktis untuk memuat data voxel ke dalam VRAM karena alasan ini, karena Anda harus menggunakan tekstur yang lebih kecil untuk mengimbanginya, bahkan pada perangkat keras modern.
Tidak praktis menggunakan voxel untuk gim yang tidak bergantung pada fitur voxel seperti medan yang dapat dideformasi, tetapi dalam beberapa kasus dapat memungkinkan mekanisme gim yang menarik. Mesin Voxel lebih umum di gim yang lebih lama , tetapi ada juga contoh yang lebih baru:
Mesin Atomontage : rendering Voxel.
Cacing 4: Menggunakan "cacar". Menurut Wikipedia itu adalah campuran voxel dan poligon.
Minecraft: Menggunakan voxel untuk mewakili medan dalam RAM, grafiknya adalah grafik poligon. Sebagian besar perangkat lunak dihitung.
Terraria: Contoh untuk 2D voxels. Saya tidak tahu bagaimana hasilnya.
Voxel dikombinasikan dengan fisika : Bukan game. tetapi dengan baik menunjukkan potensi kehancuran.
Voxatron : Gim yang menggunakan voxel untuk hampir semua grafik, termasuk menu dan HUD.
Jerat
Jerat poligon adalah cara penyimpanan dan render medan yang paling fleksibel dan tepat. Mereka sering digunakan dalam game di mana kontrol yang tepat atau fitur medan yang canggih diperlukan.
Pro:
Sangat cepat : Anda hanya perlu melakukan perhitungan proyeksi seperti biasa di vertex shader. Shader geometri tidak diperlukan.
Sangat tepat : Semua koordinat disimpan secara terpisah untuk setiap titik, sehingga dimungkinkan untuk memindahkannya secara horizontal dan meningkatkan kepadatan jala di tempat dengan detail yang lebih halus.
Dampak memori rendah : Ini juga berarti mesh biasanya membutuhkan lebih sedikit memori daripada heighmap, karena simpul bisa lebih jarang di daerah dengan fitur yang lebih kecil.
(Lihat jaringan tidak teratur Triangulasi di Wikipedia).
Tidak ada artefak : Mesh dibuat apa adanya, sehingga tidak akan ada gangguan atau batas yang tampak aneh.
Fitur medan canggih : Dimungkinkan untuk meninggalkan lubang dan membuat overhang. Terowongan itu mulus.
Cons:
LOD dinamis buruk : Hanya mungkin dengan jerat yang dikomputasi. Ini akan menyebabkan "lompatan" ketika beralih tanpa data tambahan untuk memetakan yang lama ke simpul baru.
Tidak mudah dimodifikasi : Menemukan simpul yang sesuai dengan area yang harus dimodifikasi lambat.
Tidak terlalu efisien untuk deteksi tabrakan : Tidak seperti pada pemetaan ketinggian dan voxel, alamat memori untuk lokasi tertentu biasanya tidak dapat dihitung secara langsung. Ini berarti fisika dan logika permainan yang bergantung pada geometri permukaan yang tepat kemungkinan besar akan berjalan lebih lambat daripada dengan format penyimpanan lainnya.
Medan poligon sering digunakan dalam game yang tidak memiliki area terbuka yang luas atau tidak dapat menggunakan dataran tinggi karena kurangnya presisi dan overhang. Saya tidak punya daftar, tapi saya cukup yakin itu
setiap 3D Zelda dan
setiap game 3D Mario
Gunakan ini.
Metode lainnya
Dimungkinkan untuk membuat medan sepenuhnya dalam pipa shader. Jika algoritme hanya berjalan dalam fragmen / piksel shader, detailnya bisa hampir tak terbatas sementara dampak memori hampir nol. Kelemahan jelas hampir tidak ada kontrol atas bentuk dan masalah ketika kamera memotong permukaan rendering asli. Ini masih berguna dalam permainan luar angkasa di mana pemain tidak berinteraksi dengan permukaan planet. Animasi parameter berfungsi paling baik dengan medan seperti ini.
Seharusnya dimungkinkan untuk mengunduh geometri medan yang dihasilkan dari kartu grafis untuk menggunakannya untuk sisa mesin gim, tetapi saya tidak tahu bagaimana kinerjanya atau apakah ini sudah dilakukan sejauh ini.
Kesimpulan
Tidak ada metode yang bekerja dengan baik untuk setiap skenario, tetapi cukup mudah untuk memilih satu untuk tugas tertentu:
Heightmaps adalah solusi terbaik jika Anda tidak perlu overhang atau lubang di permukaan medan dan menggunakan fisika atau medan yang dinamis. Mereka scalable dan berfungsi dengan baik untuk sebagian besar game.
Jerat memiliki ketelitian tertinggi dan dapat menggambarkan overhang, lubang dan terowongan. Gunakan jika Anda memiliki medan kompleks yang tidak sering berubah.
Voxels bagus untuk menggambarkan medan yang sangat dinamis dengan banyak fitur kompleks. Hindari merendernya secara langsung karena mereka membutuhkan banyak memori dan pemrosesan.
Metode lain mungkin lebih baik daripada metode di atas jika Anda tidak harus berinteraksi dengan medan atau membutuhkan grafik yang sangat rinci. Mereka biasanya bekerja hanya untuk skenario yang sangat spesifik.
Dimungkinkan untuk menggabungkan metode yang berbeda untuk mendapatkan fitur dari lebih dari satu, misalnya dengan tessellating medan jala dengan peta ketinggian untuk meningkatkan struktur detail tebing.
Generasi medan dinamis banyak digunakan dalam simulasi ruang prosedural dan beberapa telah menjadi sangat maju dalam beberapa tahun terakhir . Forum-forum proyek-proyek ini harus memiliki beberapa sumber pada topik.