How does Order Independent Transparency Accelerate Creo 2.0

Written by Tony DeYoung and Olivier Zegdoun

Order independent transparency or “OIT” in computer graphics programming terminology denotes any technique that can correctly render overlapping semi-transparent objects without having to sort them before they are being rendered. Rendering semi-transparent objects has always been a problem because the blending operation is order dependent: when a semi-transparent fragment is rendered, the underlying color (i.e. the background) is crucial for the final color to be correct.

Previous known method including face sorting, triangle sorting or depth-peeling (multi-pass) are not totally accurate and have a huge burden on the rendering pipeline and requires preparation on the CPU side. In addition, this work is view orientation dependent and need to be redone every time the view point changes. This results in bottlenecks in performance as well as issues with accuracy.

The OIT technique implemented in PTC Creo Parametric 2.0 on AMD FirePro graphics allows for pixel accurate rendering of overlapping semi-transparent objects without having to sort them before they are being rendered, providing up to 9 or 10 times performance improvement when rendering transparency in Creo Parametric 2.0 versus blended rendering in PRO/Engineer Wildfire5.0. OIT in Creo 2.0 is fully implemented on the AMD FirePro GPU so it totally frees the CPU from multiple render passes or face sorting.

image

This implementation of OIT is also very accurate since the actual sorting that happens on the GPU is done per fragment. It has a very low impact on the existing rendering pipeline and is therefore very easy to integrate in an existing rendering engine.

image

The technique uses standard ARB OpenGL 4.2 extension like Atomic Counter and Shader Image load/store which enables access to texture buffer directly from the shader.

The technique is based on the usage of an A-buffer, a simple list of fragments per pixel, in its simplest from as a linked list of fragments per pixel. First, all primitives are rasterized to the A-Buffer, writing some color value and some depth value (Red- Green-Blue-Alpha-Depth), one index buffer (RAT) is used to keep the number of fragments in this pixel. Finally, a full screen shader pass will sort that A-Buffer according to the depth value and do the blending for each fragment according to their sorted indices.

image

Download PDF White Paper: AMD + PTC Innovation in 3D CAD workflows

Check out this video demonstrating the level of acceleration achieved.

Comments

There are no comments for this entry yet.


Add your comment

Note: All comments are moderated for spambots so there will be a posting delay.
Your email address will not be published.

Anti Spam: Please enter the word you see in the image below:



Close