Manual menggabungkan jala
BatchRendererGroup

Scriptable Render Pipa Batcher

The Scriptable Render PipelineRangkaian operasi yang mengambil isi dari Adegan, dan menampilkannya di layar. Unity memungkinkan Anda memilih dari pipa render yang dibangun sebelumnya, atau menulis sendiri. More info
Lihat di Glossary
(SRP) Batcher adalah draw call optimization yang secara signifikan meningkatkan kinerja untuk aplikasi yang menggunakan SRP. The SRP Batcher mengurangi waktu CPU Unity perlu mempersiapkan dan mengirimkan panggilan untuk bahan yang menggunakan varian shaderProgram yang berjalan di GPU. More info
Lihat di Glossary
yang sama.

The Scriptable Render Pipeline (SRP) Batcher reduces the CPU time Unity requires to render scenes with many materials that use the same shader variant.
The Scriptable Render Pipeline (SRP) Batcher mengurangi waktu CPU Unity memerlukan untuk membuat adegan dengan banyak bahan yang menggunakan varian naungan yang sama.

Persyaratan dan kompatibilitas

Bagian ini mencakup informasi tentang kompatibilitas pipa render dari SRP Batcher.

Kompatibilitas pipa Render

Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP)
SRP Batcher No Yes Yes Yes

GameObject kompatibilitas

Dalam setiap sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary
tertentu, beberapa GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary
kompatibel dengan SRP Batcher, dan beberapa tidak. GameObjects Kompatibel menggunakan jalur kode SRP Batcher, dan GameObjects yang tidak kompatibel menggunakan jalur kode SRP standar. Untuk informasi lebih lanjut, lihat Bagaimana SRP Batcher bekerja.

GameObject harus memenuhi persyaratan berikut untuk kompatibel dengan jalur kode SRP Batcher:

  • GameObject harus mengandung kedua meshGrafik utama primitif Unity. Mesh membuat sebagian besar dunia 3D Anda. Unity mendukung mesh poligon triangulat atau Quadrangulasi. Nurbs, Nurms, permukaan Subdiv harus dikonversi ke poligon. More info
    Lihat di Glossary
    atau jaring berkelok-kelok. Ini tidak bisa menjadi partikel.
  • GameObject tidak boleh menggunakan MaterialPropertyBlocks.
  • Naungan yang menggunakan GameObject harus kompatibel dengan SRP Batcher. Untuk informasi lebih lanjut, lihat Kompatibilitas Shader.

Kompatibilitas Shader

Semua warna yang menyala dan tidak menyala dalam Pipa Render Definisi Tinggi (HDRP) dan Pipa Render Universal (URP) sesuai dengan persyaratan ini (kecuali untuk versi partikel dari naungan ini).

Untuk naungan kustom kompatibel dengan SRP Batcher harus memenuhi persyaratan berikut:

  • Naungan harus menyatakan semua sifat mesin bawaan dalam penyangga konstan tunggal bernama UnityPerDraw. Sebagai contoh, unity_ObjectToWorld, atau unity_SHAr.
  • Naungan harus menyatakan semua sifat material dalam penyangga konstan tunggal bernama UnityPerMaterial.

Anda dapat memeriksa status kompatibilitas naungan di panel InspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary
.

You can check the compatibility of your shaders in the Inspector panel for the specific shader.
Anda dapat memeriksa kompatibilitas naungan Anda di panel Inspektur untuk naungan tertentu.

Menggunakan SRP Batcher

Bagian ini berisi informasi tentang cara menggunakan SRP Batcher di Pipelines Render yang telah dibangun sebelumnya Unity.

Menggunakan Batcher SRP di URP

Untuk mengaktifkan SRP Batcher di URP:

  1. Pada Project windowJendela yang menunjukkan isi folder Assets (Project tab) More info
    Lihat di Glossary
    , pilih .
  2. Inspektur untuk aset URP, pergi ke Advanced, dan mengaktifkan SRP Batcher.

Menggunakan SRP Batcher di HDRP

Ketika Anda menggunakan HDRP, Unity memungkinkan SRP Batcher secara default. Mengaktifkan SRP Batcher tidak dianjurkan. Namun, Anda dapat sementara menonaktifkan SRP Batcher untuk tujuan debugging.

Untuk mengaktifkan dan menonaktifkan SRP Batcher pada waktu build menggunakan Editor:

  1. Di jendela Proyek, pilih .
  2. Dalam Inspektur untuk aset, masukkan Mode debug. Dalam mode Debug, Anda dapat melihat sifat dari Aset HDRP, termasuk properti SRP Batcher.
  3. Pilih Enable SRP Batcher untuk mengaktifkan atau menonaktifkan SRP Batcher.

Untuk mengaktifkan atau menonaktifkan SRP Batcher pada runtime, toggle variabel global berikut dalam kode C # Anda:

GraphicsSettings.useScriptableRenderPipelineBatching = true;

Bagaimana SRP Batcher bekerja

Cara tradisional untuk mengoptimalkan panggilan menggambar adalah untuk mengurangi jumlah dari mereka. Sebagai gantinya, SRP Batcher mengurangi perubahan render-state antara panggilan menggambar. Untuk melakukan ini, SRP Batcher menggabungkan urutan perintah bind dan draw GPU. Setiap urutan perintah disebut batch SRP.

The batching of bind and draw commands reduces the GPU setup between draw calls.
Penetapan perintah mengikat dan menggambar mengurangi pengaturan GPU antara panggilan menggambar.

Untuk mencapai kinerja optimal untuk rendering Anda, setiap batch SRP harus mengandung banyak perintah bind dan draw mungkin. Untuk mencapai ini, gunakan beberapa varian warna mungkin. Anda masih dapat menggunakan berbagai bahan dengan warna yang sama seperti yang Anda inginkan.

Ketika Unity mendeteksi bahan baru selama render loop, CPU mengumpulkan semua properti dan mengikat mereka ke GPU dalam buffer konstan. Jumlah penyangga GPU tergantung pada bagaimana naungan menyatakan penyangga konstan.

Login Batcher adalah loop render tingkat rendah yang membuat data material tetap dalam memori GPU. Jika konten materi tidak berubah, Batcher SRP tidak membuat perubahan render-state. Sebagai gantinya, SRP Batcher menggunakan jalur kode khusus untuk memperbarui properti Unity Engine dalam buffer GPU besar, seperti ini:

The SRP Batcher rendering workflow. The SRP Batcher uses a dedicated code path to update the Unity Engine properties in a large GPU buffer.
SRP Batcher rendering alur kerja. Batcher SRP menggunakan jalur kode khusus untuk memperbarui properti Mesin Unity dalam buffer GPU besar.

Di sini, CPU hanya menangani sifat Mesin Unity, label Per Object large buffer di diagram di atas. Semua bahan memiliki penyangga terus-menerus yang terletak di memori GPU, yang siap digunakan. Ini mempercepat rendering karena:

  • Semua konten material sekarang di memori GPU.
  • Kode khusus mengelola penyangga konstan GPU besar untuk semua properti per-object.

Secara aktif menghilangkan kompatibilitas SRP Batcher untuk GameObjects

Dalam beberapa kasus langka, Anda mungkin ingin secara sengaja membuat GameObjects tertentu tidak kompatibel dengan SRP Batcher. Misalnya, jika Anda ingin menggunakan GPU instancing, yang tidak kompatibel dengan SRP Batcher. Jika Anda ingin membuat banyak jaring identik dengan bahan yang sama persis, GPUjahcing dapat lebih efisien daripada SRP Batcher. Untuk menggunakan gangguan GPU, Anda harus:

  • Gunakan Grafik.DrawMeshInstanced.
  • Manual menghapus SRP Kompatibilitas batching dan mengaktifkan GPU Suspensioncing untuk material.

Ada dua cara untuk menghapus kompatibilitas dengan SRP Batcher dari GameObject:

  • Membuat warna tidak kompatibel.
  • Membuat inkompatibel renderer.

