Memahami kinerja naungan
Debugging naungan menggunakan Visual Studio

Mengoptimalkan kinerja runtime naungan

Platform yang berbeda memiliki kemampuan kinerja yang sangat berbeda; PC GPU high-end dapat menangani lebih banyak dalam hal grafis dan shadersProgram yang berjalan di GPU. More info
Lihat di Glossary
dari GPU seluler low-end. Hal yang sama berlaku bahkan pada satu platform; GPU cepat lusinan kali lebih cepat dari GPU terintegrasi lambat.

Kinerja GPU pada platform seluler dan PC low-end cenderung jauh lebih rendah daripada pada mesin pengembangan Anda. Disarankan bahwa Anda secara manual mengoptimalkan naungan Anda untuk mengurangi perhitungan dan tekstur membaca, untuk mendapatkan kinerja yang baik di seluruh mesin GPU low-end. Sebagai contoh, beberapa built-in Shader objectsContoh kelas Shader, objek Shader adalah wadah untuk program naungan dan instruksi GPU, dan informasi yang memberi tahu Unity bagaimana menggunakannya. Gunakan mereka dengan bahan untuk menentukan penampilan adegan Anda. More info
Lihat di Glossary
memiliki ekuivalen "mobile" yang jauh lebih cepat, tetapi memiliki beberapa keterbatasan atau perkiraan.

Halaman ini berisi informasi tentang mengoptimalkan naungan Anda untuk kinerja runtime.

Hanya menghitung apa yang Anda butuhkan

Semakin banyak perhitungan dan memproses kode naungan Anda harus dilakukan, semakin banyak itu akan mempengaruhi kinerja permainan Anda. Misalnya, warna pendukung per bahan bagus untuk membuat warna lebih fleksibel, tetapi jika Anda selalu meninggalkan set warna itu putih maka komputasi tidak berguna dilakukan untuk setiap simpul atau pixelUnit terkecil dalam gambar komputer. Ukuran piksel tergantung pada resolusi layar Anda. Pencahayaan pixel dihitung pada setiap piksel layar. More info
Lihat di Glossary
yang diberikan di layar.

Frekuensi perhitungan juga akan mempengaruhi kinerja permainan Anda. Biasanya ada banyak lebih banyak piksel yang dirender (dan selanjutnya lebih banyak eksekusi naungan pixel) daripada ada vertices (eksekusi naungan vertex), dan lebih simpul daripada objek yang diberikan. Bila memungkinkan, memindahkan komputasi dari kode naungan pixel ke dalam kode vertex shaderProgram yang berjalan pada setiap simpul model 3D ketika model sedang diberikan. More info
Lihat di Glossary
, atau memindahkannya dari naungan sepenuhnya dan menetapkan nilai dalam skrip.

Presisi komputasi

Ketika menulis naungan di Cg / HLSL, ada tiga jenis nomor dasar: float, half dan fixed (lihat Jenis Data dan Presisi).

Untuk kinerja yang baik, selalu menggunakan presisi terendah yang mungkin. Ini sangat penting pada perangkat keras kelas bawah. Aturan yang baik dari thumb adalah:

  • Untuk posisi ruang dunia dan koordinat tekstur, gunakan presisi float.
  • Untuk segala sesuatu yang lain (warna, warna HDR, dll), mulai dengan presisi half. Meningkatkan hanya jika diperlukan.
  • Untuk operasi yang sangat sederhana pada data tekstur, gunakan presisi fixed.

Dalam prakteknya, persis jenis nomor mana yang harus Anda gunakan untuk tergantung pada platform dan GPU. Secara umum:

  • Semua GPU desktop modern akan selalu mengimbangi segala sesuatu dalam presisi float penuh, sehingga float/half/fixed berakhir tepatnya bawahan yang sama. Hal ini dapat membuat pengujian sulit, karena lebih sulit untuk melihat apakah presisi setengah / diperbaiki benar-benar cukup, jadi selalu menguji naungan Anda pada perangkat target untuk hasil yang akurat.
  • Mobile GPU memiliki dukungan presisi half yang sebenarnya. Ini biasanya lebih cepat, dan menggunakan daya kurang untuk melakukan perhitungan.
  • Presisi Fixedfixed umumnya hanya berguna untuk GPU seluler yang lebih tua. Kebanyakan GPU modern (yang dapat menjalankan OpenGL ES 3 atau Metal) secara internal memperlakukan half dan presisi persis sama.

