Game dan aplikasi intensif grafis lainnya menggunakan kerangka kerja seperti OpenGL dan DirectX. Mereka juga membutuhkan fitur seperti pixel shader dan DX12.
Tetapi mengapa kita membutuhkan semua kerangka kerja dan fitur GPU ini ketika kita bisa menggambar semuanya piksel demi piksel?
Pertama, gim harus dikompilasi sedemikian rupa sehingga dapat ditarik piksel demi piksel. Ini mungkin membuat game ini dapat dieksekusi besar, tetapi apakah ini akan lebih cepat dan bekerja pada GPU warna 32-bit (bahkan yang lama)?
Saya tahu bahwa game 3D pertama digambar pixel demi pixel, tetapi mengapa mereka tidak melakukannya sekarang?
3d
gpu
performance
pixel-shader
pixels
Suici Doga
sumber
sumber
Jawaban:
Kecepatan adalah alasan paling umum mengapa ini tidak dilakukan. Bahkan Anda dapat melakukan apa yang Anda usulkan, jika Anda membuat sistem operasi Anda sendiri, itu hanya akan sangat lambat karena alasan arsitektur. Jadi anggapan bahwa ini lebih cepat sedikit cacat. Bahkan jika itu akan lebih cepat, itu akan kurang efisien dalam hal pengembangan (seperti peningkatan kecepatan 1% selama 10 kali pekerjaan).
Menyalin data dari CPU ke kartu grafis adalah operasi yang relatif lambat. Semakin sedikit Anda menyalin semakin cepat kecepatan pembaruan Anda. Jadi idealnya Anda memiliki sebagian besar data pada GPU Anda dan hanya memperbarui potongan kecil data. Ada perbedaan besar antara menyalin lebih dari 320x200 piksel dibandingkan dengan 1920x1200 atau lebih. Lihat jumlah piksel yang Anda perlu perbarui tumbuh secara kuadrat ketika sisi tumbuh.
Contoh: Lebih murah memberi tahu GPU untuk memindahkan gambar 10 piksel ke kanan daripada menyalin piksel secara manual ke memori video di lokasi yang berbeda.
Mengapa Anda harus menggunakan API? Hanya karena itu bukan sistem Anda. Sistem operasi tidak memungkinkan Anda untuk melakukan apa pun yang Anda inginkan untuk alasan keamanan. Kedua, karena sistem operasi perlu memisahkan perangkat keras, bahkan OS sedang berbicara dengan driver melalui beberapa sistem yang disarikan, sebuah API jika Anda mau.
Bahkan saya akan menilai kemungkinan bahwa sistem Anda akan lebih cepat, jika Anda hanya melakukan semua pekerjaan sendiri, hampir mendekati nol. Ini seperti membandingkan C dan perakitan. Tentu Anda dapat menulis assembly, tetapi kompiler cukup pintar hari ini dan mengoptimalkan lebih baik dan lebih baik setiap saat. Sulit untuk menjadi lebih baik secara manual, bahkan jika Anda bisa, produktivitas Anda akan berkurang.
PS: API tidak memungkinkan untuk melakukan pembaruan ini seperti halnya game lama melakukannya. Itu hanya tidak efisien itu saja. Bukan karena pikiran API tetapi karena periode tidak efisien.
PPS: Inilah mengapa mereka meluncurkan Vulkan.
sumber
See the number of pixels you need to update grows exponetially when the sides grow.
Secara kuadrat, saya pikir.bekerja pada GPU warna 32-bit (bahkan yang lama)?
Sedikit sejarah di sini: ini adalah bagaimana permainan dilakukan pada PC hingga akselerator grafis mulai tersedia pada pertengahan 90-an. Itu memang bekerja pada semua perangkat keras, karena perangkat keras tidak melakukan banyak hal.
Akselerator grafis memungkinkan gambar piksel jauh lebih cepat daripada CPU, dengan menggunakan perangkat keras dan paralelisme khusus. Akselerator berisi sejumlah inti prosesor. PC desktop akan memiliki antara 1-8 core tergantung pada usia. Kartu grafis GTX970Ti saya memiliki inti 1664 (seribu enam ratus enam puluh empat!). Ini jelas mengalahkan PC untuk kecepatan mentah dengan jauh.
Namun, akselerator tidak distandarisasi, dan seringkali menyertakan trik arsitektur komputer yang aneh untuk mencapai kecepatan mereka. Untuk menulis game yang tidak dikustomisasi untuk merek dan model kartu tertentu, API harus ada. Dan itulah yang digunakan untuk DirectX, GL dan bahasa shader. Sebenarnya, menulis shader adalah hal yang paling dekat dengan menulis program yang menarik piksel secara langsung - hanya saja kartu akan menjalankan seribu salinan program itu untuk Anda secara paralel, satu per piksel.
sumber
Hanya untuk menambah jawaban joojaa , hal-hal yang masih ditarik pixel dengan pixel. Anda hanya menghasilkan piksel menggunakan vertex shader / assembler / rasterizer, lalu membuat tekstur dan menyalakannya menggunakan fragmen shader. Ini semua dilakukan dalam perangkat lunak di tahun 90-an ketika kartu video Anda tidak lebih dari sebuah blitter dan buffer bingkai, tetapi lambat sekali. Oleh karena itu penemuan GPU modern.
Matematika menggambar yang terjadi pada dasarnya sama dengan yang ada di masa Doom, tapi sekarang ini dijalankan pada ratusan / ribuan ALU shader daripada beberapa core CPU. API memetakan pada dasarnya ke set instruksi GPU yang sama di belakang layar. Mereka hanya di sana untuk menghentikan Anda harus menulis satu ton perakitan GPU degil di berbagai platform vendor.
sumber