Note: Fungsi ShaderLabBahasa Unity untuk mendefinisikan struktur benda-benda Shader. More info
Lihat di Glossary pada halaman ini adalah legacy, dan didokumentasikan untuk kesan ke belakang hanya. Jika file sumber shaderProgram yang berjalan di GPU. More info
Lihat di Glossary Anda termasuk kode HLSL, Unity mengabaikan perintah ini sepenuhnya. Jika file sumber naungan Anda tidak termasuk kode HLSL, Unity mengkompilasi perintah ini ke program naungan biasa pada impor.
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 |
---|---|---|---|---|
Legacy texture combining | Yes | No | No | No |
Setelah pencahayaan simpul dasar telah dihitung, tekstur diterapkan. Di ShaderLab ini dilakukan menggunakan perintah SetTexture.
Fungsi tetap texturing adalah tempat untuk melakukan efek merger gaya lama. Anda dapat memiliki beberapa perintah SetTexture di dalam lulus - semua tekstur diterapkan dalam urutan, seperti lapisan dalam program lukisan. Perintah setTexture harus ditempatkan pada akhir Pass.
SetTexture [TextureName] {Texture Block}
Menetapkan tekstur. TeksturName harus didefinisikan sebagai properti tekstur. Bagaimana cara menerapkan tekstur didefinisikan dalam TextureBlock.
Kontrol blok tekstur bagaimana tekstur diterapkan. Di dalam blok tekstur dapat hingga dua perintah: combine
dan constantColor
.
combine
command combine
src1 * src2: Multiplies src1 dan src2 bersama. Hasilnya akan lebih gelap daripada input.
combine
src1 + src2: Tambahkan src1 dan src2 bersama. Hasilnya akan lebih ringan daripada input.
combine
src1 - src2: Subtracts src2 dari src1.
combine
src1 lerp
(src2 (src3) : Interpolates antara src3 dan src1, menggunakan alfa src2. Perhatikan bahwa interpolasi berlawanan arah: src1 digunakan ketika alfa adalah satu, dan src3 digunakan ketika alfa adalah nol.
combine
src1 * src2 + src3: Multiplies src1 dengan komponen alfa src2, kemudian tambahkan src3.
Semua sifat src bisa menjadi salah satu previous, constant, primary atau texture.
Pengubah:
lerp
, dapat secara opsional diawali oleh one - untuk membuat warna yang dihasilkan dilalai.constantColor
commandSitemap Tentukan warna konstan yang dapat digunakan dalam perintah gabungan.ConstantColor color: Defines a constant color that can be used in the combine command.
Versi Unity sebelum 5.0 melakukan transformasi koordinat tekstur dukungan dengan perintah matrix
di dalam blok tekstur. Jika Anda memerlukan fungsi ini sekarang, pertimbangkan menuliskan naungan Anda sebagai warna yang dapat diprogram, dan lakukan transformasi UV di vertex shaderProgram yang berjalan pada setiap simpul model 3D ketika model sedang diberikan. More info
Lihat di Glossary.
Demikian pula, 5.0 menghapus tanda tambah (a+-b
), multiply menandatangani add (a*b+-c
), multiply subtract (a*b-c
) dan produk titik (dot3
, tekstur dot3rgba
menggabungkan mode. Jika Anda membutuhkannya, lakukan matematika 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 bukan.
Sebelum program fragmen ada, kartu grafis yang lebih tua menggunakan pendekatan berlapis untuk tekstur. Tekstur diterapkan satu setelah satu sama lain, memodifikasi warna yang akan ditulis ke layar. Untuk setiap tekstur, tekstur biasanya dikombinasikan dengan hasil operasi sebelumnya. Hari-hari ini disarankan untuk menggunakan program fragmen yang sebenarnya.
Perhatikan bahwa setiap tahap tekstur mungkin atau mungkin tidak dijepit ke kisaran 0..1, tergantung pada platform. Ini mungkin mempengaruhi tahap Penyelesaian yang dapat menghasilkan nilai lebih tinggi dari 1,0.
Secara default, formula gabungan digunakan untuk menghitung komponen RGB dan alfa warna. Secara opsional, Anda dapat menentukan formula terpisah untuk perhitungan alfa. Ini terlihat seperti ini:
SetTexture [_MainTex] { combine previous * texture, previous + texture }
Di sini, kami menggandakan warna RGB dan menambahkan alfa.
Secara default warna primary adalah jumlah diffuse, ambient dan specular colorsWarna sorotan specular.
Lihat di Glossary (seperti didefinisikan dalam Perhitungan pencahayaan). Jika Anda menentukan SeparateSpecular On dalam opsi pass, warna specular akan ditambahkan pada after perhitungan merger, daripada sebelumnya. Ini adalah perilaku default dari naungan VertexLit built-in.
Kartu grafis modern dengan dukungan fragment shader ("model bentuk 2.0" di desktop, OpenGL ES 2.0 di ponsel) mendukung semua mode SetTexture dan setidaknya 4 tahap tekstur (banyak 8 dukungan). Jika Anda menjalankan perangkat keras yang benar-benar lama (dibuat sebelum 2003 di PC, atau sebelum iPhone3GS di ponsel), Anda mungkin memiliki serendah dua tahap tekstur. Penulis naungan harus menulis SubShaders terpisah untuk kartu yang ingin mereka dukungan.
Contoh kecil ini membutuhkan dua tekstur. Pertama itu set merger pertama untuk hanya mengambil _MainTex, kemudian menggunakan saluran alfa _BlendTex untuk memudar dalam warna RGB _BlendTex
Shader "Examples/2 Alpha Blended Textures" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_BlendTex ("Alpha Blended (RGBA) ", 2D) = "white" {}
}
SubShader {
Pass {
// Apply base texture
SetTexture [_MainTex] {
combine texture
}
// Blend in the alpha texture using the lerp operator
SetTexture [_BlendTex] {
combine texture lerp (texture) previous
}
}
}
}
Naungan ini menggunakan komponen alfa _MainTex untuk memutuskan di mana untuk menerapkan pencahayaan. Hal ini dilakukan dengan menerapkan tekstur ke dua tahap; Pada tahap pertama, nilai alfa tekstur digunakan untuk dicampur antara warna simpul dan putih padat. Pada tahap kedua, nilai RGB tekstur dikalikan.
Shader "Examples/Self-Illumination" {
Properties {
_MainTex ("Base (RGB) Self-Illumination (A)", 2D) = "white" {}
}
SubShader {
Pass {
// Set up basic white vertex lighting
Material {
Diffuse (1,1,1,1)
Ambient (1,1,1,1)
}
Lighting On
// Use texture alpha to blend up to white (= full illumination)
SetTexture [_MainTex] {
constantColor (1,1,1,1)
combine constant lerp(texture) previous
}
// Multiply in texture
SetTexture [_MainTex] {
combine previous * texture
}
}
}
}
Kita bisa melakukan sesuatu yang lain secara gratis di sini, meskipun; bukan campuran putih padat, kita dapat menambahkan warna pencahayaan sendiri dan campuran untuk itu. Perhatikan penggunaan ConstantColor untuk mendapatkan _SolidColor dari properti ke dalam campuran tekstur.
Shader "Examples/Self-Illumination 2" {
Properties {
_IlluminCol ("Self-Illumination color (RGB)", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Self-Illumination (A)", 2D) = "white" {}
}
SubShader {
Pass {
// Set up basic white vertex lighting
Material {
Diffuse (1,1,1,1)
Ambient (1,1,1,1)
}
Lighting On
// Use texture alpha to blend up to white (= full illumination)
SetTexture [_MainTex] {
// Pull the color property into this blender
constantColor [_IlluminCol]
// And use the texture's alpha to blend between it and
// vertex color
combine constant lerp(texture) previous
}
// Multiply in texture
SetTexture [_MainTex] {
combine previous * texture
}
}
}
}
Dan akhirnya, kita mengambil semua sifat pencahayaan naungan vertexlit dan tarik yang di:
Shader "Examples/Self-Illumination 3" {
Properties {
_IlluminCol ("Self-Illumination color (RGB)", Color) = (1,1,1,1)
_Color ("Main Color", Color) = (1,1,1,0)
_SpecColor ("Spec Color", Color) = (1,1,1,1)
_Emission ("Emmisive Color", Color) = (0,0,0,0)
_Shininess ("Shininess", Range (0.01, 1)) = 0.7
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Pass {
// Set up basic vertex lighting
Material {
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emission]
}
Lighting On
// Use texture alpha to blend up to white (= full illumination)
SetTexture [_MainTex] {
constantColor [_IlluminCol]
combine constant lerp(texture) previous
}
// Multiply in texture
SetTexture [_MainTex] {
combine previous * texture
}
}
}
}