ShaderLab: pengujian alfa legacy
ShaderLab: pemetaan saluran data legacy vertex

ShaderLab: kombinasi tekstur legacy

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.

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
Legacy texture combining Yes No No No

Overview

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.

Syntax

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.

Tekstur blok perintah 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.

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

  • Previous adalah hasil dari SetTexture sebelumnya.
  • Primary adalah warna dari perhitungan pencahayaan atau warna simpul jika bound.
  • Texture adalah warna tekstur yang ditentukan oleh TeksturName di SetTexture (lihat di atas).
  • Constant adalah warna yang ditentukan dalam ConstantColor.

Pengubah:

  • Rumus yang ditentukan di atas dapat secara opsional diikuti oleh kata kunci Double atau QuadA primitive object that resembles a plane but its edges are only one unit long, it uses only 4 vertices, and the surface is oriented in the XY plane of the local coordinate space. More info
    See in Glossary
    untuk membuat warna yang dihasilkan 2x atau 4x se terang.
  • Semua sifat src, kecuali argumen lerp, dapat secara opsional diawali oleh one - untuk membuat warna yang dihasilkan dilalai.
  • Semua sifat src dapat diikuti oleh alpha hanya untuk mengambil saluran alfa.

Tekstur blok perintah constantColor command

Sitemap Tentukan warna konstan yang dapat digunakan dalam perintah gabungan.ConstantColor color: Defines a constant color that can be used in the combine command.

Fungsional dihapus dalam Unity 5.0

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.

Details

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.

Separate Alpha & perhitungan warna

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.

Sorotan spektral

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.

Dukungan perangkat keras grafis

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.

Examples

Alpha Blending Dua Tekstur

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

Alpha Terkendali Pencahayaan Diri

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
            }
        }
    }
}
ShaderLab: pengujian alfa legacy
ShaderLab: pemetaan saluran data legacy vertex