Halaman ini berisi informasi tentang menggunakan blok Properties
pada kode ShaderLabBahasa Unity untuk mendefinisikan struktur benda-benda Shader. More info
Lihat di Glossary Anda untuk menentukan sifat material untuk objek ShaderProgram yang berjalan di GPU. More info
Lihat di Glossary.
Dalam kode ShaderLab Anda, Anda dapat menentukan material properties. Properti material adalah properti yang disatukan toko sebagai bagian dari aset material. Ini memungkinkan seniman untuk membuat, mengedit dan berbagi bahan dengan konfigurasi yang berbeda.
Jika Anda menggunakan properti material:
Jika Anda tidak menggunakan sifat material: * Anda masih bisa mendapatkan atau mengatur nilai variabel dalam objek Shader dengan memanggil fungsi pada material. * Tidak ada editor visual untuk nilai-nilai ini. * Perubahan tidak bertahan antara sesi.
Satu-satunya kali Anda biasanya akan not menciptakan properti material adalah jika Anda ingin mengatur nilai properti naungan sepenuhnya menggunakan scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary (misalnya, jika Anda membuat konten prosedural), jika sifat tidak dapat dibuat menjadi sifat material, atau jika Anda tidak ingin mereka diedit dalam Inspektur.
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: Properties block | Yes | Sitemap Dalam kode HLSL Anda, Anda harus menempatkan variabel per-bahan pada yang sama untuk kompatibilitas SRP Batcher. CBUFFER for SRP Batcher compatibility. |
Sitemap Dalam kode HLSL Anda, Anda harus menempatkan variabel per-bahan pada yang sama untuk kompatibilitas SRP Batcher. CBUFFER for SRP Batcher compatibility. |
Sitemap Dalam kode HLSL Anda, Anda harus menempatkan variabel per-bahan pada yang sama untuk kompatibilitas SRP Batcher. CBUFFER for SRP Batcher compatibility. |
Untuk menetapkan sifat material ke objek ShaderLab, Anda menempatkan blok Properties
di dalam blok Shader
.
Signature | Function |
---|---|
Properties { <Material property declaration> <Material property declaration> } % |
Simpan sifat yang diberikan sebagai bagian dari aset material, dan gunakan nilai yang disimpan dalam aset material selama rendering. Login Blok dapat mengandung sejumlah deklarasi properti material. Properties block can contain any number of material property declarations. |
Semua deklarasi properti materi mengikuti format dasar ini:
[optional: attribute] name("display text in Inspector", type name) = default value
Sintaks yang tepat bervariasi oleh jenis.
Bagian ini berisi informasi tentang:
Nama tipe dan sintaks untuk nilai default tergantung pada jenis properti.
Dalam kode naungan, konvensional untuk memulai semua nama properti dengan karakter underscore. Contoh di halaman ini mengikuti konvensi ini.
Type | Example syntax | Comment |
---|---|---|
Integer | _ExampleName ("Integer display name", Integer) = 1 |
Jenis ini didukung oleh integer nyata (seperti jenis legacy Int yang dijelaskan di bawah ini, yang didukung oleh pelampung). Gunakan ini bukan Int ketika Anda ingin menggunakan integer. |
Int (legacy) | _ExampleName ("Int display name", Int) = 1 |
Sitemap Jenis warisan ini didukung oleh pelampung, daripada bilangan bulat. Hal ini didukung untuk alasan kompatibilitas mundur saja. Gunakan tipe Note: bukan.Integer type instead. |
Float | _ExampleName ("Float display name", Float) = 0.5 _ExampleName ("Float with range", Range(0.0, 1.0)) = 0.5 |
Nilai maksimum dan minimum untuk slider kisaran termasuk. |
Texture2D | _ExampleName ("Texture2D display name", 2D) = "" {} _ExampleName ("Texture2D display name", 2D) = "red" {} |
Masukkan nilai berikut dalam string nilai default untuk menggunakan salah satu tekstur built-in Unity: "putih" (RGBA: 1,1,1,1), "hitam" (RGBA: 0,0,0,1), "abu" (RGBA: 0,5,0.5,0,1), "bump" (RGBA: 0.5,0.5,1,0.5) atau "merah" (RGBA: 1,0,0,1). Note: tekstur default ini tidak terlihat dalam Inspektur. |
Texture2DArray | _ExampleName ("Texture2DArray display name", 2DArray) = "" {} |
Untuk informasi lebih lanjut, lihat Tekstur array. |
Texture3D | _ExampleName ("Texture3D", 3D) = "" {} |
Nilai default adalah "abu" (RGBA: 0.5,0.5,0.5,1) tekstur. |
CubemapA collection of six square textures that can represent the reflections in an environment or the skybox drawn behind your geometry. The six squares form the faces of an imaginary cube that surrounds an object; each face represents the view along the directions of the world axes (up, down, left, right, forward and back). More info See in Glossary |
_ExampleName ("Cubemap", Cube) = "" {} |
Nilai default adalah "abu" (RGBA: 0.5,0.5,0.5,1) tekstur. |
CubemapArray | _ExampleName ("CubemapArray", CubeArray) = "" {} |
See Cubemap arrays. |
Color | _ExampleName("Example color", Color) = (.25, .5, .5, 1) |
Peta ini ke float4 dalam kode naungan Anda. Bahan Inspektur menampilkan pemilih warna. Jika Anda agak akan mengedit nilai-nilai sebagai empat pelampung individu, gunakan jenis vektor. |
Vector | _ExampleName ("Example vector", Vector) = (.25, .5, .5, 1) |
Peta ini ke float4 dalam kode naungan Anda. Bahan Inspektur menampilkan empat bidang pelampung individu. Jika Anda agak akan mengedit nilai menggunakan pemilih warna, gunakan jenis warna. |
Unity memiliki beberapa nama yang disediakan untuk properti material. Ketika Anda membuat properti material dengan salah satu nama ini, Unity melakukan operasi yang telah ditentukan. Jangan menggunakan nama ini kecuali Anda berniat untuk menggunakan fungsi ini.
Name | Example syntax | Function |
---|---|---|
_TransparencyLM | _TransparencyLM ("Transmissive Texture", 2D) = "white" {} |
Aktifkan transparansi RGB kustom selama lightmapping. Untuk informasi lebih lanjut, lihat Lightmapping and shaders. |
Pernyataan properti material dapat memiliki atribut opsional yang memberi tahu Unity bagaimana menanganinya.
Selain atribut yang tercantum di sini, Anda dapat menggunakan sintaks yang sama untuk menambahkan BahanPropertyDrawer ke properti material. Ini memungkinkan Anda mengontrol bagaimana sifat material muncul di jendela Inspektur.
Attribute | Function |
---|---|
[Gamma] |
Menunjukkan bahwa properti float atau vektor menggunakan nilai sRGB, yang berarti bahwa itu harus dikonversi bersama dengan nilai sRGB lainnya jika ruang warna dalam proyek Anda membutuhkan ini. Untuk informasi lebih lanjut, lihat Properti dalam Program Shader. |
[HDR] |
Menunjukkan sifat tekstur atau warna menggunakan nilai rentang dinamis tinggi (HDR). Untuk sifat tekstur, Editor Unity menampilkan peringatan jika tekstur LDR ditugaskan. Untuk sifat warna, Editor Unity menggunakan pemilih warna HDR untuk mengedit nilai ini. |
[HideInInspector] |
Memberitahukan Editor Unity untuk menyembunyikan properti ini di Inspektur. |
[MainTexture] |
Mengatur tekstur utama untuk Bahan, yang dapat Anda akses menggunakan Bahan.mainTexture. Secara default, Unity mempertimbangkan tekstur dengan nama properti _MainTex sebagai tekstur utama. Gunakan atribut ini jika tekstur Anda memiliki nama properti yang berbeda, tetapi Anda ingin Unity untuk mempertimbangkan tekstur utama.Jika Anda menggunakan atribut ini lebih dari sekali, Unity menggunakan properti pertama dan mengabaikan yang berikutnya. Note: Ketika Anda mengatur tekstur utama menggunakan atribut ini, tekstur tidak terlihat dalam tampilan Game ketika Anda menggunakan mode tampilan debugging streaming tekstur, atau alat debug kustom. |
[MainColor] |
Mengatur warna utama untuk Bahan, yang dapat Anda akses menggunakan Bahan. warna. Secara default, Unity mempertimbangkan warna dengan nama properti _Color sebagai warna utama. Gunakan atribut ini jika warna Anda memiliki nama properti yang berbeda, tetapi Anda ingin Unity untuk mempertimbangkan warna utama. Jika Anda menggunakan atribut ini lebih dari satu kali, Unity menggunakan properti pertama dan mengabaikan yang berikutnya. |
[NoScaleOffset] |
Memberitahu Editor Unity untuk menyembunyikan tiling dan mengimbangi bidang untuk properti tekstur ini. |
[Normal] |
Menunjukkan properti tekstur mengharapkan peta normal. Editor Unity menampilkan peringatan jika Anda menetapkan tekstur yang tidak kompatibel. |
[PerRendererData] |
Menunjukkan bahwa properti tekstur akan datang dari data per-renderer dalam bentuk BahanPropertyBlock. Inspektur Material menunjukkan sifat-sifat ini sebagai read-only. |
Sifat material diwakili dalam kode C# oleh kelas Login Login.
Untuk mengakses variabel yang didefinisikan dalam kode HLSL Anda, Anda dapat memanggil Bahan. Login, Bahan. Login. Ada metode lain yang sama; lihat API documentation untuk daftar lengkap. Ketika Anda mengakses variabel HLSL menggunakan API ini, tidak masalah apakah variabel adalah properti material atau tidak.
Dalam Editor Unity, Anda dapat mengontrol bagaimana sifat material muncul di jendela Inspektur. Cara termudah untuk melakukan ini menggunakan BahanPropertyDrawer. Untuk kebutuhan yang lebih kompleks, Anda dapat menggunakan kelas MaterialEditor, Login Login, dan ShaderGUI. Untuk informasi lebih lanjut tentang membuat GUI kustom untuk naungan, lihat ShaderLab: menetapkan editor kustom.
Untuk mengatur nilai variabel dalam kode ShaderLab Anda dari properti material, masukkan nama properti material dalam kurung persegi dalam kode ShaderLab Anda.
Kode contoh ini menunjukkan sintaks untuk menggunakan properti material untuk mengatur nilai units
dari perintah ShaderLab Offset
.
Shader "Examples/MaterialPropertyShaderLab"
{
Properties
{
// Change this value in the Material Inspector to affect the value of the Offset command
_OffsetUnitScale ("Offset unit scale", Integer) = 1
}
SubShader
{
// The code that defines the rest of the SubShader goes here
Pass
{
Offset 0, [_OffsetUnitScale]
// The code that defines the rest of the Pass goes here
}
}
}
Untuk mengatur nilai variabel dalam kode HLSL menggunakan properti material, memberikan properti material nama yang sama dengan properti naungan.
Anda dapat melihat teknik ini dalam artikel berikut, yang mencakup contoh kode kerja: