Команда BlendOp в ссылке ShaderLab
Определяет операцию смешивания, используемую командой Blend. Чтобы эта команда имела какой-либо эффект, в том же блоке Pass (если эта команда находится в блоке Pass) или в блоке SubShader (если эта команда находится в блоке SubShader) должна также находиться команда Blend.
Не все операции смешивания поддерживаются на всех устройствах, и поддержка зависит как от графики API, так и от оборудования. Различные графики APIs по-разному обрабатывают неподдерживаемые операции смешивания: GL пропускает неподдерживаемые операции, а Vulkan и Metal возвращаются к операциям Добавить.
Совместимость конвейера отображения
| Название особенности | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Изготовленный на заказ SRP | Built-in Render Pipeline |
|---|---|---|---|---|
| BlendOp | Да | Да | Да | Да |
Синтаксис
Эта команда меняет состояние рендеринга. Используйте её в блоке Passчтобы задать состояние рендеринга для этого прохода, либо используйте её в блоке SubShaderчтобы задать состояние рендеринга для всех проходов в этом SubShader.
| Подпись | Синтаксис примера | Функция |
|---|---|---|
BlendOp <operation> |
BlendOp Sub |
Задает операцию смешивания, используемую командой Blend. |
Параметры
| Параметр | Значение | Функция |
|---|---|---|
| операции | Add |
Добавить источник и назначение вместе. |
Sub |
Вычитаем место назначения из источника. | |
RevSub |
Вычитаем источник из назначения. | |
Min |
Использовать меньший из источника и назначения. | |
Max |
Используйте большее из источника и назначения. | |
LogicalClear |
Логическая операция: Clear (0) (1) |
|
LogicalSet |
Логическая операция: Set (1) (1) |
|
LogicalCopy |
Логическая операция: Copy (s) (1) |
|
LogicalCopyInverted |
Логическая операция: Copy inverted (!s) 2 |
|
LogicalNoop |
Логическая операция: Noop (d) (1) |
|
LogicalInvert |
Логическая операция: Invert (!d) (1) |
|
LogicalAnd |
Логическая операция: And (s & d) (1) |
|
LogicalNand |
Логическая операция: Nand !(s & d) (1) |
|
LogicalOr |
Логическая операция: Or (s | d) (1) |
|
LogicalNor |
Логическая операция: Nor !(s | d) (1) |
|
LogicalXor |
Логическая операция: Xor (s ^ d) (1) |
|
LogicalEquiv |
Логическая операция: Equivalence !(s ^ d) (1) |
|
LogicalAndReverse |
Логическая операция: Reverse And (s & !d) (1) |
|
LogicalAndInverted |
Логическая операция: Inverted And (!s & d) (1) |
|
LogicalOrReverse |
Логическая операция: Reverse Or (s | !d) (1) |
|
LogicalOrInverted |
Логическая операция: Inverted Or (!s | d) (1) |
|
Multiply |
Усовершенствованная OpenGL операция смешивания: Multiply (2) |
|
Screen |
Усовершенствованная OpenGL операция смешивания: Screen (2) |
|
Overlay |
Усовершенствованная OpenGL операция смешивания: Overlay (2) |
|
Darken |
Усовершенствованная OpenGL операция смешивания: Darken (2) |
|
Lighten |
Усовершенствованная OpenGL операция смешивания: Lighten (2) |
|
ColorDodge |
Усовершенствованная OpenGL операция смешивания: ColorDodge (2) |
|
ColorBurn |
Усовершенствованная OpenGL операция смешивания: ColorBurn (2) |
|
HardLight |
Усовершенствованная OpenGL операция смешивания: HardLight (2) |
|
SoftLight |
Усовершенствованная OpenGL операция смешивания: SoftLight (2) |
|
Difference |
Усовершенствованная OpenGL операция смешивания: Difference (2) |
|
Exclusion |
Усовершенствованная OpenGL операция смешивания: Exclusion (2) |
|
HSLHue |
Усовершенствованная OpenGL операция смешивания: HSLHue (2) |
|
HSLSaturation |
Усовершенствованная OpenGL операция смешивания: HSLSaturation (2) |
|
HSLColor |
Усовершенствованная OpenGL операция смешивания: HSLColor (2) |
|
HSLLuminosity |
Усовершенствованная OpenGL операция смешивания: HSLLuminosity (2) |
Примечания:
- Логические операции требуют DX 11.1+ или Vulkan.
- Расширенные операции смешивания OpenGL требуют
GLES3.1 AEP+,GL_KHR_blend_equation_advancedилиGL_NV_blend_equation_advanced. Они могут использоваться только со стандартным смешиванием RGBA; они несовместимы с отдельным смешиванием RGB и альфа-смешиванием.
Примеры
Shader "Examples/CommandExample"
{
SubShader
{
// The rest of the code that defines the SubShader goes here.
Pass
{
// Enable subtractive blending for this Pass
Blend SrcAlpha One
BlendOp RevSub
// The rest of the code that defines the Pass goes here.
}
}
}
Этот пример кода демонстрирует синтаксис для использования этой команды в блоке SubShader.
Shader "Examples/CommandExample"
{
SubShader
{
// Enable subtractive blending for this SubShader
Blend SrcAlpha One
BlendOp RevSub
// The rest of the code that defines the SubShader goes here.
Pass
{
// The rest of the code that defines the Pass goes here.
}
}
}