В Unity шейдер (shader) — это программа, которая управляет тем, как объект будет выглядеть при рендеринге. Он запускается на GPU и обрабатывает каждый пиксель, вершину или треугольник. Шейдер пишется на одном из специальном языке программирования. В Unity язык называется ShaderLab Например, Шейдер могут переписать (дописать), чтобы гладкие поверхности отражали свет (в отражении был виден город). Если я использую Universal Render Pipeline, то нужно использовать совместимые с ним шейдеры, иначе ничего работать не будут, модельки будут розовыми. Если моделька розовая, то это значит, что возникла ошибка шейдера. Шейдер не скомпилировал. В интернете можно скачать любой желаемый шейдер. ### Основные задачи, которые берёт на себя шейдер **1. Вершинный этап (Vertex Shader)** — Обрабатывает каждую вершину: - преобразует позицию в экранные координаты, - передаёт данные дальше (нормали, UV, цвета и т.п.). **2. Фрагментный этап (Fragment/Pixel Shader)** — Обрабатывает каждый пиксель: - рассчитывает финальный цвет, - учитывает освещение, текстуры, прозрачность и т.д. ##### Дополнительно (но вторично): - Geometry Shader (редко используется) — может создавать новые треугольники. - Tessellation (в HDRP) — для деления мешей на GPU. - Compute Shader — не связан напрямую с рендером, но тоже работает на GPU. ### Где реализуются конкретные эффекты ##### Модели освещения (Lighting Models) - **Где:** фрагментный шейдер (чаще всего). - **Примеры:** Lambert, Blinn-Phong, кастомные BRDF. - **Почему:** освещение влияет на финальный цвет каждого пикселя. ##### Текстуры и карты (Albedo, Normal, Metallic, Roughness и т.п.) - **Где:** фрагментный шейдер. - **Почему:** пиксельный шейдер читает текстуры и определяет визуальные свойства материала в каждой точке поверхности. ##### Визуальные эффекты (Dissolve, Rim Light, Fresnel, и т.п.) - **Где:** фрагментный шейдер. - **Почему:** эффекты зависят от положения пикселя, угла обзора и часто — от текстур или градиентов. ##### Прозрачность, альфа-тест, альфа-блендинг - **Где:** фрагментный шейдер + настройки материала (Blend, ZWrite и т.п.). - **Почему:** влияет на то, как итоговый цвет пикселя сочетается с фоном. ##### Тени (ShadowCaster и освещённость) - **Где:** - генерация теней: отдельный pass (`ShadowCaster`), вершины + фрагменты. - получение теней: фрагментный шейдер (`UNITY_LIGHT_ATTENUATION()` и подобные макросы). - **Почему:** вычисляется по положению пикселя относительно источников света и shadow maps. ##### 📌 А что делается в вершинном шейдере? Вершинный этап нужен, чтобы: - трансформировать вершины из локального пространства в экранное (MVP-матрицы), - передать во фрагментный этап интерполируемые данные: UV, нормали, позиции, tangents и т.д., - иногда: сделать волны, анимацию или сжатие/растяжение объектов. Как выглядит код некого шейдера в Unity. https://github.com/TwoTailsGames/Unity-Built-in-Shaders/blob/master/DefaultResourcesExtra/Mobile/Mobile-Diffuse.shader