16.6.9. Экран
Режим экрана противоположен умножению, поскольку здесь умножаются значения, противоположные исходным. Оператором прозрачности является черный цвет. Этот режим коммутативен:
result = white - ((white - blend) * (white - base));
16.6.10. Усиление цвета
В режиме усиления цвета основной цвет затемняется дополнительным цветом (уменьшается яркость). Если значение blend - белый цвет, эффекта в этой точке не будет. При вычислениях иногда могут получиться отрицательные значения, которые будут отброшены при приведении окончательного цвета к конкретному диапазону:
result = white - (white - base) / blend:
16.6.11. Ослабление цвета
Этот режим делает цвета более светлыми. Если значение Ы end - черный цвет, эффекта в этой точке не будет. При вычислении могут получиться значения больше 1, которые затем отбрасываются так же, как и при реализации предыдущего режима:
result = base / (white - blend):
16.6.12. Наложение
В этом режиме сначала вычисляется яркость основного изображения. Если значение яркости меньше 0,5, значения blend и base умножаются. Если значение яркости больше 0,5, выполняется та же операция, что и в режиме экрана. Эффект состоит в том, что значение base смешивается со значением blend, а не заменяется им. Это позволяет шаблонам и цветам перекрывать основное изображение, со храняя тени и освещенные участки. При значении яркости равном 0,5 получается разрыв, поэтому нужно создать в этих местах плавный переход между уравнениями для яркости в диапазоне [0,45, 0,55]:
float luminance = dot(base. 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 = mixtresultl. result2. (luminance - 0.45) * 10.0);
}
16.6.13. Мягкое освещение
При использовании этого режима получается эффект, похожий на мягкий свет, проходящий через вспомогательное изображение и падающий на исходное. В результате получится сочетание двух изображений, освещенное приглушенным светом:
result = 2.0 * base * blend + base * base - 2.0 * base * base * blend:
16.6.14. Жесткое освещение
Этот режим похож на наложение, за исключением того, что яркость вычисляется на основе значения blend, а не base. Пикселы во вспомогательном изображении с яркостью 0,5 не будут влиять на основное изображение. Этот режим часто используется при создании эффектов рельефа. Для получения плавного перехода яркости в диапазоне [0,45, 0,55] используется функция mi х: float luminance = dot(blend, lumCoeff);
if (luminance < 0.45)
result = 2.0 * blend * base; else if (luminance > 0.55)
result = white - 2.0 * (white - blend) * (white - base): else {
vec4 resultl = 2.0 * blend * base;
vec4 result2 = white - 2.0 * (white - blend) * (white - base); result = mixtresultl, result2. (luminance - 0.45) * 10.0):