Как уже упоминалось в 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
) в качестве получающейся альфыЯ не знаю, правильно ли это.