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

ShaderLab: добавление шейдерных программ

В Unity обычно пишут шейдерпрограмму, которая работает на графическом процессоре. Подробнее
См. в Словарь
программы на HLSL. Чтобы добавить код HLSL к вашему ресурсу шейдера, вы помещаете код в блок кода шейдера.

Эта страница содержит информацию об использовании блоков кода шейдера. Информацию о написании самого HLSL см. в разделе Использование HLSL в Unity.

Примечание. Unity также поддерживает написание шейдерных программ на других языках, хотя обычно это не требуется и не рекомендуется. Дополнительную информацию см. в разделе Написание шейдеров.

Совместимость конвейера рендеринга

Функция Встроенный конвейер рендеринга Универсальный конвейер рендеринга (URP) Конвейер рендеринга высокого разрешения (HDRP) Пользовательский конвейер рендеринга с поддержкой сценариев
HLSLPROGRAM Да Да Да Да
HLSLINCLUDE Да Да Да Да
CGPROGRAM Да Нет Нет Yes

Несовместимо с пользовательскими конвейерами рендеринга, использующими ядро SRP пакет.

CGINCLUDE Да Нет Нет Yes

Несовместимо с пользовательскими конвейерами рендеринга, использующими ядро SRP пакет.

Типы блоков кода шейдера

Для добавления кода HLSL можно использовать следующие типы блока кода шейдера:

  • HLSLPROGRAM
  • CGPROGRAM
  • HLSLINCLUDE
  • CGINCLUDE

Чтобы понять, что и когда использовать, вы должны понимать как их префикс (HLSL или CG), так и их суффикс ( ПРОГРАММА или ВКЛЮЧИТЬ).

Префиксы HLSL и CG

Разница между блоками, начинающимися с HLSL или CG, заключается в следующем:

  • Блоки кода шейдера с префиксом CG устарели. Они включают в себя несколько встроенных включаемых файлов шейдера Unity по умолчанию, что может быть удобно, если вам нужна эта функциональность. Встроенные включения совместимы только со встроенным конвейером рендеринга.
  • Блоки кода шейдера с префиксом HLSL новее. По умолчанию они не включают файлы встроенного шейдера Unity, поэтому вы должны вручную включить любой библиотечный код, который хотите использовать. Они подходят для использования с любым конвейером рендеринга.

Информацию о включаемых файлах встроенных шейдеров Unity см. в разделе Включаемые файлы встроенных шейдеров.

ПРОГРАММА и ВКЛЮЧЕНИЕ суффиксов

Разница между блоками, которые заканчиваются на PROGRAM или INCLUDE, заключается в следующем:

  • Блоки кода шейдера, оканчивающиеся на PROGRAM, называются блоками программы шейдера. Вы используете их для написания шейдерных программ. Вы пишете код шейдера HLSL внутри этих блоков, а затем помещаете их в блок Pass в своей ShaderLabязык Unity для определения структуры шейдерных объектов. Подробнее
    См. в коде Словарь
    .
  • Блоки кода шейдера, оканчивающиеся на INCLUDE, называются включаемыми блоками шейдера. Вы используете их для совместного использования общего кода между программными блоками шейдеров в одном и том же исходном файле. Вы пишете код шейдера HLSL, которым хотите поделиться, внутри этих блоков, а затем помещаете его в блок Pass, SubShader или Shader в коде ShaderLab. Он работает аналогично включению в код HLSL.

Использование блока шейдерной программы

Подпись Функции
HLSLPROGRAM
    [source code for shader programs, written in HLSL]
ENDHLSL
Добавляет программу шейдера HLSL в проход, который включает этот программный блок шейдера. Не включает включаемые файлы встроенного шейдера Unity.
CGPROGRAM
    [source code for shader programs, written in HLSL]
ENDCG
Добавляет программу шейдера HLSL в проход, который включает этот программный блок шейдера. Включает несколько встроенных включаемых файлов шейдера Unity по умолчанию, что позволяет вам использовать встроенные переменные и функции.

Пример

Shader "Examples/ExampleShader" { SubShader { Pass { Name "ExamplePassName" Tags { "LightMode" = "ExampleLightModeTagValue" } // ShaderLab commands to set the render state go here HLSLPROGRAM // HLSL shader code goes here ENDHLSL } } }

Использование блока включения шейдера

Подпись Функции
HLSLINCLUDE
    [HLSL code that you want to share]
ENDHLSL
Unity включает этот код во все шейдерные программы, определенные в блоках HLSLPROGRAM, в любом месте исходного файла.
CGINCLUDE
    [HLSL code that you want to share]
ENDCG
Unity включает этот код во все шейдерные программы, определенные в блоках CGPROGRAM, в любом месте исходного файла.

Пример

Shader "Examples/ExampleShader" { SubShader { HLSLINCLUDE // HLSL code that you want to share goes here ENDHLSL Pass { Name "ExampleFirstPassName" Tags { "LightMode" = "ExampleLightModeTagValue" } // ShaderLab commands to set the render state go here HLSLPROGRAM // This HLSL shader program automatically includes the contents of the HLSLINCLUDE block above // HLSL shader code goes here ENDHLSL } Pass { Name "ExampleSecondPassName" Tags { "LightMode" = "ExampleLightModeTagValue" } // ShaderLab commands to set the render state go here HLSLPROGRAM // This HLSL shader program automatically includes the contents of the HLSLINCLUDE block above // HLSL shader code goes here ENDHLSL } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3