perintah ShaderLab: Login
perintah ShaderLab: Login

perintah ShaderLab: Login

Konfigurasikan pengaturan yang berkaitan dengan stencil bufferSebuah toko memori yang memegang nilai per-piksel 8-bit. Dalam Unity, Anda dapat menggunakan penyangga stensil untuk piksel bendera, dan kemudian hanya render ke piksel yang melewati operasi stensil. More info
Lihat di Glossary
pada GPU.

Buffer stensil menyimpan nilai integer 8-bit untuk setiap pixelUnit terkecil dalam gambar komputer. Ukuran piksel tergantung pada resolusi layar Anda. Pencahayaan pixel dihitung pada setiap piksel layar. More info
Lihat di Glossary
dalam penyangga bingkai. Sebelum mengeksekusi fragmen shaderProgram yang berjalan di GPU. More info
Lihat di Glossary
untuk pixel tertentu, GPU dapat membandingkan nilai saat ini dalam penyangga stensil terhadap nilai referensi yang diberikan. Ini disebut tes stensil. Jika lulus uji stensil, GPU melakukan uji kedalaman. Jika tes stensil gagal, GPU melewatkan sisa pemrosesan untuk piksel itu. Ini berarti bahwa Anda dapat menggunakan penyangga stensil sebagai masker untuk memberitahu GPU yang piksel untuk menggambar, dan yang piksel untuk dibuang.

Anda biasanya akan menggunakan penyangga stensil untuk efek khusus seperti portal atau cermin. Selain itu, penyangga stensil kadang-kadang digunakan ketika rendering bayangan keras, atau geometri padat konstruktif (CSG).

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
Stencil Yes Yes Yes Yes

Usage

Perintah ini membuat perubahan pada state render. Gunakan blok Pass untuk mengatur state render untuk Pass itu, atau menggunakannya dalam blok SubShader untuk mengatur state render untuk semua Passes di SubShader.

Anda dapat menggunakan perintah Stencil untuk melakukan dua hal yang berbeda: untuk mengkonfigurasi tes stensil, dan untuk mengkonfigurasi apa yang ditulis GPU untuk penyangga stensil. Anda dapat melakukan kedua hal-hal ini dalam perintah yang sama, tetapi kasus penggunaan yang paling umum adalah untuk membuat satu 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
yang menutupi daerah layar yang benda-benda Shader lainnya tidak dapat menarik. Untuk melakukan ini, Anda perlu mengkonfigurasi objek Shader pertama untuk selalu lulus uji stensil dan menulis ke penyangga stensil, dan mengkonfigurasi orang lain untuk melakukan tes stensil dan tidak menulis ke penyanggapan stensil.

Gunakan parameter Ref, ReadMask, dan Comp untuk mengkonfigurasi uji stensil. Gunakan parameter Ref, WriteMask, Pass, Fail, dan ZFail untuk mengkonfigurasi operasi menulis stensil.

Persamaan tes stensil adalah:

(ref & readMask) comparisonFunction (stencilBufferValue & readMask)
Signature Example syntax Function
Stencil
{
Ref <ref>
ReadMask <readMask>
WriteMask <writeMask>
Comp <comparisonOperation>
Pass <passOperation>
Fail <failOperation>
ZFail <zFailOperation>
CompBack <comparisonOperationBack>
PassBack <passOperationBack>
FailBack <failOperationBack>
ZFailBack <zFailOperationBack>
CompFront <comparisonOperationFront>
PassFront <passOperationFront>
FailFront <failOperationFront>
ZFailFront <zFailOperationFront>
}

% Perhatikan bahwa semua parameter adalah opsional.
Stencil
{
Ref 2
Comp equal
Pass keep
ZFail decrWrap
}%
Mengkonfigurasi penyangga stensil sesuai dengan parameter yang diberikan.

Nilai parameter yang valid

Parameter Value Function
ref Login Rentang 0 melalui 255. Default adalah 0. Nilai referensi.

GPU membandingkan isi arus penyangga stensil terhadap nilai ini, menggunakan operasi yang didefinisikan dalam perbandinganOperation.

Nilai ini ditopeng dengan membaca Masker atau menulis Masker, tergantung apakah operasi membaca atau menulis terjadi.

GPU juga dapat menulis nilai ini untuk penyangga stensil, jika Pass, Fail atau ZFail memiliki nilai dari Replace.
readMask Login Rentang 0 melalui 255. Default adalah 255. GPU menggunakan nilai ini sebagai masker ketika melakukan tes stensil.

Lihat di atas untuk persamaan tes stensil.
writeMask Login Rentang 0 melalui 255. Default adalah 255. GPU menggunakan nilai ini sebagai masker ketika menulis ke penyangga stensil.

Perhatikan bahwa, seperti masker lain, itu menentukan bit yang disertakan dalam operasi. Misalnya, nilai 0 berarti bahwa tidak ada sedikit yang disertakan dalam operasi menulis, bukan penyangga stensil menerima nilai 0.
comparisonOperation Operasi perbandingan. Lihat Nilai operasi perbandingan untuk nilai yang valid. Login Operasi yang dilakukan GPU untuk tes stensil untuk semua piksel.

Ini mendefinisikan operasi untuk semua piksel, terlepas dari menghadapi. Jika ini didefinisikan sebagai tambahan untuk perbandinganOperationBack dan perbandinganOperationFront, nilai ini menimpa mereka.
passOperation Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel pas baik tes stensil dan uji kedalaman.

Ini mendefinisikan operasi untuk semua piksel, terlepas dari menghadapi. Jika ini didefinisikan sebagai tambahan untuk passOperationBack dan passOperationFront, nilai ini menimpa mereka.
failOperation Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel gagal tes stensil.

Ini mendefinisikan operasi untuk semua piksel, terlepas dari menghadapi. Jika ini didefinisikan sebagai tambahan untuk failOperationBack dan failOperationFront, nilai ini menimpa mereka.
zFailOperation Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel melewati tes stensil, tetapi gagal uji kedalaman.

Ini mendefinisikan operasi untuk semua piksel, terlepas dari menghadapi. Jika ini didefinisikan selain zFailOperation dan zFailOperation, nilai ini menimpa mereka.
comparisonOperationBack Operasi perbandingan. Lihat Nilai operasi perbandingan untuk nilai yang valid. Login Operasi yang dilakukan GPU untuk tes stensil.

Ini mendefinisikan operasi untuk piksel back-facing saja. Jika perbandinganOperation didefinisikan, bahwa nilai menimpa yang satu ini.
passOperationBack Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel pas baik tes stensil dan uji kedalaman.

Ini mendefinisikan operasi untuk piksel back-facing saja. Jika passOperation didefinisikan, nilainya menimpa yang satu ini.
failOperationBack Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel gagal tes stensil.

Ini mendefinisikan operasi untuk piksel back-facing saja. Jika failOperation didefinisikan, bahwa nilai menimpa yang satu ini.
zFailOperationBack Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel melewati tes stensil, tetapi gagal uji kedalaman.

Ini mendefinisikan operasi untuk piksel back-facing saja. Jika zFailOperation didefinisikan, bahwa nilai overrides ini.
comparisonOperationFront Operasi perbandingan. Lihat Nilai operasi perbandingan untuk nilai yang valid. Login Operasi yang dilakukan GPU untuk tes stensil.

Ini mendefinisikan operasi untuk piksel menghadap depan hanya. Jika perbandinganOperation didefinisikan, bahwa nilai menimpa yang satu ini.
passOperationFront Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel pas baik tes stensil dan uji kedalaman.

Ini mendefinisikan operasi untuk piksel menghadap depan hanya. Jika passOperation didefinisikan, nilainya menimpa yang satu ini.
failOperationFront Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel gagal tes stensil.

Ini mendefinisikan operasi untuk piksel menghadap depan hanya. Jika failOperation didefinisikan, bahwa nilai menimpa yang satu ini.
zFailOperationFront Operasi stensil. Lihat Nilai operasi stensil untuk nilai yang valid. Login Operasi bahwa GPU melakukan penyangga stensil ketika pixel melewati tes stensil, tetapi gagal uji kedalaman.

Ini mendefinisikan operasi untuk piksel menghadap depan hanya. Jika zFailOperation didefinisikan, bahwa nilai overrides ini.

Nilai operasi perbandingan

Dalam C#, nilai-nilai ini diwakili oleh pondok Rendering.CompareFunction.

Value Corresponding integer value in Rendering.CompareFunction enum Function
Never 1 Jangan pernah membuat piksel.
Less 2 Render piksel ketika nilai referensi mereka kurang dari nilai saat ini dalam penyangga stensil.
Equal 3 Render piksel ketika nilai referensi mereka sama dengan nilai saat ini dalam penyangga stensil.
LEqual 4 Render piksel ketika nilai referensi mereka kurang dari atau sama dengan nilai saat ini dalam penyangga stensil.
Greater 5 Render piksel ketika nilai referensi mereka lebih besar dari nilai saat ini dalam penyangga stensil.
NotEqual 6 Render piksel ketika nilai referensi mereka berbeda dari nilai saat ini dalam penyangga stensil.
GEqual 7 Render piksel ketika nilai referensi mereka lebih besar dari atau sama dengan nilai saat ini dalam penyangga stensil.
Always 8 URL:

Nilai operasi stensil

Dalam C#, nilai-nilai ini diwakili oleh pondok Rendering.Rendering.StencilOp.

Value Corresponding integer value in Rendering.StencilOp enum Function
Keep 0 Menjaga isi arus penyangga stensil.
Zero 1 Tulis 0 ke penyangga stensil.
Replace 2 Tulis nilai referensi ke dalam penyangga.
IncrSat 3 Meningkatkan nilai saat ini dalam penyangga. Jika nilainya 255 sudah, tinggal di 255.
DecrSat 4 Mengurangi nilai saat ini dalam penyangga. Jika nilainya adalah 0 sudah, tinggal di 0.
Invert 5 Menggali semua bit nilai saat ini dalam penyangga.
IncrWrap 7 Meningkatkan nilai saat ini dalam penyangga. Jika nilainya 255 sudah, itu menjadi 0.
DecrWrap 8 Mengurangi nilai saat ini dalam penyangga. Jika nilainya 0 sudah, itu menjadi 255.

Examples

Shader "Examples/CommandExample"
{
    SubShader
    {
         // The rest of the code that defines the SubShader goes here.

        Pass
        {    
             // All pixels in this Pass will pass the stencil test and write a value of 2 to the stencil buffer
             // You would typically do this if you wanted to prevent subsequent shaders from drawing to this area of the render target or restrict them to render to this area only
             Stencil
             {
                 Ref 2
                 Comp Always
                 Pass Replace
             }            

             // The rest of the code that defines the Pass goes here.
        }
    }
}

Kode contoh ini menunjukkan sintaks untuk menggunakan perintah ini dalam blok SubShader.

Shader "Examples/CommandExample"
{
    SubShader
    {
             // All pixels in this SubShader pass the stencil test only if the current value of the stencil buffer is less than 2
             // You would typically do this if you wanted to only draw to areas of the render target that were not "masked out"
             Stencil
             {
                 Ref 2
                 Comp Less
             }  

         // The rest of the code that defines the SubShader goes here.        

        Pass
        {    
              // The rest of the code that defines the Pass goes here.
        }
    }
}
perintah ShaderLab: Login
perintah ShaderLab: Login