Дублирование смешивания 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
.)
Во введении к разделу отмечается, что режимы наложения, в определениях которых используются определенные обозначения, являются "отделимыми", что означает, что формула применяется к компонентам отдельно. Режим наложения мягкого света является одним из этих режимов наложения, поэтому вам не нужно вычислять значение яркости или что-то в этом роде.