Saya baru saja melihat video tentang apa yang oleh penerbit disebut sebagai "langkah besar berikutnya setelah penemuan 3D". Menurut orang yang berbicara di dalamnya, mereka menggunakan sejumlah besar atom yang dikelompokkan menjadi awan, bukan poligon, untuk mencapai tingkat detail tanpa batas .
Mereka mencoba yang terbaik untuk membuat video dapat dimengerti untuk orang-orang yang tidak memiliki pengetahuan tentang teknik rendering, dan karena itu atau untuk tujuan lain meninggalkan semua detail tentang cara kerja mesin mereka.
Tingkat detail dalam video mereka memang terlihat cukup mengesankan bagi saya.
- Bagaimana mungkin membuat adegan menggunakan atom khusus alih-alih poligon pada perangkat keras saat ini? (Kecepatan, memori-bijaksana)
- Jika ini nyata, mengapa tidak ada orang lain yang memikirkannya sejauh ini?
Saya, sebagai pengembang OpenGL, benar-benar bingung dengan ini dan sangat ingin mendengar apa yang dikatakan para ahli. Karena itu saya juga tidak ingin ini terlihat seperti iklan murah dan akan menyertakan tautan ke video hanya jika diminta, di bagian komentar.
Jawaban:
Sangat mudah untuk melakukannya. Menggunakan Octtree Anda hanya membagi dunia menjadi potongan-potongan semakin kecil sampai Anda mencapai tingkat detail yang dibutuhkan. Ini mungkin ukuran sebutir pasir misalnya. Pikirkan Minecraft dibawa ke ekstrem.
Lalu apa yang Anda render? Jika detailnya cukup kecil Anda dapat mempertimbangkan render blok - simpul daun dari octtree. Pilihan lain termasuk bola atau bahkan geometris primitif. Warna dan normal dapat disimpan di setiap node, dan untuk mengurangi LOD seseorang dapat menyimpan informasi komposit di tingkat yang lebih tinggi dari pohon.
Bagaimana Anda bisa mengelola begitu banyak data? Jika pohon adalah struktur data aktual, Anda dapat memiliki beberapa petunjuk referensi sub-pohon yang sama, seperti menggunakan kembali tekstur tetapi juga menyertakan geometri. Triknya adalah menggunakan kembali sebanyak mungkin di semua level. Misalnya, jika Anda menghubungkan 4 oktan dalam pengaturan tetrahedral semua ke simpul anak yang sama di semua tingkatan, Anda dapat membuat fraktal sierpinsky 3d yang sangat besar menggunakan hampir tidak ada memori. Adegan nyata tentu saja akan jauh lebih besar.
Masalahnya adalah itu hanya akan bekerja untuk geometri statis karena animasi nyata akan memerlukan manipulasi semua data setiap frame. Namun rendering, terutama dengan variabel LOD tidak ada masalah.
Bagaimana cara membuat hal seperti itu? Saya penggemar berat tracing ray, dan menangani hal semacam itu dengan cukup baik dengan dan tanpa GPU.
Semua ini tentu saja spekulasi. Saya tidak memiliki informasi spesifik tentang kasus yang Anda bicarakan. Dan sekarang untuk sesuatu yang terkait tetapi berbeda:
Sejumlah besar data diberikan
EDIT Dan inilah yang saya lakukan, tetapi saya sengaja mengubah norma untuk membuat kotak lebih jelas:
Stanford bunny di voxels
Frame rate itu berada pada satu inti IIRC. Menggandakan kedalaman pohon umumnya akan memotong laju bingkai menjadi dua, sementara menggunakan beberapa inti akan skala dengan baik. Biasanya saya menyimpan primitif (segitiga dan semacamnya) di octtree saya, tetapi untuk senyum saya telah memutuskan untuk membuat simpul daun pohon itu sendiri dalam kasus ini. Performa yang lebih baik dapat diperoleh jika Anda mengoptimalkan metode tertentu saja.
Di suatu tempat di ompf ada mobil yang dibuat dengan voxels yang benar-benar fantastis - kecuali itu statis. Tampaknya tidak dapat menemukannya sekarang ...
sumber
Dari menonton video tidak ada yang menunjukkan kepada saya bahwa ada perangkat keras khusus yang digunakan. Bahkan, dinyatakan bahwa ini berjalan dalam perangkat lunak pada 20fps, kecuali saya melewatkan sesuatu.
Anda mungkin akan terkejut mengetahui bahwa ada cukup banyak perkembangan dalam render waktu-nyata menggunakan berbagai teknologi seperti ray tracing, rendering voxel, dan splatting permukaan. Sulit untuk mengatakan apa yang telah digunakan dalam kasus ini. (Jika Anda tertarik, lihat di http://igad2.nhtv.nl/ompf2/ untuk forum penelusuran ray waktu nyata yang hebat, atau http://www.atomontage.com/ untuk mesin voxel yang menarik. Google "surface splatting" untuk beberapa tautan hebat tentang topik itu)
Jika Anda menonton film, Anda akan melihat bahwa semua geometri bersifat statis dan walaupun terperinci, ada cukup banyak pengulangan objek, yang mungkin mengisyaratkan instancing.
Dan kemungkinan besar akan ada pemusnahan yang agresif, tingkat detail dan pembagian ruang yang terjadi.
Jika Anda melihat kualitas visual (bukan pada kompleksitas geometris) itu tidak terlihat terlalu mengesankan. Bahkan tampilannya cukup rata. Bayangan yang ditampilkan mungkin dimasukkan ke dalam data dan tidak dievaluasi secara real-time.
Saya akan senang melihat demo dengan animasi geometri dan pencahayaan yang dinamis.
Kecuali saya benar-benar salah (dan itu bukan pertama kalinya saya) jawaban pertama saya akan menyarankan (mungkin sangat pintar) penggunaan teknologi yang ada, mungkin dioptimalkan dan diperluas untuk membuat demo ini. Membuatnya menjadi mesin gim yang sebenarnya, dengan semua tugas lain selain merender geometri statis yang mencakup, adalah gim bola yang sepenuhnya berbeda.
Tentu saja semua ini adalah spekulasi murni (yang membuatnya sangat menyenangkan bagi saya). Semua yang saya katakan adalah bahwa ini tidak selalu palsu (pada kenyataannya saya tidak berpikir itu dan saya masih terkesan), tetapi mungkin tidak sebagai terobosan karena mereka membuatnya terdengar baik.
sumber
Atom-atom ini sebenarnya bukan sihir / khusus / asing untuk perangkat keras grafis saat ini. Ini hanya semacam point cloud atau rendering berbasis voxel. Jadi, alih-alih segitiga, mereka memberikan poin atau kotak, tidak ada yang tidak dapat dicapai dengan perangkat keras saat ini.
Sudah dan sudah dilakukan dan bukan penemuan super, tapi mungkin mereka datang dengan lebih banyak memori dan cara efisien waktu untuk melakukannya. Meskipun terlihat dan terdengar cukup menarik, Anda harus mengambil video ini dengan sebutir garam. Rendering 100.000 poin, bukan poligon bertekstur penuh (yang hanya membutuhkan beberapa piksel di layar) tidak membuat kualitas grafis Anda lebih baik dengan faktor 100.000.
Ngomong-ngomong, saya pernah mendengar perangkat lunak id juga mencoba rendering voxel beraksen GPU, tapi saya lebih percaya pada John Carmack daripada di speaker video ini :)
sumber
Itu adalah penipuan investasi.
Adapun ide, itu tidak cocok pada perangkat keras yang tidak didedikasikan saat ini. Jumlah poin yang Anda butuhkan untuk menghindari kesenjangan ketika melihat sesuatu yang dekat jauh melebihi jumlah poin yang dapat Anda gunakan untuk RAM saat ini. Bahkan jika, saya tidak tahu struktur data atau algoritma pencarian apa pun yang akan menghasilkan apa pun di dekat kinerja yang ditunjukkan dalam demo. Dan bahkan jika , entah bagaimana mungkin untuk mencari titik-titik ini secara real time, cache misses dan bandwidth memori akan memastikan bahwa Anda tidak bisa.
Saya tidak meragukan fakta bahwa gambar seperti itu tidak dapat dicapai secara real-time, hanya saja tidak dengan metode yang disajikan. Dugaan saya adalah bahwa demo diberikan dengan voxels, yang telah digunakan selama beberapa dekade dan sudah dapat menghasilkan detail yang cukup tinggi secara real time: http://www.youtube.com/watch?v=BKEfxM6girI http://www.youtube .com / jam? v = VpEpAFGplnI
sumber
Dari apa yang saya lihat, sepertinya mereka menggunakan bentuk parametrik bukan bentuk poligon sederhana - dengan kata lain mereka mengubah geometri sesuai dengan resolusi yang diperlukan.
Ini dapat dilakukan dengan menggunakan teknik seperti geometri shaders & perlin noise.
Kemungkinan lain adalah menggunakan GPGPU (misalnya CUDA) untuk membuat adegan termasuk non-poligon dan untuk melakukan ray-tracing (untuk z-order dan bayangan). Kemungkinan lain adalah perangkat keras khusus yang membuat rumus alih-alih segitiga
sumber
Saya memikirkan semua klaim mereka, kompresi memori sepertinya berlebihan, saya bisa mengerti sesuatu seperti kompresi RLE yang berdampak besar. Pada akhirnya saya pikir sistem ini akan memiliki banyak "pro", tetapi banyak "kontra", seperti ray-tracing, atau rendering permukaan-iso dengan kubus berbaris.
Sejauh merender 'triliunan' atom; Saya tidak berpikir mereka mengatakan itu. Apa yang mereka lakukan adalah mencari atom W * H, yaitu satu atom per piksel pada layar. Ini bisa dicapai dengan banyak cara sulit yang lambat. Beberapa cara mempercepat ini adalah Pohon KD, dan Pohon BSP, Oktri, dll. Pada akhirnya, banyak data yang sedang disortir, dan fakta bahwa demo mereka rupanya mengurutkan atom 1440x720, lebih dari sekali per bingkai, karena bayangan / pantulan dalam demo mereka, sungguh menakjubkan. Begitu cudos!
sumber
cara kerjanya jauh lebih sederhana daripada yang mungkin Anda pikirkan, alih-alih pra-muat katakan tingkat permainan itu hanya memuat satu layar, satu atau beberapa atom per piksel pada layar Anda, tidak lebih, permainan / mesin kemudian memprediksi apa yang frame berikutnya adalah dan itulah satu-satunya yang dimuat, hanya bagian dari objek yang terlihat diberikan, bukan seluruh objek itu sendiri. PROS: sebanyak definisi dan resolusi yang dapat ditangani oleh monitor Anda, penggunaan memori yang rendah KONTRA: kecepatan baca dari disk cukup besar dan dapat menyebabkan frame rate rendah.
sumber