Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Page 1 of 2 12 LastLast
Results 1 to 10 of 15

Thread: Blending Mode

  1. #1
    Junior Member Regular Contributor
    Join Date
    Dec 2005
    Location
    CA
    Posts
    113

    Blending Mode

    I would like to reproduce the following Blend Mode from Photoshop, how can I do it?

    Darken, Multiply, Overlay

    Tks in advance...

  2. #2
    Senior Member OpenGL Guru
    Join Date
    Mar 2001
    Posts
    3,576

    Re: Blending Mode

    What do these operations do?

  3. #3
    Senior Member OpenGL Pro k_szczech's Avatar
    Join Date
    Feb 2006
    Location
    Poland
    Posts
    1,108

    Re: Blending Mode

    Blend mode works in the following way:
    sourceColor * sourceFactor + destinationClor * destinationFactor.

    To implement multiply you should set:
    sourceFactor = GL_DST_COLOR, destinationFactr = GL_ZERO

    I don't know exact maths behind darken and overlay.

    Additilnally, you can use shaders to perform some advanced operations on sourceColor, but shaders do not have ccess to destinationColor.

  4. #4
    Senior Member OpenGL Pro sqrt[-1]'s Avatar
    Join Date
    Jun 2002
    Location
    Australia
    Posts
    1,000

    Re: Blending Mode

    To do some of the more complicated blending you will need to do some fancy shader work with a copy of the scene as a lookup texture.

    The math is:

    Code :
    multiply 	a * b
    screen 	1 - (1 - a) * (1 - b)
    darken 	min(a, b)
    lighten 	max(a, b)
    difference 	abs(a - b)
    negation 	1 - abs(1 - a - b)
    exclusion 	a + b - 2 * a * b
    overlay 	a < .5 ? (2 * a * b) : (1 - 2 * (1 - a) * (1 - b))
    hard light 	b < .5 ? (2 * a * b) : (1 - 2 * (1 - a) * (1 - b))
    soft light 	b < .5 ? (2 * a * b + a * a * (1 - 2 * b)) : (sqrt(a) * (2 * b - 1) + (2 * a) * (1 - b))
    dodge 	a / (1 - b)
    burn 	1 - (1 - a) / b
    This comes from:

    http://www.blackpawn.com/blog/?p=94
    http://www.pegtop.net/delphi/articles/blendmodes/

  5. #5
    Member Regular Contributor remdul's Avatar
    Join Date
    Mar 2004
    Location
    The Netherlands
    Posts
    346

    Re: Blending Mode

    If you have trouble understanding how the blending functions work, this program may help:

    http://home.planet.nl/~buijs512/_temp/blendfunc.zip

    (Note: The BlendEquation stuff doesn't work, I never found out what it does.)


    I never understood why OpenGL supports relatively few blend modes. Is there a technical reason for this?

  6. #6
    Junior Member Regular Contributor
    Join Date
    Dec 2005
    Location
    CA
    Posts
    113

    Re: Blending Mode

    tks alot sqrt[-1],

    now after some digs, I can't figure out how to implement theses equations... whithout having to pass by a shader...

    Any other suggestion?

  7. #7
    Senior Member OpenGL Pro k_szczech's Avatar
    Join Date
    Feb 2006
    Location
    Poland
    Posts
    1,108

    Re: Blending Mode

    You need to use shader as described by sqrt[-1].
    There is no other way for complex per-pixel math (unless you want to do it on CPU).

  8. #8
    Senior Member OpenGL Guru
    Join Date
    Mar 2001
    Posts
    3,576

    Re: Blending Mode

    I never understood why OpenGL supports relatively few blend modes. Is there a technical reason for this?
    It supports plenty of blending modes. In GL 2.1, there are 4 basic blending functions (add, subtract, min & max), with blend parameters. Parameters can be separated between RGB and A, and there's even an extension to separate the entire blend function between RGB and A.

    What it doesn't have is arbitrary computation in the blend stage. There are whispers that this will eventually be opened up in the future.

  9. #9
    Senior Member OpenGL Pro sqrt[-1]'s Avatar
    Join Date
    Jun 2002
    Location
    Australia
    Posts
    1,000

    Re: Blending Mode

    Well you can do Darken and Multiply with standard OpenGL.

    Overlay is the only one that requires a shader.

    Multiply(as described above) = sourceFactor = GL_DST_COLOR, destinationFactr = GL_ZERO, blendEquation = GL_FUNC_ADD (default)

    Darken = sourceFactor = GL_ONE, destinationFactr = GL_ONE, blendEquation = GL_FUNC_MIN

  10. #10
    Junior Member Regular Contributor
    Join Date
    Dec 2005
    Location
    CA
    Posts
    113

    Re: Blending Mode

    I have to admit that you blow me away sqrt[-1] with theses equations... and now Im think about using them all (except overlay because of what you mention above). So for the others do you have the source, dest. and blendequation?

    Tks in advance,

    Cheers!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •