3D Dataset Visualization Overview

Deborah Schmidt
Head of Helmholtz Imaging Support Unit, MDC Berlin
Sep 22, 2026
Slides available at https://ida-mdc.github.io/workshop-visualization/2026-workshop/overview/

What do you see?

3D is our natural habitat. Reading shape, depth and occlusion from a moving view is something we all do continuously and without effort. Let’s take advantage of this by rendering volumetric scientific datasets in 3D, so we can read them best.

Motivation

Purpose of visualization

  • To understand - comprehend a dataset in all spatial dimensions at once.
  • To learn - visualize specific features to draw conclusions from.
  • To share and tell - discuss your work (and your data) with and beyond scientific circles.

Motivation

From 2D to 3D: Adding depth

Volume slice
  • Occlusion
  • Shading and shadows
  • Perspective
  • Motion parallax
  • Stereo / VR
what adds depth
3D Visualization

3D Datasets - Data Types

Which axes does your data have?

  • X, Y, Z - the three spatial axes. This is the part that makes it 3D. Also called width, height, and depth.
  • C - channels: stains, wavelengths, labels.
  • T - time: the same volume recorded at different time points.
  • 3D in this workshop refers to the three spatial axes.

3D Datasets - Data Types

Voxels

  • Grid-based data structure: Voxels are values at every position in a discrete block

  • This enables us to look inside any structure in the grid

  • Watch for resolution, and whether it is isotropic or anisotropic

  • Formats TIFF / OME-TIFF, OME-Zarr, HDF5 / N5, NIfTI, NRRD, DICOM, MRC, vendor formats (CZI, LIF, ND2, IMS, LSM), NetCDF, …

3D Datasets - Data Types

Meshes

  • Points in space joined into triangles, describing a surface

  • Quality metrics:

    • watertight: no holes, so the surface encloses a volume
    • manifold: every edge is shared by exactly two triangles
    • normals facing outward
  • Formats STL, PLY, OBJ, glTF / GLB, VTK / VTP

3D Datasets - Data Types

Point Clouds

  • Carries positions plus attributes; no connectivity

  • Drawn as primitives: a dot , **square, or a splat (a soft oriented disc that blends with its neighbours into a surface)

  • The density of the points will determine how well one can estimate a surface

  • Formats LAS / LAZ, COPC, E57, PLY, plain XYZ / CSV

3D Datasets - Data Types

Vector Fields

  • Carries a direction and a magnitude per location

  • Can be stored like voxels as a multi-channel volume

  • The magnitude can for example represent flow, displacement, or diffusion

  • Glyphs show directions for individual points; streamlines show where the field leads

  • Formats VTK / VTI / VTU, NetCDF, multi-component NIfTI, OME-Zarr or HDF5 with a component axis

3D Datasets - Sources in Science

Microscopy

  • Examples: confocal, light-sheet, electron microscopy, histology

3D Datasets - Sources in Science

Tomography

  • Examples: clinical CT, micro-CT, synchrotron tomography, electron tomography, MRI

3D Datasets - Sources in Science

Photogrammetry

  • Examples: drone survey, handheld and phone capture, multi-camera rigs

3D Datasets - Sources in Science

Range scanning

  • Examples: terrestrial laser scanning, airborne LiDAR, structured light, time-of-flight cameras

3D Datasets - Sources in Science

Echo and wave methods

  • Examples: seismic reflection, sub-bottom profiling, sonar, ground-penetrating radar, ultrasound, imaging radar (SAR)

3D Datasets - Sources in Science

Simulation

  • Examples: CFD, molecular dynamics, finite elements, climate models

Rendering Pipeline

How do we get from 3D data to a picture on a screen?

--- config: flowchart: wrappingWidth: 255 --- flowchart LR M@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/mesh.svg", label: "Mesh", pos: "b", w: 68, h: 68 } P@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/points.svg", label: "Point cloud", pos: "b", w: 68, h: 68 } F@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/vectors.svg", label: "Vector field", pos: "b", w: 68, h: 68 } G@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/glyphs.svg", label: "Glyphs, streamlines", pos: "b", w: 68, h: 68 } T@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/primitives.svg", label: "Primitives", pos: "b", w: 68, h: 68 } R@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/rasterize.svg", label: "Rasterize", pos: "b", w: 68, h: 68 } S@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/shade.svg", label: "Shade", pos: "b", w: 68, h: 68 } V@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/voxels.svg", label: "Voxels", pos: "b", w: 68, h: 68 } RM@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/raymarch.svg", label: "March a ray", pos: "b", w: 68, h: 68 } PX@{ img: "/workshop-visualization/2026-workshop/icons/pipeline/pixels.svg", label: "Pixels", pos: "b", w: 68, h: 68 } M --> T P --> T F --> G G --> T T --> R R --> S S --> PX V --> RM RM --> PX V -. "isosurface" .-> T

Rendering Pipeline

Terms which are helpful to know

Some terms come up repeatedly in the context of 3D rendering:

  • Shader - a small program that runs on the GPU, once per vertex or once per pixel.
  • Rasterization - for each triangle, which pixels does it cover? The step that maps freely positioned 3D objects onto a raster.
  • Ray casting - for each pixel, send a ray into the scene and read what it passes through. Volume rendering is this.
  • Ray tracing - ray casting plus secondary rays, which is where reflections and shadows come from.

How to pick a visualization approach

Questions to ask

  1. Explorative or reproducible - clicking, or scripting
  2. How accessible - what does your reader have to download and install
  3. Fast or pretty - realtime vs. fancy, expensive rendering
