Mengapa Anda menggunakan perenderan perangkat lunak di atas perenderan perangkat keras, hari ini?

13

Berbeda dengan rendering CPU atau perangkat lunak, saya berasumsi?

Bukankah umumnya semua rendering saat ini berbasis GPU, mengingat Anda akan menggunakan OpenGL atau Direct X?

Bisakah seseorang memberi saya info di sini, tidak dapat menemukan jawaban yang cocok?

pengguna3333072
sumber

Jawaban:

7

Seperti yang Anda sudah jelas tahu apa itu rendering GPU ... izinkan saya menjawab apa yang tampaknya Anda tanyakan.

Secara tradisional, rendering perangkat keras telah membawa stigma menjadi sangat kompleks. Ini sebagian besar disebabkan oleh desain antarmuka pemrograman aplikasi (API) yang belum diarahkan untuk menyembunyikan kompleksitas; yaitu kurva belajarnya curam. Ini juga sebagian karena pemahaman bahwa menulis aplikasi 3D - yang API-nya sangat diarahkan - jauh lebih kompleks daripada menulis yang 2D. Kompleksitas antarmuka, saya mengacu pada antarmuka seperti OpenGL dan DirectX. Kembali 3D vs 2D, saya mengacu pada matematika dan geometri yang masuk ke membangun adegan 3D, vs kesederhanaan dengan mana pikiran yang tidak terlatih dapat mendekati masalah 2D.

Namun, dalam beberapa tahun terakhir, tidak hanya materi pembelajaran menjadi lebih banyak tersedia, tetapi juga, banyak perpustakaan yang membungkus kompleksitas yang mendasari antarmuka ini telah tersedia dan telah menurunkan hambatan untuk masuk. Semua ini telah kembali ke siklus peningkatan minat yang sudah ada karena semakin pentingnya visualisasi, antarmuka pengguna yang apik, dan kinerja pada perangkat berdaya rendah.

Jadi perenderan perangkat lunak dan perenderan 2D telah menjadi titik masuk yang baik dan area fokus bagi mereka yang baru dalam bidang grafis dan / atau ingin membuat produk di mana rendering tidak mengambil terlalu banyak waktu yang tersedia pada suatu proyek. Setidaknya dalam hal 2D, ini masih berlaku; Teknologi sebagian besar telah menutupi kesenjangan dalam membawa rendering 2D ke GPU.

Insinyur
sumber
20

Ada beberapa jawaban yang sangat bagus di sini, jadi tambahkan saja.

Kekuatan pendorong utama di balik perenderan perangkat lunak adalah kemampuan. Ini disinggung di salah satu jawaban, tapi saya akan membuat titik yang berlawanan: rendering perangkat lunak sebenarnya bisa lebih mampu daripada rendering perangkat keras, tidak kurang.

Dengan perangkat keras Anda umumnya terbatas pada kemampuan perangkat keras itu sendiri, meskipun OpenGL untuk satu mampu-emulasi banyak hal yang mungkin tidak ada dalam perangkat keras. Apa artinya itu adalah bahwa jika Anda mencoba menggunakan Fitur X tetapi perangkat keras tidak mendukungnya, salah satu dari dua hal akan terjadi: Anda akan kembali ke emulasi perangkat lunak (skenario OpenGL khas) atau Anda tidak bisa gunakan sama sekali (skenario D3D khas).

Dengan perenderan perangkat lunak, Anda dapat menulis kode sendiri. Anda dapat memanipulasi sesuatu dan memiliki kontrol penuh atas apa yang terjadi hingga tingkat piksel. Untuk memberikan contoh ledakan dari masa lalu, Quake menerapkan pixel shaders pada perangkat lunak pada tahun 1996, pada saat kartu 3D (mereka tidak disebut "GPU" saat itu) hampir tidak dapat meraster beberapa lusin segitiga bertekstur.

Ini lebih banyak terjadi pada GPU saat ini juga, tetapi masih ada bagian signifikan dari pipa grafis yang terpapar sebagai fungsi tetap (atau bahkan tidak terpapar sama sekali).

Render perangkat lunak dapat ditingkatkan dengan lebih baik. Hanya relatif baru bahwa kita telah melihat pengaturan multi-GPU menjadi sangat layak, tetapi perangkat lunak dapat skala di banyak banyak core CPU di banyak banyak server. Anda dapat memiliki seluruh server farm yang didedikasikan untuk ini, dan farm render profesional masih akan menggunakan rendering perangkat lunak.

Perangkat lunak dapat mengekspos paradigma rendering yang berbeda. Perangkat keras saat ini sangat fokus pada paradigma triangle / vertex / fragment / rasterization; itu adalah kasus memilih satu hal dan mengoptimalkannya sampai ia berteriak minta ampun. GPU masih merupakan pilihan yang buruk untuk misalnya ray tracing, yang lebih umum diimplementasikan dalam perangkat lunak.

