Halaman ini berisi informasi tentang menggunakan blok Tags
pada kode ShaderLabBahasa Unity untuk mendefinisikan struktur benda-benda Shader. More info
Lihat di Glossary Anda untuk menetapkan tag ke SubShader.
Untuk informasi tentang mendefinisikan SubShader, lihat ShaderLab: mendefinisikan SubShader. Untuk informasi tentang bagaimana objek ShaderProgram yang berjalan di GPU. More info
Lihat di Glossary bekerja, dan hubungan antara benda-benda Shader, SubShaders dan Passes, lihat 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.
Tags adalah pasangan data nilai kunci. Unity menggunakan kunci dan nilai yang telah ditentukan untuk menentukan bagaimana dan ketika menggunakan SubShader yang diberikan, atau Anda juga dapat membuat tag SubShader kustom Anda sendiri dengan nilai kustom. Anda dapat mengakses tag SubShader dari kode C#.
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 |
---|---|---|---|---|
ShaderLab: SubShader Tags block | Yes | Yes | Yes | Yes |
ShaderLab: RenderPipeline SubShader tag | No | Yes | Yes | No |
ShaderLab: Queue SubShader tag | No | Yes | Yes |
Ya Note: dalam SRP kustom, Anda dapat menentukan pesanan rendering Anda sendiri dan memilih apakah atau tidak menggunakan queue render. Untuk informasi lebih lanjut, lihat DrawingSettings dan SortingCriteria. |
ShaderLab: RenderType SubShader tag | Yes | Yes | Yes | Yes |
ShaderLab: DisableBatching SubShader tag | Yes | Yes | Yes | Yes |
ShaderLab: ForceNoShadowCasting SubShader tag | Yes | Yes | Sitemap Ini menonaktifkan bayangan biasa, tetapi tidak berpengaruh pada kontak bayangan. This disables regular shadows, but has no effect on contact shadows. |
Yes |
ShaderLab: CanUseSpriteAtlas SubShader tag | Yes | Yes | Yes | Yes |
ShaderLab: PreviewType SubShader tag | Yes | Yes | Yes | Yes |
Di ShaderLab, Anda menetapkan tag ke SubShader dengan menempatkan blok Tags
di dalam blok SubShader
.
Perhatikan bahwa kedua SubShaders dan Passes menggunakan blok Tags
, tetapi mereka bekerja berbeda. Menetapkan tag SubShader ke Pass tidak berpengaruh, dan sebaliknya. Perbedaannya adalah di mana Anda menempatkan blok Tags
:
Tags
di dalam blok Pass
.Tags
di dalam blok SubShader
tetapi di luar blok Pass
.Untuk informasi tentang menetapkan tag ke Pass, lihat Menetapkan tag ke Pass.
Signature | Function |
---|---|
Kata kunci { "[name1]" = "[value1]" "[name2]" = "[value2]"} | Berlaku tag yang diberikan kepada SubShader. Anda dapat mendefinisikan banyak tag yang Anda sukai. |
Anda dapat membaca tag SubShader dari skrip C# menggunakan API Bahan.GetTag, seperti ini:
using UnityEngine;
public class Example : MonoBehaviour
{
// Attach this to a gameObject that has a Renderer component
string tagName = "ExampleTagName";
void Start()
{
Renderer myRenderer = GetComponent<Renderer>();
string tagValue = myRenderer.material.GetTag(ExampleTagName, true, "Tag not found");
Debug.Log(tagValue);
}
}
Tag RenderPipeline
memberi tahu Unity apakah SubShader kompatibel dengan Pipa Render Universal (URP) atau Pipa Render Definisi Tinggi (HDRP).
Signature | Function |
---|---|
"RenderPipeline" = "[name]" | Tells Unity apakah SubShader ini kompatibel dengan URP atau HDRP. |
Parameter | Value | Function |
---|---|---|
[url] | Login Login | SubShader ini kompatibel dengan URP saja. |
HighDefinitionRenderPipeline | SubShader ini kompatibel dengan HDRP saja. | |
(nilai lain, atau tidak dinyatakan) | SubShader ini tidak kompatibel dengan URP atau HDRP. |
Kode contoh ini menyatakan bahwa SubShader kompatibel dengan URP:
Shader "ExampleShader" {
SubShader {
Tags { "RenderPipeline" = "UniversalRenderPipeline" }
Pass {
…
}
}
}
Tag Queue
memberi tahu Unity yang membuat antrian untuk digunakan untuk geometri yang render. Antri render adalah salah satu faktor yang menentukan urutan geometri Unity.
Anda dapat menggunakan tag Queue
dalam dua cara: Anda dapat memberi tahu Unity untuk menggunakan antrian render bernama, atau antrian render yang tidak dinamik yang diberikan setelah antrian render bernama.
Signature | Function |
---|---|
“Queue” = “[nama antrian]” | Gunakan antrian render bernama. |
"Queue" = "[ nama antrian] + [offset]" | Gunakan antrian yang tidak dinamik, pada offset yang diberikan dari antrian bernama. Contoh ketika ini berguna dalam kasus air transparan, yang harus Anda tarik setelah benda buram tetapi sebelum benda transparan. |
Signature | Value | Function |
---|---|---|
[queue name] | Background | Tentukan antrian render Latar Belakang. |
Geometry | Menentukan antrian render Geometry. | |
AlphaTest | Menentukan Alpha Uji queue. | |
Transparent | Tentukan antrian render Transparan. | |
Overlay | Tentukan antrian render Overlay. | |
[offset] | integer | Tentukan indeks di mana Unity membuat antrian yang tidak dinamik, relatif terhadap antrian yang dinamakan. |
Anda dapat menggunakan Shader.renderQueue untuk membaca nilai tag Queue dari SubShader aktif objek Shader.
Secara default, geometri render Unity dalam antrian render yang ditentukan dalam tag [Queue]. Anda dapat menimpa nilai ini berdasarkan per materi. Dalam Editor Unity, Anda dapat melakukan ini di Bahan Inspektur dengan mengatur properti Render Queue. Dalam skrip C#, Anda dapat melakukan ini dengan menetapkan nilai Bahan.renderQueue menggunakan Login Login enum.
Kode contoh ini menciptakan SubShader yang membuat geometri sebagai bagian dari antrian render Transparan:
Shader "ExampleShader" {
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
…
}
}
}
Kode contoh ini menciptakan SubShader yang membuat geometri dalam antrian yang tidak dinamik, setelah antrian Geometry.
Shader "ExampleShader" {
SubShader {
Tags { "Queue" = "Geometry+1" }
Pass {
…
}
}
}
Gunakan tag RenderType
untuk menimpa perilaku objek Shader.
Di Pipeline Render Built-in, Anda dapat menukar SubShaders pada runtime menggunakan teknik yang disebut pengganti warna. Teknik ini bekerja dengan mengidentifikasi SubShaders yang memiliki nilai tag RenderType
. Ini digunakan dalam beberapa kasus untuk menghasilkan tekstur kedalaman kamera.
Dalam pipa render berdasarkan Pipa Render Scriptable, Anda dapat menimpa state render yang didefinisikan dalam objek Shader menggunakan struktur RenderStateBlock
. Anda dapat menggunakan nilai tag RenderType
untuk mengidentifikasi SubShaders ke override.
Signature | Function |
---|---|
"RenderType" = "[renderType]" | Mengatur nilai RenderType untuk SubShader ini. |
Signature | Value | Function |
---|---|---|
[renderType] | String | Tidak ada nilai set untuk parameter ini. Untuk mengidentifikasi nilai RenderType untuk SubShader yang ingin Anda ganti, buka file sumber naungannya. Tag SubShader RenderType untuk naungan built-in berkebun Unity tercantum pada halaman pengganti warna.Anda juga dapat membuat nilai Anda sendiri untuk SubShader kustom Anda. |
Untuk informasi tentang penggantian naungan di Pipeline Render Built-in, lihat penggantian Shader. Untuk informasi tentang menggunakan RenderStateBlock di Pipa Render Scriptable, lihat dokumentasi API untuk ScriptableRenderContext.DrawRenderers.
Kode contoh ini menciptakan SubShader dengan nilai RenderType dari TransparentCutout
:
Shader "ExampleShader" {
SubShader {
Tags { "RenderType" = "TransparentCutout" }
Pass {
…
}
}
}
Tag ForceNoShadowCasting
mencegah geometri di SubShader dari casting (dan kadang-kadang menerima) bayangan. Perilaku yang tepat tergantung pada pipa render dan rendering pathTeknik yang menggunakan pipa render untuk membuat grafik. Memilih jalur rendering yang berbeda mempengaruhi bagaimana pencahayaan dan pembentukan dihitung. Beberapa jalur rendering lebih cocok untuk berbagai platform dan perangkat keras daripada yang lain. More info
Lihat di Glossary.
Ini dapat berguna jika Anda menggunakan pengganti warna, tetapi Anda tidak ingin menginherikan bayangan yang lewat dari SubShader lain.
Signature | Function |
---|---|
"ForceNoShadowCasting" = "[state]" | Apakah untuk mencegah pengecoran bayangan (dan kadang-kadang menerima) untuk semua geometri yang menggunakan SubShader ini. |
Signature | Value | Function |
---|---|---|
[state] | True | Unity mencegah geometri di SubShader ini dari bayangan casting. Di Dibangun di Render Pipeline, dengan Maju, Legacy Vertex Lit atau jalur rendering Legacy Deferred, Unity juga mencegah geometri di SubShader ini dari menerima bayangan. Di HDRP, ini tidak mencegah geometri dari bayangan kontak casting. |
False | Unity tidak mencegah geometri di SubShader ini dari pengecoran atau menerima bayangan. Ini adalah nilai default. |
Kode contoh ini membuat SubShader dengan nilai ForceNoShadowCasting sebesar True
:
Shader "ExampleShader" {
SubShader {
Tags { "ForceNoShadowCasting" = "True" }
Pass {
…
}
}
}
Tag SubShader DisableBatching
mencegah Unity dari menerapkan Batching dinamisProses Unity otomatis yang mencoba untuk membuat beberapa jala seolah-olah mereka adalah satu mesh untuk kinerja grafis yang dioptimalkan. Teknik mengubah semua simpul GameObject pada CPU dan kelompok banyak simpul serupa bersama. More info
Lihat di Glossary ke geometri yang menggunakan SubShader ini.
Ini berguna untuk program naungan yang melakukan operasi ruang objek. Batching dinamis mengubah semua geometri ke ruang dunia, yang berarti bahwa program naungan tidak bisa lagi mengakses ruang objek. Program-program Shader yang bergantung pada ruang objek oleh karena itu tidak render dengan benar. Untuk menghindari masalah ini, gunakan SubShader Tag ini untuk mencegah Unity dari menerapkan Dynamic Batching.
Signature | Function |
---|---|
“Tabel” = “[state]” | Apakah Unity mencegah Batching Dinamis untuk semua geometri yang menggunakan SubShader ini. |
Signature | Value | Function |
---|---|---|
[state] | True | Unity mencegah Batching Dinamis untuk geometri yang menggunakan SubShader ini. |
False | Unity tidak mencegah batching dinamis untuk geometri yang menggunakan SubShader ini. Ini adalah nilai default. | |
LODFading | mencegah persatuan Batching dinamis untuk semua geometri yang merupakan bagian dari nilai Mode Fade yang tidak None. Jika tidak, Unity tidak mencegah batching dinamis. |
Kode contoh ini menciptakan SubShader dengan nilai DisableBatching True
:
Shader "ExampleShader" {
SubShader {
Tags { "DisableBatching" = "True" }
Pass {
…
}
}
}
Dalam Render Pipeline built-in, tag SubShader IgnoreProjector
memberi tahu Unity apakah geometri dipengaruhi oleh Proyektor. Ini sebagian besar berguna untuk tidak termasuk geometri semi transparan, yang Proyektor tidak kompatibel.
Tag ini tidak memiliki efek dalam pipa render lainnya.
Signature | Function |
---|---|
"IgnoreProjector" = "[state]" | Apakah mengabaikan Unity Proyektor saat membuat geometri ini. |
Signature | Value | Function |
---|---|---|
[state] | True | Abaikan Unity Proyektor saat membuat geometri ini. |
False | Unity tidak mengabaikan Proyektor saat membuat geometri ini. Ini adalah nilai default. |
Kode contoh ini menciptakan SubShader dengan nilai IgnoreProjectors True
:
Shader "ExampleShader" {
SubShader {
Tags { "IgnoreProjector" = "True" }
Pass {
…
}
}
}
Tag SubShader PreviewType
memberi tahu Editor Unity bagaimana menampilkan materi yang menggunakan SubShader ini dalam Bahan 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.
Signature | Function |
---|---|
"PreviewType" = "[shape]" | Bentuk mana Editor Unity menggunakan untuk menampilkan pratinjau materi yang menggunakan SubShader ini. |
Signature | Value | Function |
---|---|---|
[shape] | Sphere | Tampilkan materi di bidang. Ini adalah nilai default. |
Plane | Tampilkan materi di pesawat. | |
SkyboxJenis khusus Bahan yang digunakan untuk mewakili langit. Biasanya enam sisi. More info Lihat di Glossary |
Tampilkan materi di skybox. |
Kode contoh ini menciptakan SubShader dengan nilai PreviewType Plane
:
Shader "ExampleShader" {
SubShader {
Tags { "PreviewType" = "Plane" }
Pass {
…
}
}
}
Gunakan tag SubShader ini dalam proyek yang menggunakan Legacy Sprite Packer untuk memperingatkan pengguna bahwa naungan Anda bergantung pada koordinat tekstur asli, dan bahwa mereka harus tidak mengemas teksturnya ke dalam lase.
Signature | Function |
---|---|
"CanUseSpriteAtlas" = "[state]" | Apakah Sprites yang menggunakan SubShader ini kompatibel dengan Paket Legacy SpriteObjek grafis 2D. Jika Anda digunakan untuk bekerja di 3D, Sprites pada dasarnya hanya tekstur standar tetapi ada teknik khusus untuk menggabungkan dan mengelola tekstur sprite untuk efisiensi dan kenyamanan selama perkembangan. More info Lihat di Glossary. |
Signature | Value | Function |
---|---|---|
[state] | True | Sprites yang menggunakan SubShader ini kompatibel dengan Legacy Sprite PackerFasilitas yang mengemas grafis dari beberapa tekstur sprite secara ketat bersama dalam satu tekstur yang dikenal sebagai atlas. Unity menyediakan utilitas Sprite Packer untuk mengotomatiskan proses pembuatan dilase dari tekstur sprite individu. More info Lihat di Glossary. Ini adalah nilai default. |
False | Sprit yang menggunakan SubShader ini tidak kompatibel dengan Legacy Sprite Packer. Ketika SubShader dengan nilai CanUseSpriteAtlas False digunakan dengan Sprite yang memiliki tag kemasan Legacy Sprite Packer, Unity menunjukkan pesan kesalahan dalam Inspektur. |
Kode contoh ini menciptakan SubShader dengan nilai CanUseSpriteAtlas dari False
:
Shader "ExampleShader" {
SubShader {
Tags { "CanUseSpriteAtlas" = "False" }
Pass {
…
}
}
}