ShaderLab: mendefinisikan SubShader
ShaderLab: menetapkan nilai LOD ke SubShader

ShaderLab: menetapkan tag ke SubShader

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
.

Overview

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#.

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
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

Menggunakan blok Tag di SubShader

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:

  • Untuk menentukan tag Pass, letakkan blok Tags di dalam blok Pass.
  • Untuk menentukan tag SubShader, letakkan blok 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.

Menggunakan tag SubShader dengan kode C#

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);
    }
}

WordPress.org

Tag RenderPipeline memberi tahu Unity apakah SubShader kompatibel dengan Pipa Render Universal (URP) atau Pipa Render Definisi Tinggi (HDRP).

Syntax dan nilai yang valid

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.

Examples

Kode contoh ini menyatakan bahwa SubShader kompatibel dengan URP:

Shader "ExampleShader" {
    SubShader {
        Tags { "RenderPipeline" = "UniversalRenderPipeline" }
        Pass {
            …
        }
    }
}

Tag antrian

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.

Syntax dan nilai yang valid

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.

Menggunakan tag ini dengan kode C#

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.

Examples

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 {
            …
        }
    }
}

Tag RenderType

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.

Syntax dan nilai yang valid

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.

Menggunakan tag ini dengan kode C#

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.

Examples

Kode contoh ini menciptakan SubShader dengan nilai RenderType dari TransparentCutout:

Shader "ExampleShader" {
    SubShader {
        Tags { "RenderType" = "TransparentCutout" }
        Pass {
            …
        }
    }
}

WordPress.org

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.

Syntax dan nilai yang valid

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.

Examples

Kode contoh ini membuat SubShader dengan nilai ForceNoShadowCasting sebesar True:

Shader "ExampleShader" {
    SubShader {
        Tags { "ForceNoShadowCasting" = "True" }
        Pass {
            …
        }
    }
}

Tag DisableBatching

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.

Syntax dan nilai yang valid

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.

Examples

Kode contoh ini menciptakan SubShader dengan nilai DisableBatching True:

Shader "ExampleShader" {
    SubShader {
        Tags { "DisableBatching" = "True" }
        Pass {
            …
        }
    }
}

IgnoreProjector tag

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.

Syntax dan nilai yang valid

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.

Examples

Kode contoh ini menciptakan SubShader dengan nilai IgnoreProjectors True:

Shader "ExampleShader" {
    SubShader {
        Tags { "IgnoreProjector" = "True" }
        Pass {
            …
        }
    }
}

Lookbook

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
.

Syntax dan nilai yang valid

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.

Examples

Kode contoh ini menciptakan SubShader dengan nilai PreviewType Plane:

Shader "ExampleShader" {
    SubShader {
        Tags { "PreviewType" = "Plane" }
        Pass {
            …
        }
    }
}

CanUseSpriteAtlas tag

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.

Syntax dan nilai yang valid

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.

CanUseSpriteAtlas tag kode contoh

Kode contoh ini menciptakan SubShader dengan nilai CanUseSpriteAtlas dari False:

Shader "ExampleShader" {
    SubShader {
        Tags { "CanUseSpriteAtlas" = "False" }
        Pass {
            …
        }
    }
}
ShaderLab: mendefinisikan SubShader
ShaderLab: menetapkan nilai LOD ke SubShader