Beberapa shadersProgram yang berjalan di GPU. More info
Lihat di Glossary perlu mendukung beberapa render pipelinesRangkaian operasi yang mengambil isi dari Adegan, dan menampilkannya di layar. Unity memungkinkan Anda memilih dari pipa render yang dibangun sebelumnya, atau menulis sendiri. More info
Lihat di Glossary secara bersamaan. Menambahkan persyaratan paket ke SubShaders dan Passes memungkinkan Anda untuk menghindari kesalahan kompilasi ketika kode naungan menggunakan file termasuk dari paket yang tidak diinstal atau memerlukan versi paket tertentu untuk dikompilasi.
Feature name | Built-in Render Pipeline | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Custom SRP |
---|---|---|---|---|
ShaderLabUnity’s language for defining the structure of Shader objects. More info See in Glossary: PackageRequirements block |
Yes | Yes | Yes | Yes |
Untuk menentukan persyaratan paket untuk SubShader atau Pass, Anda menggunakan blok PackageRequirements
. ShaderLab mendukung blok PackageRequirements
tunggal per SubShader atau Pass, tetapi setiap blok dapat menentukan beberapa persyaratan paket.
Note: jika Anda menyediakan blok PackageRequirements
, itu harus datang sebelum semua deklarasi lain di dalam SubShader atau Pass.
Signature | Function |
---|---|
PackageRequirements{ [requirement definition]} |
Tentukan persyaratan paket untuk Pass atau SubShader. |
Ada beberapa cara untuk menyatakan persyaratan paket. Setiap orang memberikan perilaku yang berbeda. Mereka adalah:
Pembatasan versi mendefinisikan satu set rentang versi. Jika versi yang diinstal dari paket yang diperlukan tidak berada di dalam kisaran, persyaratan paket tidak terpenuhi. Demikian pula, jika persyaratan menentukan satu set pembatasan versi Unity, yang sama berlaku untuk versi Unity saat ini. Untuk informasi tentang sintaks pembatasan versi, lihat Versi sintaks.
Jika SubShader atau Pass menyatakan persyaratan paket bahwa proyek tidak memenuhi, Unity tidak termasuk SubShader atau Pass dari pemrosesan dan kompilasi lebih lanjut. Ini terjadi jika proyek tidak termasuk paket yang diperlukan, atau menyertakannya tetapi tidak dengan versi yang kompatibel. Jika seorang naungan tidak mengandung SubShader tunggal yang memenuhi persyaratan, atau jika tidak ada SubShader mengandung Passes yang memenuhi persyaratan, Console windowJendela Unity Editor yang menunjukkan kesalahan, peringatan dan pesan lain yang dihasilkan oleh Unity, atau skrip Anda sendiri. More info
Lihat di Glossary menunjukkan pesan peringatan.
Dalam persyaratan paket ShaderLab, versi menggunakan format major.minor
atau major.minor.patch
. Jika Anda hanya menggunakan major.minor
, Unity menggunakan 0
untuk patch
. Versi paket juga dapat mencakup postfix -preview
atau -preview.n
di mana -preview
setara dengan -preview.0
. Versi Pratinjau datang sebelum versi non-preview, jadi 1.2.3-preview.4
datang setelah 1.2.2
tetapi sebelum 1.2.3
.
Ada beberapa cara untuk menentukan rentang versi. Setiap orang memberikan perilaku yang berbeda. Mereka adalah:
1.2.3
mencakup semua versi yang dimulai dengan 1.2.3
;[1.2.3]
hanya mencakup versi 1.2.3
;[1.2.3,2.3.4)
mencakup semua versi dari 1.2.3 ke 2.3.3.Anda juga dapat menentukan set rentang versi untuk paket tunggal. Untuk membuat satu set rentang versi dari rentang individu, gunakan semikolon sebagai pemisah. Sebagai contoh, [2.0,3.4.5];[3.7];4.0
mencakup versi dari 2.0.0 ke 3.4.5, versi 3.7.0, dan versi 4.0.0 dan di atas.
Ketika Anda mengatur versi untuk paket, menyadari hal berikut:
Jika sintaks tidak mematuhi di atas, pembatasan versi tidak valid. Untuk informasi lebih lanjut tentang apa yang terjadi dengan persyaratan paket yang tidak valid, lihat Pemeriksaan kesalahan.
Contoh kode berikut menunjukkan bagaimana menentukan persyaratan paket di SubShader dan Pass. SubShader menyatakan persyaratan paket tunggal untuk paket yang disebut “com.my.package” dan bekerja dengan versi paket ini dimulai dari 2.2.0. SubShader memiliki dua Passes:
Pass pertama membutuhkan:
Universal Render Pipeline paket dengan versi antara 10.2.1 dan 11.0.
Teks MeshGrafik utama primitif Unity. Mesh membuat sebagian besar dunia 3D Anda. Unity mendukung mesh poligon triangulat atau Quadrangulasi. Nurbs, Nurms, permukaan Subdiv harus dikonversi ke poligon. More info
Lihat di Glossary Paket pro dengan versi 3.2 atau di atas.
Pass kedua membutuhkan:
Paket Render Pipeline definisi tinggi dengan versi antara 8.0 hingga 8.5
Shader "Examples/ExampleShader"
{
SubShader
{
PackageRequirements
{
"com.my.package": "2.2"
}
Pass
{
PackageRequirements
{
"com.unity.render-pipelines.universal": "[10.2.1,11.0]"
"com.unity.textmeshpro": "3.2"
}
}
Pass
{
PackageRequirements
{
"com.unity.render-pipelines.high-definition": "[8.0,8.5]"
}
}
}
}
Jika Anda menentukan persyaratan paket yang tidak pernah puas, proses impor warna gagal dengan kesalahan. Bagian ini memberikan contoh definisi persyaratan paket yang paling umum.
PackageRequirements {
"com.some.package.x": "[10.2.1,9.0]" // Error, empty version range
"com.some.package.y": "[10.2.1.9,11.0]" // Error, incorrect version format
"com.some.package.z": "[2.3,3.5],[3.0,4.0]" // Error, ranges intersect
"" : "[2.3.4,3.4.5]" // Error, no package name provided
}
PackageRequirements {
"com.some.package.x": "[10.2.1,11.0]"
"com.some.package.x": "[11.2.1,12.0]" // Error, dependency on "com.some.package.x" declared twice
"unity" : "2021.2"
"unity" : "2021.3" // Error, dependency on Unity version declared twice
}
PackageRequirements {
"com.some.package.x": "unity=[2021.2.1,2021.3.3]"
"unity" : "2021.2" // Error: Unity version requirement cannot be declared on a package and on its own simultaneously
}
SubShader {
PackageRequirements {
"com.some.package.x": "[2.3.4,3.4.5]"
"com.some.package.z": "[1.1,3.2]"
"unity": "2021.2"
}
Pass {
PackageRequirements {
"com.some.package.y": "[1.2.2,2.5]" // Fine, SubShader doesn’t declare a dependency on "com.some.package.y"
"com.some.package.z": "[2.0,3.1]" // Fine, SubShader dependency intersects the provided version range
"com.some.package.x": "[1.1.1, 2.2.2]" // Error, SubShader version range for "com.some.package.x" does not intersect the provided range
"com.some.package.w": "unity=[2021.2.1,2021.2.5]" // Fine, SubShader dependency intersects the provided version range
"com.some.package.u": "unity=[2020.2.1,2020.2.5]" // Error, SubShader Unity version range does not intersect the provided range
}
}
}