Mengoptimalkan Shader HLSL
Bagian ini menjelaskan strategi tujuan umum yang dapat Anda gunakan untuk mengoptimalkan shader Anda. Anda dapat menerapkan strategi ini ke shader yang ditulis dalam bahasa apa pun, pada platform apa pun.
- Mengetahui Tempat Melakukan Penghitungan Shader
- Lewati Instruksi yang Tidak Perlu
- Kemas Variabel dan Interpolant
- Mengurangi Kompleksitas Shader
- Topik Terkait
- Topik terkait
Mengetahui Tempat Melakukan Penghitungan Shader
Shader vertex melakukan operasi yang mencakup pengambilan simpul dan melakukan transformasi matriks data vertex. Biasanya, shader vertex dijalankan sekali per puncak.
Pixel Shaders melakukan operasi yang mencakup pengambilan data tekstur dan melakukan perhitungan pencahayaan. Biasanya, shader piksel dijalankan sekali per piksel untuk bagian geometri tertentu.
Biasanya, piksel melebihi jumlah simpul dalam adegan, sehingga shader piksel mengeksekusi lebih sering daripada shader vertex.
Saat Anda merancang algoritma shader, ingatlah hal berikut:
- Lakukan perhitungan pada shader vertex jika memungkinkan. Perhitungan yang dilakukan pada shader piksel jauh lebih mahal daripada perhitungan yang dilakukan pada shader vertex.
- Pertimbangkan untuk menggunakan perhitungan per vertex untuk meningkatkan performa dalam situasi seperti jala padat. Untuk jala padat, perhitungan per puncak dapat menghasilkan hasil yang secara visual tidak dapat dibedakan dari hasil yang dihasilkan dengan perhitungan per piksel.
Lewati Instruksi yang Tidak Perlu
Dalam HLSL, percabangan dinamis menyediakan kemampuan untuk membatasi jumlah instruksi yang dijalankan. Oleh karena itu, percabangan dinamis dapat membantu mempercepat waktu eksekusi shader. Jika geometri atau piksel tidak ditampilkan, gunakan percabangan dinamis untuk keluar dari shader atau untuk membatasi instruksi. Misalnya, jika piksel tidak menyala, tidak ada titik dalam mengeksekusi algoritma pencahayaan.
Tabel berikut mencantumkan beberapa kasus di mana Anda dapat menguji kondisi di shader Anda dan menggunakan percabangan dinamis untuk melewati instruksi yang tidak perlu. Tabel tidak komprehensif. Sebaliknya, ini dimaksudkan untuk memberi Anda ide untuk mengoptimalkan kode Anda.
Kondisi untuk Diperiksa | Respons dalam Shader |
---|---|
Pemeriksaan alfa menentukan bahwa piksel tidak akan terlihat. | Lewati sisa shader. |
Piksel atau geometri sepenuhnya berkabut. | Lewati sisa shader. |
Bobot kulit nol. | Lewati tulang. |
Redaman cahaya adalah nol. | Lewati pencahayaan. |
Istilah Lambertian non-positif. | Lewati pencahayaan. |
Kemas Variabel dan Interpolant
Perhatikan ruang yang diperlukan untuk data shader. Kemas informasi sebanyak mungkin ke dalam variabel atau interpolan. Terkadang, informasi dari dua variabel dapat dikemas ke dalam ruang memori dari satu variabel.
Mengurangi Kompleksitas Shader
Jaga agar shader Anda tetap kecil dan sederhana. Secara umum, shader dengan instruksi yang lebih sedikit dijalankan lebih cepat daripada shader dengan lebih banyak instruksi. Juga lebih mudah untuk men-debug dan mengoptimalkan shader yang lebih kecil dan kurang kompleks.
Topik Terkait
Panduan Pemrograman untuk HLSL
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk