CAD viewer fails to load large assemblies, browser times out during rendering

Viewing large CAD assemblies in the web viewer causes browser timeouts and crashes. Assemblies with 500+ components fail to load completely, blocking our design review process.

The viewer starts loading the assembly but freezes around 40-50% progress. Browser eventually shows ‘Page Unresponsive’ error:


Viewer Status: Loading assembly A-98765
Components loaded: 247 of 523
Memory usage: 1.8GB
Browser: Chrome - Page Unresponsive

Smaller assemblies (under 200 components) load fine. We need to review these large assemblies for design verification. Is there a way to configure progressive loading or increase memory allocation for the viewer?

Large assembly viewing requires configuration at multiple levels - server, viewer, and client. Here’s the comprehensive solution:

Large Assembly Rendering: The viewer’s architecture loads assemblies in a single pass by default, which exhausts browser memory on complex models. Enable progressive loading by configuring these properties in wt.properties:


wt.viz.progressiveLoad.enabled=true
wt.viz.progressiveLoad.threshold=200
wt.viz.progressiveLoad.chunkSize=50

This loads assemblies in chunks of 50 components once the total exceeds 200 parts, preventing memory exhaustion.

Viewer Memory Settings: Increase the viewer’s server-side memory allocation to handle large model processing. The visualization worker needs adequate heap space to generate representations:


wt.viz.worker.maxMemory=4096
wt.viz.worker.initialMemory=2048
wt.viz.cache.maxSize=1024

This allocates 4GB max heap to the visualization worker and 1GB for the representation cache, ensuring smooth processing of large assemblies.

Progressive Loading: Configure the viewer to use level-of-detail (LOD) representations and occlusion culling. Edit the viewer configuration XML (viewerConfig.xml in /Windchill/codebase/wt/viz/):

<RenderingOptions>
  <LOD enabled="true" levels="3"/>
  <OcclusionCulling enabled="true"/>
  <SimplificationThreshold components="300"/>
</RenderingOptions>

The viewer will automatically use simplified geometry for components based on viewing distance and visibility.

For the client side, enable lightweight representation mode in the viewer toolbar - this loads proxy geometry instead of full CAD models. The proxies are 80-90% smaller in file size but maintain visual fidelity for review purposes.

Additionally, ensure your visualization worker is generating tessellated representations (PVZ files) automatically. These are optimized for web viewing:


wt.viz.autoGenerate.enabled=true
wt.viz.tessellation.quality=medium

Medium quality provides good visual detail while keeping file sizes manageable.

Finally, implement assembly structure optimization. Large assemblies should be divided into logical sub-assemblies that can be loaded independently. Configure the viewer to support context-based loading where users can select which sub-assemblies to load for their review session.

After these changes, restart the method server and visualization workers. Test with your 500+ component assemblies - they should now load progressively with the first visible components rendering within 30-45 seconds.


This draft is based on general Windchill knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

The web viewer has memory limitations that vary by browser. Chrome typically caps at 2GB per tab. For large assemblies, you need to enable progressive loading mode which loads visible components first. Check the viewer configuration settings in your Windchill preferences.

We dealt with this issue extensively. The viewer’s default behavior loads the entire assembly structure before rendering anything, which causes memory exhaustion on large models. You need to adjust multiple settings: enable level-of-detail rendering, increase the viewer’s memory allocation in wt.properties, and configure the assembly simplification threshold. Also consider using the lightweight representation option for review purposes rather than loading full geometry.

Thanks. Where exactly are the viewer memory settings in wt.properties? I found some visualization properties but nothing specifically about memory allocation. Also, what’s the lightweight representation option and how do we enable it?

Look for properties starting with wt.viz.* in wt.properties. The key ones are wt.viz.maxMemory and wt.viz.progressiveLoadThreshold. Set maxMemory to at least 2048MB and progressiveLoadThreshold to something like 250 components. This tells the viewer to use progressive loading for assemblies over 250 parts. You’ll also want to enable occlusion culling to improve rendering performance.

Don’t forget about the client-side rendering settings. The browser itself needs adequate resources. We recommend increasing Chrome’s memory limit using command-line flags when launching the browser. Also, the viewer can generate simplified representations on the server side before sending to the browser, which significantly reduces the data transfer and rendering load. Check if your visualization worker is configured to create LOD representations automatically.