Perkenalan Shaders
Shader assets

Kelas Shader

Dalam Unity, ketika Anda bekerja dengan naungan yang merupakan bagian dari pipa grafis, Anda biasanya bekerja dengan contoh kelas ShaderProgram yang berjalan di GPU. More info
Lihat di Glossary
. Contoh kelas Shader disebut Shader object.

Objek Shader adalah cara yang spesifik untuk bekerja dengan program naungan; itu adalah pembungkus untuk program naungan dan informasi lainnya. Ini memungkinkan Anda mendefinisikan beberapa program naungan dalam file yang sama, dan memberitahukan Unity bagaimana menggunakannya.

Kompatibilitas pipa Render

Feature name Built-in Render PipelineA series of operations that take the contents of a Scene, and displays them on a screen. Unity lets you choose from pre-built render pipelines, or write your own. More info
See in Glossary
Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP
Shader objects Yes Yes Yes Yes

Dasar objek Shader

Objek Shader berisi program naungan, instruksi untuk mengubah pengaturan pada GPU (secara kolektif disebut state render), dan informasi yang memberi tahu Unity bagaimana menggunakannya.

Anda menggunakan objek Shader dengan materialsAset yang menentukan bagaimana permukaan harus diberikan. More info
Lihat di Glossary
untuk menentukan penampilan 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
Anda.

Assets

Anda dapat membuat benda-benda Shader dalam dua cara. Setiap memiliki jenis aset sendiri:

  • Anda dapat menulis kode untuk membuat aset warna, yang merupakan file teks dengan ekstensi .shader.
  • Anda dapat menggunakan Shader Graph untuk membuat aset Shader Graph.

Cara apa pun yang Anda buat Objek Shader, Unity mewakili hasil dalam cara yang sama secara internal.

Di dalam objek Shader

Objek Shader memiliki struktur bersarang. Ini mengatur informasi ke dalam struktur yang disebut SubShaders dan Passes. Ini mengatur program naungan menjadi shader variants.

Shader object

Objek Shader mengandung:

  • Informasi tentang dirinya sendiri, nama
  • Objek shader fallback opsional, yang digunakan Unity jika tidak dapat menggunakan satu ini
  • Satu atau lebih SubShaders

Anda juga dapat mendefinisikan informasi tambahan seperti kode naungan bersama, atau apakah untuk menggunakan editor kustom. Untuk informasi tentang mendefinisikan objek Shader, lihat ShaderLab: mendefinisikan objek Shader.

SubShaders

SubShaders memungkinkan Anda memisahkan Objek Shader menjadi bagian yang kompatibel dengan perangkat keras yang berbeda, render pipa, dan pengaturan runtime.

SubShader mengandung:

  • Informasi tentang perangkat keras mana, render pipa, dan pengaturan runtime SubShader ini kompatibel dengan
  • Tag SubShader, yang merupakan pasangan nilai kunci yang memberikan informasi tentang SubShader
  • Satu atau lebih Passes

Anda juga dapat mendefinisikan informasi tambahan, seperti state render yang umum untuk semua Pass. Untuk informasi tentang segala sesuatu yang dapat Anda tentukan dalam SubShader, lihat ShaderLab: mendefinisikan SubShader.

Passes

Lulus mengandung:

  • Tag Pass, yang merupakan pasangan nilai kunci yang memberikan informasi tentang Pass
  • Instruksi untuk memperbarui state render sebelum menjalankan program naungannya
  • Program Shader, diatur menjadi satu atau lebih varian warna

Anda juga dapat mendefinisikan informasi tambahan seperti nama. Untuk informasi tentang segala sesuatu yang dapat Anda tentukan di Pass, lihat ShaderLab: mendefinisikan Pass.

Varietas Shader

Program naungan yang Pass mengandung terorganisasi menjadi varian naungan. Varietas Shader berbagi kode umum, tetapi memiliki fungsi yang berbeda ketika kata kunci yang diberikan diaktifkan atau dinonaktifkan.

Jumlah varian naungan di Pass tergantung pada berapa banyak kata kunci yang Anda tentukan dalam kode naungan Anda, dan platform target. Setiap Pass berisi setidaknya satu varian.

Untuk informasi lebih lanjut, lihat Varietas ShaderSebuah verion dari program naungan yang Unity menghasilkan sesuai dengan kombinasi khusus kata kunci naungan dan status mereka. Objek Shader dapat mengandung beberapa varian naungan. More info
Lihat di Glossary
.

Order operasi selama rendering

Ini adalah deskripsi tingkat tinggi tentang bagaimana Unity menggunakan benda Shader untuk membuat geometri, di semua pipa render.

Sebelum Unity menggunakan objek Shader:

  1. Unity menciptakan daftar SubShader untuk objek Shader. Ini menambahkan semua SubShaders didefinisikan dalam objek Shader, dan kemudian menambahkan semua SubShaders dalam objek Shader fallback, dalam rangka.

Ketika geometri render pertama Unity menggunakan objek Shader, atau ketika perubahan pipa render warna LOD nilai atau aktif:

  1. Unity iterates atas daftar semua SubShaders dan memeriksa mereka untuk menentukan apakah mereka: kompatibel dengan perangkat keras; di atau di bawah naungan saat ini nilai LODTeknik Tingkat Detail (LOD) adalah optimasi yang mengurangi jumlah segitiga yang dimiliki Unity untuk membuat GameObject ketika jaraknya dari kamera meningkat. More info
    Lihat di Glossary
    ; dan kompatibel dengan pipa render aktif.
  2. Jika daftar berisi satu atau lebih SubShader yang memenuhi persyaratan ini, itu memilih yang pertama. Ini adalah SubShader aktif.
  3. Jika daftar tidak mengandung SubShader yang memenuhi semua persyaratan:
    1. Jika daftar mengandung satu atau lebih SubShader yang memenuhi persyaratan perangkat keras (tetapi tidak memenuhi persyaratan pipa LOD atau render), Unity memilih yang pertama. Ini adalah SubShader aktif.
    2. Jika daftar tidak mengandung SubShader yang memenuhi persyaratan perangkat keras, Unity menampilkan error shader.

Unity dapat mengidentifikasi geometri yang menggunakan varian naungan yang sama dan mengaturnya menjadi batches untuk rendering yang lebih efisien. Setelah per bingkai, untuk setiap batch geometri:

  1. Unity menentukan yang Passes di SubShader aktif harus render, dan di mana titik dalam bingkai. Perilaku ini bervariasi dengan membuat pipa.
  2. Untuk setiap Pass yang renders:
    1. Jika state render saat ini tidak cocok dengan state render yang didefinisikan di Pass, Unity menetapkan state render sebagaimana didefinisikan di Pass.
    2. GPU membuat geometri menggunakan varian warna yang relevan.
Perkenalan Shaders
Shader assets