16.6.14. Жесткое освещение Этот режим похож на наложение, за исключением того, что яркость вычисляется на основе значения blend, а не base. Пикселы во вспомогательном изображении с яркостью 0,5 не будут влиять на основное изображение. Этот режим часто используется при создании эффектов рельефа. Для получения плавного перехода яркости в диапазоне [0,45, 0,55] используется функция mix: float luminance = dotCblend. lumCoeff);
if (luminance < 0.45)
result = 2.0 * blend * base: else if (luminance > 0.55)
result = white - 2.0 * (white - blend) * (white - base); el se {
vec4 resultl = 2.0 * blend * base:
vec4 result2 = white - 2.0 * (white - blend) * (white - base); result = mix(resultl. result2. (luminance - 0.45) * 10.0);
}
16.6.15. Сложение В этом режиме происходит сложение исходного и вспомогательного изображений. Так как в результате может получиться значение, большее 1,0, происходит отсечение. Если изображения поменять местами, результат не изменится:
result = blend + base:
Шейдеры для обработки изображения
16.6.16. Вычитание В этом режиме вспомогательное изображение вычитается из основного. Если значение получается меньше 0, происходит отсечение: result = base - blend:
16.6.17. Разность
Результат применения этого режима - абсолютное значение разности между bl end и base. Черный цвет результата означает, что изначальные значения одинаковы, а белый цвет - что они противоположны. Еще один вариант использования этого режима - сравнение изображений, так как полная их идентичность даст полностью черный цвет. А совершенно белое вспомогательное изображение может использоваться для инвертирования исходного изображения. Этот режим является коммутативным:
result = abs(blend - base):
16.6.18. Инверсная разность
В этом режиме выполняется операция, обратная разности. Белое и черное значения bl end дают те же значения, что и для режима разности (белый цвет инвертирует, а черный не влияет на результат), но цвета между белым и черным становятся светлее, а не темнее. Эта операция является коммутативной: