Perbedaan antara render dalam OpenGL dan perangkat lunak animasi 3D

16

Dengan OpenGL dan semacamnya, saya dapat membuat beberapa hal yang tampak sangat menakjubkan dalam "waktu nyata" 60 FPS. Namun, jika saya mencoba untuk membuat video dari adegan yang sama di katakanlah Maya, atau 3ds Max akan membutuhkan JAUH JAUH lebih lama untuk membuatnya meskipun resolusi dan FPS yang sama.

Mengapa kedua jenis rendering ini mengambil periode waktu yang berbeda untuk hasil yang sama?

Catatan: Ya saya menyadari bahwa perangkat lunak animasi 3D dapat menghasilkan gambar yang sangat unggul dari apa yang dapat dilakukan secara waktu nyata. Tetapi untuk pertanyaan ini saya mengacu pada adegan dengan kompleksitas yang sama.

J.Apakah
sumber
1
Jawaban singkatnya adalah OpenGL mengambil jalan pintas.
user253751

Jawaban:

9

Perbedaan utama adalah bahwa dengan OpenGL dalam katakanlah sebuah gim video, Anda akan memiliki proses yang disebut rasterisasi yang pada dasarnya mengatur bagian adegan yang Anda lihat.

Itu harus cepat sehingga kita bisa mengalaminya sebagai waktu nyata.

Karena itu algoritma melakukan beberapa langkah sederhana.

  • periksa apakah bagian tertentu dari pemandangan itu dalam pandangan saya frustum

    Frustum Culling

  • periksa apakah ada sesuatu di depannya yang mungkin perlu dirender nanti menggunakan buffer kedalaman

    Penyangga Kedalaman

  • memesan objek yang kami temukan untuk menggambar

  • menggambar mereka dengan memproyeksikannya di layar
  • menaungi mereka berdasarkan tekstur / shader / lampu / ...

Di sisi lain perangkat lunak rendering (Blender / Max / Maya / ...) kemungkinan besar menggunakan semacam raytracing

Ini melibatkan lebih banyak matematika untuk mencapai tingkat realisme yang lebih tinggi. Ini pada dasarnya bekerja dengan cara yang sama:

  • buat kamera dan bidang gambar di depannya
  • menembakkan satu sinar (atau beberapa sinar sampel) melalui setiap piksel
  • periksa apakah sinar menyentuh sesuatu di TKP
  • hit terdekat adalah yang akan ditarik dalam pixel akhirnya (seperti buffer kedalaman)
  • hitung cahaya untuk titik yang diberikan Perhitungan Cahaya

....

Saya akan berhenti mendaftar di sini karena ini adalah saat raytracing lepas landas.

Alih-alih hanya memeriksa apakah suatu titik terkena, sebagian besar raytracer sekarang mulai menghitung:

  • jumlah cahaya yang menembus permukaan
  • berapa banyak cahaya yang dipantulkan
  • melemparkan sinar baru dari hitpoint ke dalam adegan hingga dapat mengenai sumber cahaya

Ada satu ton teknik dengan berbagai tingkat realisme yang dapat digunakan untuk menghitung cahaya dari titik tertentu dalam adegan.

TL; DR Intinya adalah bahwa raytracer sebagian besar mencoba untuk menjadi akurat secara fisik ketika datang pencahayaan dan karena itu memiliki lebih banyak perhitungan yang harus dilakukan per pixel (kadang-kadang menembak ribuan sinar) dan di sisi lain permainan mendapatkan kecepatan mereka dengan menggambar potongan layar yang lebih besar dengan perhitungan cahaya yang lebih sederhana dan banyak trik shader yang membuatnya terlihat realistis.

Terima kasih
sumber
7

Anda membandingkan apel dengan jeruk

Gim ini seperti port tampilan di aplikasi pemodelan Anda. Anda dapat menggunakan viewport untuk membuat dan Anda akan mendapatkan kecepatan 60fps yang sama.

