Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Помимо написания программ шейдеров HLSL, вы также можете писать исходный язык шейдеров OpenGL (GLSL) шейдерПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь
программы в Unity.

Примечание. Это не рекомендуется и не требуется как часть обычного рабочего процесса; Unity при необходимости кросс-компилирует ваш HLSL в оптимизированный GLSL. Использование необработанного GLSL рекомендуется только для тестирования или для поддержки проектов на платформах, использующих GLSL.

Фрагменты GLSL

Фрагменты программы GLSL записываются между ключевыми словами GLSLPROGRAM и ENDGLSL.

В GLSL все точки входа в функции шейдера должны вызываться main(). Когда Unity загружает шейдер GLSL, он загружает исходный код один раз для вершинной программы с определением препроцессора VERTEX и еще раз для фрагментной программы с FRAGMENT определение препроцессора. Таким образом, чтобы разделить вершинные и фрагментные части программы во фрагменте GLSL, нужно окружить их #ifdef VERTEX .. #endif и #ifdef FRAGMENT . . #endif. Каждый фрагмент GLSL должен содержать как вершинную программу, так и фрагментную программу.

Стандартные включаемые файлы соответствуют файлам, предоставляемым для шейдеров Cg/HLSL; у них просто есть расширение .glslinc:

UnityCG.glslinc

Входные данные вершинного шейдера поступают из предопределенных переменных GLSL (gl_Vertex, gl_MultiTexCoord0, …) или являются атрибутами, определяемыми пользователем. Обычно только касательному вектору требуется определяемый пользователем атрибут:

attribute vec4 Tangent;

Данные от вершинных программ к фрагментным передаются через переменные переменные, например:

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

Внешние текстуры OES

Unity выполняет предварительную обработку во время компиляции шейдера; например, функции texture2D/texture2DProj можно заменить на texture/textureProj на основе графического API (GlES3, GLCore). Некоторые расширения не поддерживают новое соглашение, в первую очередь GL_OES_EGL_image_external.

Если вы хотите сэмплировать внешние текстуры в шейдерах GLSL, используйте вызовы textureExternal/textureProjExternal вместо texture2D/texture2DProj.

Пример:

gl_FragData[0] = textureExternal(_MainTex, uv);
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3