ShaderLab: mendefinisikan objek Shader
ShaderLab: menetapkan fallback

ShaderLab: mendefinisikan sifat material

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
.

Overview

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:

  • Anda bisa mendapatkan atau mengatur nilai variabel dalam Shader objectContoh 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
    dengan memanggil fungsi pada material (seperti Bahan. Login).
  • Anda dapat melihat dan mengedit nilai menggunakan 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
    .
  • Unity menyimpan perubahan yang Anda buat sebagai bagian dari aset material, sehingga mereka bertahan antara sesi.

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.

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

Menggunakan Blok Properti

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.

deklarasi properti material

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:

Bahan properti deklarasi sintaks dengan jenis

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.

Nama properti materi yang dilindungi

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.

Atribut properti material

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.

Menggunakan properti material dengan kode C#

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.

Menggunakan properti material untuk mengatur variabel dalam kode ShaderLab

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

Menggunakan properti material untuk mengatur variabel dalam kode HLSL

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:

ShaderLab: mendefinisikan objek Shader
ShaderLab: menetapkan fallback