Render game 3D: pengantar


Anda memainkan Call of Mario yang baru: Deathduty Battleyard di PC gaming Anda yang sempurna. Lihatlah monitor 4K yang indah dan sangat lebar, kagumi pemandangan yang menakjubkan dan detail yang rumit. Pernahkah Anda bertanya-tanya bagaimana grafik sampai ke layar? Pernahkah Anda bertanya-tanya bagaimana permainan membuat komputer menunjukkan semua ini kepada Anda?

Selamat datang di tur rendering game 3D kami: perjalanan untuk pemula, dari mana Anda akan belajar cara membuat satu bingkai dasar di layar.



Setiap tahun, ratusan game baru untuk smartphone, konsol, dan PC dirilis. Variasi format dan genre sangat besar, tetapi salah satunya, mungkin, paling baik dikuasai - ini adalah game 3D. Game mana yang pertama - pertanyaan yang bisa diperdebatkan, dan pandangan cepat pada dasar Guinness Book of Records memberikan beberapa hasil. Ini dapat dianggap sebagai game Ultimate Knight Lore pertama, dirilis pada tahun 1984, tetapi secara tegas, gambar dalam game ini adalah dua dimensi - tidak ada informasi yang digunakan dalam tiga dimensi penuh.

Jadi jika kita benar-benar ingin memahami bagaimana game 3D modern membentuk gambar, maka kita harus mulai dengan contoh lain: Winning RunNamco, dirilis pada tahun 1988. Mungkin ini adalah game tiga dimensi pertama yang sepenuhnya menggunakan teknologi yang tidak terlalu berbeda dari yang modern. Tentu saja, game apa pun yang usianya telah melebihi 30 tahun sama sekali tidak sama dengan, katakanlah, Codemasters F1, dirilis pada 2018. Tetapi diagram sirkuit serupa.


Pada artikel ini, kita akan melihat proses menghasilkan gambar dasar untuk monitor atau TV menggunakan game 3D. Mari kita mulai dengan hasil akhir dan bertanya pada diri sendiri: "Apa yang saya lihat?"

Kemudian kami menganalisis setiap tahap pembentukan gambar yang kita lihat. Dalam tindakan, kami akan mempertimbangkan konsep-konsep seperti simpul dan piksel, tekstur dan lintasan, buffer dan naungan, perangkat lunak, dan instruksi. Kami akan mencari tahu bagaimana kartu video terlibat dalam proses dan mengapa itu diperlukan sama sekali. Setelah itu, Anda dapat melihat game dan PC Anda dari sudut pandang baru dan mulai lebih menghargai grafis video.

Opsi bingkai: piksel dan warna


Mari kita mulai game 3D, sebagai sampel kita akan membawa perusahaan Crytek dirilis pada 2007 Crysis . Di bawah ini adalah foto tampilan di mana permainan ditampilkan:


Gambar ini biasanya disebut bingkai . Tapi sebenarnya apa yang kita lihat? Kami menggunakan lensa makro:


Sayangnya, sorotan dan cahaya latar eksternal monitor merusak foto, tetapi jika kita memperbaikinya sedikit, kita dapat


Kami melihat bahwa bingkai di monitor terdiri dari kisi-kisi elemen-elemen berwarna yang terpisah, dan jika kami menambahnya lebih banyak lagi, kami akan melihat bahwa setiap elemen adalah blok tiga bagian. Blok semacam itu disebut pixel (pixel, kependekan dari elemen gambar). Di sebagian besar monitor, piksel dicat menggunakan tiga warna: merah, hijau dan biru (RGB, red-green-blue). Untuk menampilkan bingkai baru, Anda perlu memproses daftar ribuan, jika bukan jutaan, nilai RGB dan menyimpannya dalam fragmen memori yang dapat diakses monitor. Fragmen memori semacam itu disebut buffer , yaitu, monitor menerima isi dari buffer bingkai .

Ini adalah titik akhir dari keseluruhan proses, jadi sekarang kita akan bergerak berlawanan arah dengan permulaannya. Proses ini sering digambarkan dengan istilah rendering (rendering), tetapi dalam kenyataannya itu adalah urutan langkah-langkah terpisah yang saling terhubung, yang pada dasarnya sangat berbeda. Bayangkan Anda adalah seorang koki di restoran berbintang Michelin: hasil akhirnya adalah sepiring makanan lezat, tetapi berapa banyak yang harus dilakukan untuk mencapainya. Seperti halnya memasak, bahan dasar dibutuhkan untuk rendering.

