Cara membuat voxel yang tampak alami

11

Saya mengembangkan game voxel, tapi saya pikir saya menggunakan teknik yang salah. Saat ini saya menggunakan ubin datar, untuk membuat balok, dan saya pikir ada cara yang lebih baik dan lebih efisien.

Saya telah melihat permainan voxel, yang memiliki medan yang terlihat alami. Maksud saya non blocky. Permainan memiliki 4 * 4 * 4 blok per meter kubik, dan blok seperti tanah, pasir dan batu, memiliki tepi bulat, dan jenis meleleh bersama (Seperti dalam game biasa). Inilah screenshot masukkan deskripsi gambar di sini

Bagaimana ini dicapai?

KaareZ
sumber
apakah kamu tahu game apa ini? bagaimana Anda bisa yakin itu voxel? Ok, saya menemukannya sendiri, permainan ini disebut Blockscape: indiedb.com/games/blockscape
Babis
Ada sebuah blog di procworld.blogspot.com yang memiliki segala macam posting blog rinci tentang bagaimana mesin voxel-nya dibuat. Posting kembali beberapa tahun dari saat mesin masih dalam masa bayi hingga sekarang saat ini sedang dilisensikan untuk Everquest Next.
stokastik

Jawaban:

14

Ini dicapai dengan interpolasi landai antara kubus dengan ketinggian berbeda.

Ketika Anda memiliki pemandangan seperti ini (dilihat dari samping)

  #
 ####   ##
############

Anda akan menambahkan poligon agar terlihat seperti ini:

 /#\
/####\ /##\
############

Algoritma untuk menghitung landai ini adalah algoritma marching cubes .

Ketika Anda ingin itu menjadi lebih indah, jangan hanya menggunakan satu poligon untuk menginterpolasi antar kubus, gunakan kurva dari beberapa poligon. Tetapi perlu diingat bahwa itu akan menambahkan cukup banyak poligon ke adegan Anda, jadi Anda hanya harus melakukan ini untuk kubus yang dekat dengan kamera.

Philipp
sumber
Terima kasih! Apakah Anda tahu tempat yang menjelaskan cara melakukannya di OpenGL, Pustaka Java Game Ringan? Sunting: Dan jika Anda tahu teknik yang bagus bagaimana menambahkan deteksi tabrakan untuk medan berbaris, itu akan dihargai juga.
KaareZ
@ KaareZ Maaf, saya tidak pernah bekerja dengan LWJGL.
Philipp
@ Pilip Anda mungkin tertarik dengan jawaban ini
1
Atau Anda dapat melewatkan marching cube sama sekali dan pergi ke frankpetterson.com/publications/dualcontour/dualcontour.pdf yang jauh lebih rumit. Anda juga dapat menambahkan fonction kebisingan sebagai offset ke simpul chunk's final. Anda masih memiliki blok tetapi sekarang mereka memiliki properti bukit bergulir dengan tidak benar-benar sejajar dalam garis lurus yang ketat ... menggabungkan dua kontur dan ini untuk hasil yang lebih menarik (dengan pengubah pada offset vertex untuk mengendalikan lebih atau kurang pembangkitan organik) .
user29244
forum.unity3d.com/attachments/captura-jpg.23795 di sini adalah gambar "rolling block" (offset diterapkan sebagai perpindahan vertikal). Berikut ini Lebih banyak gambar tetapi dengan perpindahan diterapkan pada setiap arah forum.unity3d.com/attachments/t1- jpg.23871 forum.unity3d.com/attachments/t2-jpg.23872 vimeo.com/27976287
user29244
6

Ada dua kendala yang harus Anda hadapi untuk mencapai kualitas yang sama seperti yang ada di gambar, yang pertama artistik dan yang kedua adalah teknis (memori, pemrosesan). Pertama saya berasumsi bahwa Anda sudah menyelesaikan masalah artistik Anda, Anda dapat membuat model, seni dan shaders dll. (Sebagian karena saya tidak bisa menjawab masalah seni)

Masalah teknis utama adalah bahwa ketika menguapkan model-model yang Anda buat dalam detail tingkat tinggi, Anda akan berakhir dengan sejumlah besar voxel kecil. Memproses dan merender sejumlah besar voxels bukanlah hal sepele. Jawabannya disebut Sparse Voxel Octrees

SVO akan memberi Anda kemampuan untuk membuat model yang sangat rinci tanpa memproses semua voxel, tetapi hanya yang terlihat. Perhatikan bahwa untuk membuat SVO Anda harus menggunakan ray-casting daripada teknik rasterisasi biasa.

Lebih detail tentang SVO dalam tulisan ini

Berikut ini adalah sumber terbuka dengan penerapan Lisensi BSD dari SVO https://code.google.com/p/efisien-sparse-voxel-octrees/

Berikut adalah video yang menjelaskan rendering berbasis poligon vs SVO (pro dan kontra).

concept3d
sumber
Ini luar biasa! Juga, lihat sauerbraten.org , ia menggunakan teknik serupa (tetapi tidak menerapkan kubus berbaris, bagian itu diserahkan kepada desainer level)
Kroltan