Unity 6.3
0 онлайн 134 гостей 3 в системе
Вход
Материалы и шейдеры Шаг 229 из 442

Добавить проход шейдера в пользовательском шейдере

Pass — базовый элемент объекта Shader. Он содержит инструкции для задания состояния GPU, а также шейдерные программы, выполняемые на GPU.

Простые объекты Shader могут содержать всего один Pass, а более сложные — несколько. Отдельные Pass позволяют описывать части объекта Shader, которые работают по-разному: например, части, которым нужно другое состояние рендеринга, другие шейдерные программы или другой тег Pass LightMode.

Примечание: в конвейере рендеринга на базе Scriptable Render Pipeline изменить состояние рендеринга на GPU можно через RenderStateBlock, не создавая отдельный проход.

Чтобы определить обычный Проход в ShaderLab, вы помещаете блок Pass внутрь блока SubShader.

Вы также можете определить два специальных типа Пропуска, используя команды UsePass или GrabPass. Информацию об этих командах см. в разделе ShaderLab команды: UsePass или ShaderLab команды: GrabPass.

Название прохода шейдера

Пас может иметь имя. Вы должны ссылаться на Пас по имени в команде UsePass, и в некоторых C# APIs. Имя Паса видно в инструменте Frame Debugger.

Чтобы назначить имя Проходу в ShaderLab, вы помещаете блок Name внутрь блока Pass.

Внутренне, Unity преобразует имя в заглавные буквы. Когда вы ссылаетесь на имя в коде ShaderLab, вы должны использовать вариант с заглавными буквами; например, если значение "пример", вы должны ссылаться на него как на EXAMPLE.

Если более одного Пропуска в одном и том же SubShader имеет одно и то же имя, Unity использует первый Пропуск в коде.

Использование имени пароля со скриптами C#

Чтобы получить доступ к имени Пропуска из скриптов C#, вы можете использовать APIs, например Material.FindPass, Material.GetPassName, или ShaderData.Pass.Name.

Примечание: Material.GetShaderPassEnabled и Material.SetShaderPassEnabled не ссылаются на пропуска по имени; вместо этого они ссылаются на пропуска по значению тега LightMode.

Пример

Этот пример кода демонстрирует синтаксис создания объекта Shader, содержащего один SubShader, который в свою очередь содержит один Pass.

Shader "Examples/SinglePass"
{
    SubShader
    {
        Pass
        {                
              Name "ExamplePassName"
              Tags { "ExampleTagKey" = "ExampleTagValue" }

              // ShaderLab commands go here.

              // HLSL code goes here.
        }
    }
}

Дополнительные ресурсы