NestedTransparentSurfaces         Nesting transparent surfaces using culling tricks

Nesting transparent surfaces

I thought about this today (someone asked it on IRC) and I think it is an interesting idea to have multiple transparent 'shells' nested within each other (an example is multiple transparent spheres, or a spaceship with transparent windows inside a transparent shield) This is not possible with the normal depth sorting but I think you could do some trick with culling:

  • First set culling so that triangles facing away from the viewer are drawn
  • Draw the 'shells' from outside to inside
  • Then set culling so that triangles facing the viewer are drawn
  • Draw the 'shells' from inside to outside


This could be represented in Ogre by using a custom Entity (set of renderables) that uses two materials, one material with front culling (cull_hardware anticlockwise) and one with back culling (cull_hardware clockwise). The renderable would have subrenderables that are 'shells', ordered by their inside-outside relationship.
The renderables would be queued in this order:

  • Material cull anticlockwise
    • Most outside renderable
    • ...
    • Most inside renderable
  • Material cull clockwise
    • Most inside renderable
    • ...
    • Most outside renderable


This may be achieved by perturbing the getSquaredViewDepth a bit for each of the renderables so that the sorting places them in this order.