Определяет, как графический процессор объединяет выходные данные фрагмента шейдерапрограммы, работающей на графическом процессоре. Подробнее
См. в Словарь с целью рендеринга.
Функции этой команды зависят от операции смешивания, которую можно задать с помощью команды BlendOp. Обратите внимание, что хотя смешивание поддерживается всеми графическими API и оборудованием, некоторые операции смешивания имеют более ограниченную поддержку.
Включение смешивания отключает некоторые оптимизации графического процессора (в основном удаление скрытых поверхностей/Early-Z), что может привести к увеличению времени кадра графического процессора.
Совместимость конвейера рендеринга
Название функции | Встроенный конвейер рендеринга | Универсальный конвейер рендеринга (URP) | Конвейер рендеринга высокого разрешения (HDRP) | Пользовательская SRP |
---|---|---|---|---|
Blend | Да | Да | Да | Да |
Использование
Эта команда изменяет состояние рендеринга. Используйте его в блоке Pass
, чтобы установить состояние рендеринга для этого Pass, или используйте его в блоке SubShader
, чтобы установить рендеринг. состояние для всех проходов в этом субшейдере.
Если смешивание включено, происходит следующее:
- Если используется команда BlendOp, операция смешивания устанавливается на это значение. В противном случае операция смешивания по умолчанию использует
Добавить
. - Если используется операция смешивания
Добавить
,Sub
,RevSub
,Min
илиMax
, GPU умножает значение вывода фрагментного шейдера на исходный коэффициент. - Если используется операция смешивания
Добавить
,Sub
,RevSub
,Min
илиMax
, графический процессор умножает значение, которое уже находится в цели рендеринга, на коэффициент назначения. - ГП выполняет операцию смешивания полученных значений.
Уравнение смешивания:
finalValue = исходный фактор * исходное значение операция целевого фактора * целевое значение
В этом уравнении:
finalValue
— это значение, которое GPU записывает в буфер назначения.sourceFactor
определяется в команде Blend.sourceValue
— это значение, выводимое фрагментным шейдером.операция
— это операция смешивания.destinationFactor
определяется в команде Blend.destinationValue
— значение, уже находящееся в целевом буфере.
Подпись | Пример синтаксиса | Функции |
---|---|---|
Blend |
Blend Off |
Отключает смешивание для цели рендеринга по умолчанию. Это значение по умолчанию. |
Blend |
Blend 1 Off |
То же, что и выше, но для заданной цели рендеринга. (1) |
Blend |
Blend One Zero |
Включает смешивание для цели рендеринга по умолчанию. Устанавливает коэффициенты наложения для значений RGBA. |
Blend |
Blend 1 One Zero |
То же, что и выше, но для заданной цели рендеринга. (1) |
Blend |
Blend One Zero, Zero One |
Включает смешивание цели рендеринга по умолчанию. Задает отдельные коэффициенты наложения для значений RGB и альфа-канала. (2) |
Blend |
Blend 1 One Zero, Zero One |
То же, что и выше, но для заданной цели рендеринга. (1) (2) |
Примечания:
- Для любой подписи, указывающей цель рендеринга, требуется OpenGL 4.0+,
GL_ARB_draw_buffers_blend
или OpenGL ES 3.2. - Раздельное смешивание RGB и альфа-канала несовместимо с расширенными операциями смешивания OpenGL.
Действительные значения параметров
Параметры | Значение | Функции |
---|---|---|
render target | Integer, range 0 through 7 | Целевой индекс рендеринга. |
state | Off |
Отключает смешивание. |
factor | One |
Значение этого входа равно единице. Используйте это, чтобы использовать значение исходного или целевого цвета. |
Zero |
Значение этого входа равно нулю. Используйте это, чтобы удалить исходные или целевые значения. | |
SrcColor |
Графический процессор умножает значение этого ввода на исходное значение цвета. | |
SrcAlpha |
Графический процессор умножает значение этого входа на исходное альфа-значение. | |
DstColor |
Графический процессор умножает значение этого входа на значение исходного цвета буфера кадра. | |
DstAlpha |
Графический процессор умножает значение этого входа на альфа-значение источника кадрового буфера. | |
OneMinusSrcColor |
GPU умножает значение этого ввода на (1 — исходный цвет). | |
OneMinusSrcAlpha |
Графический процессор умножает значение этого ввода на (1 - исходная альфа). | |
OneMinusDstColor |
Графический процессор умножает значение этого ввода на (1 — целевой цвет). | |
OneMinusDstAlpha |
Графический процессор умножает значение этого ввода на (1 - альфа-адрес назначения). |
Распространенные типы наложения
Вот синтаксис наиболее распространенных типов наложения:
Blend SrcAlpha OneMinusSrcAlpha // Traditional transparency
Blend One OneMinusSrcAlpha // Premultiplied transparency
Blend One One // Additive
Blend OneMinusDstColor One // Soft additive
Blend DstColor Zero // Multiplicative
Blend DstColor SrcColor // 2x multiplicative
Примеры
Shader "Examples/CommandExample"
{
SubShader
{
// The rest of the code that defines the SubShader goes here.
Pass
{
// Enable regular alpha blending for this Pass
Blend SrcAlpha OneMinusSrcAlpha
// The rest of the code that defines the Pass goes here.
}
}
}
В этом примере кода демонстрируется синтаксис использования этой команды в блоке SubShader.
Shader "Examples/CommandExample"
{
SubShader
{
// Enable regular alpha blending for this SubShader
Blend SrcAlpha OneMinusSrcAlpha
// The rest of the code that defines the SubShader goes here.
Pass
{
// The rest of the code that defines the Pass goes here.
}
}
}