Elemen bangunan yang diperlukan: model dan tekstur


Blok bangunan utama dari setiap game 3D adalah sumber daya visual yang mengisi dunia untuk ditarik. Film, acara TV, dan teater membutuhkan aktor, kostum, alat peraga, pemandangan, pencahayaan - daftarnya cukup panjang. Hal yang sama dengan game 3D. Segala sesuatu yang Anda lihat dalam bingkai yang dihasilkan dikembangkan oleh seniman dan pakar pemodelan. Untuk membuatnya lebih jelas, mari beralih ke sekolah lama dan lihat model Quake II perusahaan perangkat lunak id:


Permainan ini keluar lebih dari 20 tahun yang lalu. Pada saat itu, Quake II adalah maha karya teknologi, meskipun, seperti dalam setiap permainan tahun itu, model di sini terlihat sangat primitif. Tetapi mudah untuk menunjukkan apa yang mereka terdiri dari.


Pada gambar sebelumnya, kita melihat dude bersudut yang terdiri dari segitiga yang terhubung satu sama lain. Setiap sudut disebut vertex, atau vertex. Setiap simpul bertindak sebagai titik dalam ruang dan dijelaskan oleh setidaknya tiga angka: koordinat x, y, z . Namun, ini tidak cukup untuk permainan 3D, sehingga setiap simpul memiliki makna tambahan: warna, arah sisi depan (ya, satu titik tidak dapat memiliki sisi depan ... baca terus!), Kecerahan, tingkat transparansi, dll.


Vertex selalu memiliki serangkaian nilai yang terkait dengan peta tekstur. Ini adalah gambar dari "pakaian" yang dikenakan oleh model. Tapi karena gambarnya datar, peta harus berisi tampilan dari segala arah dari mana kita bisa melihat model. Contoh Quake II menggambarkan pendekatan sederhana: gambar dari depan, belakang, dan samping (lengan). Dan game 3D modern sudah beroperasi untuk model dengan banyak peta tekstur, yang masing-masing berisi banyak detail, tanpa ada ruang kosong di antara mereka. Beberapa peta tidak terlihat seperti material atau properti, melainkan memberikan informasi tentang bagaimana cahaya dipantulkan dari permukaan. Setiap dhuwur memiliki seperangkat koordinat dalam peta tekstur yang terkait dengan model, sehingga dapat "ditarik" di atas dhuwur. Ini berarti bahwa ketika Anda memindahkan titik, tekstur akan bergerak dengannya.

Dalam dunia tiga dimensi yang diberikan, semua yang Anda lihat dimulai dengan seperangkat simpul dan peta tekstur. Mereka dimuat ke buffer memori yang terhubung satu sama lain. Vertex buffer (vertex buffer) berisi tekstur dan bagian memori yang dialokasikan untuk rendering berikutnya. The buffer perintah berisi daftar petunjuk tentang apa yang harus dilakukan dengan sumber daya tersebut.

Semua ini membentuk kerangka kerja yang diperlukan yang akan digunakan untuk membuat kisi terakhir piksel berwarna. Dalam beberapa permainan, ini adalah sejumlah besar data, karena butuh terlalu lama untuk membuat ulang buffer untuk setiap bingkai baru. Game juga menyimpan dalam buffer informasi yang diperlukan untuk membentuk seluruh dunia yang dapat dilihat oleh pemain, atau bagian yang cukup besar, memperbarui seperlunya. Misalnya, dalam gim balap seperti F1 2018, semuanya akan disimpan dalam satu koleksi besar buffer. Dan dalam permainan dunia terbuka seperti Skyrim, data akan dimuat ke buffer dan dihapus dari mereka saat kamera bergerak di seluruh dunia.

Pengaturan Pemandangan: Vertex


