Differences
This shows you the differences between two versions of the page.
Next revision | Previous revisionNext revisionBoth sides next revision | ||
transparency [2020/01/09 09:19] – created admin | transparency [2020/01/09 09:41] – [Limitations] admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Transparency ====== | ====== Transparency ====== | ||
+ | |||
+ | __Version: | ||
Transparency rendering is a huge topic in 3D development. | 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 | + | A great deal of effort has been put into finding a perfect solution to the problem of correctly |
The most common but most bad solution is transparency sorting. | The most common but most bad solution is transparency sorting. | ||
Line 10: | Line 12: | ||
[[https:// | [[https:// | ||
- | The result is incorrect, which some of you already found out by using multiple components of a TTextLayer3D. FMX renders artifacts if rendering | + | The result |
+ | |||
+ | Many other methods also have their difficulties in incorrectness, | ||
+ | * Depth Peeling by A-Buffer | ||
+ | * Depth Peeling by linked lists | ||
+ | * Moment-Based OIT | ||
===== Order-Independent Rendering ===== | ===== Order-Independent Rendering ===== | ||
Line 35: | Line 42: | ||
==== Limitations ==== | ==== 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. | + | === Transparency-Limit === |
- | Declare an object as " | + | Weighted Blended Order-Independent Transparency do not know zero transparency colors. This means, if you expect a nearly not-transparent object to be rendered, it may lead to overlay problems. Declare an object as " |
+ | |||
+ | === OpenGL Version === | ||
+ | Weighted Blended Order-Independent Transparency is only available for OpenGL v4.2+ and OpenGL es v3.2+. Therefor on Windows platform everything should work fine. This limitation may lead to difficulties on Android platform. **Since OpenGL es 3.2+ is only available since Android 5, we have to configure the NDK to a minimum API level of 21**! | ||
+ | On Delphi 10.3.3 you don't have to change anything since it is configured to API level 22 by default. But for older versions we have to change it. | ||
+ | In the end this will lead to a minimum version of Android 5. Older version will not work with your app anymore! | ||
+ | |||
+ | |||
+ | ==== Components ==== | ||
+ | |||
+ | Gorilla3D components are all able to handle the weighted blended order-independent transparency rendering, **but Delphi FMX objects are not**! | ||
+ | |||
+ | Because there is no general way of intersecting FMX 3D components in rendering, we have to add to some code to **each translucent 3D component** used. | ||
+ | |||
+ | === Inheritance === | ||
+ | |||
+ | <file pascal> | ||
+ | uses | ||
+ | FMX.Types3D, | ||
+ | FMX.Objects3D; | ||
+ | |||
+ | type | ||
+ | TMyCube = class(TCube) | ||
+ | protected | ||
+ | procedure Render(); override; | ||
+ | end; | ||
+ | |||
+ | implementation | ||
+ | |||
+ | procedure TMyCube.Render(); | ||
+ | begin | ||
+ | // if WBOIT rendering is used and we have an opaque object, we need to | ||
+ | // disable ZWrite but allow DepthTests -> this is not possible by FMX | ||
+ | if (not Opaque) and (ZWrite) then | ||
+ | begin | ||
+ | Context.SetContextState(TContextState.csZWriteOff); | ||
+ | Context.SetContextState(TContextState.csZTestOn); | ||
+ | end; | ||
+ | |||
+ | inherited; | ||
+ | end; | ||
+ | </ |