Note: Fungsi ShaderLabBahasa Unity untuk mendefinisikan struktur benda-benda Shader. More info
Lihat di Glossary pada halaman ini adalah legacy, dan didokumentasikan untuk kesan ke belakang hanya. Jika file sumber shaderProgram yang berjalan di GPU. More info
Lihat di Glossary Anda termasuk kode HLSL, Unity mengabaikan perintah ini sepenuhnya. Jika file sumber naungan Anda tidak termasuk kode HLSL, Unity mengkompilasi perintah ini ke program naungan biasa pada impor.
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 |
---|---|---|---|---|
Legacy alpha testing | Yes | No | No | No |
Setelah warna output akhir telah dihitung, warna dapat secara opsional memiliki nilai alfa dibandingkan dengan nilai tetap. Jika tes gagal, pixelUnit terkecil dalam gambar komputer. Ukuran piksel tergantung pada resolusi layar Anda. Pencahayaan pixel dihitung pada setiap piksel layar. More info
Lihat di Glossary tidak ditulis ke tampilan.
AlphaTest Off
Render semua piksel (standar) atau...
AlphaTest comparison AlphaValue
Mengatur tes alfa hanya untuk membuat piksel yang nilai alfa dalam kisaran tertentu.
Perbandingan adalah salah satu kata berikut:
Greater | Hanya render piksel yang alfa lebih besar dari AlphaValue. |
GEqual | Hanya render piksel yang alfa lebih besar dari atau sama dengan AlphaValue. |
Less | Hanya render piksel yang nilai alfanya kurang dari AlphaValue. |
LEqual | Hanya render piksel yang nilai alfanya kurang dari atau sama dari AlphaValue. |
Equal | Hanya render piksel yang nilai alfa sama AlphaValue. |
NotEqual | Hanya render piksel yang nilai alfa berbeda dari AlphaValue. |
Always | Render semua piksel. Ini secara fungsional setara dengan AlphaTest Off. |
Never | Jangan membuat piksel. |
Nomor titik mengambang antara 0 dan 1. Ini juga dapat menjadi referensi variabel untuk properti pelampung atau jangkauan, dalam hal itu harus ditulis menggunakan notasi braket persegi standar ([VariableName]).
Tes alfa penting ketika membuat benda cekung dengan bagian transparan. Kartu grafis mempertahankan catatan kedalaman setiap pixel yang ditulis ke layar. Jika pixel baru lebih jauh dari satu yang sudah dirender, pixel baru tidak ditulis ke tampilan. Ini berarti bahwa bahkan dengan Blending, objek tidak akan ditampilkan melalui.
Dalam gambar ini, pohon di sebelah kiri diberikan menggunakan AlphaTest. Perhatikan bagaimana piksel di dalamnya benar-benar transparan atau buram. Pohon pusat dirender hanya menggunakan Alpha Blending - melihat bagaimana bagian transparan dari cabang terdekat mencakup daun jauh karena depth bufferSebuah toko memori yang memegang kedalaman nilai z setiap pixel dalam gambar, di mana nilai z adalah kedalaman untuk setiap piksel yang diberikan dari pesawat proyeksi. More info
Lihat di Glossary. Pohon di sebelah kanan dirender menggunakan naungan contoh terakhir - yang menerapkan kombinasi campuran dan uji alfa untuk menyembunyikan artefak.
Contoh paling sederhana, menetapkan tekstur dengan saluran alfa ke dalamnya. Objek hanya akan terlihat di mana alfa lebih besar dari 0,5
Shader "Simple Alpha Test" {
Properties {
_MainTex ("Base (RGB) Transparency (A)", 2D) = "" {}
}
SubShader {
Pass {
// Only render pixels with an alpha larger than 50%
AlphaTest Greater 0.5
SetTexture [_MainTex] { combine texture }
}
}
}
Ini tidak banyak baik dengan sendirinya. Meme it Mari kita tambahkan beberapa pencahayaan dan buat nilai cutoff tweakable:
Shader "Cutoff Alpha" {
Properties {
_MainTex ("Base (RGB) Transparency (A)", 2D) = "" {}
_Cutoff ("Alpha cutoff", Range (0,1)) = 0.5
}
SubShader {
Pass {
// Use the Cutoff parameter defined above to determine
// what to render.
AlphaTest Greater [_Cutoff]
Material {
Diffuse (1,1,1,1)
Ambient (1,1,1,1)
}
Lighting On
SetTexture [_MainTex] { combine texture * primary }
}
}
}
Ketika rendering tanaman dan pohon, banyak permainan memiliki tepi keras khas pengujian alfa. Cara di sekitar itu adalah untuk membuat objek dua kali. Dalam lulus pertama, kami menggunakan pengujian alfa hanya untuk membuat piksel yang lebih dari 50% opaque. Dalam lulus kedua, kita alfa-blend grafis di bagian-bagian yang dipotong, tanpa merekam kedalaman piksel. Kami mungkin mendapatkan sedikit kebingungan sebagai lebih jauh cabang menulis yang terdekat, tetapi dalam praktek, yang sulit untuk melihat sebagai daun memiliki banyak detail visual di dalamnya.
Shader "Vegetation" {
Properties {
_Color ("Main Color", Color) = (.5, .5, .5, .5)
_MainTex ("Base (RGB) Alpha (A)", 2D) = "white" {}
_Cutoff ("Base Alpha cutoff", Range (0,.9)) = .5
}
SubShader {
// Set up basic lighting
Material {
Diffuse [_Color]
Ambient [_Color]
}
Lighting On
// Render both front and back facing polygons.
Cull Off
// first pass:
// render any pixels that are more than [_Cutoff] opaque
Pass {
AlphaTest Greater [_Cutoff]
SetTexture [_MainTex] {
combine texture * primary, texture
}
}
// Second pass:
// render in the semitransparent details.
Pass {
// Dont write to the depth buffer
ZWrite off
// Don't write pixels we have already written.
ZTest Less
// Only render pixels less or equal to the value
AlphaTest LEqual [_Cutoff]
// Set up alpha blending
Blend SrcAlpha OneMinusSrcAlpha
SetTexture [_MainTex] {
combine texture * primary, texture
}
}
}
}
Perhatikan bahwa kami memiliki beberapa pengaturan di dalam SubShader, daripada dalam individu melewati. Setiap set state di SubShader diwariskan sebagai default dalam melewatinya.