Quite satisfied! I’m almost sure I won’t be able to achieve PSSM texture shadows with hundreds/thousands of trees on a single scene. I decided to add here some ground shadow using vertex normals CPU computation. Result is a GPU free shadow on the whole map. I still have some issues precalculating the exact position of future trees, and shadows are nothing but blured spots… but it should fit quite enough for distant shadows, and for low-end GPU cards.
F*cking f*ck! My PSSM is now ready. It was a pure headache to fix it. Ogre built-in function are great…
Ogre::PSSMShadowCameraSetup* pssmSetup = new Ogre::PSSMShadowCameraSetup();
…but the downside (for me) is tha it makes more difficult to understand how the whole thing works. After hours searching WHY my shadow textures were hidden depending on camera’s angle… I finally get that there were default mechanisms against me…
And that was it! Since I needed to use my split point computation… Ogre’s auto adjust was destroying all my efforts 😉
1- Stencil: I need to fix shadows. Until today, I had great tight shadows… but… stencil shadows. And here, since sun’s light is moving according to daytime, it’s completely, irremediably, impossible to ask any CPU to generates stencils (I tried… and rendering dropped down from 180 to an absurd 12 FPS).
2- Texture: texture based… not much better. Standard texture shadows do retro-projection, that’s nothing but a hack. Not a big issue in box space like rooms, or in a scene where light comes from above… but the main goal is to place shadows on cities’ buildings.
3- Z-depth: Shaders depth shadow. Well that’s the picture above. On massive scale scenes like Nyne does there is no more left than 4×4 pixel for closest objets on a 1024×1024 texture. And I do not plan to use 8192² alpha texture (65 Mb!!) to get a poor 32×32 definition shadow.
4- PSSM: at the end of the day, I can’t skip using parallel split shadows (PSSM). The main idea is to use only a couple of textures to isolate closest objets which need detailed shadows, and further objets. This idea is pretty smart…
A quite complete Gems3 paper: http://http.developer.nvidia.com/GPUGems3/gpugems3_ch10.html