Bagaimana cara kerja penghentian perangkat keras?


34

Saya hanya ingin seseorang menjelaskan dengan relatif jelas bagaimana tessellation perangkat keras bekerja mengingat itu adalah kata kunci baru dengan DX11.

Terima kasih.

Jawaban:


42

Saya akan memberi Anda versi "sederhana" dan membiarkan orang lain mengisi Anda dengan detail jika Anda tertarik :).

Pada dasarnya ada dua cara untuk memodelkan objek 3D. Yang pertama adalah yang Anda tidak melihat banyak dalam permainan, dan itu melibatkan menggunakan kurva yang tepat, didefinisikan secara matematis untuk menentukan bentuk objek. Dengan menggunakan metode ini, level detailnya (praktis berbicara) "tak terbatas". Ambil sebuah silinder misalnya. Silinder dapat didefinisikan dalam istilah matematika yang sangat sederhana: yang Anda benar-benar perlu ketahui adalah jari-jari di ujung dan panjang silinder. Dalam hal geometri, informasi ini adalah yang kami butuhkan untuk membuat silinder dalam adegan 3D. Selain itu, kita dapat dengan mudah menskalakan silinder untuk membuatnya lebih besar atau lebih kecil; yang perlu kita lakukan hanyalah mempertahankan rasio panjang terhadap jari-jari. Kita bisa menggunakan rumus yang sama untuk mewakili geometri, tetapi dengan parameter yang berbeda. Kami dapat mewakili torus ("donat" bentuk) dengan mudah juga: kita hanya perlu mengetahui jari-jari dalam dan jari-jari luar. Dari itu, kita dapat menghitung diameter (dan karenanya jari-jari) tubuh donat ("kue") dengan mengurangi jari-jari dalam dari jari-jari luar. Tubuh melingkar membungkus sepanjang busur yang ditentukan oleh jari-jari dalam. Jenis definisi 3D ini bagus karena relatif sederhana (menghasilkan file model kecil), dan tidak ada batasan yang signifikan untuk tingkat detail. Kelemahannya adalah perangkat keras video saat ini tidak dirancang untuk memproses jenis model ini secara efisien (jika ada). Tubuh melingkar membungkus sepanjang busur yang ditentukan oleh jari-jari dalam. Jenis definisi 3D ini bagus karena relatif sederhana (menghasilkan file model kecil), dan tidak ada batasan yang signifikan untuk tingkat detail. Kelemahannya adalah perangkat keras video saat ini tidak dirancang untuk memproses jenis model ini secara efisien (jika ada). Tubuh melingkar membungkus sepanjang busur yang ditentukan oleh jari-jari dalam. Jenis definisi 3D ini bagus karena relatif sederhana (menghasilkan file model kecil), dan tidak ada batasan yang signifikan untuk tingkat detail. Kelemahannya adalah perangkat keras video saat ini tidak dirancang untuk memproses jenis model ini secara efisien (jika ada).

Cara lainnya adalah menggabungkan geometri sederhana untuk memperkirakan bentuk yang ingin kami wakili. Kami melakukan ini dengan proses yang disebut tessellation . Kita bisa tessellate silinder dengan memecahnya menjadi bentuk yang lebih primitif: dua lingkaran dan serangkaian persegi panjang yang panjang, yang membungkus di sekitar tepi luar. Lingkaran-lingkaran itu selanjutnya dapat dipecah menjadi banyak segitiga kecil, seperti halnya persegi panjang di sepanjang tepi. Hasil akhirnya adalah model yang hanya terdiri dari segitiga:

Gambar Silinder Triangulasi

Atau, untuk torus:

Gambar Triangulated Torus

