Using ONE_MINUS_SRC_ALPHA is the standard value for 3D graphic stuff, often producing best results. However, it causes troubles when multiple transparent shapes are visible on the same screen pixel. For closed convex 3D objects, using backface culling (solid = TRUE for geometry) helps. For multiple transparent shapes, sorting the transparent shapes helps, see TSceneRenderingAttributes.BlendingSort. Sometimes, no solution works for all camera angles.
Another disadvantage of ONE_MINUS_SRC_ALPHA may be that the color of opaque shapes disappears too quickly from resulting image (since GL_ONE_MINUS_SRC_ALPHA scales it down). So the image may be darker than you like.
You can instead consider using GL_ONE, that doesn't require sorting and never has problems with multiple transparent shapes. On the other hand, it only adds to the color, often making too bright results.
More precisely: if this is True, all shapes with transparent materials or textures with non-trivial (not only yes/no) alpha channel will be rendered using OpenGL blending (with depth test off, like they should for OpenGL).
If this attribute is False, everything will be rendered as opaque.
Setting this to False disables any modification of OpenGL blending (and depth mask) state by TCastleScene. This makes every other Blending setting ignored, and is useful only if you set your own OpenGL blending parameters when rendering this scene.
You can use this to turn on some effects related to rendering model in special modes.
When this is weNormal (default), nothing special is done, which means that model polygons are simply passed to OpenGL. Whether this results in filled or wireframe, depends on OpenGL glPolygonMode setting, filled by default.
How the wireframe effects work when Mode = rmDepth is undefined now. Just don't use Mode = rmDepth if you're unsure.
Should we use ARB_occlusion_query (if available) to avoid rendering shapes that didn't pass occlusion test in previous frame. Ignored if GPU doesn't support ARB_occlusion_query.
True may give you a large speedup in some scenes. OTOH, a lag of one frame may happen between an object should be rendered and it actually appears.
When you render more than once the same instance of TCastleScene scene, you should not activate it (as the occlusion query doesn't make sense if each following render of the scene takes place at totally different translation). Also, when rendering something more than just one TCastleScene scene (maybe many times the same TCastleScene instance, maybe many different TCastleScene instances, maybe some other 3D objects) you should try to sort rendering order from the most to the least possible occluder (otherwise occlusion query will not be as efficient at culling).
Should we use ARB_occlusion_query (if available) with a hierarchical algorithm to avoid rendering shapes that didn't pass occlusion test in previous frame. Ignored if GPU doesn't support ARB_occlusion_query.
True may give you a large speedup in some scenes.
This method doesn't impose any lag of one frame (like UseOcclusionQuery).
The algorithm used underneath is "Coherent Hierarchical Culling", described in detail in "GPU Gems 2", Chapter 6: "Hardware Occlusion Queries Made Useful", by Michael Wimmer and Jiri Bittner. Online on [http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter06.html].
View only the shapes that were detected as visible by occlusion query in last Render.
Use this only after render with UseHierarchicalOcclusionQuery. TODO: for UseOcclusionQuery I would also like to make it work, for now not done as frustum information is gone. This will disable actual occlusion query, instead reusing results from last occlusion query done when this debug flag was False.
Useful to quickly visualize the benefits of occlusion query.