Graphics Area Display Data
This topic explains how display data refinement works in Onshape and what display data indicators are shown when a user navigates between tabs and in a Part Studio and Assembly tab.
When refining the Part Studio or Assembly graphics area, Onshape starts by generating a complete list of parts or instances visible to the camera. Each part's tessellation level is reset to the unloaded state (bounding box), and a search is initiated for the highest feasible tessellation level for each part in view.
Parts are sorted by size and distance from the camera. Size influences visual error and the desired tessellation level. Selected parts are assigned fine tessellation levels regardless of distance, but they are only refined to that level if memory allows.
During each refinement pass, tessellation levels are incrementally increased until either:
-
The desired level is reached
-
The memory limit is reached
If sufficient memory is available, increasing tessellation levels ceases once all parts reach their desired levels. Only parts necessary for optimal display are refined to the highest possible level.
If memory is insufficient, refinement ceases when the memory limit is reached. Because parts are scanned level-by-level, Onshape ensures that as many parts as possible are loaded before refining any to the highest resolution.
Once initial tessellation levels are determined, display data is requested from the mod service or loaded from the local cache, if available.
Dynamic refinement during interaction in the graphics area
Whenever the camera is rotated, zoomed, or panned, desired tessellation levels are recalculated. This may require downgrading some parts to free memory for newly visible or selected parts.
Receiving new display data can alter the visual occlusion of parts in the graphics area. The process of determining desired tessellation levels is repeated, as previously hidden parts may become visible and require refinement.
Nested and occluded parts
A loop of loading/unloading refinement can happen when a hidden part is unloaded and its bounding box becomes visible again, especially in nested cylindrical assemblies. For example, the bounding box of an internal cylinder may protrude from the outer shell.
To prevent this, Onshape tracks visibility states at various tessellation levels and avoids unloading a part that would cause a loop. However, this process takes time and may result in repeated refinement cycles during camera movement or scene editing, causing bounding boxes to flicker.
The following refinement indicators appear at the bottom left corner of the graphics area:
-
While refinement is in progress:
-
When a user moves the camera view:
-
When refinement is complete and some parts remain unloaded:
Refinement is triggered by:
-
History changes
-
Camera movements
-
User selections
User selections override size and distance considerations, setting the desired tessellation level to Fine.
There are five tessellation levels:
-
Unloaded (Bounding Box),
-
Coarse
-
Medium
-
Fine
-
Extra Fine
Onshape does not generate all levels of detail for all parts all of the time. By default, Coarse, Medium, and Fine levels of detail for a part are generated. However, if the Part Studio is sufficiently complex, Onshape may restrict the number of automatically-generated levels of detail to Coarse and Medium, or only Coarse.
The display data size increases exponentially:
-
Coarse: 1x
-
Medium: 10x
-
Fine: 100x
Therefore, 1 GB of Coarse data could require up to 100 GB at Fine resolution.
If sufficient memory is available, loaded parts are not downgraded. Unloading only begins when the memory limit is reached and higher-priority parts need refinement.
For more information on setting and viewing tessellation quality, see Performance Panel and Specifying tessellation quality of parts.
Memory optimization and visibility management
Parts outside the camera frustum or occluded by other parts are eligible for unloading and are displayed as bounding boxes. This allows zooming into specific parts or using Section view to exclude unnecessary parts, which frees up memory for refinement.
Displaying large assemblies does not require loading all display data. Only parts visible to the camera or selected by the user are loaded.
Creating a Section view exposes internal parts, which are then refined. The actual display data loaded into the graphics area is often a fraction of the total data required to display the entire assembly.
Memory constraints
Memory constraints are in place to avoid exceeding the browser's per-tab memory limit.
A challenge occurs when the total volume of visible bodies, even at coarse resolution, exceeds available memory. In these cases, parts remain visible as bounding boxes, which can be misinterpreted as an error.
This typically happens due to:
-
Loading many closed composites
If the size is large enough that only one composite can be loaded at a time, the average closed composite size is reduced, and partial loading strategies are used. For example, a sea container may contain many enclosed parts, but users may only need to see the outer shell. The container can be broken into multiple closed composites, or the closed composite's individual constituents may be cached and refined.
-
A wide panoramic view exposing many parts.
In panoramic views, priority is given to loading parts closest to the camera and leaving distant parts visible as bounding boxes.
Cache
When display data is loaded from cache, the memory limit is respected, and the data is fetched at the highest available tessellation, without considering the camera view. Once the assembly is loaded, the camera position is applied. Some parts may be unloaded so others can be refined.
Similarly, when display data is loaded from the mod service, all data may be loaded at coarse resolution. Hidden parts are then unloaded, and visible parts refined.
Tab switching
When switching between tabs (for example, editing a Part Studio and then opening an Assembly), the display data is calculated for the Part Studio first. If it is at a fine resolution, it may consume the available memory, leaving no space for other parts. These other parts appear as bounding boxes that trigger a refinement cycle, downgrading the Part Studio and refining other Part Studios in the Assembly.
-
Create Display states and/or Named views for your assemblies to avoid triggering display data refinements.
-
Setting a coarser tessellation setting for your parts/instances helps avoid unnecessary data refinements.
-
When View in high quality mode is enabled, Onshape generates all levels of detail on-the-fly, based on viewing conditions (up-to and including Extra fine).
-
Higher level of detail (resolution) is provided for parts when they are zoomed into view. For parts where a higher level of detail does not exist (for example, with imported data that is capped at a Coarse refinement), zooming into the part now provides a higher degree of refinement. Current known limitations:
-
Collaborator actions can sometimes cause the resolution to drop to Coarse and then come back up to a more refined state.
-
Parts that are transparent (isolated or made transparent) are refined.
-