(a bit more than a technical demo this time)
After finishing the work on shadows, it was time to play with the different materials possibilities.

To explain a bit what you are seeing:

  • at the top left, the 3 textures containing the shadow maps;
  • transparent walls (wireframes) are not take into account in the shadow map because they are using a specific material called invisible_for_shadows, i think the name is obvious;
  • the foggy volume above the ground is made of a stack of 25 thin boxes, using another cool material: solid_shadows_no_cast, they receive shadows but don’t cast them;
  • and the balls, using the solid_shadows material and having the standard behavior, but in wireframe, implying that fog is hollowed when you look through them.

A cool feature is the ability to set the alpha of the shadows material per material. For the jelly fog, the material is looking like this:

material screen_mat : solid_shadows_no_cast
{
  technique
  {
    pass standard
    {
      diffuse 0.6 0.7 0.95 0.2
      emissive 0.2 0.3 0.45 0.4
      depth_write off
      scene_blend alpha_blend
    }
    pass pssm
    {
      fragment_program_ref ShadowsPssm_pix
      {
        param_named shadow_alpha float 0.2
      }
    }
  }
}

The speed control over the physic simulation (when everything freeze) is modifying the time multiplier of bullet. The call is looking like this:

polymorph::PBullet::time_multiplier(0.85);

Complete projects is accessible in the engine, under samples/0.1/example.pssm_shadows.

I need to rest a bit, it has been a harsh road to get this packed. The last part of the job is to ensure the compatibility low opengl versions!