Shader semantics
Menyediakan data simpul untuk program vertex

Mengakses sifat naungan di Cg / HLSL

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:

  • Warna dan vektor properti peta ke float4, half4 atau variabel fixed4.
  • Rentang dan Float properti peta ke variabel float, half atau fixed.
  • Tekstur properti peta ke variabel sampler2D untuk tekstur (2D) biasa; peta CubemapsKoleksi enam tekstur persegi yang dapat mewakili refleksi di lingkungan atau skybox yang digambar di balik geometri Anda. Enam kotak membentuk wajah kubus imajiner yang mengelilingi objek; setiap wajah mewakili pandangan di sepanjang arah sumbu dunia (hingga, kiri, kanan, ke depan dan belakang). More info
    Lihat di Glossary
    ke samplerCUBE; dan 3D tekstur peta ke sampler3D.

Bagaimana nilai properti disediakan untuk naungan

Nilai properti Shader ditemukan dan diberikan kepada naungan dari tempat-tempat ini:

  • Nilai per-Renderer ditetapkan dalam BahanPropertyBlock. Ini biasanya "per-instance" data (misalnya warna kaleng yang disesuaikan untuk banyak objek yang semuanya berbagi bahan yang sama).
  • Nilai yang ditetapkan dalam MaterialAset yang menentukan bagaimana permukaan harus diberikan. More info
    Lihat di Glossary
    yang digunakan pada objek yang diberikan.
  • Sifat naungan global, set baik oleh kode rendering Unity sendiri (lihat variabel naungan built-in), atau dari 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
    Anda sendiri (misalnya Shader.SetGlobalTexture).

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.

Properti Bahan Serialisasi dan Runtime

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

Sifat Tekstur khusus

Untuk setiap tekstur yang setup sebagai properti naungan / bahan, Unity juga menetapkan beberapa informasi tambahan dalam sifat vektor tambahan.

Tekstur tiling & offset

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 X
  • y mengandung Nilai tiling Y
  • z mengandung Nilai offset X
  • w mengandung Nilai offset Y

Misalnya, jika naungan mengandung tekstur bernama _MainTex, informasi tiling akan berada dalam vektor _MainTex_ST.

Ukuran tekstur

{TextureName}_TexelSize - properti float4 mengandung informasi ukuran tekstur:

  • x mengandung 1.0 / lebar
  • y mengandung 1.0 / tinggi
  • z mengandung lebar
  • w mengandung tinggi

Tekstur parameter HDR

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

Ruang warna dan data warna / pelindung

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

Lihat Juga

Shader semantics
Menyediakan data simpul untuk program vertex