Setelah memiliki semua informasi visual, game kemudian akan memulai proses tampilan visual. Adegan dimulai pada posisi tertentu secara default, dengan pengaturan dasar model, sumber cahaya, dll. Ini akan menjadi layar "nol" - titik awal untuk grafik. Ini sering tidak ditampilkan, itu hanya diproses oleh sistem. Untuk menggambarkan apa yang terjadi pada tahap pertama rendering, kami akan menggunakan alat online Real-Time Rendering . Mari kita buat "permainan" paling sederhana: sebuah kotak berdiri di tanah.


Objek ini berisi 8 simpul, yang masing-masing dijelaskan oleh daftar angka. Verteks membentuk model yang terdiri dari 12 segitiga. Setiap segitiga, dan bahkan objek itu sendiri, disebut primitif . Ketika primitif bergerak, memutar, dan skala, angka-angka melewati rantai operasi matematika dan diperbarui.


Perhatikan bahwa nomor titik model tidak berubah. Angka-angka ini menunjukkan dengan tepat di mana model berada di dunia virtual. Pertimbangan perhitungan matematika yang sesuai berada di luar ruang lingkup artikel, kami hanya akan mengatakan bahwa pertama semua objek ditempatkan di mana mereka seharusnya. Dan kemudian mewarnai dimulai.


Ambil model lain yang memiliki simpul 10 kali lebih banyak dari kotak sebelumnya. Dalam proses pengecatan yang paling sederhana, warna setiap titik diambil, dan kemudian perubahan warna dari permukaan ke permukaan dihitung. Ini disebut interpolasi .


Meningkatkan jumlah simpul dalam model tidak hanya memungkinkan Anda untuk membuat objek yang lebih realistis, tetapi juga meningkatkan hasil interpolasi warna.


Pada tahap rendering ini, efek sumber cahaya dalam adegan dapat dihitung secara detail. Misalnya, bagaimana bahan model mencerminkan warna. Perhitungan semacam itu harus mempertimbangkan posisi dan arah kamera, serta posisi dan arah sumber cahaya.


Untuk melakukan ini, ada sejumlah metode matematika yang berbeda, beberapa sederhana, yang lain sangat kompleks. Pada ilustrasi di atas, kita melihat bahwa objek di sebelah kanan terlihat jauh lebih bagus dan lebih realistis, tetapi diperlukan lebih banyak pekerjaan untuk menggambarnya.

Penting untuk dicatat bahwa sekarang kita membandingkan objek dengan sejumlah kecil puncak dengan gim paling modern. Gulir ke atas dan hati-hati memeriksa gambar dari Crysis: adegan ini menampilkan lebih dari satu juta segitiga. Dengan menggunakan tolok ukur Lembah Unigine sebagai contoh, Anda dapat memahami berapa banyak segitiga yang digunakan dalam game modern.


Setiap objek dalam gambar ini terdiri dari simpul yang terhubung satu sama lain, yang dibentuk oleh primitif yang terdiri dari segitiga. Benchmark dapat dijalankan dalam mode wireframe, di mana tepi setiap segitiga ditandai dengan garis putih.


Seperti yang Anda lihat, objek apa pun terdiri dari segitiga, dan untuk setiap segitiga lokasi, arah dan warna dihitung. Ini memperhitungkan lokasi sumber cahaya, serta lokasi dan arah kamera. Semua perubahan yang terkait dengan simpul harus ditransfer ke permainan sehingga memiliki semua informasi yang diperlukan untuk menggambar bingkai berikutnya - ini dilakukan dengan memperbarui buffer vertex.

Anehnya, ini bukan bagian yang paling sulit dari rendering, dengan perangkat keras yang tepat, semua perhitungan dilakukan dalam seperseribu detik! Berpindah.

Kehilangan Dimensi: Rasterisasi


Setelah memproses semua simpul dan menyelesaikan penempatan semua objek dalam adegan tiga dimensi kami, proses rendering berlanjut ke tahap yang sangat penting. Hingga saat ini, gim ini benar-benar tiga dimensi, tetapi kerangka terakhir tidak lagi seperti itu: dalam serangkaian perubahan, dunia yang dilihat ditransformasikan dari ruang 3D, terdiri dari ribuan titik yang terhubung, menjadi gambar dua dimensi, yang terdiri dari piksel berwarna. Pada sebagian besar game, prosedur ini terdiri dari setidaknya dua fase: ruang layar proyeksi (proyeksi ruang layar) dan rasterisasi .


