Bagaimana mesin game modern mencapai rendering waktu-nyata vs rendering "lambat" Blender?

90

Saya baru mengenal gamedev dan Blender, dan ada sesuatu yang tidak bisa saya goyangkan:

Di Blender, render tunggal (bahkan menggunakan renderer Cycles yang lebih canggih) dapat memakan waktu hingga 45 detik di mesin saya. Namun yang jelas, dalam sebuah gim, Anda dapat memiliki grafik yang luar biasa, dan karenanya rendering jelas terjadi terus menerus, beberapa kali sedetik dalam waktu nyata.

Jadi saya juga bertanya-tanya apa itu putuskan, mengenai bagaimana "lambat" rendering Blender tampaknya, versus bagaimana mesin game mencapai rendering real-time (atau hampir real-time).

smeeb
sumber
3
Render waktu-nyata itu sendiri adalah topik besar, ada banyak buku yang ditulis tentang hal itu (termasuk "Rendering Waktu-Nyata"). Dan penyaji seperti Siklus bekerja sama sekali berbeda dari penyaji 3D di mesin permainan - Anda tidak dapat benar-benar membandingkannya
UnholySheep
42
@UnholySheep Tentu saja Anda dapat membandingkannya. Bagaimana lagi orang menjelaskan perbedaan, untuk menjawab pertanyaan?
user985366
2
@ 10Replies Tapi pertanyaan ini tidak akan menjadi topik di situs itu.
GiantCowFilms
3
@ 10Replies: Meskipun OP tidak menyebutkan Blender, pertanyaannya pada dasarnya bermula pada mengapa mesin game real-time tampaknya membuat adegan 3D lebih cepat daripada penyaji 3D realistis-foto-realistis (seperti Blender, tetapi juga banyak lainnya). Perhatikan bahwa ini juga pertanyaan yang dijawab oleh jawaban yang diterima. Dengan mengingat hal itu, saya setuju bahwa pertanyaannya lebih pada topik di sini tentang Pengembangan Game , di mana pertanyaan tentang teknologi pengembangan game umum dapat diajukan, bukan pada Blender , di mana pertanyaan lebih spesifik untuk Blender pada khususnya.
ATAU Mapper
3
Saya kira rahasianya di sini adalah bahwa yang menakjubkan tidak harus tepat. Ada perkiraan cepat untuk matematika yang digunakan dalam rendering 3D, seperti InvSqrt
Dmitry Grigoryev

Jawaban:

115

Render waktu-nyata, bahkan render waktu-nyata modern, adalah paket trik, pintasan, peretasan, dan perkiraan.

Ambil bayangan misalnya.

Kami masih belum memiliki mekanisme yang sepenuhnya akurat & tangguh untuk menampilkan bayangan waktu nyata dari sejumlah lampu dan objek kompleks yang berubah-ubah. Kami memang memiliki banyak varian pada teknik pemetaan bayangan tetapi mereka semua menderita dari masalah yang terkenal dengan peta bayangan dan bahkan "perbaikan" untuk ini benar-benar hanya kumpulan penyelesaian dan pertukaran (sebagai aturan praktis jika Anda melihat istilah "kedalaman bias" atau "offset poligon" dalam apa pun maka itu bukan teknik yang kuat).

Contoh lain dari teknik yang digunakan oleh penyaji waktu nyata adalah prapenghitungan. Jika sesuatu (misalnya penerangan) terlalu lambat untuk dihitung secara waktu nyata (dan ini dapat bergantung pada sistem penerangan yang Anda gunakan), kami dapat melakukan pra-perhitungan dan menyimpannya, maka kami dapat menggunakan data pra-perhitungan secara nyata -waktu untuk peningkatan kinerja, yang sering kali mengorbankan efek dinamis. Ini adalah memori langsung vs pengorbanan komputasi: memori seringkali murah dan berlimpah, komputasi sering tidak, jadi kami membakar memori ekstra sebagai ganti penghematan pada penghitungan.

Penyaji offline dan alat pemodelan, di sisi lain, cenderung lebih fokus pada ketepatan dan kualitas. Juga, karena mereka bekerja dengan geometri yang berubah secara dinamis (seperti model saat Anda sedang membangunnya), mereka harus sering menghitung ulang hal-hal, sedangkan penyaji waktu nyata akan bekerja dengan versi final yang tidak memiliki persyaratan ini.

