This is an old revision of the document!


Transparency

Transparency rendering is a huge topic in 3D development. A great deal of effort has been put into finding a perfect solution to the problem of correctly displaying transparency.

The most common but most bad solution is transparency sorting. Delphi FMX uses this algorithm, by sorting elements in z-order to camera position.

Take a further read at: https://www.khronos.org/opengl/wiki/Transparency_Sorting

The result is incorrect, which some of you already found out by using multiple components of a TTextLayer3D. FMX renders artifacts if rendering order is not correct which leads to bad results.

Order-Independent Rendering

With v0.8.1.x we implemented weighted blended order-independent transparency.

Link: http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html

This solution is more complex but leads to much better results, without any performance costs. In basically it renders all opaque objects at first. Afterwards it renders all translucent objects into a buffer by a specific algorithm. In the end all is merged together into the final image.

By implementing this method some significant changes have been made to Gorilla3D and to the usage of 3D elements. FMX already provides the “Opaque” property, but was not really used until now.

Usage

When building apps with transparent elements you now have to take care of the “Opaque” property. If you expect an object to be transparent (by color or by opacity value), you have to set Opaque to false. Is an object not transparent, you should leave Opaque to true. The “Opaque” property decides if an object is selected for opaque or translucent rendering inside of the rendering pipeline.

Advantages

Weighted Blended Order-Independent Transparency is fast in rendering and leads to good results without any performance costs. In deed it's a bit faster than by transparency sorting, but due to management overhead the results are quite even. As this is a stochastic algorithm, the limitations are crucial.

Limitations

Weighted Blended Order-Independent Transparency do not know zero transparency colors. This means, if you expect a nearly not-transparent object to be renderedm, it may lead to overlay problems. Declare an object as “Opaque := false” when you deal with an opacity/alpha value of less than 0.75.