# OpenGL Bleeding issue with shadowmap and objects leaving the view

## Recommended Posts

How can I get rid of this problem? I am thinking what is happening is when the camera moves and the objects leave the shadowmap it goes nuts. What can one do to stop this or is there nothing you can do? Thanks BTW using OpenGL

##### Share on other sites
The simplest solution is leaving an empty border in the shadowmap (initialize the pixels in the border to the max depth { 1.0 } ) and readjust the shadowmap viewport before rendering to the shadowmap:

Now, the shadow map test will accept all pixels in the border.

##### Share on other sites
Ok, I would like to figure out how to get this idea to work. I think the projection texture coordinates are outside 0-1 range. So when I use discard or kill on the fragments it seems to work but then my terrain doesn't render either. So how can I fix that issue? Anyone have any ideas. Thanks

##### Share on other sites
You should not discard the fragment because it will not be rasterized.
Your code should be similar to the following lines:

// intensity = DotProduct(normal,lightDir)
// ...

{
intensity = 0.0;
}

If you have initialized the shadow map borders to max depth, all the projection texture coordinates outside of range (0..1) will give depth = 1.0, therefore the light intensity remains unchanged (1.0 < 1.0 == false).

##### Share on other sites
Quote:
 Original post by SergiThe simplest solution is leaving an empty border in the shadowmap (initialize the pixels in the border to the max depth { 1.0 } ) and readjust the shadowmap viewport before rendering to the shadowmap:

Note that this technically means that you need to readjust your projection into shadow map space as well... it's not longer as simple as x * 0.5 + 0.5! It's not complex per se, but there is an easier way...

Set a border color on your texture (that is your maximum depth range) and use "clamp to border". Don't know if/how this will work if you're using a depth texture, but should work like a charm for standard textures.

##### Share on other sites
Sergi that didn't work... Still bleeds over a bit.

Andy that idea may work, but I get a black bar at the edges and I cleared the depth buffer with 0 and 1 no difference.

##### Share on other sites
AndyTX: I think it's not possible to setup the border color of depth textures (neither nvidia nor ati cards).

MARS_999: It should work using the standard bias matrix (although the shadow map lookup will be 1 pixel offseted). However, if you want to use a perfect bias matrix, maybe the following one works:

float biasMatrix[] = {
0.5f-tx, 0.0f, 0.0f, 0.0f,
0.0f, 0.5f-ty, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
0.5f+tx, 0.5f+ty, 0.5f, 1.0f};// 1 texel offseted to the right

The matrix (lsvp) used in the vertex shader (of the second pass) to transform from world space to shadow map space should be:

lsvp = lvp * bias;

where lvp is the viewprojection matrix used to render the objects of the shadowmap.

If the errors still are visible, please make a screenshot of the scene with the light rendered (the light view frustum) and let me see it.

##### Share on other sites
Quote:
 Original post by SergiAndyTX: I think it's not possible to setup the border color of depth textures (neither nvidia nor ati cards).

Hmm, ok... yet another point against depth textures in my books :)

Quote:
 Original post by SergiMARS_999: It should work using the standard bias matrix (although the shadow map lookup will be 1 pixel offseted).

It's not just offset, it's center-scaled by size / (size - 2) as well, which makes it a bit more complicated. Depending on your shadow map resolution, the difference might be minimal, but misaligning the shadow texels will exacerbate depth biasing problems!

##### Share on other sites
You can use more shadow maps to help cover the view. Requires some management, but you won't have to worry about abrubt ends in the shadows.

BennyW

##### Share on other sites
Tried that but can't figure out how to get them to align correctly so one edge matches the next one...

##### Share on other sites
I've never tried it myself, just throwing suggestions out there..

Is it a precision issue with the math that doesn't work out, or just not sure how to figure the math out?

Just wondering how that worked out for you, cause I'll be tackling the same problem soon too :)

BennyW

##### Share on other sites
More the latter. I am thinking one should be able to use more than one shadowmap since PSSM uses more than one shadowmap, as well as other methods that are around the net.

##### Share on other sites
MARS_999: I am using PSSM for directional lights. The viewport hack is not necessary because you can setup user clip planes for each split pass.

AndyTX: I agree. The 'trick' only works with medium-high resolution shadow maps.

## Create an account

Register a new account

• ## Partner Spotlight

• ### Forum Statistics

• Total Topics
627665
• Total Posts
2978530
• ### Similar Content

• Both functions are available since 3.0, and I'm currently using glMapBuffer(), which works fine.
But, I was wondering if anyone has experienced advantage in using glMapBufferRange(), which allows to specify the range of the mapped buffer. Could this be only a safety measure or does it improve performance?
Note: I'm not asking about glBufferSubData()/glBufferData. Those two are irrelevant in this case.
• By xhcao
Before using void glBindImageTexture(    GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format), does need to make sure that texture is completeness.
• By cebugdev
hi guys,
are there any books, link online or any other resources that discusses on how to build special effects such as magic, lightning, etc. in OpenGL? i mean, yeah most of them are using particles but im looking for resources specifically on how to manipulate the particles to look like an effect that can be use for games,. i did fire particle before, and I want to learn how to do the other 'magic' as well.
Like are there one book or link(cant find in google) that atleast featured how to make different particle effects in OpenGL (or DirectX)? If there is no one stop shop for it, maybe ill just look for some tips on how to make a particle engine that is flexible enough to enable me to design different effects/magic
let me know if you guys have recommendations.
• By dud3
How do we rotate the camera around x axis 360 degrees, without having the strange effect as in my video below?
Mine behaves exactly the same way spherical coordinates would, I'm using euler angles.
Tried googling, but couldn't find a proper answer, guessing I don't know what exactly to google for, googled 'rotate 360 around x axis', got no proper answers.

References:
Code: https://pastebin.com/Hcshj3FQ
The video shows the difference between blender and my rotation:

• By Defend
I've had a Google around for this but haven't yet found some solid advice. There is a lot of "it depends", but I'm not sure on what.
My question is what's a good rule of thumb to follow when it comes to creating/using VBOs & VAOs? As in, when should I use multiple or when should I not? My understanding so far is that if I need a new VBO, then I need a new VAO. So when it comes to rendering multiple objects I can either:
* make lots of VAO/VBO pairs and flip through them to render different objects, or
* make one big VBO and jump around its memory to render different objects.
I also understand that if I need to render objects with different vertex attributes, then a new VAO is necessary in this case.
If that "it depends" really is quite variable, what's best for a beginner with OpenGL, assuming that better approaches can be learnt later with better understanding?

• 10
• 10
• 12
• 22
• 13