Stuck in the sky…

I’ve got issues with sky since 2 days. Ocean and ground are now rendered using fragment shaders, space too. But between those two borders, sky layers were still rendered with this old fixed GPU pipeline… which started to irritate me widely. A few months ago I had the exact opposite feeling: that’s definitively just impossible to design with both techniques in mind. I decided to process to fixed pipeline’s funeral and convert almost everything to shaders. I’ll work much more quietly with only one single philosophy!

New ocean shader

Here’s my small changes to the Nvidia/Nfz original ocean shader. It’s now alpha based to obtain something less brightfull and shiny. The main issue is that I still don’t know exactly how I’ll create a nice transition between ocean and shores. Anyway that’s not something really essential at this time 😉

HLSL rules!

Texture splatting using my own shader program is now ready. I must confess I should have migrated to shaders a long time ago. I’m always afraid to have to deal with hardware incompatibilities, but benefits are huge. The same result (even better) with less texture units… and so programmable pipelines can be faster than fixed ones!! I realized too that I now have extra “space” to add further  terrain effects on a single pass in the future.

Nothing is perfect… I’d like Nyne to be able to run on aging laptops, so I’m dealing with old shader version restrictions. But that’s still simpler than the old way. Moreover, I still have plenty of data space directly on vertex… and so more improvements to come!

Alpha with fragment shader

Still working on my HLSL fragment program for terrain splatting. Above is my alpha map.

alpha    = alpha*alpha + alpha * dupCO.r * dupCO.g ;
alpha    = sqrt( alpha ) ;
alpha    = clamp( alpha , 0 , 1 ) ;

Simple process with the under laying texture to avoid a too smooth texture transition. Not perfect… but it’ll be my starting point !

Fixed pipelines s*cks

Up to now, splatting was achieved using the fixed-pipeline. But 1/ PSSM needs for itself 3 texture units so I won’t be able to integrate this on a one-pass texture. And 2/ Fixed and programmable pipelines can’t deal together… I have to say good-bye to my old beloved fixed texture unit functions and switch to a full vertex shaders solution. That’s life…

PSSM fixed!

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…

pssmSetup->setOptimalAdjustFactor(n, 0);

And that was it! Since I needed to use my split point computation… Ogre’s auto adjust was destroying all my efforts 😉