Kembali ke alat rendering berbasis web kami, ini akan menunjukkan kepada kita bagaimana volume dunia maya berubah menjadi gambar datar. Kamera ditampilkan di sebelah kiri, garis-garis yang muncul darinya membuat piramida visibilitas terpotong (frustum), dan segala sesuatu yang masuk ke dalamnya dapat ditampilkan dalam bingkai akhir. Bagian tegak lurus piramida disebut dengan viewport - ini adalah apa yang akan ditampilkan pada monitor. Banyak perhitungan matematis digunakan untuk memproyeksikan seluruh isi piramida ke area tampilan, dengan mempertimbangkan perspektif kamera.

Meskipun grafik di area tampilan dua dimensi, datanya masih benar-benar tiga dimensi, dan nantinya informasi ini akan digunakan untuk menghitung primitif mana yang terlihat oleh kita dan yang disembunyikan. Ini bisa sangat sulit dilakukan, karena primitif dapat membuat bayangan terlihat oleh kita, bahkan jika primitif itu sendiri tersembunyi dari kita. Hapus tersembunyi dari kami primitif disebut menjatuhkan (pemusnahan). Operasi ini dapat secara signifikan mempengaruhi kecepatan rendering seluruh frame. Setelah pemilahan menjadi primitif yang terlihat dan tersembunyi selesai, serta segitiga dihapus di luar batas piramida visibilitas, tahap terakhir tiga dimensi diselesaikan dan bingkai sepenuhnya dua dimensi menggunakan rasterisasi.


Ilustrasi di atas menunjukkan contoh yang sangat sederhana dari sebuah bingkai yang mengandung satu primitif. Kotak pixel dilapiskan pada bentuk geometris dan piksel yang sesuai ditandai untuk diproses selanjutnya. Hasil akhirnya tidak terlalu mirip dengan segitiga asli, karena kami tidak menggunakan piksel yang cukup. Dalam hal ini, masalah aliasing (aliasing, stepping lines) muncul , yang diselesaikan dengan berbagai cara. Oleh karena itu, perubahan dalam resolusi permainan (jumlah total piksel dalam bingkai) sangat mempengaruhi hasil akhir: lebih banyak piksel tidak hanya meningkatkan tampilan formulir, tetapi juga mengurangi efek alias yang tidak diinginkan.

Setelah menyelesaikan bagian rendering ini, kita beralih ke langkah besar berikutnya: pewarnaan terakhir dari semua piksel dalam bingkai.

Membawa cahaya: tahap pixel


Kami telah sampai pada tahap render yang paling sulit. Setelah itu turun untuk menarik pakaian (tekstur) model menggunakan informasi piksel (awalnya diperoleh dari simpul). Namun, faktanya adalah bahwa meskipun tekstur dan bingkai itu sendiri adalah dua dimensi, namun, dunia virtual pada tahap pemrosesan vertex terdistorsi, bergeser, dan berubah. Untuk menjelaskan semua ini, perhitungan matematis tambahan digunakan, namun, masalah baru mungkin menjadi karakteristik dari hasilnya.


Dalam ilustrasi ini, tekstur kotak-kotak diterapkan pada pesawat. Ada riak visual yang tidak menyenangkan, yang diperburuk oleh aliasing. Untuk mengatasi masalah ini, gunakan versi yang lebih kecil dari peta tekstur ( beberapa pemetaan , pemetaan acak), penggunaan kembali informasi dari tekstur ini ( penyaringan , penyaringan) dan perhitungan matematika tambahan. Efeknya terlihat:


Untuk permainan apa pun, ini benar-benar langkah yang sulit, tetapi hari ini tidak lagi demikian, karena karena penggunaan efek visual yang luas, seperti pantulan dan bayangan, pemrosesan tekstur telah menjadi tahap yang relatif kecil dari proses rendering. Saat bermain pada resolusi tinggi, beban pada tahap rasterisasi dan pemrosesan piksel meningkat, tetapi ini memengaruhi pemrosesan simpul relatif sedikit. Meskipun pewarnaan primer karena sumber cahaya dilakukan pada tahap puncak, efek pencahayaan yang lebih canggih dapat diterapkan.


