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