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

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.

Panduan Pemrograman untuk HLSL

Panduan Pemrograman untuk HLSL