I am working on a graphics engine designed to be used in flight simulators. It therefore has to feature an advanced weather rendering system with clouds you can fly through.

For this, I implemented a particle system that renders a few hundred thousand billboards scattered in layers and in a 120km radius area. Until now, these clouds were my only transparent objects and I was relying on sorted alpha blending to get the desired result.

My engine is making some progress and I now need to be able to render different types of transparent objects. Of course, I cannot rely on sorted alpha blending anymore since these objects are too different to be handled with a uber shader.

In search for alternatives, I tried to implement a few order independent transparency techniques with inconclusive results :

  • Weighted Blended OIT : not working well with very contrasting objects and almost opaque objects. Hard to find a visibility function that can handle all kind of objects.

  • Linked List OIT / Adaptive transparency : result quality is very good but efficiency depends too much on scene complexity and a cloud rendering system involves way too much layers/overdraw.

Most OIT techniques are illustrated with simple to moderate complexity scenes. I feel like I am in a dead-end and I'm looking for new ideas.

Is there a different OIT technique that I am not aware of and that can be appropriate for such a case ?

Are there cloud rendering techniques or rendering pipeline designs that can help to solve this problem ?

Thank you for your time and help.

  • $\begingroup$ I don't understand how having other types of translucent objects makes it impossible to keep using sorted alpha blending. Could you elaborate? $\endgroup$ Commented Oct 13, 2017 at 14:53
  • $\begingroup$ If you have 10,000 particles in a single draw call, you can sort them and do a single draw call. If you then add 5 other transparent objects, you then have up to something like 12 draw calls since you need to draw all the objects in the correct sort order. It's possible but painful and likely costly! $\endgroup$
    – Alan Wolfe
    Commented Oct 13, 2017 at 17:14
  • $\begingroup$ related question: computergraphics.stackexchange.com/questions/5618/… $\endgroup$
    – Alan Wolfe
    Commented Oct 13, 2017 at 17:14
  • $\begingroup$ Ah I see what you mean. I suppose you could partition Z space to reduce the error due to local incorrect order. $\endgroup$ Commented Oct 13, 2017 at 17:21
  • 1
    $\begingroup$ Have you thought of using volume rendering for this? It seems to me like a more sensible approach than your current one $\endgroup$ Commented Oct 16, 2017 at 12:57


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.