2013-04-01 5 views
3

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

Проблема в том, что, несмотря на то, что, если (отличное) описание смешивания SoftFox Photoshop, меня интересует версия CoreGraphics.

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

ответ

3

Для CG, это явно не документировано, но the documentation for Core Image's CISoftLightBlendMode filter говорит:

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

Here's the page you can get the PDF Reference from. Формулу является (в псевдокоде, переписан мною из математического синтаксиса в формате 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's __color.)

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

+0

Отлично! Я получил документ PDFReference, который описал смесь SoftLight, но не дал точной формулы. Связанный работал отлично. Приятно отметить информацию в документах CI. – Nuoji