Dalam ilustrasi sebelumnya, kita tidak lagi melihat perubahan warna di antara segitiga-segitiga yang berbeda, yang memberi kita perasaan objek mulus yang mulus. Meskipun dalam contoh ini bola terdiri dari jumlah segitiga yang sama dengan bola hijau dalam ilustrasi di atas, sebagai akibat dari prosedur pewarnaan piksel, tampaknya bagi kita bahwa lebih banyak segitiga digunakan.


Dalam banyak permainan, fase piksel harus dijalankan beberapa kali. Misalnya, agar cermin atau permukaan air memantulkan dunia sekitarnya, dunia ini harus terlebih dahulu digambar. Setiap run disebut pass (pass), dan untuk mendapatkan gambar akhir untuk setiap frame dapat digunakan dengan mudah empat atau lebih pass.

Juga, kadang-kadang Anda perlu menjalankan tahapan vertex lagi untuk menggambar ulang dunia dari titik lain dan menggunakan gambar ini dalam adegan yang ditunjukkan kepada pemain. Untuk melakukan ini, gunakan rendering buffer tunggal (target render) - gunakan buffer yang bertindak sebagai penyimpanan akhir untuk frame, tetapi juga dapat bertindak sebagai tekstur dengan lintasan yang berbeda.

Untuk menilai kompleksitas tahap piksel, Anda dapat membacaanalisis bingkai di Doom 2016 . Anda akan terkejut dengan jumlah operasi yang diperlukan untuk membuat satu bingkai.


Semua pekerjaan yang dilakukan untuk membuat bingkai harus disimpan ke buffer, apakah itu hasil akhir atau menengah. Secara umum, permainan menggunakan dengan cepat setidaknya dua buffer untuk tampilan akhir: satu untuk "pekerjaan saat ini", dan buffer kedua menunggu monitor untuk diakses, atau sedang dalam proses menampilkan. Anda selalu memerlukan buffer layar di mana hasil rendering akan disimpan, dan ketika semua buffer penuh, Anda perlu melanjutkan dan membuat buffer baru. Setelah menyelesaikan pekerjaan dengan frame, perintah sederhana diberikan, buffer frame akhir dipertukarkan, monitor menerima frame yang diberikan terakhir, dan proses rendering frame berikutnya dimulai.


Dalam bingkai ini dari Assassin's Creed Odyssey, kita melihat isi dari buffer bingkai yang diselesaikan. Konten ini dapat direpresentasikan dalam tabel yang hanya berisi angka. Mereka dikirim dalam bentuk sinyal listrik ke monitor atau TV, dan piksel layar mengubah nilainya. Mata kita melihat gambar yang datar dan solid, tetapi otak kita menafsirkannya sebagai tiga dimensi. Begitu banyak pekerjaan yang tersembunyi di balik layar hanya dengan satu kesempatan dalam permainan sehingga layak untuk melihat bagaimana programmer dapat menanganinya.

Manajemen Proses: API dan Instruksi


Untuk mencari tahu cara membuat game menjalankan dan mengelola semua perhitungan, simpul, tekstur, pencahayaan, buffer, dll. - ini adalah tugas besar. Untungnya, bantu kami dalam antarmuka pemrograman ini (antarmuka pemrograman aplikasi, API).

API rendering mengurangi kerumitan keseluruhan dengan menawarkan struktur, aturan, dan pustaka perangkat lunak yang memungkinkan instruksi sederhana yang tidak tergantung pada perangkat keras. Ambil game 3D apa pun yang dirilis untuk PC selama tiga tahun terakhir: itu dibuat menggunakan salah satu dari tiga API populer - Direct3D, OpenGL, atau Vulkan. Ada perkembangan serupa lainnya, terutama di segmen ponsel, tetapi dalam artikel ini kita akan berbicara tentang tiga yang disebutkan.


Terlepas dari perbedaan dalam nama instruksi dan operasi (misalnya, blok kode untuk memproses piksel dalam DirectX disebut pixel shader, dan dalam Vulkan itu disebut fragmen shader), hasil akhirnya tidak berbeda, lebih tepatnya, tidak boleh berbeda.

