Menggunakan state sampler
Contoh naungan

GLSL di Unity

Juga menulis program HLSL program naungan, Anda juga dapat menulis OpenGL Shading Language mentah (GLSL) shaderProgram yang berjalan di GPU. More info
Lihat di Glossary
di Unity.

Sitemap Ini tidak dianjurkan atau diperlukan sebagai bagian dari alur kerja normal; Mengomset silang Anda untuk dioptimalkan GLSL ketika diperlukan. Penggunaan GLSL mentah hanya disarankan untuk pengujian, atau untuk mendukung proyek pada platform yang menggunakan GLSL.Note: This is not recommended or needed as part of a normal workflow; Unity cross-compiles your HLSL into optimized GLSL when needed. The use of raw GLSL is only recommended for testing, or for supporting projects on platforms that use GLSL.

GLSL snippets

GLSL program snippets ditulis antara kata kunci GLSLPROGRAM dan ENDGLSL.

Di GLSL, semua titik masuk fungsi naungan harus disebut main(). Ketika Unity memuat naungan GLSL, itu memuat sumber sekali untuk program simpul, dengan preprocessor VERTEX mendefinisikan, dan sekali lagi untuk program fragmen, dengan preprocessor FRAGMENT mendefinisikan. Jadi cara untuk memisahkan vertex dan bagian program fragmen di snippet GLSL adalah untuk mengelilinginya dengan #ifdef VERTEX .. #endif dan #ifdef FRAGMENT .. #endif. Setiap cuplikan GLSL harus berisi program simpul dan program fragmen.

Standar termasuk file yang cocok untuk warna Cg / HLSL; mereka hanya memiliki ekstensi .glslinc:

UnityCG.glslinc

Input naungan Vertex berasal dari variabel GLSL yang telah ditentukan (gl_Vertex, gl_MultiTexCoord0, ...) atau atribut yang ditentukan pengguna. Biasanya hanya vektor tangen membutuhkan atribut yang ditentukan pengguna:

attribute vec4 Tangent;

Data dari vertex ke program fragmen dilewatkan melalui variabel varying, misalnya:

varying vec3 lightDir; // vertex shader computes this, fragment shader uses this

Tekstur OES eksternal

Unity melakukan beberapa preprocessing selama kompilasi Shader; misalnya, fungsi texture2D/texture2DProj dapat diganti menjadi texture/textureProj, berdasarkan API grafis (GlES3, GLCore). Beberapa ekstensi tidak mendukung konvensi baru, paling tidak bisa GL_OES_EGL_image_external.

Jika Anda ingin sampel tekstur eksternal di naungan GLSL, gunakan panggilan textureExternal/textureProjExternal bukan texture2D/texture2DProj.

Contoh:

gl_FragData[0] = textureExternal(_MainTex, uv);
Menggunakan state sampler
Contoh naungan