Команда Blend в ссылке ShaderLab
Определяет, каким образом GPU объединяет вывод шейдера фрагментов с целью рендеринга.
Функциональность этой команды зависит от операции смешивания, которую можно установить с помощью команды BlendOp. Обратите внимание, что в то время как смешивание само по себе поддерживается на всех графиках APIs и оборудовании, некоторые операции смешивания имеют более ограниченную поддержку.
Включение blending отключает некоторые оптимизации на GPU (в основном удаление скрытых поверхностей/Early-Z), что может привести к увеличению времени кадров GPU.
Эта команда меняет состояние рендеринга. Используйте её в блоке Passчтобы задать состояние рендеринга для этого прохода, либо используйте её в блоке SubShaderчтобы задать состояние рендеринга для всех проходов в этом SubShader.
Совместимость конвейера отображения
| Название особенности | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Изготовленный на заказ SRP | Built-in Render Pipeline |
|---|---|---|---|---|
| Смесь | Да | Да | Да | Да |
Синтаксис
| Подпись | Синтаксис примера | Функция |
|---|---|---|
Blend <state> |
Blend Off |
Отключает смешивание для цели отображения по умолчанию. Это значение по умолчанию. |
Blend <render target> <state> |
Blend 1 Off |
Как выше, но для заданного целевого отображения. (1) |
Blend <source factor> <destination factor> |
Blend One Zero |
Включает смешивание для цели отображения по умолчанию. Устанавливает факторы смешивания для значений RGBA. |
Blend <render target> <source factor> <destination factor> |
Blend 1 One Zero |
Как выше, но для заданного целевого отображения. (1) |
Blend <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> |
Blend One Zero, Zero One |
Включает смешивание по умолчанию. Задает отдельные факторы смешивания для RGB и альфа-значений. (2) |
Blend <render target> <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> |
Blend 1 One Zero, Zero One |
То же, что и выше, но для данного целевого показателя отображения. (1) (2) |
Если объединение включено, происходит следующее:
- Если использована команда BlendOp, операция смешивания устанавливается на это значение. В противном случае операция смешивания устанавливается по умолчанию на
Add. - Если операция смешивания является
Add,Sub,RevSub,MinилиMax, GPU умножает значение выхода фрагментного шейдера на фактор источника. - Если операция смешивания является
Add,Sub,RevSub,MinилиMax, GPU умножает значение, которое уже находится в целевом объекте рендеринга, на фактор назначения. - GPU выполняет операцию смешивания на полученных значениях.
Примечания:
- Любая подпись, указывающая цель отображения, требует OpenGL, 4.0+,
GL_ARB_draw_buffers_blendили OpenGL ES 3.2. - Отдельные операции RGB и альфа-слияния несовместимы с расширенными операциями OpenGL слияний.
Параметры
| Параметр | Значение | Функция |
|---|---|---|
| цель отображения | Целое число, диапазон 0-7 | Индекс цели отображения. |
| state | Off |
Отключает слияние. |
| фактор | One |
Значение этого входа один. Используйте это, чтобы использовать значение цвета источника или назначения. |
Zero |
Значение этого ввода равно нулю. Используйте это для удаления значений источника или назначения. | |
SrcColor |
GPU умножает значение этого входа на значение цвета источника. | |
SrcAlpha |
GPU умножает значение этого входа на значение исходного альфа. | |
SrcAlphaSaturate |
GPU умножает значение этого входа на минимальное значение source alpha и (1 - destination alpha) |
|
DstColor |
GPU умножает значение этого входа на значение цвета источника кадрового буфера. | |
DstAlpha |
GPU умножает значение этого входа на альфа-значение источника кадрового буфера. | |
OneMinusSrcColor |
GPU умножает значение этого входа на (1 — цвет источника). | |
OneMinusSrcAlpha |
GPU умножает значение этого входа на (1 — источник альфа). | |
OneMinusDstColor |
GPU умножает значение этого входа на (1 — цвет назначения). | |
OneMinusDstAlpha |
GPU умножает значение этого входа на (1 — альфа назначения). |
Уравнение смешивания:
finalValue = sourceFactor * sourceValue operation destinationFactor * destinationValue
В этом уравнении:
finalValue— значение, которое GPU записывает в буфер назначения.sourceFactorопределяется в команде Blend.sourceValue— значение, выводимое шейдером фрагмента.operation— операция смешивания.destinationFactorопределяется в команде Blend.destinationValue— значение, уже находящееся в буфере назначения.