Формулы смешивания режимов
Уравнения, используемые при смешивании отрисованного содержимого с экраном или активным холстом.
Компоненты цвета обычно находятся в диапазоне [0, 1], а не [0, 255], для целей этих уравнений. Результаты ограничиваются диапазоном [0, 1], за исключением случаев, когда активен холст с плавающей точкой/HDR форматом.
Описание:
- dst - существующий цвет на экране.
- src - цвет отрисовываемого объекта (цвет, выводимый пиксельным шейдером, или глобальный цвет, умноженный на цвет текстуры — если таковой есть, если шейдер не используется.)
- res - результирующий цвет.
Вот формулы режимов смешивания для всех версий 0.10.x и более поздних:
alpha
"alphamultiply" режим альфа
res.r = dst.r * (1 - src.a) + src.r * src.a res.g = dst.g * (1 - src.a) + src.g * src.a res.b = dst.b * (1 - src.a) + src.b * src.a res.a = dst.a * (1 - src.a) + src.a
"premultiplied" режим альфа
res.r = dst.r * (1 - src.a) + src.r res.g = dst.g * (1 - src.a) + src.g res.b = dst.b * (1 - src.a) + src.b res.a = dst.a * (1 - src.a) + src.a
add
"alphamultiply" режим альфа
res.r = dst.r + (src.r * src.a) res.g = dst.g + (src.g * src.a) res.b = dst.b + (src.b * src.a) res.a = dst.a
"premultiplied" режим альфа
res.r = dst.r + src.r res.g = dst.g + src.g res.b = dst.b + src.b res.a = dst.a
subtract
"alphamultiply" режим альфа
res.r = dst.r - (src.r * src.a) res.g = dst.g - (src.g * src.a) res.b = dst.b - (src.b * src.a) res.a = dst.a
"premultiplied" режим альфа
res.r = dst.r - src.r res.g = dst.g - src.g res.b = dst.b - src.b res.a = dst.a
replace
"alphamultiply" режим альфа
res.r = src.r * src.a res.g = src.g * src.a res.b = src.b * src.a res.a = src.a
"premultiplied" режим альфа
res.r = src.r res.g = src.g res.b = src.b res.a = src.a
multiply
"premultiplied" режим альфа
res.r = src.r * dst.r res.g = src.g * dst.g res.b = src.b * dst.b res.a = src.a * dst.a
Примечание: В 0.10.x, multiply с alphamultiply использует те же уравнения, что и с premultiplied. В версии 11.0 и более поздних версиях эта разновидность не поддерживается.
lighten
"premultiplied" режим альфа
res.r = max(src.r, dst.r) res.g = max(src.g, dst.g) res.b = max(src.b, dst.b) res.a = max(src.a, dst.a)
darken
"premultiplied" режим альфа
res.r = min(src.r, dst.r) res.g = min(src.g, dst.g) res.b = min(src.b, dst.b) res.a = min(src.a, dst.a)
screen
Примечание: Математика для этого режима смешивания не совсем верна при использовании режима альфа "alphamultiply". Предпочитайте вариант "premultiplied" (и убедитесь, что ваш контент имеет свои RGB, умноженные на альфа-канал в какой-то момент до смешивания), когда это возможно.
"alphamultiply" режим альфа
res.r = dst.r * (1 - src.r) + (src.r * src.a) res.g = dst.g * (1 - src.g) + (src.g * src.a) res.b = dst.b * (1 - src.b) + (src.b * src.a) res.a = dst.a * (1 - src.a) + src.a
"premultiplied" режим альфа
res.r = dst.r * (1 - src.r) + src.r res.g = dst.g * (1 - src.g) + src.g res.b = dst.b * (1 - src.b) + src.b res.a = dst.a * (1 - src.a) + src.a
Старые версии
alpha (0.9.0, 0.9.1 и 0.9.2)
res.r = dst.r * (1 - src.a) + src.r * src.a res.g = dst.g * (1 - src.a) + src.g * src.a res.b = dst.b * (1 - src.a) + src.b * src.a res.a = dst.a * (1 - src.a) + src.a
alpha (0.8.0 и более ранние)
res.r = dst.r * (1 - src.a) + src.r * src.a res.g = dst.g * (1 - src.a) + src.g * src.a res.b = dst.b * (1 - src.a) + src.b * src.a res.a = dst.a * (1 - src.a) + src.a * src.a
premultiplied (0.9.2 и более ранние)
res.r = dst.r * (1 - src.a) + src.r res.g = dst.g * (1 - src.a) + src.g res.b = dst.b * (1 - src.a) + src.b res.a = dst.a * (1 - src.a) + src.a
screen (0.9.2 и более ранние)
res.r = dst.r * (1 - src.r) + src.r res.g = dst.g * (1 - src.g) + src.g res.b = dst.b * (1 - src.b) + src.b res.a = dst.a * (1 - src.a) + src.a
additive (0.9.2 и более ранние)
res.r = dst.r + (src.r * src.a) res.g = dst.g + (src.g * src.a) res.b = dst.b + (src.b * src.a) res.a = dst.a + (src.a * src.a)
subtractive (0.9.2 и более ранние)
res.r = dst.r - src.r * src.a res.g = dst.g - src.g * src.a res.b = dst.b - src.b * src.a res.a = dst.a - src.a * src.a
multiplicative (0.9.0, 0.9.1 и 0.9.2)
res.r = src.r * dst.r res.g = src.g * dst.g res.b = src.b * dst.b res.a = src.a * dst.a
multiplicative (0.8.0 и более ранние)
res.r = dst.r * (1 - src.a) + src.r * dst.r res.g = dst.g * (1 - src.a) + src.g * dst.g res.b = dst.b * (1 - src.a) + src.b * dst.b res.a = dst.a * (1 - src.a) + src.a * dst.a
replace (0.9.2 и более ранние)
res.r = src.r res.g = src.g res.b = src.b res.a = src.a
См. также
© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/BlendMode_Formulas