Contoh naungan
Permukaan Shader dan jalur rendering

Menulis Permukaan Shaders

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.

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

Overview

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.

How it works

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
};

Samples

Lihat halaman Contoh Shader Permukaan, Permukaan Shader Contoh Pencahayaan Kustom dan Permukaan Shader Tesselasi.

Permukaan Shader kompilasi directives

Permukaan naungan ditempatkan di dalam blok CGPROGRAM..ENDCG, seperti naungan lainnya. Perbedaannya adalah:

  • Itu harus ditempatkan di dalam blok SubShader, tidak dalam Pass. Permukaan naungan akan dikompilasi ke beberapa melewati dirinya sendiri.
  • Ini menggunakan selektif #pragma surface ... untuk menunjukkan itu warna permukaan.

Perpanjangan #pragma surface adalah:

#pragma surface surfaceFunction lightModel [optionalparams]

Parameter yang diperlukan

  • 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.
    • Model pencahayaan StandardSurfaceOutputStandard menggunakan struct output , dan sesuai dengan warna standard (metallic workflow) dalam Unity.
    • Model pencahayaan StandardSpecularSurfaceOutputStandardSpecular 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.

Parameter opsional

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 info
    Lihat di Glossary
    yang dihasilkan, dan dapat memodifikasi atau menghitung data per-vertex. SitemapContoh Shader Permukaan.
  • finalcolor: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 info
    Lihat di Glossary
    (untuk menghemat jumlah varian naungan internal). Jika Anda membutuhkan titik atau bayangan cahaya spot dalam rendering ke depan, gunakan arahan ini.
  • tessellate: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 info
    Lihat di Glossary
    , Forward dan Legacy Deferred masing-masing).
  • noshadow - 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 info
    Lihat di Glossary
    .
  • novertexlights - 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.
    Lihat di Glossary
    dukungan dalam naungan ini.
  • 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 info
    Lihat di Glossary
    dukungan dalam naungan ini.
  • noshadowmask - Disables Shadowmask dukungan untuk naungan ini (baik ShadowmaskTekstur yang berbagi tata letak UV yang sama dan resolusi dengan peta cahaya yang sesuai. More info
    Lihat di Glossary
    dan Jarak ShadowmaskVersi mode pencahayaan Shadowmask yang mencakup bayangan berkualitas tinggi yang dilemparkan dari GameObjects statis ke GameObject dinamis. More info
    Lihat di Glossary
    ).

Miscellaneous 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 info
    Lihat di Glossary
    yang menggunakan komponen LOD GroupKomponen untuk mengelola tingkat detail (LOD) untuk GameObjects. More info
    Lihat di Glossary
    yang dikonfigurasi untuk mode transisi lintas-fade.

Untuk melihat apa yang berbeda dari menggunakan opsi yang berbeda di atas, dapat membantu untuk menggunakan tombol “Show Generated Code” di Shader Inspector.

Permukaan struktur input Shader

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.
    Lihat di Glossary
    , gunakan 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).

Mobile Website Index. Sitemap

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.

Contoh naungan
Permukaan Shader dan jalur rendering