Maximus Minimus
sumber
14
Hal lain yang perlu disebutkan adalah bahwa jumlah perhitungan yang digunakan untuk menghasilkan semua data yang dibutuhkan sebuah game untuk membuat tampilan suatu wilayah dengan cepat mungkin perintah besarnya lebih besar dari jumlah perhitungan yang dibutuhkan untuk membuat satu tampilan. Jika memberikan tampilan suatu area akan memakan waktu satu detik tanpa perhitungan sebelumnya, tetapi beberapa data yang dihitung sebelumnya dapat memangkasnya menjadi 1/100 detik, menghabiskan 20 menit pada perhitungan awal dapat berguna jika tampilan akan dibutuhkan dalam permainan waktu nyata, tetapi jika satu hanya ingin film 24fps sepuluh detik itu akan jauh lebih cepat untuk menghabiskan empat menit ...
supercat
9
... menghasilkan 240 tampilan yang diperlukan dengan kecepatan satu per detik.
supercat
@supercat dan karena ini renders Anda cukup bebas dari hastle dan Anda mendapatkan banyak kontrol atas prosesnya. Anda dapat menggunakan mesin game untuk membuat ... jika Anda siap untuk mengorbankan fitur. Tapi seperti yang Anda katakan itu tidak sepadan.
joojaa
Salah satu contoh mencolok dari hal ini yang dapat saya ingat adalah mesin Quake asli (~ 1996), yang mampu mencapai grafik 3D real-time yang relatif menakjubkan pada mesin yang sangat terbatas menggunakan kombinasi teknik pra-perhitungan yang sangat memakan waktu. Pohon-pohon BSP dan efek pencahayaan yang sudah ditentukan sebelumnya dibuat sebelumnya; merancang level untuk engine yang biasanya melibatkan berjam-jam (biasanya dalam semalam) menunggu alat kompilasi peta selesai. Trade-off itu, pada dasarnya, mengurangi waktu rendering dengan mengorbankan waktu authoring.
Jason C
(Mesin Doom asli [1993] memiliki perhitungan awal yang sama. Marathon mungkin juga demikian, tetapi saya tidak ingat, saya ingat membangun level Marathon tetapi saya tidak ingat apa yang terlibat.)
Jason C
109

Jawaban saat ini telah melakukan pekerjaan yang sangat baik untuk menjelaskan masalah-masalah umum yang terlibat, tetapi saya merasa itu melewatkan detail teknis yang penting: Mesin render "Cycles" Blender adalah jenis mesin yang berbeda dengan yang digunakan kebanyakan gim.

Biasanya permainan diberikan dengan mengulangi semua poligon dalam sebuah adegan dan menggambarnya satu per satu. Ini dilakukan dengan 'memproyeksikan' koordinat poligon melalui kamera virtual untuk menghasilkan gambar datar. Alasan teknik ini digunakan untuk permainan adalah bahwa perangkat keras modern dirancang di sekitar teknik ini dan dapat dilakukan secara realtime hingga tingkat detail yang relatif tinggi. Karena ketertarikan, ini juga merupakan teknik yang digunakan oleh mesin render Blender sebelumnya sebelum Blender Foundation menjatuhkan mesin lama demi mesin Cycles.

Rendering Poligon

Siklus di sisi lain adalah apa yang dikenal sebagai mesin raytracing. Alih-alih melihat poligon dan merendernya satu per satu, ia memancarkan sinar virtual cahaya ke dalam adegan (satu untuk setiap piksel pada gambar akhir), memantulkan sinar cahaya itu dari beberapa permukaan dan kemudian menggunakan data itu untuk memutuskan warna apa warna piksel tersebut. seharusnya. Raytracing adalah teknik yang sangat mahal secara komputasional yang membuatnya tidak praktis untuk rendering waktu nyata, tetapi digunakan untuk merender gambar dan video karena memberikan tingkat detail dan realisme yang ekstra.

Raytracing Rendering


Harap dicatat bahwa deskripsi singkat saya tentang raytracing dan rendering poligon sangat terbuka demi singkatnya. Jika Anda ingin tahu lebih banyak tentang teknik ini, saya sarankan Anda mencari tutorial atau buku yang mendalam karena saya curiga ada banyak sekali orang yang telah menulis penjelasan yang lebih baik daripada yang bisa saya kumpulkan.

Juga perhatikan bahwa ada berbagai teknik yang terlibat dalam rendering 3D dan beberapa game benar-benar menggunakan variasi raytracing untuk tujuan tertentu.

Pharap
sumber
3
+1 untuk poin yang sangat bagus; Saya sengaja tidak turun lubang kelinci raytracing vs rasterization, jadi bagus untuk memiliki ini sebagai tambahan.
Maximus Minimus
16
Jawaban ini menjadi inti perbedaan. Mesin game melakukan rasterisasi (maju atau ditangguhkan) sementara penyaji offline (seperti Blender, Renderman, dll.) Melakukan penelusuran sinar. Dua pendekatan yang sama sekali berbeda untuk menggambar suatu gambar.
ssell
4
@ LeComteduMerde-fou Karena gamedev ditujukan untuk pengembang game, saya merasa penjelasan teknis tambahan akan bermanfaat bagi pembaca yang cenderung lebih teknis.
Pharap
1
@ssell Benar, tetapi ini bukan hanya tentang ray-tracing - bahkan tanpa ray-tracing, bahkan dengan rendering GPU, rendering Blender biasanya jauh lebih terperinci dan lebih lambat. Hal ini sebagian besar berkaitan dengan fokus pada kebenaran - penyaringan dan resolusi tekstur yang lebih baik, anti-aliasing, pencahayaan, pemetaan bayangan, akurasi-Z, paha depan, permukaan dua arah, jumlah poligon besar, output resolusi lebih tinggi, pemetaan benjolan akurat , kurangnya peta yang dihitung sebelumnya, morf, kinematika akurat ... ini adalah daftar panjang fitur yang tidak dimiliki mesin game atau palsu.
Luaan
1
@Chii saya salah ingat. Saya sedang memikirkan ART VPS , itu hanya akselerasi, bukan waktu nyata.
Jason C