Monsieur Max

  • Content count

  • Joined

  • Last visited

Community Reputation

135 Neutral

About Monsieur Max

  • Rank
  1. Hello fellow game coders.   I'm currently working on a 2D topdown view game, using OpenGL2 ES2. The lighting is a rather important part of the game and I have trouble with my current implementation. I'm invoking the infinite knowledge of the community in order to give me a hand to solve this tricky issue. Before exposing you the issue, note that I can totally rewrite the whole lighting process if necessary. Of course, tweaking the existing one is fine too !     So, here are the global rendering details: Game scene without light is rendered in a FBO Lights are rendered in a FBO These 2 FBO's are blended to create the scene.   Pretty classic, here are the details of the steps   On step 2 - light rendering: Each light is a quad using texture in grayscale with no alpha. Starting from a black screen, each light of the scene is added using glBlendFunc(GL2ES2.GL_ONE, GL2ES2.GL_ONE) and glBlendEquation(GL2ES2.GL_FUNC_ADD)   On step 3 - final scene  Both FBO's textures are rendered each in a quad, the scene first then the light. Settings are glBlendFunc(GL2ES2.GL_SRC_ALPHA, GL2ES2.GL_ONE_MINUS_SRC_ALPHA) and glBlendEquation(GL2ES2.GL_FUNC_ADD) In the corresponding fragment shader, final color is calculated multiplying RGB colors from the scene and the light, and alpha is 1.    The result is almost ok ( without lights - with lights ) :       -        But I have two issues :   Issue 1 : "Light blob" : when two lights are mixed, a light blob forms as in the picture below. The result is really awkward even if it's mathematically right. The intersection of the two lights gives a feeling of saturation. I've reproduced this result easily using anders riggelsen's tool at     Issue 2 : "Color munching" : When two lights are mixed, the color mix is not giving the expected result. In the picture below, the white and yellow color manages to mix together but not in a way that feels natural. This is ( very probably ) because of the GL_ONE, GL_ONE settings. Again, the result is awkward but mathematically right , the following test proves it, mixing a blue ( 0,0,1) with a yellow (1,1,0) gives a white ( 1,1,1 )     Basically the issue is the same : color mixing always end up being too white. I'm not a very experienced OpenGL coder and I'm really struggling to find a solution. This is haunting my mind for days.   Does anyone here have an idea that could help me achieve "realistic" colored light mixing in my 2D openGL game ? Thanks in advance. I'm totally willing to provide more details if needed.   Edit: I add a "live" video in order to display the issue :   Maxime.