Skip to main content
Solved

How is .nwd/.lfa file being rendered in Cognite Reveal. Is CDF already converting nwd/.lfa files lossless?

  • May 1, 2026
  • 6 replies
  • 79 views

How are .nwd and .lfa files rendered in Cognite Reveal? Does CDF already convert .nwd and .lfa files in a lossless way, without losing any node or asset metadata? Is is converted to .glb/.gltf file types as conversion output?

What happens if we use raw Three.js instead? How can we work with .nwd files in that case? Three.js doesn’t support .nwd files directly, right?

Is it necessary to convert them to .fbx or .obj formats? Wouldn’t that result in a lossy conversion, potentially causing loss of metadata, asset hierarchy, or textures? 

How do we use .nwd and .lfa files for show warnings or overlays? 

Best answer by Håkon Flatval

Yes - you can visualize time series data in Reveal, with either HTML overlays or ThreeJS-objects. We don’t have any out-of-the-box visualization tools for time series specifically, though - so the developer will have to create the HTML-based or ThreeJS-based visualization themselves.

There is a limit to many overlays you can have while staying performant (depending on how resource-heavy the visualizations are, and the client hardware). Reveal’s `HtmlOverlayTool` has a “clustering” feature that tries to automatically combine overlapping HTML overlays into clusters, but it will still require some work from the developer to handle the clustering in a sensible way. 

I’m not sure what you mean by “based on the nodeId”, but as long as you are comfortable querying CDF e.g. through the Cognite JS SDK, you have the freedom to base the visualization on any data you want.

 

Regarding 3D files; for the purpose of Reveal, 3D files that are uploaded together (i.e. in a ZIP-file) are combined to one model in the back-end before optimization. For Reveal, it all appears as one model, even if there are multiple source files. 

To render 3D models directly with ThreeJS without Reveal, you will just need to convert the 3D files into a format that ThreeJS can use. There are loaders for some common formats out there, most notably OBJ, FBX and GLTF. Conversion software from ‘.nwd’ often requires a paid license, though.

Also, note that an important part of CDF’s optimization pipeline is to partition the model in smaller chunks that are streamed to Reveal on-demand, meaning that the client does not need to download the entire model to view it. This is what makes visualizing large models on mobile devices feasible in Reveal, an advantage that would be lost by using source models with ThreeJS directly.

6 replies

  • Practitioner ⭐️⭐️⭐️
  • May 4, 2026

Hi! Thank you for your question

CAD model files like `.nwd` and `.lfa` are optimized in our backend before being output as `.glb` files for consumption in Reveal. We may simplify and introduce tiny inaccuracies to the model’s geometry as part of the optimization process, but we do not make any changes to the CAD nodes’ metadata.

As you say, I also don’t believe there is any support for `.nwd` files in Three.js, so conversion to another format may be the only viable option. I’m not intimately familiar with the `.fbx` format and whether it supports node metadata and hierarchy information at the same granularity as `.nwd`, but even if it does, I’m not sure it would be immediately usable through Three.js either, if that is the intention here.

Is the use case to show `.nwd`/`.lfa` models as e.g. warning indicators in a scene that contains other models? This could still be done by ingesting the `.nwd`/`.lfa` model files as normal 3D-models in CDF, and then selectively add and remove them in Reveal at the appropriate time and position.

 

We would like to hear more about this use case, in particular if there are important details we have missed


  • Author
  • Committed ⭐️⭐️⭐️
  • May 4, 2026

@Håkon Flatval: So, as i understood. We can add overlays in reveal based on timeseries data, What if there are large number of data/overlays. This is done using Html of threejs right? based on the nodeId?


  • Author
  • Committed ⭐️⭐️⭐️
  • May 5, 2026

@Håkon Flatval  Also, If there is a 3D of a plant is not just a single file, its is sometimes 2-3 split 3D files. How is CDF usually combining this to show as an individual file? How do we navigate between these 3D scenes/files? What all optimizations do we need to do for a 3D model to be rendered using threejs rather than reveal? I’m just curious to know and looking at the feasibility studies on three.js and 3D model rendering and different formats. 


  • Practitioner ⭐️⭐️⭐️
  • Answer
  • May 6, 2026

Yes - you can visualize time series data in Reveal, with either HTML overlays or ThreeJS-objects. We don’t have any out-of-the-box visualization tools for time series specifically, though - so the developer will have to create the HTML-based or ThreeJS-based visualization themselves.

There is a limit to many overlays you can have while staying performant (depending on how resource-heavy the visualizations are, and the client hardware). Reveal’s `HtmlOverlayTool` has a “clustering” feature that tries to automatically combine overlapping HTML overlays into clusters, but it will still require some work from the developer to handle the clustering in a sensible way. 

I’m not sure what you mean by “based on the nodeId”, but as long as you are comfortable querying CDF e.g. through the Cognite JS SDK, you have the freedom to base the visualization on any data you want.

 

Regarding 3D files; for the purpose of Reveal, 3D files that are uploaded together (i.e. in a ZIP-file) are combined to one model in the back-end before optimization. For Reveal, it all appears as one model, even if there are multiple source files. 

To render 3D models directly with ThreeJS without Reveal, you will just need to convert the 3D files into a format that ThreeJS can use. There are loaders for some common formats out there, most notably OBJ, FBX and GLTF. Conversion software from ‘.nwd’ often requires a paid license, though.

Also, note that an important part of CDF’s optimization pipeline is to partition the model in smaller chunks that are streamed to Reveal on-demand, meaning that the client does not need to download the entire model to view it. This is what makes visualizing large models on mobile devices feasible in Reveal, an advantage that would be lost by using source models with ThreeJS directly.


  • Author
  • Committed ⭐️⭐️⭐️
  • May 6, 2026

@Håkon Flatval: Also for optimization don’t we need to compress the model before making it into chunks. So that a 100mb model is of the range 2mb etc? .nwd and .lfa or any file will be converted to .glb chunks which then be rendered in Reveal based on LOD, etc?


  • Practitioner ⭐️⭐️⭐️
  • May 6, 2026

If your goal is to make the model viewable on limited hardware, then yes, chunking or compressing the model would be necessary, although you might be able to use the model directly (provided you are able to convert it to an applicable file type) in ThreeJS on high-spec hardware.

This compression and chunking to .glb files is what CDF’s backend does. It is a complicated process, and I don’t think there is any practical reason for any application to do this work on its own when CDF already does it.

Reveal’s chunk loading is currently tailored towards CDF models, which means supporting “chunked” loading of other ThreeJS objects will need extra work from the application developer as well.

As a side-note: We are strictly speaking not doing LOD, we only choose what parts of the model that should be loaded and not depending on the user’s viewpoint in the 3D space.

It would still be interesting to hear what use cases you are considering!