Tidak ada alasan mengapa Anda tidak bisa mendapatkan grafik waktu nyata yang sangat baik dari perangkat lunak pemodelan seperti Maya atau 3DS Max. Hasil yang setara dengan banyak game. Mereka memiliki viewport shader seperti halnya gim. Ada juga opsi rendering viewport yang memotong frame ke disk secepat mungkin (saya telah melakukan rendering full HD pada 30 fps dari Maya). Yang harus Anda lakukan adalah berhenti menggunakan raytracer perangkat lunak yang disediakan.

Namun ada beberapa perbedaan. Perbedaan utama adalah bahwa Anda sebagai pengguna tidak mengoptimalkan hal-hal sebanyak pengembang permainan (optimasi menggunakan semua trik dalam buku ini). Kedua primitif animasi Anda berfungsi pada CPU karena Anda memerlukan fleksibilitas. Dalam game seseorang mampu melakukan optimasi. Semua yang Anda bayar untuk tidak memiliki tim pemrograman di sebelah Anda.

Banyak dari hal-hal itu sebenarnya telah dikomputasi, jadi mereka tidak begitu cepat, hanya lebih terorganisir. Memanggang iluminasi tidak langsung Anda akan mengalahkan hasil yang tidak dipanggang setiap hari.

Mengapa raytracer lebih lambat?

Mereka bukan *, orang cenderung melakukan lebih banyak pekerjaan pada pelacak sinar karena mudah. Fitur demi fitur mereka tidak jauh lebih lambat dalam siklus perhitungan. Misalnya, tidak perlu pelacak sinar untuk mengeluarkan sinar sekunder (pantulan kehidupan dalam hal pelacak sinar akan memusnahkan geometri, atau bahkan tidak memuatnya, sebenarnya sinar mental melakukan hal itu). Ini biasanya dilakukan karena sepele untuk melakukannya dan itulah keuntungan yang jelas dari pelacak sinar. Anda bahkan dapat mengonfigurasinya untuk berjalan pada CPU dalam beberapa kasus. Mereka hanya dioptimalkan untuk berbagai hal:

  1. Memancarkan data ke disk, bukan hanya bingkai tetapi semua data. Sesuatu yang akan menghancurkan sebagian besar kecepatan game secara instan.

  2. Bekerja pada perangkat keras umum. GPU jauh lebih cepat untuk hal-hal tertentu setelah Anda mengoptimalkan GPU. Tapi itu tidak bekerja untuk semua beban, sebenarnya CPU Intel lebih cepat dalam komputasi secara umum daripada GPU. GPU hanya paralel besar-besaran sedangkan CPU tidak. Arsitektur menang jika Anda dapat tetap menggunakan GPU dan meminimalkan transfer dan mengoptimalkan arsitektur GPU.

Jadi Anda membayar fleksibilitas dan kemudahan penggunaan. Tapi ya sakit mengakui baik Maya dan Max menderita usia tua yang ekstrim. Jadi mereka bisa lebih cepat.

TL; DR Perbedaannya kebanyakan pada pengoptimalan (baca banyak trik) dan sumber daya eksternal yang tersedia.

PS: Ada kesalahpahaman bahwa ini karena secara fisik lebih benar. Tentu saja bisa tetapi ray tracer secara inheren lebih benar secara fisik daripada game rata-rata Anda atau perhitungan lainnya. Sebenarnya banyak game menggunakan model yang sangat bagus sementara cukup banyak pemodel tidak.

* Lihat http://www.graphics.cornell.edu/~bjw/mca.pdf