Tip: Jika Anda menggunakan GPU tenggelam bukan SRP Batcher, gunakan ProfilerJendela yang membantu Anda untuk mengoptimalkan permainan Anda. Ini menunjukkan berapa banyak waktu yang dihabiskan di berbagai bidang permainan Anda. Sebagai contoh, dapat melaporkan persentase waktu yang dihabiskan rendering, aimating, atau dalam logika permainan Anda. More info
Lihat di Glossary
untuk memastikan bahwa GPUSicing lebih efisien untuk aplikasi Anda daripada SRP Batcher.

Menghapus kompatibilitas naungan

Anda dapat membuat teduh hand-written dan Shader Graph yang tidak kompatibel dengan SRP Batcher. Namun, untuk naungan Shader Graph, jika Anda mengubah dan mengulangi Shader Graph sering, lebih sederhana untuk membuat renderer incompatible bukan.

Untuk membuat kantung Unity tidak kompatibel dengan SRP Batcher, Anda perlu membuat perubahan pada file sumber naungan:

  1. Untuk naungan tulisan tangan, buka file sumber naungan. Untuk shader Graph shader, salin Shader Graph disusun kode sumber naungan ke dalam file sumber naungan baru. Gunakan file sumber naungan baru dalam aplikasi Anda bukan Shader Graph.
  2. Tambahkan deklarasi bahan properti baru ke blok Properties naungan. Jangan mendeklarasikan properti material baru dalam buffer konstan UnityPerMaterial.

Properti material tidak perlu melakukan apa pun; hanya memiliki properti material yang tidak ada dalam penyangga konstan UnityPerMaterial membuat warna yang tidak kompatibel dengan SRP Batcher.

Warning: Jika Anda menggunakan Shader Graph, menyadari bahwa setiap kali Anda mengedit dan mengulangi Shader Graph, Anda harus mengulangi proses ini.

Menghapus kompatibilitas renderer

Anda dapat membuat renderer individu yang tidak kompatibel dengan SRP Batcher. Untuk melakukan ini, tambahkan MaterialPropertyBlock ke renderer.

Profil SRP Batcher di Debugger Bingkai Unity

Anda dapat memeriksa status batch SRP di jendela Bingkai Debugger. SRP Batch menampilkan berapa banyak panggilan menarik Unity digunakan, yang kata kunci Unity melekat pada naungan, dan alasan mengapa Unity tidak batch yang menarik panggilan dengan yang sebelumnya.

Untuk memeriksa status batch SRP Batcher:

  1. Di Editor, buka Debugger Bingkai (menu: Window > Analysis > Frame Debugger).
  2. Dalam Bingkai Debugger, pergi ke Render Camera > Render Opaques.
  3. Memperluas daftar RenderLoopNewBatcher.Draw.
  4. Pilih pada SRP Batch yang ingin Anda periksa.

Dalam contoh di bawah ini, alasannya adalah: Nodes have different shaders. Ini berarti bahwa naungan untuk batch SRP berbeda dengan satu dalam batch SRP sebelumnya. Karena SRP Batcher menggunakan naungan yang berbeda, SRP Batcher menciptakan batch baru. Jika beberapa batch SRP memiliki jumlah panggilan menggambar rendah, sering berarti proyek menggunakan terlalu banyak varian warna.

In the Frame Debugger window, you can find details about individual SRP batches, including why the SRP Batcher created a new SRP batch instead of continuing the existing one.
Di jendela Frame Dustgger, Anda dapat menemukan rincian tentang batch SRP individu, termasuk mengapa SRP Batcher menciptakan batch SRP baru bukan melanjutkan yang ada.

Jika Anda menulis Render Pipeline Alkitab Anda sendiri, bukan menggunakan Render Pipeline Universal atau Pipa Render Definisi Tinggi, coba tulis naungan multi-tujuan generik dengan sejumlah kata kunci minimal. Ini optimal karena Anda dapat menggunakan banyak properti material yang Anda inginkan.

Manual menggabungkan jala
BatchRendererGroup