--- config: flowchart: wrappingWidth: 280 --- flowchart RL A@{ img: "/workshop-visualization/2026-workshop/icons/questions/artifact.svg", label: "The artifact", pos: "b", w: 80, h: 80 } B@{ img: "/workshop-visualization/2026-workshop/icons/questions/visible.svg", label: "What should be shown", pos: "b", w: 80, h: 80 } E@{ img: "/workshop-visualization/2026-workshop/icons/questions/memory.svg", label: "Fits in memory?", pos: "b", w: 80, h: 80 } F@{ img: "/workshop-visualization/2026-workshop/icons/questions/tool.svg", label: "Which tool", pos: "b", w: 80, h: 80 } G@{ img: "/workshop-visualization/2026-workshop/icons/questions/data.svg", label: "The data you have", pos: "b", w: 80, h: 80 } A --> B B --> E E --> F F --> G

How to pick a visualization approach

Step 1 - what exactly is the artifact?

flowchart LR Q["What is your goal?"] --> F["A figure"] Q --> V["A video"] Q --> L["A link"] Q --> S["A deeper understanding of the data"] F --> F2["Fixed size, scripted, orthographic"] V --> V2["Animation support"] L --> L2["Streamable data format, hosting solution"] S --> S2["Fast and systematic"]

How to pick a visualization approach

Step 2 - what has to be visible, and what carries it?

--- config: flowchart: wrappingWidth: 760 --- flowchart LR Q["What must the reader see?"] --> A["Shape, from outside"] Q --> B["Something inside something else"] Q --> C["Where two things meet"] Q --> D["Swarm behavior"] Q --> E["Direction or change"] A --> A2["Mesh rendering or surface rendering for volumes"] B --> B2["Volume rendering with transfer functions or clipping plane"] C --> C2["Voxel slices plus one 3D overview"] D --> D2["Point cloud - dots or splats, colored by attribute"] E --> E2["Vector field - glyphs, streamlines or animation"]

How to pick a visualization approach

Step 3 - does it fit in memory?

  • Fits comfortably - load it and work
  • Fits, but barely - downsample to explore, run the real thing headless
  • Does not fit - change the data layout:
    • Chunking / tiling: splitting the dataset up into sections (TIFF, ZARR, HDF5, load via Dask)
    • Resolution pyramids: storing multiple resolutions of different sizes (OME-ZARR)
    • Load data on demand (Neuroglancer, BigDataViewer, BigVolumeViewer, …)

How to pick a visualization approach

Step 4 - choosing a tool - desktop

ToolVoxelsMeshesPointsVector fieldsGood for
napariXXXXexploring and annotating n-dimensional images; a layer type per data type
Fiji + BigDataViewer / BigVolumeBrowser / MoBIEXXXterabyte microscopy volumes, arbitrary re-slicing, sharing projects
3D SlicerXXXXclinical volumes, DICOM, segmentation, deformation fields
ParaViewXXXXsimulation output, glyphs and streamlines, everything at once
BlenderOpenVDB onlyXpositions onlypublication figures and animation; full control of light and material
Blender + Microscopy NodesXXthe same, but it loads OME-TIFF and OME-Zarr stacks directly
CloudCompareXXarrows onlyregistering and comparing scans, distances between clouds
MeshLabXXcleaning, repairing and reconstructing surfaces

the whole table is sitedata/tools.yaml, and a pull request is the quickest way to add what we have missed.

How to pick a visualization approach

Step 4 - choosing a tool - libraries

ToolVoxelsMeshesPointsVector fieldsGood for
VTK / PyVista / vedoXXXXthe general-purpose one; renders headless, so it runs on a cluster
napari (as a library)XXXXscript the viewer you were already clicking in
trimeshoccupancy gridsXXmesh repair, boolean operations, measuring
Open3Doccupancy gridsXXpoint cloud registration and surface reconstruction
k3d-jupyter, ipyvolumeXXX3D inside a notebook, next to the code that made it
Dask + ZarrXXnot a viewer - what makes data too large for memory openable at all

the whole table is sitedata/tools.yaml, and a pull request is the quickest way to add what we have missed.

How to pick a visualization approach

Step 4 - choosing a tool - browser-based software

ToolVoxelsMeshesPointsVector fieldsGood for
NeuroglancerXXannotationshuge volumes with segmentations; the whole view is a URL
webKnossosXXskeletonsannotating large volumes, collaboratively
Viv / AvivatorXhighly multiplexed microscopy, no server needed
itk-vtk-viewerXXXimages, meshes and point sets together, via itk-wasm
NiiVue, VolViewXXneuroimaging and clinical volumes; easy to embed in a page
luxaras Gaussian splatsXXlines and tracksgigabyte volumes and time-lapses from a plain static file host
vizarrXOME-Zarr straight from a URL - what the IDR serves its images with
Mol* Volumes & SegmentationsXXcryo-EM maps with their segmentations - the viewer behind EMDB and EMPIAR
PotreeXstreaming point clouds far too large to load
three.js / Babylon.js[add-on](https://github.com/Donitzo/three.js-volume-renderer)XXwrite it yourselfanything custom - the illustrations in these slides are three.js

the whole table is sitedata/tools.yaml, and a pull request is the quickest way to add what we have missed.

What this needs from your machine

  • The GPU matters more than the CPU. Volume rendering is work per pixel and depends on GPU shaders. Integrated graphics handle small volumes and get slow quickly.
  • Graphics memory is the limitation. A volume has to fit in VRAM to be rendered interactively. When it does not, data has to be downsampled, chunked, or streamed.
  • In the browser you need WebGL2, which every current browser has. WebGPU is arriving and is considerably faster.
  • You can run expensive rendering jobs headless (without a graphical user interface) on the cluster, for example with Blender.