Unity 6.3
0 онлайн 25 гостей 3 в системе
Вход

Повторное использование кода HLSL

Чтобы указать компилятору включить существующий код High-Level Shader Language (HLSL) в другой файл или раздел, используйте следующие методы:

  • Включить файл HLSL в другой, используя стандартную директиву HLSL #include.
  • Дублирование HLSL в нескольких местах с помощью макросов HLSLINCLUDE и ENDHLSL.
  • Примените директиву #pragma к нескольким файлам HLSL, используя директиву Unity #include_with_pragmas.

Включение файла HLSL в другой файл

Unity поддерживает стандартную директиву HLSL #include. Дополнительные сведения см. в разделе директива include в документации Microsoft HLSL.

Дублирование HLSL в нескольких местах

Чтобы дублировать код HLSL во всех разделах вашего кода, например, чтобы добавить одни и те же переменные в несколько блоков Pass, оберните код, который вы хотите повторно использовать, в макросы HLSLINCLUDE и ENDHLSL. Unity добавляет код вверху каждого блока HLSLPROGRAM.

Например:

Shader "Examples/ExampleShader"
{
    HLSLINCLUDE
        // Add HLSL code you want to share across the file.
    ENDHLSL

    SubShader
    {
        Pass
        {                
              ...

              HLSLPROGRAM
                // Unity pastes the contents of the HLSLINCLUDE block here.
              ENDHLSL
        }

        Pass
        {                
              ...

              HLSLPROGRAM
                // Unity pastes the contents of the HLSLINCLUDE block here.
              ENDHLSL
        }

    }
}

Применение директивы pragma к нескольким файлам

Чтобы применить директиву #pragma к нескольким файлам шейдеров, используйте директиву Unity #include_with_pragmas.

Этот метод можно использовать для добавления аргумента в несколько файлов, но для включения и отключения аргументов обновлением только одного файла. Например, можно создать и переключить ключевое слово debugging, которое включает и отключает код условной отладки в нескольких шейдерах.

  1. Добавьте директиву #pragma в отдельный файл шейдера. Например, создайте однострочный файл HLSL с прагмой, которая включает символы отладки шейдера:
  #pragma enable_d3d11_debug_symbols
  1. В каждом шейдере, в который вы хотите включить директиву, добавьте директиву #include_with_pragmas для включения файла. Например:
  #include_with_pragmas "path-to-include-file"

Примечание: Если файл шейдера использует #include для импорта файла, содержащего директиву #include_with_pragmas, Unity игнорирует директивы #pragma в файле, содержащем ссылки на директиву #include_with_pragmas. Unity предупредит вас об этом в консоли.

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