Jump to content

MakinMagic

Newbies
  • Posts

    1
  • Joined

  • Last visited

Posts posted by MakinMagic

  1. Hi - could we please have more merge modes ?

    These would do nicely :

    color func Merge(color pbottom, color ptop)

    if @p_modeselect=="MMF Merge Modes"

    if @clamp

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<0.0

    r = 0.0

    elseif r>1.0

    r = 1.0

    endif

    if g<0.0

    g = 0.0

    elseif g>1.0

    g = 1.0

    endif

    if b<0.0

    b = 0.0

    elseif b>1.0

    b = 1.0

    endif

    ptop = rgba(r,g,b,alpha(ptop))

    r = red(pbottom)

    g = green(pbottom)

    b = blue(pbottom)

    if r<0.0

    r = 0.0

    elseif r>1.0

    r = 1.0

    endif

    if g<0.0

    g = 0.0

    elseif g>1.0

    g = 1.0

    endif

    if b<0.0

    b = 0.0

    elseif b>1.0

    b = 1.0

    endif

    pbottom = rgba(r,g,b,alpha(pbottom))

    endif

    if @p_mmfmergemode=="Exclusion"

    return rgba(red(pbottom) + red(ptop) - 2*red(pbottom)*red(ptop), \

    green(pbottom) + green(ptop) - 2*green(pbottom)*green(ptop), \

    blue(pbottom) + blue(ptop) - 2*blue(pbottom)*blue(ptop), \

    alpha(ptop) )

    elseif @p_mmfmergemode=="Fade Down"

    return rgba( red(ptop) * (1 - red(ptop) + red(pbottom)), \

    green(ptop) * (1 - green(ptop) + green(pbottom)), \

    blue(ptop) * (1 - blue(ptop) + blue(pbottom)), alpha(ptop) )

    elseif @p_mmfmergemode=="Fade Up"

    return rgba(red(pbottom) + red(ptop)*(red(ptop) - red(pbottom)), \

    green(pbottom) + green(ptop)*(green(ptop) - green(pbottom)), \

    blue(pbottom) + blue(ptop)*(blue(ptop) - blue(pbottom)), \

    alpha(ptop) )

    elseif @p_mmfmergemode=="Contrast Down"

    return rgba( 0.5 + red(ptop)*(red(pbottom) - 0.5), \

    0.5 + green(ptop)*(green(pbottom) - 0.5), \

    0.5 + blue(ptop)*(blue(pbottom) - 0.5), alpha(ptop) )

    elseif @p_mmfmergemode=="Contrast Up"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<0.5

    r = r - 2.0*red(ptop)*r*(0.5 - r)

    else

    r = r + 2.0*red(ptop)*(1.0 - r)*(r - 0.5)

    endif

    if g<0.5

    g = g - 2.0*green(ptop)*g*(0.5 - g)

    else

    g = g + 2.0*green(ptop)*(1.0 - g)*(g - 0.5)

    endif

    if b<0.5

    b = b - 2.0*blue(ptop)*b*(0.5 - B)

    else

    b = b + 2.0*blue(ptop)*(1.0 - B)*(b - 0.5)

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Dodge"

    ; Here we clamp the maximum returned to 1.0 because of the special case

    ; when the color channel in ptop is one (or more).

    float r = 1.0 - red(ptop)

    float g = 1.0 - green(ptop)

    float b = 1.0 - blue(ptop)

    if red(pbottom)<=0

    r = 0.0

    elseif r<=0.0

    r = 1.0

    else

    r = red(pbottom)/r

    if r>1.0

    r = 1.0

    endif

    endif

    if green(pbottom)<=0

    g = 0

    elseif g<=0.0

    g = 1.0

    else

    g = green(pbottom)/g

    if g>1.0

    g = 1.0

    endif

    endif

    if blue(pbottom)<=0

    b = 0

    elseif b<=0.0

    b = 1.0

    else

    b = blue(pbottom)/b

    if b>1.0

    b = 1.0

    endif

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Burn"

    ; Here we clamp the minimum returned to 0 because of the special case

    ; when the color channel in ptop is zero (or less).

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<=0.0

    r = 0.0

    else

    r = 1.0 - (1.0 - red(pbottom))/r

    if r<0.0

    r = 0.0

    endif

    endif

    if g<=0.0

    g = 0.0

    else

    g = 1.0 - (1.0 - green(pbottom))/g

    if g<0.0

    g = 0.0

    endif

    endif

    if b<=0.0

    b = 0.0

    else

    b = 1.0 - (1.0 - blue(pbottom))/b

    if b<0.0

    b = 0.0

    endif

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Negation"

    return rgba( 1.0 - abs(1.0 - red(ptop) - red(pbottom)), \

    1.0 - abs(1.0 - green(ptop) - green(pbottom)), \

    1.0 - abs(1.0 - blue(ptop) - blue(pbottom)), alpha(ptop) )

    elseif @p_mmfmergemode=="Reflect"

    ; Here we clamp the maximum returned to 1.0 because of the special case

    ; when the color channel in ptop is one (or more).

    float r = 1.0 - red(ptop)

    float g = 1.0 - green(ptop)

    float b = 1.0 - blue(ptop)

    if red(pbottom)<=0

    r = 0.0

    elseif r<=0.0

    r = 1.0

    else

    r = sqr(red(pbottom))/r

    if r>1.0

    r = 1.0

    endif

    endif

    if green(pbottom)<=0

    g = 0.0

    elseif g<=0.0

    g = 1.0

    else

    g = sqr(green(pbottom))/g

    if g>1.0

    g = 1.0

    endif

    endif

    if blue(pbottom)<=0

    b = 0.0

    elseif b<=0.0

    b = 1.0

    else

    b = sqr(blue(pbottom))/b

    if b>1.0

    b = 1.0

    endif

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Freeze"

    ; Here we clamp the minimum returned to 0 because of the special case

    ; when the color channel in ptop is zero (or less).

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<=0.0

    r = 0.0

    else

    r = 1.0 - sqr(1.0 - red(pbottom))/r

    if r<0.0

    r = 0.0

    endif

    endif

    if g<=0.0

    g = 0.0

    else

    g = 1.0 - sqr(1.0 - green(pbottom))/g

    if g<0.0

    g = 0.0

    endif

    endif

    if b<=0.0

    b = 0.0

    else

    b = 1.0 - sqr(1.0 - blue(pbottom))/b

    if b<0.0

    b = 0.0

    endif

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Rev. Contrast Down"

    return rgba( 0.5 + (1.0 - red(ptop))*(red(pbottom) - 0.5), \

    0.5 + (1.0 - green(ptop))*(green(pbottom) - 0.5), \

    0.5 + (1.0 - blue(ptop))*(blue(pbottom) - 0.5), alpha(ptop) )

    elseif @p_mmfmergemode=="Rev. Contrast Up"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<0.5

    r = r - 2.0*(1.0 - red(ptop))*r*(0.5 - r)

    else

    r = r + 2.0*(1.0 - red(ptop))*(1.0 - r)*(r - 0.5)

    endif

    if g<0.5

    g = g - 2.0*(1.0 - green(ptop))*g*(0.5 - g)

    else

    g = g + 2.0*(1.0 - green(ptop))*(1.0 - g)*(g - 0.5)

    endif

    if b<0.5

    b = b - 2.0*(1.0 - blue(ptop))*b*(0.5 - B)

    else

    b = b + 2.0*(1.0 - blue(ptop))*(1.0 - B)*(b - 0.5)

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Fade"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<0.5

    r = 2.0 * r * (0.5 - r + red(pbottom))

    else

    r = red(pbottom) + 2.0 * (r - 0.5)*(r - red(pbottom))

    endif

    if g<0.5

    g = 2.0 * g * (0.5 - g + green(pbottom))

    else

    g = green(pbottom) + 2.0 * (g - 0.5)*(g - green(pbottom))

    endif

    if b<0.5

    b = 2.0 * b * (0.5 - b + blue(pbottom))

    else

    b = blue(pbottom) + 2.0 * (b - 0.5)*(b - blue(pbottom))

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Reverse Fade"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<0.5

    r = red(pbottom) + 2.0 * r * (r - red(pbottom))

    else

    r = red(pbottom) + 2.0 * (1.0 - r)*(r - red(pbottom))

    endif

    if g<0.5

    g = green(pbottom) + 2.0 * g * (g - green(pbottom))

    else

    g = green(pbottom) + 2.0 * (1.0 - g)*(g - green(pbottom))

    endif

    if b<0.5

    b = blue(pbottom) + 2.0 * b * (b - blue(pbottom))

    else

    b = blue(pbottom) + 2.0 * (1.0 - B)*(b - blue(pbottom))

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Contrast" || @p_mmfmergemode=="Reverse Contrast"

    float r1 = red(ptop)

    float g1 = green(ptop)

    float b1 = blue(ptop)

    if @p_mmfmergemode=="Reverse Contrast"

    r1 = 1.0 - r1

    g1 = 1.0 - g1

    b1 = 1.0 - b1

    endif

    if r1<0.5

    r1 = 0.5 + 2.0 * r1 * (red(pbottom) - 0.5)

    else

    r1 = 2.0 * (r1 - 0.5)

    float r = red(pbottom)

    if r<0.5

    r1 = r - 2.0*r1*r*(0.5 - r)

    else

    r1 = r + 2.0*r1*(1.0 - r)*(r - 0.5)

    endif

    endif

    if g1<0.5

    g1 = 0.5 + 2.0 * g1 * (green(pbottom) - 0.5)

    else

    g1 = 2.0 * (g1 - 0.5)

    float g = green(pbottom)

    if g<0.5

    g1 = g - 2.0*g1*g*(0.5 - g)

    else

    g1 = g + 2.0*g1*(1.0 - g)*(g - 0.5)

    endif

    endif

    if b1<0.5

    b1 = 0.5 + 2.0 * b1 * (blue(pbottom) - 0.5)

    else

    b1 = 2.0 * (b1 - 0.5)

    float b = blue(pbottom)

    if b<0.5

    b1 = b - 2.0*b1*b*(0.5 - B)

    else

    b1 = b + 2.0*b1*(1.0 - B)*(b - 0.5)

    endif

    endif

    return rgba(r1,g1,b1,alpha(ptop))

    elseif @p_mmfmergemode=="Quantize"

    int nr = round(@qmax - (@qmax-@qmin)*(2.0/(1.0 + red(ptop)) - 1.0)) - 1

    int ng = round(@qmax - (@qmax-@qmin)*(2.0/(1.0 + green(ptop)) - 1.0)) - 1

    int nb = round(@qmax - (@qmax-@qmin)*(2.0/(1.0 + blue(ptop)) - 1.0)) - 1

    return rgba(floor(red(pbottom)*(nr+0.999))/nr, \

    floor(green(pbottom)*(ng+0.999))/ng, \

    floor(blue(pbottom)*(nb+0.999))/nb,alpha(ptop))

    elseif @p_mmfmergemode=="Reverse Quantize"

    int nr = round(@qmax - (@qmax-@qmin)*(2.0/(2.0 - red(ptop)) - 1.0)) - 1

    int ng = round(@qmax - (@qmax-@qmin)*(2.0/(2.0 - green(ptop)) - 1.0)) - 1

    int nb = round(@qmax - (@qmax-@qmin)*(2.0/(2.0 - blue(ptop)) - 1.0)) - 1

    return rgba(floor(red(pbottom)*(nr+0.999))/nr, \

    floor(green(pbottom)*(ng+0.999))/ng, \

    floor(blue(pbottom)*(nb+0.999))/nb,alpha(ptop))

    elseif @p_mmfmergemode=="Gamma"

    return rgba(red(pbottom)^(@mingamma+(@maxgamma-@mingamma)*red(ptop)), \

    green(pbottom)^(@mingamma+(@maxgamma-@mingamma)*green(ptop)), \

    blue(pbottom)^(@mingamma+(@maxgamma-@mingamma)*blue(ptop)), \

    alpha(ptop))

    elseif @p_mmfmergemode=="Inverse Gamma"

    return rgba(red(pbottom)^(1.0/(@mingamma+(@maxgamma-@mingamma)*red(ptop))), \

    green(pbottom)^(1.0/(@mingamma+(@maxgamma-@mingamma)*green(ptop))), \

    blue(pbottom)^(1.0/(@mingamma+(@maxgamma-@mingamma)*blue(ptop))), \

    alpha(ptop))

    elseif @p_mmfmergemode=="Reverse Gamma"

    return rgba(red(pbottom)^(@mingamma+(@maxgamma-@mingamma)*(1.0-red(ptop))), \

    green(pbottom)^(@mingamma+(@maxgamma-@mingamma)*(1.0-green(ptop))), \

    blue(pbottom)^(@mingamma+(@maxgamma-@mingamma)*(1.0-blue(ptop))), \

    alpha(ptop))

    elseif @p_mmfmergemode=="Rev. Inv. Gamma"

    return rgba(red(pbottom)^(1.0/(@mingamma+(@maxgamma-@mingamma)*(1.0-red(ptop)))), \

    green(pbottom)^(1.0/(@mingamma+(@maxgamma-@mingamma)*(1.0-green(ptop)))), \

    blue(pbottom)^(1.0/(@mingamma+(@maxgamma-@mingamma)*(1.0-blue(ptop)))), \

    alpha(ptop))

    elseif @p_mmfmergemode=="Combined Gamma"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<0.5

    r = red(pbottom)^(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-red(ptop)))

    else

    r = red(pbottom)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(red(ptop)-0.5)))

    endif

    if g<0.5

    g = green(pbottom)^(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-green(ptop)))

    else

    g = green(pbottom)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(green(ptop)-0.5)))

    endif

    if b<0.5

    b = blue(pbottom)^(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-blue(ptop)))

    else

    b = blue(pbottom)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(blue(ptop)-0.5)))

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Rev. Comb. Gamma"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<0.5

    r = red(pbottom)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-red(ptop))))

    else

    r = red(pbottom)^(@mingamma+2.0*(@maxgamma-@mingamma)*(red(ptop)-0.5))

    endif

    if g<0.5

    g = green(pbottom)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-green(ptop))))

    else

    g = green(pbottom)^(@mingamma+2.0*(@maxgamma-@mingamma)*(green(ptop)-0.5))

    endif

    if b<0.5

    b = blue(pbottom)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-blue(ptop))))

    else

    b = blue(pbottom)^(@mingamma+2.0*(@maxgamma-@mingamma)*(blue(ptop)-0.5))

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Stamp"

    float r = red(pbottom) + 2.0*red(ptop) - 1.0

    float g = green(pbottom) + 2.0*green(ptop) - 1.0

    float b = blue(pbottom) + 2.0*blue(ptop) - 1.0

    if r<0.0

    r = 0.0

    elseif r>1.0

    r = 1.0

    endif

    if g<0.0

    g = 0.0

    elseif g>1.0

    g = 1.0

    endif

    if b<0.0

    b = 0.0

    elseif b>1.0

    b = 1.0

    endif

    return RGBA(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Soft Dodge"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<=0

    r = 0

    elseif r+red(ptop)<=1.0

    if red(ptop)>=1.0

    r = 1.0

    elseif (r = 0.5*r/(1.0 - red(ptop)))>1.0

    r = 1.0

    endif

    elseif (r = 1.0 - 0.5*(1.0 - red(ptop))/r)<0.0

    r = 0.0

    endif

    if g<=0

    g = 0

    elseif g+green(ptop)<=1.0

    if green(ptop)>=1.0

    g = 1.0

    elseif (g = 0.5*g/(1.0 - green(ptop)))>1.0

    g = 1.0

    endif

    elseif (g = 1.0 - 0.5*(1.0 - green(ptop))/g)<0.0

    g = 0.0

    endif

    if b<=0

    b = 0

    elseif b+blue(ptop)<=1.0

    if blue(ptop)>=1.0

    b = 1.0

    elseif (b = 0.5*b/(1.0 - blue(ptop)))>1.0

    b = 1.0

    endif

    elseif (b = 1.0 - 0.5*(1.0 - blue(ptop))/b)<0.0

    b = 0.0

    endif

    return RGBA(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Soft Burn"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<=0

    r = 0

    elseif r+red(pbottom)<=1.0

    if red(pbottom)>=1.0

    r = 1.0

    elseif (r = 0.5*r/(1.0 - red(pbottom)))>1.0

    r = 1.0

    endif

    elseif (r = 1.0 - 0.5*(1.0 - red(pbottom))/r)<0.0

    r = 0.0

    endif

    if g<=0

    g = 0

    elseif g+green(pbottom)<=1.0

    if green(pbottom)>=1.0

    g = 1.0

    elseif (g = 0.5*g/(1.0 - green(pbottom)))>1.0

    g = 1.0

    endif

    elseif (g = 1.0 - 0.5*(1.0 - green(pbottom))/g)<0.0

    g = 0.0

    endif

    if b<=0

    b = 0

    elseif b+blue(pbottom)<=1.0

    if blue(pbottom)>=1.0

    b = 1.0

    elseif (b = 0.5*b/(1.0 - blue(pbottom)))>1.0

    b = 1.0

    endif

    elseif (b = 1.0 - 0.5*(1.0 - blue(pbottom))/b)<0.0

    b = 0.0

    endif

    return RGBA(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inverse Dodge"

    ; Here we clamp the maximum returned to 1.0 because of the special case

    ; when the color channel in ptop is one (or more).

    float r = 1.0 - red(pbottom)

    float g = 1.0 - green(pbottom)

    float b = 1.0 - blue(pbottom)

    if red(ptop)<=0

    r = 0

    elseif r<=0.0

    r = 1.0

    else

    r = red(ptop)/r

    if r>1.0

    r = 1.0

    endif

    endif

    if green(ptop)<=0

    g = 0

    elseif g<=0.0

    g = 1.0

    else

    g = green(ptop)/g

    if g>1.0

    g = 1.0

    endif

    endif

    if blue(ptop)<=0

    b = 0

    elseif b<=0.0

    b = 1.0

    else

    b = blue(ptop)/b

    if b>1.0

    b = 1.0

    endif

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inverse Burn"

    ; Here we clamp the minimum returned to 0 because of the special case

    ; when the color channel in ptop is zero (or less).

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<=0.0

    r = 0.0

    else

    r = 1.0 - (1.0 - red(ptop))/r

    if r<0.0

    r = 0.0

    endif

    endif

    if g<=0.0

    g = 0.0

    else

    g = 1.0 - (1.0 - green(ptop))/g

    if g<0.0

    g = 0.0

    endif

    endif

    if b<=0.0

    b = 0.0

    else

    b = 1.0 - (1.0 - blue(ptop))/b

    if b<0.0

    b = 0.0

    endif

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Glow"

    ; Here we clamp the maximum returned to 1.0 because of the special case

    ; when the color channel in ptop is one (or more).

    float r = 1.0 - red(pbottom)

    float g = 1.0 - green(pbottom)

    float b = 1.0 - blue(pbottom)

    if red(ptop)<=0

    r = 0.0

    elseif r<=0.0

    r = 1.0

    else

    r = sqr(red(ptop))/r

    if r>1.0

    r = 1.0

    endif

    endif

    if green(ptop)<=0

    g = 0.0

    elseif g<=0.0

    g = 1.0

    else

    g = sqr(green(ptop))/g

    if g>1.0

    g = 1.0

    endif

    endif

    if blue(ptop)<=0

    b = 0.0

    elseif b<=0.0

    b = 1.0

    else

    b = sqr(blue(ptop))/b

    if b>1.0

    b = 1.0

    endif

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Heat"

    ; Here we clamp the minimum returned to 0 because of the special case

    ; when the color channel in ptop is zero (or less).

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<=0.0

    r = 0.0

    else

    r = 1.0 - sqr(1.0 - red(ptop))/r

    if r<0.0

    r = 0.0

    endif

    endif

    if g<=0.0

    g = 0.0

    else

    g = 1.0 - sqr(1.0 - green(ptop))/g

    if g<0.0

    g = 0.0

    endif

    endif

    if b<=0.0

    b = 0.0

    else

    b = 1.0 - sqr(1.0 - blue(ptop))/b

    if b<0.0

    b = 0.0

    endif

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Fade Down"

    return rgba( red(pbottom) * (1 - red(pbottom) + red(ptop)), \

    green(pbottom) * (1 - green(pbottom) + green(ptop)), \

    blue(pbottom) * (1 - blue(pbottom) + blue(ptop)), alpha(ptop) )

    elseif @p_mmfmergemode=="Inv. Fade Up"

    return rgba(red(ptop) + red(pbottom)*(red(pbottom) - red(ptop)), \

    green(ptop) + green(pbottom)*(green(pbottom) - green(ptop)), \

    blue(ptop) + blue(pbottom)*(blue(pbottom) - blue(ptop)), \

    alpha(ptop) )

    elseif @p_mmfmergemode=="Inv. Contrast Down"

    return rgba( 0.5 + red(pbottom)*(red(ptop) - 0.5), \

    0.5 + green(pbottom)*(green(ptop) - 0.5), \

    0.5 + blue(pbottom)*(blue(ptop) - 0.5), alpha(ptop) )

    elseif @p_mmfmergemode=="Inv. Contrast Up"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<0.5

    r = r - 2.0*red(pbottom)*r*(0.5 - r)

    else

    r = r + 2.0*red(pbottom)*(1.0 - r)*(r - 0.5)

    endif

    if g<0.5

    g = g - 2.0*green(pbottom)*g*(0.5 - g)

    else

    g = g + 2.0*green(pbottom)*(1.0 - g)*(g - 0.5)

    endif

    if b<0.5

    b = b - 2.0*blue(pbottom)*b*(0.5 - B)

    else

    b = b + 2.0*blue(pbottom)*(1.0 - B)*(b - 0.5)

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Rev. Con. Down"

    return rgba( 0.5 + (1.0 - red(pbottom))*(red(ptop) - 0.5), \

    0.5 + (1.0 - green(pbottom))*(green(ptop) - 0.5), \

    0.5 + (1.0 - blue(pbottom))*(blue(ptop) - 0.5), alpha(ptop) )

    elseif @p_mmfmergemode=="Inv. Rev. Con. Up"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if r<0.5

    r = r - 2.0*(1.0 - red(pbottom))*r*(0.5 - r)

    else

    r = r + 2.0*(1.0 - red(pbottom))*(1.0 - r)*(r - 0.5)

    endif

    if g<0.5

    g = g - 2.0*(1.0 - green(pbottom))*g*(0.5 - g)

    else

    g = g + 2.0*(1.0 - green(pbottom))*(1.0 - g)*(g - 0.5)

    endif

    if b<0.5

    b = b - 2.0*(1.0 - blue(pbottom))*b*(0.5 - B)

    else

    b = b + 2.0*(1.0 - blue(pbottom))*(1.0 - B)*(b - 0.5)

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inverse Fade"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<0.5

    r = 2.0 * r * (0.5 - r + red(ptop))

    else

    r = red(ptop) + 2.0 * (r - 0.5)*(r - red(ptop))

    endif

    if g<0.5

    g = 2.0 * g * (0.5 - g + green(ptop))

    else

    g = green(ptop) + 2.0 * (g - 0.5)*(g - green(ptop))

    endif

    if b<0.5

    b = 2.0 * b * (0.5 - b + blue(ptop))

    else

    b = blue(ptop) + 2.0 * (b - 0.5)*(b - blue(ptop))

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Rev. Fade"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<0.5

    r = red(ptop) + 2.0 * r * (r - red(ptop))

    else

    r = red(ptop) + 2.0 * (1.0 - r)*(r - red(ptop))

    endif

    if g<0.5

    g = green(ptop) + 2.0 * g * (g - green(ptop))

    else

    g = green(ptop) + 2.0 * (1.0 - g)*(g - green(ptop))

    endif

    if b<0.5

    b = blue(ptop) + 2.0 * b * (b - blue(ptop))

    else

    b = blue(ptop) + 2.0 * (1.0 - B)*(b - blue(ptop))

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inverse Contrast" \

    || @p_mmfmergemode=="Inv. Rev. Contrast"

    float r1 = red(pbottom)

    float g1 = green(pbottom)

    float b1 = blue(pbottom)

    if @p_mmfmergemode=="Inv. Rev. Contrast"

    r1 = 1.0 - r1

    g1 = 1.0 - g1

    b1 = 1.0 - b1

    endif

    if r1<0.5

    r1 = 0.5 + 2.0 * r1 * (red(ptop) - 0.5)

    else

    r1 = 2.0 * (r1 - 0.5)

    float r = red(ptop)

    if r<0.5

    r1 = r - 2.0*r1*r*(0.5 - r)

    else

    r1 = r + 2.0*r1*(1.0 - r)*(r - 0.5)

    endif

    endif

    if g1<0.5

    g1 = 0.5 + 2.0 * g1 * (green(ptop) - 0.5)

    else

    g1 = 2.0 * (g1 - 0.5)

    float g = green(ptop)

    if g<0.5

    g1 = g - 2.0*g1*g*(0.5 - g)

    else

    g1 = g + 2.0*g1*(1.0 - g)*(g - 0.5)

    endif

    endif

    if b1<0.5

    b1 = 0.5 + 2.0 * b1 * (blue(ptop) - 0.5)

    else

    b1 = 2.0 * (b1 - 0.5)

    float b = blue(ptop)

    if b<0.5

    b1 = b - 2.0*b1*b*(0.5 - B)

    else

    b1 = b + 2.0*b1*(1.0 - B)*(b - 0.5)

    endif

    endif

    return rgba(r1,g1,b1,alpha(ptop))

    elseif @p_mmfmergemode=="Inverse Quantize"

    int nr = round(@qmax - (@qmax-@qmin)*(2.0/(1.0 + red(pbottom)) - 1.0)) - 1

    int ng = round(@qmax - (@qmax-@qmin)*(2.0/(1.0 + green(pbottom)) - 1.0)) - 1

    int nb = round(@qmax - (@qmax-@qmin)*(2.0/(1.0 + blue(pbottom)) - 1.0)) - 1

    return rgba(floor(red(ptop)*(nr+0.999))/nr, \

    floor(green(ptop)*(ng+0.999))/ng, \

    floor(blue(ptop)*(nb+0.999))/nb,alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Rev. Quantize"

    int nr = round(@qmax - (@qmax-@qmin)*(2.0/(2.0 - red(pbottom)) - 1.0)) - 1

    int ng = round(@qmax - (@qmax-@qmin)*(2.0/(2.0 - green(pbottom)) - 1.0)) - 1

    int nb = round(@qmax - (@qmax-@qmin)*(2.0/(2.0 - blue(pbottom)) - 1.0)) - 1

    return rgba(floor(red(ptop)*(nr+0.999))/nr, \

    floor(green(ptop)*(ng+0.999))/ng, \

    floor(blue(ptop)*(nb+0.999))/nb,alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Gamma"

    return rgba(red(ptop)^(@mingamma+(@maxgamma-@mingamma)*red(pbottom)), \

    green(ptop)^(@mingamma+(@maxgamma-@mingamma)*green(pbottom)), \

    blue(ptop)^(@mingamma+(@maxgamma-@mingamma)*blue(pbottom)), \

    alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Inverse Gamma"

    return rgba(red(ptop)^(1.0/(@mingamma+(@maxgamma-@mingamma)*red(pbottom))), \

    green(ptop)^(1.0/(@mingamma+(@maxgamma-@mingamma)*green(pbottom))), \

    blue(ptop)^(1.0/(@mingamma+(@maxgamma-@mingamma)*blue(pbottom))), \

    alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Reverse Gamma"

    return rgba(red(ptop)^(@mingamma+(@maxgamma-@mingamma)*(1.0-red(pbottom))), \

    green(ptop)^(@mingamma+(@maxgamma-@mingamma)*(1.0-green(pbottom))), \

    blue(ptop)^(@mingamma+(@maxgamma-@mingamma)*(1.0-blue(pbottom))), \

    alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Rev. Inv. Gamma"

    return rgba(red(ptop)^(1.0/(@mingamma+(@maxgamma-@mingamma)*(1.0-red(pbottom)))), \

    green(ptop)^(1.0/(@mingamma+(@maxgamma-@mingamma)*(1.0-green(pbottom)))), \

    blue(ptop)^(1.0/(@mingamma+(@maxgamma-@mingamma)*(1.0-blue(pbottom)))), \

    alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Combined Gamma"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<0.5

    r = red(ptop)^(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-r))

    else

    r = red(ptop)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(r-0.5)))

    endif

    if g<0.5

    g = green(ptop)^(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-g))

    else

    g = green(ptop)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(g-0.5)))

    endif

    if b<0.5

    b = blue(ptop)^(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-B))

    else

    b = blue(ptop)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(b-0.5)))

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Rev. Comb. Gamma"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if r<0.5

    r = red(ptop)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-r)))

    else

    r = red(ptop)^(@mingamma+2.0*(@maxgamma-@mingamma)*(r-0.5))

    endif

    if g<0.5

    g = green(ptop)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-g)))

    else

    g = green(ptop)^(@mingamma+2.0*(@maxgamma-@mingamma)*(g-0.5))

    endif

    if b<0.5

    b = blue(ptop)^(1.0/(@mingamma+2.0*(@maxgamma-@mingamma)*(0.5-B)))

    else

    b = blue(ptop)^(@mingamma+2.0*(@maxgamma-@mingamma)*(b-0.5))

    endif

    return rgba(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Inverse Stamp"

    float r = red(ptop) + 2.0*red(pbottom) - 1.0

    float g = green(ptop) + 2.0*green(pbottom) - 1.0

    float b = blue(ptop) + 2.0*blue(pbottom) - 1.0

    if r<0.0

    r = 0.0

    elseif r>1.0

    r = 1.0

    endif

    if g<0.0

    g = 0.0

    elseif g>1.0

    g = 1.0

    endif

    if b<0.0

    b = 0.0

    elseif b>1.0

    b = 1.0

    endif

    return RGBA(r,g,b,alpha(ptop))

    elseif @p_mmfmergemode=="Brightness (Yiq)"

    float btop = 0.299*red(ptop) + 0.587*green(ptop) + 0.114*blue(ptop)

    float bbtm = 0.299*red(pbottom) + 0.587*green(pbottom) \

    + 0.114*blue(pbottom)

    if bbtm==0

    return RGBA(btop,btop,btop,alpha(ptop))

    else

    pbottom = pbottom*(btop/bbtm)

    return RGBA(red(pbottom),green(pbottom),blue(pbottom),alpha(ptop))

    endif

    elseif @p_mmfmergemode=="Colour (Inverse Yiq)"

    float btop = 0.299*red(ptop) + 0.587*green(ptop) + 0.114*blue(ptop)

    float bbtm = 0.299*red(pbottom) + 0.587*green(pbottom) \

    + 0.114*blue(pbottom)

    if btop==0

    return RGBA(bbtm,bbtm,bbtm,alpha(ptop))

    else

    pbottom = ptop*(bbtm/btop)

    return RGBA(red(pbottom),green(pbottom),blue(pbottom),alpha(ptop))

    endif

    elseif @p_mmfmergemode=="Brightness (Custom)"

    float btop = (@redlvl*red(ptop) + @greenlvl*green(ptop) \

    + @bluelvl*blue(ptop))/(@redlvl + @greenlvl +@bluelvl)

    float bbtm = (@redlvl*red(pbottom) + @greenlvl*green(pbottom) \

    + @bluelvl*blue(pbottom))/(@redlvl + @greenlvl +@bluelvl)

    if bbtm==0

    return RGBA(btop,btop,btop,alpha(ptop))

    else

    pbottom = pbottom*(btop/bbtm)

    return RGBA(red(pbottom),green(pbottom),blue(pbottom),alpha(ptop))

    endif

    elseif @p_mmfmergemode=="Colour (Custom)"

    float btop = (@redlvl*red(ptop) + @greenlvl*green(ptop) \

    + @bluelvl*blue(ptop))/(@redlvl + @greenlvl +@bluelvl)

    float bbtm = (@redlvl*red(pbottom) + @greenlvl*green(pbottom) \

    + @bluelvl*blue(pbottom))/(@redlvl + @greenlvl +@bluelvl)

    if btop==0

    return RGBA(bbtm,bbtm,bbtm,alpha(ptop))

    else

    pbottom = ptop*(bbtm/btop)

    return RGBA(red(pbottom),green(pbottom),blue(pbottom),alpha(ptop))

    endif

    elseif @p_mmfmergemode=="Pin Light"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if (r>=0.5 && rred(pbottom))

    r = red(pbottom)

    endif

    if (g>=0.5 && ggreen(pbottom))

    g = green(pbottom)

    endif

    if (b>=0.5 && bblue(pbottom))

    b = blue(pbottom)

    endif

    return RGBA(r, g, b, alpha(ptop))

    elseif @p_mmfmergemode=="Reverse Pin Light"

    float r = red(ptop)

    float g = green(ptop)

    float b = blue(ptop)

    if (r>=0.5 && r>red(pbottom)) || (r<0.5 && r

    r = red(pbottom)

    endif

    if (g>=0.5 && g>green(pbottom)) || (g<0.5 && g

    g = green(pbottom)

    endif

    if (b>=0.5 && b>blue(pbottom)) || (b<0.5 && b

    b = blue(pbottom)

    endif

    return RGBA(r, g, b, alpha(ptop))

    elseif @p_mmfmergemode=="Inv. Pin Light"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if (r>=0.5 && rred(ptop))

    r = red(ptop)

    endif

    if (g>=0.5 && ggreen(ptop))

    g = green(ptop)

    endif

    if (b>=0.5 && bblue(ptop))

    b = blue(ptop)

    endif

    return RGBA(r, g, b, alpha(ptop))

    else;if @p_mmfmergemode=="Inv. Rev. Pin Light"

    float r = red(pbottom)

    float g = green(pbottom)

    float b = blue(pbottom)

    if (r>=0.5 && r>red(ptop)) || (r<0.5 && r

    r = red(ptop)

    endif

    if (g>=0.5 && g>green(ptop)) || (g<0.5 && g

    g = green(ptop)

    endif

    if (b>=0.5 && b>blue(ptop)) || (b<0.5 && b

    b = blue(ptop)

    endif

    return RGBA(r, g, b, alpha(ptop))

    endif ; @p_mmfmergemode

×
×
  • Create New...