Project: OCCT visualization tools
Historically, the visualization component was included into OCCT, it was a natural choice in early 1990's.
In spite of the fact that nowadays there is a number of powerful 3D visualization solutions available on the market, OCCT 3D visualization component still evolves.
It is simple and compact, it includes native support for OCCT topological data, and it uses hardware acceleration for rendering large geometry. All this makes it a reasonable choice for fast development of OCCT-based applications.
As many commercial customers use OCCT visualization capabilities, the evolution of this component is driven by commercial development requests and technical ideas coming from OCC staff and the community.
- MeshVS redesign for better scalability on big mesh data sets.
- Multi-texturing and Bump textures.
- Introduction of visualization LODs.
- Order-independent transparency.
- 2D grid improvements.
Programmable rendering pipeline
Programmable rendering pipeline (GLSL programs) is now used by default, although deprecated Fixed-Function pipeline (FFP) is still available for compatibility.
This migration opens the door for new advanced visualization techniques in future - some of them have been introduced within previous releases (e.g. Anaglyph and Row-interlaced stereoscopic output).
New tool has been introduced - AIS_Manipulator, providing convenient interface for object transformation (translation, rotation and scaling).
Transformation-persistent presentations now correctly handled by picking logic, allowing usage of this and similar interactive objects with size fixed in pixels (zoom-persistence).
Perspective projection has been also improved and now correctly renders transformation-persistent objects - including Trihedron presentation in the 3D View corner.
New highlighting style interface has been introduced, extending highlighting properties with transparency and material aspect.
The shaded highlighting now preserves lighting, which improves presentation.
Clipping and Capping planes
Clipping planes functionality has been improved to inherit material properties of intersected presentation. Performance improvements have been implemented as well.
Tiled view dump
The 3D viewer image dump functionality has been extended with capability to save a tile (sub-image) of the view with specified resolution.
This allows to avoid memory limit issues (first of all - GPU memory for off-screen buffers) saving image with overall resolution higher then it was possible before.
Elimination of global states
Visualization toolkits TKV3d and TKOpenGl have been finally cleaned-up from remaining global variables in the code.
Therefore, it is now possible creating independent viewers (e.g. having dedicated instance of OpenGl_GraphicDriver) in different threads without memory data races.
Of course, there is no intent to make these classes implicitly thread-safe - therefore it is up to application to ensure thread-safety while writing using multiple threads.
Combination of Ray-Tracing and Rasterization approaches has been improved by eliminating Depth test issues as well as interactivity issues.
Photo-realistic Path-tracing engine has been improved by providing more precise lighting computations within physically-based material definition.
New techniques have been implemented improving raw rendering performance, adaptive performance (less noise within the same number of frames) and introducing special interactive mode.
- Path Tracing. Ray-Tracing functionality has been extended by new non-interactive photo-realistic renderer, with global illumination, soft shadows, color bleeding and some other features.
The rendering of 2D onscreen objects (using pixel coordinates) has been redesigned. It is now possible to use AIS_InteractiveObject and AIS_InteractiveContext instead of deprecated API (removed in OCCT 7.0.0).
Using unified API for rendering 3D and onscreen presentations simplifies code support. It also treats the performance problems caused by design issues and inefficiency of old API for onscreen presentations.
- The classes relationship between low-level TKOpenGl and high-level TKV3d classes has been revised. As result, the classes from package Visual3d has been removed (functionality has been moved to the classes of other packages) and OpenGl classes now have strong relationship (inheritance) from Graphic3d.
- Introduced built-in support of image anti-aliasing using MSAA offscreen buffers
- The performance of interactive detection algorithms has been dramatically improved by using BVH accelerated structures.
- Visualization core now supports the core profiles of OpenGL 3.1+ and OpenGL ES 2.0+. Fixed-function rendering pipeline has been deprecated.
- The global non-constant variables have been eliminated from TKOpenGl toolkit for thread-safety.
- The isolines presentation builder now supports the flag for mapping isocurves onto triangulation, which eliminates visual artifacts when displayed concurrently with shaded presentation.
- Visualization now supports stereoscopic output for row interlaced and anaglyph displays.
- Prototyped Direct3D sample using OpenGL-Direct3D interoperability layer for integrating OCCT 3D viewer into an existing Direct3D rendering context under Windows.
- High-level API has been refactored (TKV3d library - including AIS, V3d, Visual3d, Graphic3d, PrsMgr packages) to make it more intuitive, easy-to-use and to reflect recent redesign changes in TKOpenGl library.
- The visual attributes of standard materials have been revised to make the visual results more realistic and closer to the user expectations. The list of material attributes has been extended by refraction support.
- Step-by-step improvement of the OCCT real-time ray tracer to make it a ready-to-use and attractive alternative to the classical OpenGL renderer, by adding support for textures, lines, markers and text, as well as some advanced visual effects (soft shadows and refraction)
- "Immediate mode" has been redesigned to use FBO.
- Improving BRep visualization (AIS_Shape and tool classes): taking into account topological sharing and thus avoiding duplication of tessellation data, building the wireframe representation in an efficient way coherent with shaded one
In general, the tasks currently in progress can be tracked through OCCT Mantis using "OCCT:Visualization" issue category. Most urgent issues are normally scheduled for the next OCCT release.
How to help
Everyone is welcome to share ideas, comments, proposals regarding evolution of the OCCT visualization components using the forum or Mantis. Contributions to code, help in testing on different platforms will be appreciated. If you have specific requirements or urgent needs, consider ordering OCC support services.
Here are few stereoscopic snapshots taken from with development versions of OCCT examples.
A snapshot showing sample results of the capping algorithm:
Snapshots demonstrating implemented and experimental OCCT ray tracer capabilities:
Samovar BRep model rendered with reflections, sharp shadows and anti-aliasing
Drill BRep model rendered with reflections, sharp shadows and anti-aliasing
Ambient occlusion sample
Soft shadows sample
Rendering with light refraction support (simulating glass)