Tentu saja ketika menyangkut perbandingan apel langsung dengan apel, GPU akan mengalahkan perangkat lunak setiap hari dalam seminggu - asalkan kita membandingkan area di mana GPU lebih kuat. Tapi itu tidak berarti bahwa mereka lebih kuat di setiap bidang. Meskipun demikian, dan untuk keperluan situs SE ini, menggunakan perangkat keras pada umumnya adalah cara untuk pergi tetapi hanya perlu diketahui bahwa ada kasus penggunaan di luar sana di mana perangkat lunak juga layak.

Maximus Minimus
sumber
8
+1 untuk "perenderan perangkat lunak sebenarnya bisa lebih mampu daripada perenderan perangkat keras, tidak kurang."
concept3d
10

Perangkat keras atau rendering GPU , seperti yang Anda duga menggunakan unit pemrosesan grafis (alias Kartu Video) untuk membuat gambar. Yang sebaliknya adalah perenderan perangkat lunak tempat CPU digunakan.

Render perangkat lunak biasanya digunakan sebagai fallback ketika tidak ada (cocok) GPU tersedia. Namun karena GPU adalah urutan besarnya, peranti lunak yang dibuat lebih cepat hampir tidak pernah berguna karena CPU biasanya tidak dapat membuat gambar secara real time. Render perangkat lunak berguna ketika dibutuhkan ketelitian tinggi jika formula yang sangat rumit diperlukan untuk membuat gambar. Karena CPU lebih bersifat umum maka GPU dan dengan demikian memiliki lebih banyak kemampuan. Namun argumen ini menjadi semakin tidak valid karena GPU saat ini dapat menangani tugas yang semakin kompleks dan tidak lagi terbatas pada floats hanya 32bit untuk merepresentasikan angka.

Roy T.
sumber
2

Saya pikir ini adalah pertanyaan yang sangat bagus.

Yang bisa saya bayangkan adalah:

  • VRAM lebih terbatas daripada memori RAM umum. Dalam hal rendering GPU - setiap tekstur lebih merupakan masalah. Anda dapat menyimpan rata-rata sekitar 4 hingga 8 kali lebih banyak data dalam RAM daripada VRAM. Tentu saja skenario ini mengasumsikan bahwa tidak ada sistem yang bertanggung jawab untuk membebaskan / mendorong tekstur yang tidak terpakai / diperlukan dari / ke RAM / VRAM

  • Dalam hal multithreading jauh lebih mudah ketika Anda bekerja dengan rendering perangkat lunak - tidak perlu berbagi konteks

  • Jika Anda melakukan grafis 2D - biasanya sebagian besar kerangka kerja menerapkan penerapan Dirty Rectangles Evaluation - yang memecahkan banyak masalah kinerja.

Namun, rendering menggunakan OGL / D3D memberikan banyak kinerja dan kemungkinan. Shader dapat melakukan hal-hal yang benar-benar menakjubkan, yang hampir tidak mungkin dilakukan dengan perenderan perangkat lunak.

Tetapi teknik seperti blitting, menggunakan colorkey, memiliki perasaan sendiri seolah-olah Anda berada di level dasar, asal dari dunia komputer grafis.

Saya pikir setidaknya baik untuk mengetahui tentang perenderan perangkat lunak. Ini benar-benar dunia yang sangat menarik, tidak menyebutkan bahwa itu adalah akar dari semua yang kita lihat hari ini.

Lukas1985
sumber
1
Anda tidak perlu akselerasi perangkat keras untuk menjalankan shader. OS X 10.9 disertakan dengan fitur implementasi perangkat lunak lengkap GL4. Performanya sangat bagus untuk rendering perangkat lunak; itu bukan ke titik di mana Anda dapat secara realistis memainkan game-game canggih (untuk bersikap adil, tidak juga GPU Apple mengirimkan produk mereka) tetapi itu jauh lebih praktis daripada menggunakan sesuatu seperti rasterizer referensi Direct3D. Ini sebenarnya sesuatu yang bisa Anda kirim menggunakan perangkat lunak yang berfungsi.
Andon M. Coleman
@ AndonM.Coleman Tidak semua orang menggunakan Apple dan saya tidak tahu perender perangkat lunak yang mendukung shader di Linux dan Windows.
luke1985
1
Tapi itu bukan maksud saya. Ada implementasi OpenGL di mana shader berfungsi penuh berjalan sepenuhnya pada CPU. Fakta bahwa Apple adalah pengembang sebagian besar tidak relevan. Jawaban Anda memberi kesan bahwa Anda berpikir Anda harus memiliki GPU untuk menjalankan shader modern di OpenGL.
Andon M. Coleman
@ AndonM.Coleman Dan itu hampir benar, karena dalam 80% kasus Anda harus.
luke1985
2
Shader dapat dengan mudah diimplementasikan melalui render perangkat lunak, bahkan Tomb Raider 1 dan Quake 1 memiliki pixel shader. Justru sebaliknya, CPU memberi Anda jauh lebih banyak kontrol daripada pipa vertex / fragmen pembatas GPU saat ini.
lama12345