Glow renders over everything

<cite>@nehon said:</cite> you did this in the glow technique of the Particle.j3md? Only depthWrite on should be needed

yes i copied the original, then used it, then added depth write

then i tried other stuffs

strange it has no efffect at all, i’ll keep digging

i made a simple project with a particle system and glow filter

maybe if you got some time, could you be kind to look at it ?

glow+particles

thx

1 Like

+1 for the test case.

Some input: this issue looks to be happening on anything in the Transparent bucket with blend mode alpha. You can sort of fix the issue in the test case by setting GlowColor to ColorRGBA.Black on the particle material [java]sparkMat.setColor(“GlowColor”, ColorRGBA.Black);[/java]

If I had to guess, I would say the issue is coming from Common/MatDefs/Light/Glow.frag which defaults back to vec4(0.0) when there is no glow color or texture, which doesn’t write anything to the color buffer… since the transparent bucket is rendered separately, it’s depths have no effect on the rendering of the opaque bucket, and since there is no colour being written to the buffer on the extract glow pass (using the Glow technique) to ‘over write’, these objects/materials are getting ignored in the glow filter. This would explain why setting GlowColour to ColorRGBA.Black ( vec4(0.0,0.0,0.0,1.0) ).

2 Likes

Thanks James :wink:
Easy fix!

<cite>@thetoucher said:</cite> +1 for the test case.

Some input: this issue looks to be happening on anything in the Transparent bucket with blend mode alpha. You can sort of fix the issue in the test case by setting GlowColor to ColorRGBA.Black on the particle material [java]sparkMat.setColor(“GlowColor”, ColorRGBA.Black);[/java]

If I had to guess, I would say the issue is coming from Common/MatDefs/Light/Glow.frag which defaults back to vec4(0.0) when there is no glow color or texture, which doesn’t write anything to the color buffer… since the transparent bucket is rendered separately, it’s depths have no effect on the rendering of the opaque bucket, and since there is no colour being written to the buffer on the extract glow pass (using the Glow technique) to ‘over write’, these objects/materials are getting ignored in the glow filter. This would explain why setting GlowColour to ColorRGBA.Black ( vec4(0.0,0.0,0.0,1.0) ).

wooow awesome
thx
i’ll have a look
(i also need to be carefull as i modify some glow techniqies for my own needs)

<cite>@thetoucher said:</cite> You can sort of fix the issue in the test case by setting GlowColor to ColorRGBA.Black on the particle material [java]sparkMat.setColor("GlowColor", ColorRGBA.Black);[/java]

the problem is that it seems to render entire (black) squares when the glow technique is processed
wich leads to un-nuanced glow occlusion by the smoke particles polygons
[edit : i ll try to modify the glow technique so it uses the same texture sampler as the one used for the regular rendering technique. should work]

blur and glow image

also i was wondering if with this (glow) technique it was possible to have ray of lights appreaing through the smoke
like whe the sun scatters through tree leaves or clouds ?

ok, for those interesested inmaking it work

here is the working code for the frag shader


#if defined(NEED_TEXCOORD1) 
    varying vec2 texCoord1;
#else 
    varying vec2 texCoord;
#endif


#ifdef HAS_GLOWMAP
  uniform sampler2D m_GlowMap;
#endif

#ifdef HAS_GLOWCOLOR
  uniform vec4 m_GlowColor;
#endif

uniform sampler2D m_Texture;
varying vec4 color;

void main(){
    #ifdef HAS_GLOWMAP
        #if defined(NEED_TEXCOORD1) 
           gl_FragColor = texture2D(m_GlowMap, texCoord1);
        #else 
           gl_FragColor = texture2D(m_GlowMap, texCoord);
        #endif
    #elif USE_TEXTURE
        if (color.a &lt;= 0.01)
            discard;

        #ifdef POINT_SPRITE
            vec2 uv = mix(texCoord1.xy, texCoord1.zw, gl_PointCoord.xy);
        #else
            vec2 uv = texCoord1.xy;
        #endif
        gl_FragColor = texture2D(m_Texture, uv) * color;

    #else
        #ifdef HAS_GLOWCOLOR
            gl_FragColor =  m_GlowColor;
        #else
            gl_FragColor = vec4(0.0);
        #endif
    #endif
}

and the modified glow material part

[code].


