Version: 2019.4
Синтаксис ShaderLab: свойства
Синтаксис ShaderLab: Pass

Синтаксис ShaderLab: SubShader

Каждый шейдер в Unity состоит из списка subshader’ов. Когда Unity должен отобразить меш, он ищет шейдер для использования и выбирает первый subshader, который работает на видеокарте пользователя.

Синтаксис

Subshader { [Tags] [CommonState] Passdef [Passdef ...] }

Определяет subshader в виде опциональных тэгов, общего состояния и списка определений проходов.

Детали

Subshader определяет список проходов рендеринга и опционально устанавливает любое общее для всех проходов состояние. Кроме того, могут быть установлены специфичные для subshader тэги.

Когда Unity выбирает, с помощью какого subshader’а рендерить, он рендерит объект один раз для каждого определенного прохода (и, возможно, более одного раза из-за взаимодействия с освещением). Поскольку каждая операция рендера объекта требует немалых затрат, вы желаете определять шейдер с минимальным количеством возможных проходов. Конечно, иногда на некотором графическом оборудовании необходимый эффект не может быть достигнут за один проход; тогда у вас не остаётся выбора, кроме как использовать несколько проходов.

В качестве определения каждого прохода может быть обычный Pass, UsePass или GrabPass.

Любые выражения, которые разрешены в определении Pass, могут также использоваться в блоке Subshader. Это заставит все проходы использовать это “общее” состояние.

Пример

// ...
SubShader {
    Pass {
        Lighting Off
        SetTexture [_MainTex] {}
    }
}
// ...

This subshader defines a single Pass that turns off any lighting and just displays a mesh with texture named _MainTex.

Синтаксис ShaderLab: свойства
Синтаксис ShaderLab: Pass