Дублирование смешивания iOS kCGBlendModeSoftLight

Я пытаюсь дублировать смешивание CoreGraphics kCBBlendModeSoftLight с использованием шейдеров. (Я уже реализовал несколько других режимов наложения CG)

Проблема заключается в том, что, хотя есть много (если не совсем) описания смешивания Soft Light в Photoshop, меня интересует версия CoreGraphics.

Кто-нибудь знает точную формулу, используемую в CG, чтобы определить результат смешивания?

1 ответ

Решение

Для CG это явно не задокументировано, но документация для фильтра CISoftLightBlendMode в Core Image гласит:

Формула, использованная для создания этого фильтра, описана в спецификации PDF, которая доступна онлайн в Центре разработчиков Adobe.

Вот страница, с которой вы можете получить ссылку на PDF. Приведенная формула (в псевдокоде, переписана мной из математического синтаксиса в PDF, надеясь, что я ничего не испортила):

D(float x) =
    x ≤ 0.25
    ? ((16.0 × x - 12.0) × x + 4.0) × x
    : sqrt(x)

softlight(__color backdrop, __color source) =
    source ≤ 0.5
    ? backdrop - (1.0 - 2.0 × source) × backdrop × (1.0 - backdrop)
    : backdrop + (2.0 × source - 1.0) × (D(backdrop) - backdrop)

(Для GLSL вы бы использовали vec4 вместо CIKL __color.)

Во введении к разделу отмечается, что режимы наложения, в определениях которых используются определенные обозначения, являются "отделимыми", что означает, что формула применяется к компонентам отдельно. Режим наложения мягкого света является одним из этих режимов наложения, поэтому вам не нужно вычислять значение яркости или что-то в этом роде.

Другие вопросы по тегам