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