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

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

В буфере трафарета хранится 8-битное целое число для каждого пикселянаименьшей единицы компьютерного изображения. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
См. в Словарь
в буфере кадра. Перед выполнением фрагмента шейдерПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь
для данного пикселя, GPU может сравнить текущее значение в буфер трафарета по заданному эталонному значению. Это называется трафаретным тестом. Если тест трафарета проходит успешно, графический процессор выполняет тест глубины. Если тест трафарета не проходит, GPU пропускает остальную часть обработки для этого пикселя. Это означает, что вы можете использовать трафаретный буфер в качестве маски, чтобы сообщить графическому процессору, какие пиксели рисовать, а какие отбрасывать.

Обычно буфер трафарета используется для специальных эффектов, таких как порталы или зеркала. Кроме того, буфер трафарета иногда используется при рендерингепроцессе вывода графики на экран (или в текстуру рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
Посмотреть в Словарь
жесткие тени или конструктивная объемная геометрия (CSG).

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

Название функции Встроенный конвейер рендеринга Универсальный конвейер рендеринга (URP) Конвейер рендеринга высокого разрешения (HDRP) Пользовательский SRP
Stencil Да Да Да Да

Использование

Эта команда изменяет состояние рендеринга. Используйте его в блоке Pass, чтобы установить состояние рендеринга для этого Pass, или используйте его в блоке SubShader, чтобы установить рендеринг. состояние для всех проходов в этом субшейдере.

Команду Stencil можно использовать для выполнения двух разных задач: настройки теста шаблона и настройки того, что графический процессор записывает в буфер шаблона. Вы можете сделать обе эти вещи одной и той же командой, но наиболее распространенным вариантом использования является создание одного объекта Shader, который маскирует области экрана, которые другие объекты Shader не могут рисовать. Для этого необходимо настроить первый объект Shader так, чтобы он всегда проходил проверку трафарета и записывал в буфер трафарета, а остальные — так, чтобы они выполняли проверку трафарета и не записывали в буфер трафарета.

Используйте параметры Ref, ReadMask и Comp для настройки трафаретный тест. Используйте Ref, WriteMask, Pass, Fail и ZFail для настройки операции записи трафарета.

Уравнение теста трафарета:

(ref & readMask) comparisonFunction (stencilBufferValue & readMask)
Подпись Пример синтаксиса Функции
Stencil
{
    Ref <ref>
    ReadMask <readMask>
    WriteMask <writeMask>
    Comp <comparisonOperation>
    Pass <passOperation>
    Fail <failOperation>
    ZFail <zFailOperation>
    CompBack <comparisonOperationBack>
    PassBack <passOperationBack>
    FailBack <failOperationBack>
    ZFailBack <zFailOperationBack>
    CompFront <comparisonOperationFront>
    PassFront <passOperationFront>
    FailFront <failOperationFront>
    ZFailFront <zFailOperationFront>
}

Обратите внимание, что все параметры являются необязательными.

Stencil
{
    Ref 2
    Comp equal
    Pass keep
    ZFail decrWrap
}
Настраивает буфер трафарета в соответствии с заданными параметрами.

Действительные значения параметров

Параметры Значение Функции
ref Целое число. Диапазон от 0 до 255. По умолчанию 0. Опорное значение.

Графический процессор сравнивает текущее содержимое буфера трафарета с этим значением, используя операцию, определенную в compareOperation.

Это значение маскируется с помощью readMask или writeMask, в зависимости от того, выполняется ли операция чтения или записи.

Графический процессор также может записать это значение в буфер трафарета, если Pass, Fail или ZFail имеют значение Replace.

readMask Целое число. Диапазон от 0 до 255. По умолчанию 255.
writeMask Целое число. Диапазон от 0 до 255. По умолчанию 255. ГП использует это значение в качестве маски при записи в буфер трафарета.

Обратите внимание, что, как и другие маски, она указывает, какие биты включаются в операцию. Например, значение 0 означает, что в операцию записи не включаются никакие биты, а не то, что буфер трафарета получает значение 0.

comparisonOperation Операция сравнения. См. раздел Значения операции сравнения, чтобы узнать допустимые значения. По умолчанию всегда. Операция, которую GPU выполняет для теста трафарета для всех пикселей.

Определяет операцию для всех пикселей, независимо от их ориентации. Если это определено в дополнение к compareOperationBack и compareOperationFront, это значение переопределяет их.

passOperation Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель проходит как тест трафарета, так и тест глубины.

Определяет операцию для всех пикселей, независимо от их ориентации. Если это определено в дополнение к passOperationBack и passOperationFront, это значение переопределяет их.

failOperation Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель не проходит тест трафарета.

Определяет операцию для всех пикселей, независимо от их ориентации. Если это определено в дополнение к failOperationBack и failOperationFront, это значение переопределяет их.

zFailOperation Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель проходит тест трафарета, но не проходит тест глубины.

Определяет операцию для всех пикселей, независимо от их ориентации. Если это определено в дополнение к zFailOperation и zFailOperation, это значение переопределяет их.

comparisonOperationBack Операция сравнения. См. раздел Значения операции сравнения, чтобы узнать допустимые значения. По умолчанию всегда. Операция, которую GPU выполняет для теста трафарета.

Определяет операцию только для обратных пикселей. Если определено compareOperation, это значение имеет приоритет над этим.

passOperationBack Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель проходит как тест трафарета, так и тест глубины.

Определяет операцию только для обратных пикселей. Если задано значение passOperation, это значение имеет приоритет над этим.

failOperationBack Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель не проходит тест трафарета.

Определяет операцию только для обратных пикселей. Если определено failOperation, это значение имеет приоритет над этим.

zFailOperationBack Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель проходит тест трафарета, но не проходит тест глубины.

Определяет операцию только для обратных пикселей. Если zFailOperation определен, это значение имеет приоритет над этим.

comparisonOperationFront Операция сравнения. См. раздел Значения операции сравнения, чтобы узнать допустимые значения. По умолчанию всегда. Операция, которую GPU выполняет для теста трафарета.

Определяет операцию только для фронтальных пикселей. Если определено compareOperation, это значение имеет приоритет над этим.

passOperationFront Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель проходит как тест трафарета, так и тест глубины.

Определяет операцию только для фронтальных пикселей. Если задано значение passOperation, это значение имеет приоритет над этим.

failOperationFront Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель не проходит тест трафарета.

Определяет операцию только для фронтальных пикселей. Если определено failOperation, это значение имеет приоритет над этим.

zFailOperationFront Трафаретная операция. Допустимые значения см. в разделе значения операций трафарета. По умолчанию — Сохранить. Операция, которую графический процессор выполняет с буфером трафарета, когда пиксель проходит тест трафарета, но не проходит тест глубины.

Определяет операцию только для фронтальных пикселей. Если zFailOperation определен, это значение имеет приоритет над этим.

Значения операции сравнения

В C# эти значения представлены перечислением Rendering.CompareFunction.

Значение Соответствующее целочисленное значение в перечислении Rendering.CompareFunction Функции
Never 1 Никогда не визуализируйте пиксели.
Less 2 Визуализируйте пиксели, когда их опорное значение меньше текущего значения в буфере трафарета.
Equal 3 Визуализировать пиксели, когда их опорное значение равно текущему значению в буфере трафарета..
LEqual 4 Визуализируйте пиксели, когда их опорное значение меньше или равно текущему значению в буфере трафарета.
Greater 5 Визуализируйте пиксели, когда их опорное значение больше, чем текущее значение в буфере трафарета.
NotEqual 6 Визуализируйте пиксели, когда их опорное значение отличается от текущего значения в буфере трафарета.
GEqual 7 Визуализируйте пиксели, когда их опорное значение больше или равно текущему значению в буфере трафарета.
Always 8 Всегда отображать пиксели.

Значения операций трафарета

В C# эти значения представлены перечислением Rendering.Rendering.StencilOp.

Значение Соответствующее целочисленное значение в перечислении Rendering.StencilOp Функции
Keep 0 Сохранить текущее содержимое буфера трафарета.
Zero 1 Запишите 0 в буфер трафарета.
Replace 2 Запишите эталонное значение в буфер.
IncrSat 3 Увеличить текущее значение в буфере. Если значение уже равно 255, оно остается равным 255.
DecrSat 4 Уменьшить текущее значение в буфере. Если значение уже равно 0, оно остается равным 0.
Invert 5 Отменить все биты текущего значения в буфере.
IncrWrap 7 Увеличить текущее значение в буфере. Если значение уже равно 255, оно становится равным 0.
DecrWrap 8 Уменьшить текущее значение в буфере. Если значение уже равно 0, оно становится 255.

Примеры

Shader "Examples/CommandExample" { SubShader { // The rest of the code that defines the SubShader goes here. Pass { // All pixels in this Pass will pass the stencil test and write a value of 2 to the stencil buffer // You would typically do this if you wanted to prevent subsequent shaders from drawing to this area of the render target or restrict them to render to this area only Stencil { Ref 2 Comp Always Pass Replace } // The rest of the code that defines the Pass goes here. } } }

В этом примере кода демонстрируется синтаксис использования этой команды в блоке SubShader.

Shader "Examples/CommandExample" { SubShader { // All pixels in this SubShader pass the stencil test only if the current value of the stencil buffer is less than 2 // You would typically do this if you wanted to only draw to areas of the render target that were not "masked out" Stencil { Ref 2 Comp Less } // The rest of the code that defines the SubShader goes here. Pass { // The rest of the code that defines the Pass goes here. } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3