Di Pipelne Render Built-in, Surface ShadersProgram yang berjalan di GPU. More info
Lihat di Glossary adalah cara merampingkan naungan menulis yang berinteraksi dengan pencahayaan.
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 |
---|---|---|---|---|
Surface Shaders | Yes | No Untuk cara merampingkan menciptakan benda-benda Shader di URP, lihat Shader Graph. |
No Untuk cara ramping menciptakan benda-benda Shader di HDRP, lihat Shader Graph. |
No |
Menulis naungan yang berinteraksi dengan pencahayaan kompleks. Ada berbagai jenis cahaya, pilihan bayangan yang berbeda, yang berbeda rendering pathsTeknik yang menggunakan pipa render untuk membuat grafik. Memilih jalur rendering yang berbeda mempengaruhi bagaimana pencahayaan dan pembentukan dihitung. Beberapa jalur rendering lebih cocok untuk berbagai platform dan perangkat keras daripada yang lain. More info
Lihat di Glossary (untuk dan rendering deferred), dan naungan harus entah bagaimana menangani semua kompleksitas itu.
Permukaan Shaders adalah pendekatan generasi kode yang membuatnya jauh lebih mudah untuk menulis lit shaders dari menggunakan tingkat rendah vertex/pixel program naungan.
Sebagai contoh, lihat Contoh Shader Permukaan dan Permukaan Shader Contoh Pencahayaan Kustom.
Anda mendefinisikan “fungsi permukaan” yang mengambil UV atau data yang Anda butuhkan sebagai input, dan mengisi struktur output SurfaceOutput
. SurfaceOutput pada dasarnya menggambarkan warna albedo sifat permukaan (warna albedo, normal, emisi, spekulasi dll). Anda menulis kode ini di HLSL.
Surface Shader compiler kemudian mencari input apa yang diperlukan, output apa yang diisi dan sebagainya, dan menghasilkan simpul&piksel yang sebenarnya, serta rendering melewati untuk menangani rendering maju dan deferred.
Struktur output standar surface shaders adalah ini:
struct SurfaceOutput
{
fixed3 Albedo; // diffuse color
fixed3 Normal; // tangent space normal, if written
fixed3 Emission;
half Specular; // specular power in 0..1 range
fixed Gloss; // specular intensity
fixed Alpha; // alpha for transparencies
};
Dalam Unity 5, penanam permukaan juga dapat menggunakan model pencahayaan berbasis fisik. Model pencahayaan Standard dan StandardSpecular built-in (lihat di bawah) menggunakan struktur output ini masing-masing:
struct SurfaceOutputStandard
{
fixed3 Albedo; // base (diffuse or specular) color
fixed3 Normal; // tangent space normal, if written
half3 Emission;
half Metallic; // 0=non-metal, 1=metal
half Smoothness; // 0=rough, 1=smooth
half Occlusion; // occlusion (default 1)
fixed Alpha; // alpha for transparencies
};
struct SurfaceOutputStandardSpecular
{
fixed3 Albedo; // diffuse color
fixed3 Specular; // specular color
fixed3 Normal; // tangent space normal, if written
half3 Emission;
half Smoothness; // 0=rough, 1=smooth
half Occlusion; // occlusion (default 1)
fixed Alpha; // alpha for transparencies
};
Lihat halaman Contoh Shader Permukaan, Permukaan Shader Contoh Pencahayaan Kustom dan Permukaan Shader Tesselasi.
Permukaan naungan ditempatkan di dalam blok CGPROGRAM..ENDCG
, seperti naungan lainnya. Perbedaannya adalah:
#pragma surface ...
untuk menunjukkan itu warna permukaan.Perpanjangan #pragma surface
adalah:
#pragma surface surfaceFunction lightModel [optionalparams]
surfaceFunction
- yang Fungsi Cg memiliki kode naungan permukaan. Fungsi harus memiliki bentuk void surf (Input IN, inout SurfaceOutput o)
, di mana Input adalah struktur yang telah Anda tentukan. Input harus mengandung koordinat tekstur dan variabel otomatis tambahan yang diperlukan oleh fungsi permukaan.lightModel
- model pencahayaan untuk digunakan. Yang built-in adalah Standard
berbasis fisik dan StandardSpecular
, serta Lambert
berbasis non-fisik sederhana (diffuse) dan BlinnPhong
(specular). Lihat halaman Model Pencahayaan Kustom untuk cara menulis sendiri.
Standard
SurfaceOutputStandard
menggunakan struct output , dan sesuai dengan warna standard (metallic workflow) dalam Unity.StandardSpecular
SurfaceOutputStandardSpecular
menggunakan struct output , dan mencocokkan warna Standard (specular setup) dalam Unity.Lambert
dan model pencahayaan BlinnPhong
tidak didasarkan secara fisik (meningkat dari Unity 4.x), tetapi naungan menggunakannya dapat lebih cepat untuk membuat perangkat keras low-end. Transparency and alpha testing dikendalikan oleh alpha
dan verifikasi alphatest
. Transparansi biasanya bisa dari dua jenis: campuran alfa tradisional (digunakan untuk memudar benda keluar) atau lebih plausible secara fisik “pencampuran ganda” (yang memungkinkan permukaan semitransparan untuk mempertahankan refleksi specular yang tepat). Mengaktifkan semitransparency membuat kode naungan permukaan yang dihasilkan mengandung perintah blending; sedangkan memungkinkan cutout alfa akan melakukan pembuangan fragmen di naungan pixelUnit terkecil dalam gambar komputer. Ukuran piksel tergantung pada resolusi layar Anda. Pencahayaan pixel dihitung pada setiap piksel layar. More info
Lihat di Glossary yang dihasilkan, berdasarkan variabel yang diberikan.
alpha
atau alpha:auto
- Akan memilih fade-transparency (same as alpha:fade
) untuk fungsi pencahayaan sederhana, dan transparansi pramultiplied (same as alpha:premul
) untuk fungsi pencahayaan berbasis fisik.alpha:blend
- Campuran alfa yang dapat diaktifkan.alpha:fade
- Aktifkan fade-transparan tradisional.alpha:premul
- Enable premultiplied alpha transparansi.alphatest:VariableName
- Transparansi cutout alfa yang dapat diaktifkan. Nilai cutoff adalah dalam variabel float dengan VariableName. Anda mungkin juga ingin menggunakan petunjuk addshadow
untuk menghasilkan umpan kasang yang tepat.keepalpha
- Secara default opaque permukaan naungan menulis 1.0 (putih) ke saluran alfa, tidak peduli apa output dalam Alpha output struct atau apa yang dikembalikan oleh fungsi pencahayaan. Menggunakan opsi ini memungkinkan menjaga nilai alfa fungsi pencahayaan bahkan untuk naungan permukaan buram.decal:add
- Tambahan decal shader (misalnya terrain AddPass). Ini dimaksudkan untuk benda-benda yang berbaring permukaan lain, dan gunakan campuran aditif. SitemapContoh Shader Permukaan decal:blend
- Semitransparent decal shader. Ini dimaksudkan untuk objek yang terletak di permukaan lain, dan gunakan campuran alfa. SitemapContoh Shader Permukaan Custom modifier functions dapat digunakan untuk mengubah atau menghitung data simpul masuk, atau mengubah warna fragmen computed akhir.
vertex:VertexFunction
- Fungsi modifikasi vertex khusus. Fungsi ini diinvokasi pada awal vertex shaderProgram yang berjalan pada setiap simpul model 3D ketika model sedang diberikan. More infofinalcolor:ColorFunction
- Fungsi modifikasi warna akhir kustom. SitemapContoh Shader Permukaan.finalgbuffer:ColorFunction
- jalur deferred khusus untuk mengubah konten G-buffer.finalprepass:ColorFunction
- jalur dasar prapass khusus.Shadows and Tessellation - directives tambahan dapat diberikan untuk mengontrol bagaimana bayangan dan tesselilasi ditangani.
addshadow
- Hasilkan wabah kasir. Biasa digunakan dengan modifikasi simpul kustom, sehingga pengecoran bayangan juga mendapatkan animasi simpul prosedural. Sering bayangan tidak perlu penanganan bayangan khusus, karena mereka hanya dapat menggunakan kasir bayangan dari fallback mereka.fullforwardshadows
- Mendukung semua jenis bayangan cahaya di jalur rendering Forward. Dengan naungan default hanya mendukung bayangan dari satu lampu directional di forward renderingSebuah jalur rendering yang membuat setiap objek dalam satu atau lebih melewati, tergantung pada lampu yang mempengaruhi objek. Lampu sendiri juga diperlakukan berbeda dengan Rendering Maju, tergantung pada pengaturan dan intensitas mereka. More infotessellate:TessFunction
- gunakan tesselasi DX11 GPU; fungsi menginduksi faktor ujiselasi. Lihat Permukaan Shader Tesselasi untuk rincian. Code generation options - secara default dihasilkan kode naungan permukaan mencoba untuk menangani semua kemungkinan skenario pencahayaan / kapdowing /lightmapTekstur pra-render yang mengandung efek sumber cahaya pada objek statis di tempat kejadian. Lightmaps dilalui atas geometri adegan untuk menciptakan efek pencahayaan. More info
Lihat di Glossary. Namun dalam beberapa kasus Anda tahu Anda tidak perlu beberapa dari mereka, dan dimungkinkan untuk menyesuaikan kode yang dihasilkan untuk melewatkannya. Ini dapat mengakibatkan naungan yang lebih kecil yang lebih cepat dimuat.
exclude_path:deferred
, exclude_path:forward
, exclude_path:prepass
- Jangan menghasilkan melewati jalur rendering yang diberikan (Deferred ShadingSebuah jalur rendering di Pipa Render Built-in yang tidak membatasi jumlah Lampu yang dapat mempengaruhi GameObject. Semua Lampu dievaluasi per-piksel, yang berarti bahwa mereka semua berinteraksi dengan peta normal dan sebagainya. Selain itu, semua Lampu bisa memiliki cookie dan bayangan. More infonoshadow
- Nonaktifkan semua dukungan bayangan dalam naungan ini.noambient
- Jangan menerapkan pencahayaan ambient atau light probesprobe cahaya menyimpan informasi tentang bagaimana cahaya melewati ruang di tempat kejadian Anda. Koleksi probe cahaya yang diatur dalam ruang tertentu dapat meningkatkan pencahayaan pada objek bergerak dan pemandangan LOD statis dalam ruang itu. More infonovertexlights
- Jangan menerapkan probe cahaya atau lampu per-vertex dalam rendering Forward.nolightmap
- Nonaktifkan semua dukungan ringan di naungan ini.nodynlightmap
- Cacat runtime dinamis global illuminationKelompok teknik yang model pencahayaan langsung dan tidak langsung untuk memberikan hasil pencahayaan yang realistis.nodirlightmap
- Cacat dukungan peta lampu arah dalam naungan ini.nofog
- Nonaktifkan semua dukungan Fog built-in.nometa
- Tidak menghasilkan umpan "meta" (yang digunakan oleh penerangan global yang ringan & dinamis untuk mengekstrak informasi permukaan).noforwardadd
- Disables Forward rendering aditif lulus. Ini membuat naungan mendukung satu lampu directional penuh, dengan semua lampu lain yang computed per-vertex / SH. Membuat naungan lebih kecil juga.nolppv
- Disables Light Probe Proxy VolumeKomponen yang memungkinkan Anda untuk menggunakan informasi lebih banyak pencahayaan untuk GameObjects dinamis besar yang tidak dapat menggunakan peta cahaya panggang (misalnya, Sistem Partikel besar atau Mesh Berwarna). More infonoshadowmask
- Disables Shadowmask dukungan untuk naungan ini (baik ShadowmaskTekstur yang berbagi tata letak UV yang sama dan resolusi dengan peta cahaya yang sesuai. More infoMiscellaneous options
softvegetation
- Membuat naungan permukaan hanya diberikan ketika Vegetasi Lembut di.interpolateview
- Memungkinkan sudut pandang di naungan simpul dan mencemarinya; bukan komputasi di naungan pixel. Ini dapat membuat naungan pixel lebih cepat, tetapi menggunakan satu interpolator tekstur lebih.halfasview
- Pass setengah arah vektor ke dalam fungsi pencahayaan bukan tampilan arah. Setengah arahan akan dihitung dan dinormalkan per simpul. Ini lebih cepat, tetapi tidak sepenuhnya benar.approxview
- Dihapus dalam Unity 5.0. Gunakan interpolateview
bukan.dualforward
- Gunakan dual lightmaps di jalur rendering forward.dithercrossfade
- Membuat permukaan naungan mendukung efek menthering. Anda kemudian dapat menerapkan naungan ini ke GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More infoUntuk melihat apa yang berbeda dari menggunakan opsi yang berbeda di atas, dapat membantu untuk menggunakan tombol “Show Generated Code” di Shader Inspector.
Struktur input Input
umumnya memiliki koordinat tekstur yang diperlukan oleh naungan. Koordinat tekstur harus diberi nama “uv
” diikuti dengan nama tekstur (atau memulainya dengan “uv2
” untuk menggunakan set koordinat tekstur kedua).
Nilai tambahan yang dapat dimasukkan ke dalam struktur input:
float3 viewDir
- mengandung sudut pandang, untuk komputasi efek Parallax, pencahayaan pelek dll.float4
dengan COLOR
semantik - mengandung warna per-vertex yang diserbuki.float4 screenPos
- mengandung posisi ruang layar untuk efek refleksi atau ruang layar. Perhatikan bahwa ini tidak cocok untuk GrabPass; Anda perlu menghitung UV kustom sendiri menggunakan fungsi ComputeGrabScreenPos
.float3 worldPos
- mengandung posisi ruang dunia.float3 worldRefl
- mengandung vektor refleksi dunia jika penanam permukaan tidak menulis ke o. Sitemap. Lihat naungan Reflect-Diffuse misalnya.float3 worldNormal
- mengandung vektor normal dunia jika penanam permukaan tidak menulis ke o. Sitemap.float3 worldRefl; INTERNAL_DATA
- mengandung vektor refleksi dunia jika warna permukaan menulis ke o. Sitemap. Untuk mendapatkan vektor refleksi berdasarkan per-piksel normal mapJenis tekstur Peta Bump yang memungkinkan Anda untuk menambahkan detail permukaan seperti benjolan, alur, dan goresan ke model yang menangkap cahaya seolah-olah mereka diwakili oleh geometri nyata.WorldReflectionVector (IN, o.Normal)
. Lihat Reflect-Bumped shader misalnya.float3 worldNormal; INTERNAL_DATA
- mengandung vektor normal dunia jika warna permukaan menulis ke o. Sitemap. Untuk mendapatkan vektor normal berdasarkan peta normal per-piksel, gunakan WorldNormalVector (IN, o.Normal)
.Saat ini beberapa bagian dari pipa kompilasi naungan permukaan tidak mengerti sintaks HLSL yang spesifik WinZip 11, jadi jika Anda menggunakan fitur HLSL seperti StrukturdBuffers, RWTextures dan sintaks non-DX9 lainnya, Anda harus membungkusnya menjadi makro praprosesor DX11-hanya.
Lihat halaman Perbedaan spesifik platform dan Menggunakan HLSL untuk rincian.