Pointcloud Showcase

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

Point cloud data

Example notebook

  1. Color by the scan’s own color
  2. Color by a property
  3. Estimate normals
  4. Color by normal direction
  5. Save PLY, with colors and normals attached

point_clouds_tutorial.ipynb

Point cloud data

Getting that PLY into Blender

Project BESSY2 Reconstruction

Helmholtz Imaging Collaboration with Jan-Simon Schmidt (HZB)

Jan-Simon Schmidt (HZB), Ole Johannsen (DKFZ, now MDC, Helmholtz Imaging), Deborah Schmidt (MDC, Helmholtz Imaging)

Project BESSY2 Reconstruction

Workflow & Tools

  • Extract point clouds from frames of drone video footage
  • Clean & rotate, and merge point clouds (using CloudCompare)
  • Render results in Blender for inspection & visualization
  • Integrate room layout by converting SVG file to Mesh & import it in Blender
  • Convert to Potree format (multi resolution)
  • Upload to public server → Accessible in browser with Potree (open-source WebGL based point cloud renderer for large point clouds)

Blender fly-through

Floor plan

Blender floor

Potree / Entwine-generated EPT format

Large point clouds

Do it yourself: convert and visualize in Potree

PLY → LAS → EPT octree

With Docker

docker run --rm -v "$PWD:/data" pdal/pdal \
  pdal translate /data/cloud.ply /data/cloud.las

docker run --rm -v "$PWD:/data" connormanning/entwine \
  build -i /data/cloud.las -o /data/ept --threads 8

With micromamba

micromamba create -n entwine -c conda-forge entwine pdal
micromamba activate entwine

entwine pdal translate cloud.ply cloud.las

entwine build -i cloud.las -o ept --threads 8

Large point clouds

Do it yourself: host and open

# 3 · serve the directory containing ept/, with CORS
python example_data/server.py -d . -p 8123

Open it in the Helmholtz Imaging Potree instance

https://ida-mdc.gitlab.io/potree-launcher/?dataUrl=http://127.0.0.1:8123/ept/ept.json
  • The launcher takes any dataUrl: EPT ept.json, Potree cloud.js / metadata.json, or a COPC .laz
  • server.py sends required CORS headers