Perbedaan akan dimanifestasikan dalam peralatan apa yang digunakan untuk rendering. Instruksi yang dihasilkan oleh API perlu dikonversi menjadi perintah yang ramah perangkat keras yang diproses oleh driver perangkat. Dan produsen peralatan harus menghabiskan banyak sumber daya dan waktu agar driver mereka melakukan konversi ini secepat dan seakurat mungkin.


Misalnya, beta awal The Talos Principle (2014) mendukung ketiga API tersebut. Untuk menunjukkan bagaimana hasil berbagai kombinasi driver dan antarmuka dapat berbeda, kami menjalankan tolok ukur bawaan bawaan dengan mengatur resolusi ke 1080p dan pengaturan kualitas maksimum. Prosesor Intel Core i7-9700K bekerja tanpa overclocking, kartu video Nvidia Titan X (Pascal), RAM - 32 GB DDR4 RAM.

  • DirectX 9 = rata-rata 188,4 frame / s.
  • DirectX 11 = rata-rata 202,3 frame / s.
  • OpenGL = rata-rata 87,9 bingkai / s.
  • Vulkan = rata-rata 189,4 frame / s.

Kami tidak akan menganalisis hasilnya, dan mereka tentu tidak mengatakan bahwa beberapa API "lebih baik" daripada yang lain (jangan lupa, versi beta dari game ini diuji). Kami hanya akan mengatakan bahwa pemrograman untuk API yang berbeda dikaitkan dengan berbagai kesulitan, dan pada waktu tertentu kinerjanya juga akan berbeda. Secara umum, pengembang game memilih API yang dengannya mereka memiliki lebih banyak pengalaman, dan mengoptimalkan kode mereka untuk itu. Terkadang istilah engine digunakan untuk menggambarkan kode yang bertanggung jawab untuk rendering, tetapi sebenarnya, engine adalah seperangkat alat lengkap yang memproses semua aspek permainan, bukan hanya grafis.

Tidak mudah membuat program dari awal yang menghasilkan game 3D. Karenanya, hari ini dalam begitu banyak permainan yang menggunakan sistem pihak ketiga berlisensi (misalnya, Unreal Engine) Untuk mengevaluasi kerumitannya, buka mesin sumber terbuka untuk Gempa dan lihat file gl_draw.c: ini berisi instruksi untuk operasi rendering yang berbeda dan hanya mencerminkan sebagian kecil dari keseluruhan mesin. Tapi Quake dirilis lebih dari 20 tahun yang lalu, dan seluruh permainan (termasuk semua sumber daya visual, suara, musik, dll.) Membutuhkan 55 MB. Sebagai perbandingan, dalam Far Cry 5, hanya shader yang menempati 62 MB.

Waktu adalah yang paling penting: menggunakan peralatan yang tepat


Semua hal di atas dapat dihitung dan diproses oleh prosesor dari sistem komputer apa pun. Prosesor modern dari keluarga x86-64 mendukung semua operasi matematika yang diperlukan dan bahkan mengandung subsistem yang terpisah untuk ini. Namun, tugas rendering frame tunggal membutuhkan banyak perhitungan berulang dan paralelisasi pekerjaan yang signifikan. Prosesor sentral tidak disesuaikan untuk ini, karena mereka diciptakan untuk menyelesaikan berbagai tugas seluas mungkin. Prosesor khusus untuk komputasi grafik disebut GPU (unit pemrosesan grafis). Mereka dibuat untuk DirectX, OpenGL dan Vulkan.

Kami akan menggunakan patokan yang memungkinkan Anda untuk membuat bingkai menggunakan prosesor pusat atau peralatan khusus - V-ray NEXTPerusahaan Grup Chaos. Sebenarnya, ini memang ray tracing daripada rendering, tetapi sebagian besar operasi numerik di sini juga bergantung pada perangkat keras.


Mari kita melewati tolok ukur dalam tiga mode: hanya prosesor pusat, hanya prosesor grafis, dan kombinasi kedua prosesor:

  • CPU sendiri = 53 juta sinar
  • GPU saja = 251 juta sinar
  • Kombinasi kedua prosesor = 299 juta sinar

