praktisi pragma di HLSL
Menargetkan API grafis dan platform di HLSL

Menargetkan model naungan dan fitur GPU di HLSL

Anda dapat menggunakan #pragma directives untuk menunjukkan bahwa shaderProgram yang berjalan di GPU. More info
Lihat di Glossary
membutuhkan fitur GPU tertentu. Pada runtime, Unity menggunakan informasi ini untuk menentukan apakah program naungan kompatibel dengan perangkat keras saat ini.

Anda dapat menentukan fitur GPU individu dengan arahan #pragma require, atau menentukan shader model dengan arahan #pragma target. Model naungan adalah tangan singkat untuk kelompok fitur GPU; internal, sama dengan arahan #pragma require dengan daftar fitur yang sama.

Penting untuk benar menggambarkan fitur GPU yang dibutuhkan warna Anda. Jika naungan Anda menggunakan fitur yang tidak disertakan dalam daftar persyaratan, ini dapat mengakibatkan kesalahan waktu kompilasi, atau dalam perangkat gagal untuk mendukung naungan pada runtime.

Perilaku standar

Secara default, Unity mengkompilasi naungan dengan #pragma require derivatives, yang sesuai dengan #pragma target 2.5.

Persyaratan khusus untuk tahap naungan

Jika naungan Anda mendefinisikan tahap naungan tertentu, Unity secara otomatis menambahkan item ke daftar persyaratan.

  • Jika seorang naungan mendefinisikan tahap geometri (dengan #pragma geometry), Unity secara otomatis menambahkan geometry ke daftar persyaratan.
  • Jika naungan mendefinisikan tahap tesselasi (dengan #pragma hull atau #pragma domain), Unity secara otomatis menambahkan tessellation ke daftar persyaratan.

Jika daftar persyaratan (atau nilai target yang setara) tidak termasuk nilai-nilai ini, Unity menampilkan pesan peringatan ketika mengkompilasi naungan, untuk menunjukkan bahwa ia telah menambahkan persyaratan ini. Untuk menghindari melihat pesan peringatan ini, secara eksplisit menambahkan persyaratan atau menggunakan nilai target yang tepat dalam kode Anda.

Menentukan fitur GPU atau model naungan

Untuk menentukan fitur yang diperlukan, gunakan arahan #pragma require, diikuti dengan daftar nilai ruang-delimited. Contoh:

#pragma require integers mrt8

Anda juga dapat menggunakan arahan #pragma require diikuti oleh usus besar dan daftar kata kunci warna ruang-delimited. Ini berarti bahwa persyaratan hanya berlaku untuk varian yang digunakan ketika salah satu kata kunci yang diberikan diaktifkan.

Contoh:

#pragma require integers mrt8 : EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD

Anda dapat menggunakan beberapa garis #pragma require. Dalam contoh ini, naungan membutuhkan integers dalam semua kasus, dan mrt8 jika EXAMPLE_KEYWORD diaktifkan.

#pragma require integers
#pragma require integers mrt8 : EXAMPLE_KEYWORD

Untuk menentukan model naungan, gunakan petunjuk #pragma target. Contoh:

#pragma target 4.0

Anda juga dapat menggunakan arahan #pragma target diikuti dengan daftar kata kunci warna yang didelimited. Ini berarti bahwa persyaratan hanya berlaku untuk varian yang digunakan ketika salah satu kata kunci yang diberikan diaktifkan.

Contoh:

#pragma target 4.0 EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD

Sitemap Sintaks untuk menentukan kata kunci untuk Note: dan #pragma require sedikit berbeda. Ketika Anda menentukan kata kunci untuk #pragma target, Anda menggunakan usus. Ketika Anda menentukan kata kunci untuk #pragma require, Anda tidak menggunakan usus.#pragma target, you do not use a colon.

Daftar nilai '#pragma target'

Berikut adalah daftar model naungan yang digunakan Unity, dan kombinasi nilai #pragma require yang masing-masing sesuai dengan.

Model naungan Unity Note: mirip dengan Direct Model warna X dan persyaratan versi OpenGL, tetapi mereka tidak sesuai persis. Baca deskripsi dengan cermat untuk memastikan bahwa Anda memahami perbedaan.

Value Description Support Equivalent #pragma require values
2.0 Equivalent ke Sitemap X model naungan 2.0.

Limited jumlah aritmatiketik dan instruksi tekstur; 8 interpolator; tidak ada sampling tekstur simpul; tidak ada turunan dalam naungan fragmen; tidak ada sampling tekstur LOD eksplisit.
Bekerja pada semua platform yang didukung oleh Unity. N/A
2.5 Hampir sama dengan 3.0, tetapi hanya dengan 8 interpolator, dan tidak ada sampling tekstur LOD eksplisit. Tingkat fitur DirectX 11 9 +
OpenGL 3.2 +
OpenGL Datasheet PDF
Vulkan
Metal
derivatives
3.0 Sitemap Model warna X 3.0.

.
Tingkat fitur DirectX 11 10 +
OpenGL 3.2 +
OpenGL ES 3.0+
Vulkan
Metal

Might bekerja pada beberapa perangkat OpenGL ES 2.0, tergantung pada ekstensi driver dan fitur.
Semua dalam 2.5, ditambah:
interpolators10 samplelod fragcoord
3.5 OpenGL ES 3.0.

%
Tingkat fitur DirectX 11 10+
OpenGL 3.2+
OpenGL Datasheet PDF
Vulkan
Metal
Semua dalam 3.0, ditambah:
interpolators15 mrt4 integers 2darray instancing
4.0 Ekuivalen untuk Sitemap Model warna X 4.0, tetapi tanpa persyaratan untuk mendukung 8 MRT. Tingkat fitur DirectX 11 10+
OpenGL 3.2+
OpenGL ES 3.1+AEP
Vulkan
Metal (jika tidak ada tahap geometri didefinisikan)
Semua dalam 3.5, ditambah:
geometry
4.5 Equivalent to WinZip. DirectX 11 level fitur 11+
OpenGL 4.3+
OpenGL ES 3.1
Vulkan
Metal
Semua dalam 3.5, ditambah:
compute randomwrite msaatex
4.6 OpenOffice 4.1.5.

Ini adalah tingkat OpenGL tertinggi yang didukung pada Mac.
DirectX 11 level fitur 11+
OpenGL 4.1+
OpenGL Datasheet PDF (jika tidak ada tahap geometri didefinisikan, dan tidak ada hull atau tahap domain didefinisikan)
Vulkan
Metal (if no geometry stage is defined, and no hull or domain stage is defined)
Semua dalam 4.0, ditambah:
cubearray tesshw tessellation msaatex
5.0 Ekuivalen untuk Sitemap Model warna X 5.0, tetapi tanpa persyaratan untuk mendukung array interpolator 32 atau cubemap. DirectX 11 level fitur 11+
OpenGL 4.3+
OpenGL Datasheet PDF (jika tidak ada tahap geometri didefinisikan, dan tidak ada hull atau tahap domain didefinisikan)
Vulkan
Metal (if no geometry stage is defined, and no hull or domain stage is defined)
Semua dalam 4.0, ditambah:
compute randomwrite msaatex tesshw tessellation

Untuk informasi tentang dukungan model naungan untuk platform konsol, lihat dokumentasi spesifik platform.

Notes:

  • Dalam definisi DirectX, model naungan 4.0 termasuk mrt8, dan model naungan 5.0 termasuk interpolators32 dan cubearray. Unity tidak termasuk ini, untuk kompatibilitas yang lebih luas. Untuk memerlukan fitur-fitur ini, gunakan arahan #pragma require eksplisit.
  • Jika Anda menggunakan target yang membutuhkan geometry tetapi naungan Anda tidak mendefinisikan tahap geometri, Unity menghapus geometry dari daftar persyaratan pada waktu kompilasi.
  • Jika Anda menggunakan target yang membutuhkan tessellation tetapi naungan Anda tidak mendefinisikan tahap hull atau domain, Unity menghapus tessellation dari daftar persyaratan pada waktu kompilasi.

Daftar '#pragma membutuhkan nilai'

Berikut adalah semua nilai yang valid untuk arahan #pragma require.

Value Description
interpolators10 Setidaknya 10 interpolator vertex-to-fragment ("varyings") tersedia.
interpolators15 Setidaknya 15 vertex-to-fragment interpolators ("varyings") tersedia.

Note:integers ke daftar persyaratan.
interpolators32 setidaknya 32 vertex-to-fragment interpolator (“varyings”) tersedia.
integers Pengintegrasian adalah jenis data yang didukung, termasuk operasi bit/shift.

Note: Secara internal, ini juga secara otomatis menambahkan interpolators15 ke daftar persyaratan.
mrt4 setidaknya 4 target render didukung.
mrt8 setidaknya 8 target render didukung.
derivatives PixelUnit terkecil dalam gambar komputer. Ukuran piksel tergantung pada resolusi layar Anda. Pencahayaan pixel dihitung pada setiap piksel layar. More info
Lihat di Glossary
shader derivative instructions (ddx/ddy) are supported.
samplelod Tekstur eksplisit LODTeknik Tingkat Detail (LOD) adalah optimasi yang mengurangi jumlah segitiga yang dimiliki Unity untuk membuat GameObject ketika jaraknya dari kamera meningkat. More info
Lihat di Glossary
sampling (tex2Dlod / SampleLevel) didukung.
fragcoord Lokasi piksel (XY di layar, kedalaman ZW di ruang klip) masukan dalam naungan piksel didukung.
2darray array tekstur 2D adalah jenis data yang didukung.
cubearray CubemapKoleksi enam tekstur persegi yang dapat mewakili refleksi di lingkungan atau skybox yang digambar di balik geometri Anda. Enam kotak membentuk wajah kubus imajiner yang mengelilingi objek; setiap wajah mewakili pandangan di sepanjang arah sumbu dunia (hingga, kiri, kanan, ke depan dan belakang). More info
Lihat di Glossary
adalah jenis data yang didukung.
instancing Login Nilai sistem input ID didukung.
geometry Tahap naungan Geometry didukung.
compute Membandingkan naungan, penyangga terstruktur, dan operasi atom didukung.
randomwrite atau uav Tekstur “Random tulis” (UAV) didukung.
tesshw Tesselasi perangkat keras didukung, tetapi tidak selalu menguji (hull/domain) tahap naungan. Misalnya, logam mendukung tesselasi, tetapi tidak hull atau tahap domain.
tessellation Tessellation (hull/domain) tahap naungan didukung.
msaatex Kemampuan untuk mengakses tekstur berukuran multi (Texture2DMS di HLSL) didukung.
sparsetex Tekstur jarang dengan info residensi (“Tier2” dukungan dalam istilah DirectX; fungsi CheckAccessFullyMapped HLSL).
framebufferfetch atau fbfetch Framebuffer fetch (kemampuan untuk membaca warna pixel input di naungan pixel) didukung.
setrtarrayindexfromanyshader Menyiapkan indeks array target render dari tahap naungan (tidak hanya tahap naungan geometri) didukung.
praktisi pragma di HLSL
Menargetkan API grafis dan platform di HLSL