(GLSL) Omni shadow blur filter revealing seams

I’ve been working on soft shadows. I am getting good results for Spot and Directional lights, but not point lights. I know why too. Point lights use 6 different cameras to achieve omni-directional shadows. This works really well most of the time, but when I’m blurring the shadows it reveals the seams where the edges of the different depth textures meet.


Point Light

Directional Light

3 Likes

We’ll cover cascading shadow maps shortly, have patience

Which space are you doing the blurring in?

Point-lights and directional lights (if more than 1 cascade) atlas their individual tiles. In the case of cube-maps that’s what the indirection cube is for - finding the tile. So you can’t blur or dither in shadow-texture-space without the risk of crossing the tile boundaries.

The directional light cascades have some extra fill / waste space (from frustum fitting) that would make the problem less readily presented, it’s probably still there though if cube-maps are doing it.

I guess we could use the same technique for blurring skyboxes?

waits forever to respond Welp, I don’t think I actually ever read this until now. I get what you are saying though, I wasn’t sure there was another way though. I HAVE been blurring in texture space. Is there another way to do it? I’m using pretty standard PCF filtering now.

You could see if this approach will work for you. If I had to guess, you could even create the cubemap that way from the start by increasing the field of view of each of the 6 cameras, though you’d have to make sure everything else using the cubemap before you correct for that can handle the difference.

Was looking at something written about Tesseract’s omnidirectional shadows and it looks like they do exactly what you are suggesting to deal with the seams issue. http://tesseract.gg/renderer.txt