SSAO Tutorial Added Who’s for drinks?
Nov 122009

Single Pass PSSM

Single Pass PSSM

Raz0r, our internal games engine, has had directional light shadows for a long time, but the shadowmapping implementation was far from cutting edge. This has now been addressed with the addition of a Parallel-Split Shadow Mapping technology that makes directional light shadows appear pin sharp, even when used in massive worlds.

The attached pic is obviously a test scene that’s not trying to push the envelope in terms of visuals, but it does display a large outdoor environment with plenty of instancing and a nice crisp shadow on the ground wherever you look.

The method runs in a single pass (both when generating and later when reading back), storing 4 levels of splitting into the R,G,B and A channels of a standard texture at full resolution. The whole effect runs well on the DirectX 9 pipe, supporting down to shader model 2 which is our minimum spec.

Posted by rubicon at 5:04 PM

7 Responses to “Raz0r update: PSSM”

  1. Dan Rossati says:

    Good to see you guys are still going, Stuffs looking cool, have linked the occlusion tut to my coder friends to read up on.

    Dan

  2. rubicon says:

    Thanks, glad to be of service :) What are you up to these days?

  3. Dan Rossati says:

    Nothing too exciting, working as a motion graphic artist for an email marketing company atm, Making tutorial vids for their new product launch…deep joy least they bought me the adobe suit to do it :P

  4. Reload says:

    Hello!

    I’m very interested in your pssm implementation :

    Does your method support self shadowing? I can’t see any on your screenshot.

    Moreover, you’re using one 8bits channel by split which seems very low precision-wise…

    Thanks!

    Laury

  5. rubicon says:

    We use a shadowing technique called ID Buffering, which stores unique values per material group instead of writing a depth value out. This has several advantages such as only needing a single channel, it’s fast, and you get no “Peter Pan” or shadow acne or most other problems associated with depth storage.

    The downside is that you can get holes if there are >255 different batchs in your scene and if you want self-shadowing you have to put different materials on the protruding pieces.

    It’s not perfect, but the limitations can be worked around, whereas I’ve never been happy with all the fudges associated with the depth-based methods.

    Maybe one day, shadows will just work! :s

    • Reload says:

      Ok, thanks for the answer!

      I’ve used standard depth-based shadowmaps before and it’s true it can be a real hassle to get rid of all artefacts, but using back faces helps a lot if your meshes are totally closed.

      Again, thanks for your reply!

      • rubicon says:

        np. We’ll probably give depth-based shadows another run out the next time we do something that really needs it. Thanks for the tip about the back-faces.