Shader menyatakan sifat Material dalam blok Properties. Jika Anda ingin mengakses beberapa properti dalam program warna, Anda perlu untuk menyatakan variabel Cg / HLSL dengan nama yang sama dan jenis pencocokan.
Contoh sifat shaderProgram yang berjalan di GPU. More info
Lihat di Glossary ini:
_MyColor ("Some Color", Color) = (1,1,1,1)
_MyVector ("Some Vector", Vector) = (0,0,0,0)
_MyFloat ("My float", Float) = 0.5
_MyTexture ("Texture", 2D) = "white" {}
_MyCubemap ("Cubemap", CUBE) = "" {}
akan dinyatakan untuk akses dalam kode Cg / HLSL sebagai:
fixed4 _MyColor; // low precision type is usually enough for colors
float4 _MyVector;
float _MyFloat;
sampler2D _MyTexture;
samplerCUBE _MyCubemap;
Cg / HLSL juga dapat menerima kata kunci uniform, tetapi tidak perlu:
uniform float4 _MyColor;
Jenis properti dalam peta ShaderLabBahasa Unity untuk mendefinisikan struktur benda-benda Shader. More info
Lihat di Glossary ke Cg / HLSL variabel jenis cara ini:
Nilai properti Shader ditemukan dan diberikan kepada naungan dari tempat-tempat ini:
Urutan precedence seperti di atas: data per-instance menimpa segalanya; maka data Material digunakan; dan akhirnya jika properti naungan tidak ada di dua tempat ini maka nilai properti global digunakan. Akhirnya, jika tidak ada nilai properti naungan yang didefinisikan di mana saja, maka “default” (zero untuk mengapung, hitam untuk warna, tekstur putih kosong untuk tekstur) nilai akan disediakan.
Materials dapat mengandung nilai properti serial dan runtime-set.
Data serialisasi adalah semua sifat yang didefinisikan dalam blok Properties warna. Biasanya ini adalah nilai-nilai yang perlu disimpan dalam materi, dan dapat dilipat oleh pengguna 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.
Bahan juga dapat memiliki beberapa sifat yang digunakan oleh naungan, tetapi tidak dinyatakan dalam blok Properties naungan. Biasanya ini adalah untuk sifat yang ditetapkan dari kode skrip pada runtime, misalnya melalui Bahan.SetColor. Perhatikan bahwa matriks dan array hanya dapat ada sebagai sifat runtime non-serialized (karena tidak ada cara untuk mendefinisikannya dalam blok Properti).
Untuk setiap tekstur yang setup sebagai properti naungan / bahan, Unity juga menetapkan beberapa informasi tambahan dalam sifat vektor tambahan.
Materials sering memiliki bidang Tiling dan Offset untuk sifat tekstur mereka. Informasi ini dilewatkan ke naungan di properti float4 {TextureName}_ST
:
x
mengandung Nilai tiling Xy
mengandung Nilai tiling Yz
mengandung Nilai offset Xw
mengandung Nilai offset YMisalnya, jika naungan mengandung tekstur bernama _MainTex
, informasi tiling akan berada dalam vektor _MainTex_ST
.
{TextureName}_TexelSize
- properti float4 mengandung informasi ukuran tekstur:
x
mengandung 1.0 / lebary
mengandung 1.0 / tinggiz
mengandung lebarw
mengandung tinggi {TextureName}_HDR
- properti float4 dengan informasi tentang cara mendekode potensi HDRkisaran dinamis tinggi
Lihat di Glossary (misalnya RGBM-encoded) tekstur tergantung pada ruang warna digunakan. Lihat fungsi DecodeHDR
dalam naungan UnityCG.cginc termasuk file.
Ketika menggunakan Ruang warna linier, semua sifat warna material disediakan sebagai warna sRGB, tetapi diubah menjadi nilai linier ketika dilewatkan ke naungan.
Misalnya, jika blok naungan Properties Anda mengandung properti Color
yang disebut “MyColor“, kemudian yang sesuai ”MyColor” HLSL variabel akan mendapatkan nilai warna linier.
Untuk properti yang ditandai sebagai tipe Float
atau Vector
, tidak ada konversi ruang warna dilakukan secara default; diasumsikan bahwa mereka mengandung data non-warna. Hal ini dimungkinkan untuk menambahkan atribut [Gamma]
untuk sifat float/vector untuk menunjukkan bahwa mereka ditentukan di ruang sRGB, seperti warna (lihat Properties).