Проблемы с фотошопоподобным "осветленным" фрагментом шейдера

Я отмечаю это в OpenGL, потому что я думаю, что это относится к этому пространству (хотя и с другим наименованием).

Я пытаюсь заставить фотошоп-смешение работать во Flash 11, который использует OpenGL (ES2?). У меня есть определенные проблемы со светом, которые, я считаю, должны быть:

outputColor.rgb = max (base.rgb, blend.rgb);

Я считаю, что у меня есть проблемы, потому что мои слои имеют прозрачность. Однако, даже когда я предварительно умножил свои слои, у меня все еще есть проблемы (изображение все еще слишком темное).

Я пропустил шаг здесь? (Это AGAL, ​​сборка Adobe gl)

[Shader.Fragment]
tex ft0, v0, fs0 <2d,nearest,nomip,clamp>
tex ft1, v0, fs1 <2d,nearest,nomip,clamp>

// premultiply
mul ft2, ft1.xyzw, ft1.wwww

// premultiplied values
max oc, ft0, ft2

2 ответа

Решение

Обратите внимание, вы тоже умножаете альфу.

Таким образом, вместо ( ra, ga, ba, a) вы выводите ( ra, ga, ba, aa), что приведет к получению более темного изображения при смешивании с черным фоном

Вы можете попробовать сделать это:

// premultiply
mul ft2, ft1.xyzw, ft1.wwww
mov ft2.w, ft1.w

// premultiplied values
max oc, ft0, ft2

Как уже упоминалось в crazyjul, вы должны восстановить исходные значения цвета из предварительно умноженных на альфа. Я считаю, что следующий код должен работать:

tex ft0, v0, fs0 <2d, nearest, nomip, clamp>
tex ft1, v0, fs1 <2d, nearest, nomip, clamp>

max ft0, ft0, fc0
div ft0.xyz, ft0.xyz, ft0.www // obtain original color 1

max ft1, ft1, fc0
div ft0.xyz, ft0.xyz, ft0.www // obtain original color 2

max ft1.xyz, ft0.xyz, ft1.xyz // lighten

mul ft1.xyz, ft1.xyz, ft1.www // pre-multiply output color with the second alpha
mov oc, ft1

линии max ft0, ft0, fc0 а также max ft1, ft1, fc0 необходимо избегать деления на нулевое альфа-значение. Вы можете установить fc0 постоянная, чтобы содержать что-л 0,0,0,0.001,

Также обратите внимание, что мы используем альфа второго слоя (ft1) как итоговая альфа. Я не знаю, правильно ли это.

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