Berita baiknya adalah perangkat keras video dioptimalkan untuk menangani geometri semacam ini. GPU hari ini tidak mengalami kesulitan menghasilkan berton-ton segitiga setiap detik. Namun, ada masalah yang jelas: kami mencoba mewakili permukaan melengkung menggunakan bentuk yang memiliki tepi rata. Agar silinder kami terlihat seperti silinder (berbeda dengan kubus), kami ingin memecahnya menjadi banyaksegitiga kecil. Berapa banyak yang kita inginkan? Tergantung. Perangkat keras apa yang akan digunakan untuk membuat adegan? Perangkat keras yang lebih cepat dapat membuat segitiga lebih cepat daripada perangkat keras yang lebih lambat, menghasilkan laju bingkai yang lebih cepat. Ada faktor-faktor lain yang perlu dipertimbangkan, seperti berapa banyak objek lain yang akan hadir dalam adegan itu, dan seberapa kompleksnya mereka? Dalam permainan, biasanya ada banyak objek dalam adegan yang diberikan. Selain itu, objek dapat melakukan perjalanan melalui pemandangan yang berbeda, masing-masing dengan tingkat kompleksitas visual yang berbeda. Sulit untuk mengetahui tingkat detail untuk digunakan ketika kita menjual model kita.

Masalah lain adalah kompleksitas geometris: sedangkan definisi kurva berdasarkan silinder sangat sederhana (radius dan panjang), definisi tessellated kemungkinan menggabungkan ratusan segitiga, yang masing-masing perlu didefinisikan secara independen. Akibatnya, file model tessellated kami akan jauh, jauh lebih besar. Katakanlah kita memiliki model sesuatu yang rumit secara matematis, seperti seseorang. File model kami mungkin berukuran 24kb. Nah, begitu model tersebut dijual, file yang dihasilkan bisa 24mb (24,000kb). Perbedaannya cukup besar.

Tessellation perangkat keras memanfaatkan geometri shaders untuk melakukan tessellation berbantuan perangkat keras dalam waktu nyata (atau hampir dalam waktu nyata). Pada dasarnya, ini menyediakan mekanisme untuk mengambil model 3D yang ditentukan secara matematis dan mengubahnya menjadi format tessellated yang dapat dibuat kartu video secara efisien. Secara tradisional, pengembang game telah melakukan tessellation di studio dan mengirimkan model tessellated dengan game. Tessellation perangkat keras memungkinkan kita untuk menunda proses ini sampai permainan benar - benar berjalan di komputer pemain. Ini memiliki beberapa manfaat serius:

  1. Ukuran konten 3D gim berkurang secara dramatis (lebih sedikit cakram atau unduhan yang lebih kecil, dan lebih sedikit ruang cakram keras yang diperlukan).

  2. Kami dapat mengontrol level detail secara real time . Apakah kita berjalan di atas mesin game yang paling canggih? Jika demikian, kita dapat menjual menggunakan tingkat detail yang sangat tinggi. Apakah kita menjalankan laptop lama dengan grafik terintegrasi? Tidak masalah; kita cukup mengurangi tingkat detail untuk meningkatkan kinerja.

Jadi itulah intinya. Ini mungkin tidak 100% akurat, karena saya bukan seorang programmer 3D, tetapi itu harus memberi Anda ide yang lebih baik tentang semua yang diributkan tentang :).

Cheers,
Mike


Wow ... brilian! 'Gambaran' terpanjang yang pernah saya baca: P

6
Ada satu hal lain yang menentukan tingkat tessellation yang diperlukan - ukuran objek di layar. Runtime tessellation memungkinkan Anda memiliki tingkat detail yang benar di mana-mana, tanpa membuat beberapa versi dari setiap objek.
Adam

Apakah itu agak berat CPU?
jcora

@Bane, maksud Anda GPU intensif? CPU tidak peduli.
Nate Zaugg

0

Sayang sekali bukan itu cara sebagian besar pengembang memanfaatkan tessellation sekarang atau dalam waktu dekat. Semua yang mereka gunakan tess untuk saat ini adalah untuk memindahkan sebagian besar permukaan datar berdasarkan ketinggiannya. Itu juga menghasilkan penampilan yang bagus, tapi saya masih berpikir itu penggunaan teknologi yang jauh lebih buruk.


Alat-alat dan jalur produksi harus dipikirkan ulang dan dibangun kembali (karena saya yakin Anda tahu lebih baik daripada kebanyakan, @SamHocevar, jadi komentar ini tidak ditujukan kepada Anda), dan perangkat keras baru harus berkembang biak menjadi persentase yang signifikan.
Rob Craig

@RobCraig Perhatikan bahwa saya baru saja memperbaiki ejaan dalam komentar itu; Saya bukan penulis asli.
sam hocevar

@ SamHocevar Yup, saya pikir - terima kasih untuk klarifikasi, meskipun!
Rob Craig
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.