Technique Glow {

    VertexShader GLSL100:   Common/MatDefs/Misc/Unshaded.vert
    FragmentShader GLSL100: Shaders/Particles/Glow.frag
    
    WorldParameters {
        WorldViewProjectionMatrix
    }

    Defines {
        NEED_TEXCOORD1
        HAS_GLOWMAP : GlowMap
        HAS_GLOWCOLOR : GlowColor
        USE_TEXTURE : Texture
    }

    RenderState {
        PointSprite On
        Blend Alpha
        DepthWrite On
        DepthTest On
    }
}

}
[/code]

3 Likes
<cite>@curtisnewton said:</cite> also i was wondering if with this (glow) technique it was possible to have ray of lights appreaing through the smoke like whe the sun scatters through tree leaves or clouds ?

Light Scattering … I used it here : http://www.youtube.com/watch?v=TptQ8NL0D3s

<cite>@thetoucher said:</cite> Light Scattering ... I used it here : http://www.youtube.com/watch?v=TptQ8NL0D3s

cool

how did you generate the terrain ?
also it seems to use some zblur effect

really nice

thx mate

terrain is simple perlin noise octaves… “zblur effect” is my “physical camera” shader, thanks =)

<cite>@thetoucher said:</cite> terrain is simple perlin noise octaves... "zblur effect" is my "physical camera" shader, thanks =)

i know perlin but perlin noise octaves ???
i mean it is really nice, it looks like metabals aglomeration or something
what is the main difference between the jme zblur shader and your camera shader ?
just curious

The terrain is done roughly the same as outlined in GPU Gems 3 : Chapter 1. Generating Complex Procedural Terrains Using the GPU.

<cite>@curtisnewton said:</cite> what is the main difference between the jme zblur shader and your camera shader ?

There isn’t really a main difference, they both work similarly, I’ve just incorporated a bunch of subtle tweaks and added some more control.

<cite>@thetoucher said:</cite> The terrain is done roughly the same as outlined in GPU Gems 3 : Chapter 1. Generating Complex Procedural Terrains Using the GPU.

There isn’t really a main difference, they both work similarly, I’ve just incorporated a bunch of subtle tweaks and added some more control.

it is actually my nth attempt to use the dof filter, but i still have the same issue, the zblur scale parameter is the onlyone that i can change with an effect, the range and dist parameters dont change anything
that’s why i ask
are you from belgium ?

<cite>@curtisnewton said:</cite> it is actually my nth attempt to use the dof filter, but i still have the same issue, the zblur scale parameter is the onlyone that i can change with an effect, the range and dist parameters dont change anything

I find that odd, this is nothing but the DOF filter with some controls added so I can change the values in real-time.

… and no, not from Belgium, I’m an Aussie.

<cite>@thetoucher said:</cite> I find that odd, this is nothing but the DOF filter with some controls added so I can change the values in real-time.

… and no, not from Belgium, I’m an Aussie.

yes strange

i tried it in many different apps i made, at different times through the last years and the whole screen is blured without nuance regarding the z buffer
donno…

thx anyway

thought of belgium cos of the smurf :slight_smile:

try adding some real time controls so you can tweak each value while your app is running, it’s too hard to notice subtle differences if you have to fire up your app each time.

@curtisnewton said: yes strange

i tried it in many different apps i made, at different times through the last years and the whole screen is blured without nuance regarding the z buffer
donno…

thx anyway

thought of belgium cos of the smurf :slight_smile:

You’d have to show us how you setup your post processor. The DoF filter works fine for me.

<cite>@pspeed said:</cite> You'd have to show us how you setup your post processor. The DoF filter works fine for me.

ok i finaly could make it work
something to do with the glow shader (when on , the problem occurs)

how can i achieve both effects?

do i have add them to the same FilterPostProcessor ?

<cite>@pspeed said:</cite> You'd have to show us how you setup your post processor. The DoF filter works fine for me.

ok for those interested

i managed to make it work by adding the bloom and dof filter to the same FilterPostProcessor
i also create the glow before the dof filter (althought i havent tried the other way around)

I have bit similar problem - for me, if I enable BloomFilter, all translucent objects are rendered on top of rest of the things, seemingly ignoring z-buffer. Of course, depth test is enabled - and if I remove BloomFilter, everything works ok.

What is interesting is that none of the objects have glow color or glow map in this case…

EDIT:
And it was caused by lack of TranslucentBucketFilter added to the scene…