joojaa
sumber
2
Maaf, tapi itu salah. OpenGL dan DirectX menggunakan perkiraan yang secara inheren lebih cepat dari raytracing yang tepat. Inti dari grafis 3D dipercepat adalah memiliki algoritma yang keseimbangan antara realisme dan kecepatan, mencari cukup baik untuk sebagian besar menggunakan praktis: game, CAD, dll
IMIL
2
@IMil OpenGL dapat digunakan untuk raytracing. Lebih cepat karena dioptimalkan untuk perangkat keras yang dimaksud. Tapi Maya TIDAK harus ray jejak. Maya dan Max dapat menggunakan openGL dan directX seperti halnya gim Anda. Viewport Mayas (dan 3ds) adalah opengl atau directX (pilihan Anda). Fakta bahwa prosesor Anda lebih lambat pada beban pemrosesan paralel tertentu adalah hal lain. Jadi jawabannya berdiri. Pengaturan standar maya tidak lebih realistis daripada scanline standar.
joojaa
5

Pratinjau Waktu Nyata

Bekerja di sisi industri VFX, jika Anda berbicara tentang pratinjau viewport waktu nyata dan bukan rendering produksi, maka Maya dan 3DS Max biasanya juga menggunakan OpenGL (atau mungkin DirectX - hampir sama).

Salah satu perbedaan konseptual utama antara perangkat lunak dan game animasi VFX adalah tingkat asumsi yang dapat mereka buat. Misalnya, dalam perangkat lunak VFX, bukan hal yang aneh bagi artis untuk memuat karakter tunggal yang mulus yang membentang ratusan ribu hingga jutaan poligon. Game cenderung paling mengoptimalkan untuk adegan besar yang terdiri dari muatan kapal jerat sederhana yang dioptimalkan (masing-masing ribuan segitiga).

Rendering Produksi dan Penelusuran Jalur

Perangkat lunak VFX juga menempatkan penekanan bukan pada pratinjau waktu-nyata tetapi pada rendering produksi di mana sinar cahaya disimulasikan satu per satu. Pratinjau waktu-nyata sering kali hanya itu, "pratinjau" dari hasil produksi berkualitas tinggi.

Game melakukan pekerjaan yang indah dengan memperkirakan banyak efek tersebut akhir-akhir ini seperti kedalaman bidang waktu nyata, bayangan lembut, refleksi difus, dll., Tetapi mereka berada dalam kategori perkiraan tugas berat (mis: peta kubus buram untuk difus refleksi bukannya benar-benar mensimulasikan sinar cahaya).

Kandungan

Kembali ke subjek ini, asumsi konten antara perangkat lunak dan game VFX sangat berbeda. Fokus utama perangkat lunak VFX adalah untuk memungkinkan segala jenis konten yang akan dibuat (setidaknya itu yang ideal, meskipun dalam praktiknya sering kali tidak ada yang dekat). Game fokus pada konten dengan asumsi yang jauh lebih berat (semua model harus dalam kisaran ribuan segitiga, peta normal harus diterapkan pada detail palsu, kita seharusnya tidak benar-benar memiliki 13 miliar partikel, karakter tidak benar-benar digerakkan oleh otot) rig dan peta ketegangan, dll).

Karena asumsi-asumsi itu, mesin game seringkali dapat lebih mudah menerapkan teknik akselerasi seperti frustum culling yang memungkinkan mereka mempertahankan frame rate yang tinggi dan interaktif. Mereka dapat membuat asumsi bahwa beberapa konten akan menjadi statis, dihilangkan terlebih dahulu. Perangkat lunak VFX tidak dapat dengan mudah membuat asumsi-asumsi tersebut mengingat tingkat fleksibilitas yang jauh lebih tinggi dalam pembuatan konten.

Game Lakukan dengan Lebih Baik

Ini mungkin semacam pandangan yang kontroversial, tetapi industri game adalah industri yang jauh lebih menguntungkan daripada perangkat lunak VFX. Anggaran mereka untuk satu game dapat mencapai ratusan juta dolar, dan mereka mampu untuk terus merilis mesin generasi berikutnya setiap beberapa tahun. Upaya R&D mereka luar biasa, dan ada ratusan judul game yang dirilis setiap saat.

Software VFX dan CAD, di sisi lain, sama sekali tidak menguntungkan. Penelitian dan pengembangan sering dilakukan oleh para peneliti yang bekerja di lingkungan akademik, dengan banyak industri sering menerapkan teknik yang diterbitkan bertahun-tahun sebelumnya seolah-olah itu adalah sesuatu yang baru. Jadi perangkat lunak VFX, bahkan yang berasal dari perusahaan sebesar AutoDesk, sering tidak cukup "canggih" seperti mesin game AAA terbaru.

Mereka juga cenderung memiliki warisan yang jauh lebih lama. Maya adalah produk berusia 17 tahun, misalnya. Sudah banyak diperbaharui, tetapi arsitektur intinya masih sama. Ini mungkin analog dengan mencoba mengambil Quake 2 dan terus memperbarui dan memperbarui sepanjang jalan hingga 2015. Upaya ini bisa menjadi besar tetapi mungkin tidak akan cocok dengan Unreal Engine 4.

TL; DR

Jadi, itu sedikit mengambil sisi topik itu. Saya tidak dapat melihat apakah Anda berbicara tentang pratinjau waktu-nyata dalam viewports atau rendering produksi, jadi saya mencoba untuk membahas keduanya.

Energi Naga
sumber
Ini juga masalah waktu. Bahkan jika Anda dapat membuat pada katakan 60 fps dan mendapatkan hasil yang dapat diterima itu jarang berhasil mengoptimalkan untuk itu. Katakan itu membutuhkan 3 menit per frame dan Anda memiliki 200 frame untuk di-render. Anda mungkin bisa mendapatkan 60 fps dengan mempekerjakan penulis shader dan dengan mengoptimalkan tetapi kemudian itu membutuhkan setidaknya satu atau dua hari dari waktu Anda. Tetapi 200 frame pada 3 menit hanya membutuhkan 10 jam sehingga Anda menghemat biaya itu. Dalam praktiknya lebih murah untuk membeli lebih banyak perangkat keras dan tidak terlalu khawatir tentang hal itu. Game tidak bisa mengambil pendekatan ini.
joojaa
@ joojaa Ini juga sedikit lebih rumit. Hanya melakukan shader real-time yang sangat bagus untuk Maya mungkin memerlukan waktu satu tahun atau lebih, paling tidak, bahkan dari pengembang shader berpengalaman (dengan keuntungan yang lebih rendah), karena fleksibilitas sistem nodal di sana ditargetkan untuk rendering produksi. Dibutuhkan pola pikir rekayasa terbalik dan jenis baru dari teknik pembuatan kode GLSL / HLSL (seperti sistem pemrograman meta) untuk menerjemahkan node shader tujuan umum ini ke dalam sistem shading real-time yang menangkap berbagai efek UE 4 , misalnya
Dragon Energy
@joojaa Mesin shader UE 4 secara langsung ditargetkan ke arah pola pikir PBR yang sangat diperkirakan (subset yang sangat kecil dari shader PBR Disney). Mereka bahkan merancang sistem material mereka untuk tujuan yang cepat dan real-time, alih-alih memulai dengan sesuatu seperti sistem material Maya yang sama sekali tidak (dirancang untuk raytracing). Bahkan jika UE4 yang paling terang bekerja pada VP 2.0, mereka harus bekerja siang dan malam selama bertahun-tahun untuk mencapai hasil yang sama terhadap desain yang tidak dimaksudkan untuk melakukan hal semacam ini.
Dragon Energy
tapi itu biaya sekali pakai bahkan jika Anda memiliki pipa itu di aplikasi VFX setiap adegan mungkin memerlukan optimasi tambahan. Tidak ada alasan mengapa pengguna maya tidak dapat membuat di UDK misalnya untuk platform shader dev yang sama.
joojaa