Lihat Jenis Data dan Presisi untuk rincian lebih lanjut.

Operasi matematika yang kompleks

Fungsi matematika transkendental (seperti pow, exp, log, cos, sin, tan) cukup intensif sumber daya, sehingga menghindari menggunakannya di mana mungkin pada perangkat keras low-end. Pertimbangkan menggunakan tekstur lookup sebagai alternatif perhitungan matematika yang kompleks jika berlaku.

Hindari menulis operasi Anda sendiri (seperti normalize, dot, inversesqrt). Opsi bawaan unity memastikan bahwa pengemudi dapat menghasilkan kode yang jauh lebih baik. Ingat bahwa operasi Alpha Test (discard) sering membuat kerusakan Anda lebih lambat.

Permukaan Dioptimalkan Shaders

Permukaan ShaderCara merampingkan naungan menulis untuk Pipeline Render Built-in. More info
Lihat di Glossary
bagus untuk menulis naungan yang berinteraksi dengan pencahayaan. Namun, opsi default mereka tuned untuk menutupi sejumlah besar kasus umum. Tweak ini untuk situasi tertentu untuk membuat naungan berjalan lebih cepat atau setidaknya lebih kecil:

  • Kearah approxview untuk naungan yang menggunakan arah pandangan (misal) membuat arah pandangan normal per simpul bukan per pixel. Ini adalah perkiraan, tetapi sering cukup baik.
  • halfasview untuk jenis naungan spular bahkan lebih cepat. Half-vector (halfway antara arah pencahayaan dan melihat vektor) dihitung dan dinormalisasi per simpul, dan fungsi pencahayaan menerima semi-vector sebagai parameter daripada tampilan vektor.
  • noforwardadd membuat lampu satu arah teduh di Forward renderingSebuah jalur rendering yang membuat setiap objek dalam satu atau lebih melewati, tergantung pada lampu yang mempengaruhi objek. Lampu sendiri juga diperlakukan berbeda dengan Rendering Maju, tergantung pada pengaturan dan intensitas mereka. More info
    Lihat di Glossary
    saja. Sisa lampu masih dapat memiliki efek sebagai lampu per-vertex atau harmonik bulat. Ini bagus untuk membuat naungan Anda lebih kecil dan pastikan selalu render dalam satu pass, bahkan dengan beberapa lampu hadir.
  • noambient menonaktifkan pencahayaan ambient dan lampu harmonik bulat pada naungan. Ini dapat membuat kinerja sedikit lebih cepat.

Pengujian Alpha

Fungsi tetap AlphaTest - atau setara programmable, clip() - memiliki karakteristik kinerja yang berbeda pada platform yang berbeda:

  • Umumnya Anda mendapatkan keuntungan kecil ketika menggunakannya untuk menghapus piksel yang benar-benar transparan pada sebagian besar platform.
  • Namun, pada PowerVR GPU ditemukan di iOS dan beberapa perangkat Android, pengujian alfa adalah intensif sumber daya. Jangan mencoba menggunakannya untuk optimasi kinerja pada platform ini, karena menyebabkan permainan untuk menjalankan lebih lambat dari biasanya.

Masker warna

Pada beberapa platform (paling GPU seluler yang ditemukan di perangkat iOS dan Android), menggunakan ColorMask untuk meninggalkan beberapa saluran (misalnya ColorMask RGB) dapat menjadi intensif sumber daya, jadi hanya menggunakannya jika benar-benar diperlukan.

Memahami kinerja naungan
Debugging naungan menggunakan Visual Studio