ShaderLab: pencahayaan legacy
ShaderLab: kombinasi tekstur legacy

ShaderLab: pengujian alfa legacy

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.

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
Legacy alpha testing Yes No No No

Overview

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.

Syntax

AlphaTest Off

Render semua piksel (standar) atau...

AlphaTest comparison AlphaValue

Mengatur tes alfa hanya untuk membuat piksel yang nilai alfa dalam kisaran tertentu.

Comparison

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.

AlphaValue

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

Details

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.

Examples

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.

ShaderLab: pencahayaan legacy
ShaderLab: kombinasi tekstur legacy