Unit pengukuran dapat diabaikan, esensinya adalah lima kali perbedaan. Namun tetap saja, tes ini tidak terlalu terkait dengan game, jadi mari kita beralih ke tolok ukur old-school Futuremark 3DMark03 . Mari kita jalankan tes Wings of Fury sederhana dengan perhitungan paksa semua vertex shader (yaitu, dengan serangkaian operasi untuk memindahkan dan mewarnai segitiga) menggunakan prosesor pusat.


Hasilnya seharusnya tidak mengejutkan Anda:

  • Prosesor sentral = rata-rata 77 frame / s.
  • GPU = rata-rata 1,580 frame / s.

Ketika semua perhitungan dengan vertex dilakukan oleh prosesor pusat, dibutuhkan rata-rata 13 ms untuk merender dan menampilkan setiap frame. Dan saat menggunakan prosesor grafis, angka ini turun menjadi 0,6 ms - lebih dari 20 kali lebih cepat.

Perbedaannya semakin meningkat jika Anda menjalankan tes benchmark paling sulit - Mother Nature. Prosesor sentral menghasilkan 3,1 frame / s tidak signifikan! Dan prosesor grafisnya melesat hingga 1388 frame / s .: Hampir 450 kali lebih cepat. Harap dicatat: 3DMark03 keluar 16 kembali, dan dalam pengujian pada prosesor pusat hanya simpul diproses, prosesor grafis masih mengambil tahap rasterisasi dan piksel. Bayangkan jika tolok ukurnya modern dan sebagian besar operasi dilakukan secara terprogram?


Sekarang kita akan mencoba lagi tolok ukur Unigine Valley , grafik yang diprosesnya sangat mirip dengan yang digunakan dalam game seperti Far Cry 5. Ada juga mesin rendering perangkat lunak lengkap selain DirectX 11. Ketika menjalankan prosesor video, kami mendapatkan hasil rata-rata 196 bingkai / s . Bagaimana dengan versi perangkat lunaknya? Setelah beberapa crash, PC uji yang kuat menghasilkan rata-rata 0,1 frame / s. - hampir dua ribu kali lebih lambat.

Alasan untuk perbedaan besar terletak pada perhitungan matematis dan format data yang digunakan dalam rendering 3D. Setiap inti dari CPU dilengkapi dengan modul floating point. I7-9700K berisi 8 core, masing-masing dengan dua modul tersebut. Meskipun arsitektur modul di Titan X berbeda, kedua jenis dapat melakukan perhitungan yang sama dengan data dengan format yang sama. Kartu video ini memiliki lebih dari 3500 modul untuk melakukan perhitungan yang sebanding, dan meskipun frekuensi clock mereka jauh lebih rendah daripada di prosesor pusat (1,5 GHz dan 4,7 GHz), bagaimanapun, prosesor video mengambil jumlah modul.

Meskipun Titan X bukan kartu grafis massal, bahkan model anggaran akan mengambil alih prosesor sentral apa pun. Karena itu, semua game 3D dan API dirancang untuk peralatan khusus. Anda dapat mengunduh V-ray , 3DMark , atau tolok ukur Unigine apa pun dan uji sistem Anda - lihat sendiri seberapa baik prosesor video diadaptasi untuk rendering grafik dalam game.

Kata-kata terakhir


Itu adalah penyimpangan singkat ke dalam proses menciptakan satu frame dalam game 3D, dari titik di ruang angkasa ke gambar penuh warna pada monitor.

Faktanya, seluruh proses hanya bekerja dengan angka. Namun, banyak yang tetap berada di luar ruang lingkup artikel. Kami tidak mempertimbangkan perhitungan matematis spesifik dari aljabar linier Euclidean, trigonometri, dan kalkulus diferensial yang dilakukan oleh vertex dan pixel shaders. Kami juga tidak berbicara tentang bagaimana tekstur diproses menggunakan sampling statistik. Saya menghilangkan efek visual keren seperti memblokir cahaya sekitar di ruang layar, mengurangi gangguan dengan ray tracing, menggunakan rentang dinamis yang diperluas dan perataan temporal.

Dan lain kali Anda meluncurkan game 3D modern, kami harap Anda tidak hanya melihat grafik dengan mata yang berbeda, tetapi juga ingin tahu lebih banyak tentangnya.

All Articles