Skip to main content

Real-time 3D fly-through explorer for mesh-free/unstructured simulation data

Project description

vizmo

Real-time 3D fly-through explorer for unstructured simulation data. Loads HDF5 snapshots from GIZMO/Gadget/AREPO simulations and renders interactive surface density maps, mass-weighted averages, velocity dispersions, and composite CoolMap visualizations on the GPU via WebGPU.

This is a vibecoded app. I have no idea how its front- or backends work, and am not sure if I could really properly support or get it running for you 10 years from now! But it would not exist otherwise. Software is weird now. It is what it is.

But I hope you enjoy it and please feel free to report bugs or request features.

Installation

pip install -e .

Requirements

  • Python >= 3.9
  • WebGPU-capable GPU (Metal on macOS, Vulkan on Linux, D3D12 on Windows)

Quickstart

Point vizmo at an HDF5 snapshot file:

vizmo path/to/snapshot.hdf5

The snapshot must contain at least one PartTypeN group with Coordinates and Masses. Smoothing lengths are taken from SmoothingLength/KernelMaxRadius/Hsml if present, otherwise from a per-type softening in the header (e.g. SofteningTypeN, SofteningTable), and as a last resort computed on the fly via meshoid.Meshoid(x, boxsize=boxsize).SmoothingLength(). Star particles (PartType5) are rendered as point sources when present.

Particle type selection

A row of six tickboxes labeled 05 at the top of the user menu controls which PartTypeN groups are loaded into the active particle pool. Disabled (greyed out) ticks correspond to types that are not present in the snapshot. Toggling a tick reloads the pool, refreshes the Weight/Field 2/Data dropdowns to show only the scalar/vector fields that are common to all selected types, and re-runs auto-range. The default selection is PartType0 if present, otherwise the first available type.

CLI options

vizmo snapshot.hdf5 [--width 1920] [--height 1080] [--fov 90]
                        [--fullscreen] [--screenshot OUT.png]
                        [--profile OUT.pstats]

Rendering backend

vizmo uses a WebGPU backend (wgpu-py) with GPU-resident particle data. Compute shaders perform frustum culling, LOD selection, and per-cell summary gathering with zero CPU↔GPU per-frame transfer. On unified-memory systems (Apple Silicon) field switches are also near-zero copy.

The renderer uses progressive refinement and an auto-LOD subsample cap that adapts within a user-controlled ceiling to keep interaction smooth during motion and sharpen on idle.

Controls

Camera:

  • W/A/S/D — Move forward/left/back/right
  • Z/X — Move up/down
  • Q/E — Roll left/right
  • Mouse (click + drag) — Look around
  • Scroll wheel — Adjust speed

Visualization:

  • Tab — Hide/show all UI
  • C — Cycle colormap
  • L — Toggle log/linear scale
  • R — Auto-range color scale (composite: Color slot)
  • T — Auto-range composite Lightness slot
  • +/- — Contract/expand color range
  • [/] — Coarser/finer LOD pixel size
  • ,/. — Lower/raise the auto-LOD subsample-cap ceiling
  • P — Save screenshot
  • F1 or \ — Toggle dev overlay
  • Esc — Quit

Render Modes

Select from the Mode dropdown in the user menu:

  • SurfaceDensity — Projected surface density of a weight field. Supports combining two fields with arithmetic operators (Op / Field 2).
  • WeightedAverage — Mass-weighted line-of-sight average of a data field.
  • WeightedVariance — Mass-weighted line-of-sight standard deviation (e.g. velocity dispersion).
  • Composite — CoolMap-style dual-field visualization. Encodes one field in lightness and another in colormap hue. Each channel has independent render mode, field selection, limits, and scaling.

Vector Fields

3D vector fields (e.g. Velocities) are automatically detected. When selected as a weight or data field, a Proj dropdown appears:

  • LOS — Per-particle line-of-sight component (dot product with the unit vector from the camera to the particle). Invariant under camera rotation; recomputed when the camera translates past a small threshold.
  • |v| — Euclidean norm.
  • |v|^2 — Squared norm.

Architecture

vizmo/
  app.py            - CLI entry point
  wgpu_app.py       - Main loop, key actions, progressive refinement, auto-LOD
  wgpu_renderer.py  - WGPURenderer: RenderMode, accumulate + resolve + composite passes
  gpu_compute.py    - GPUCompute: GPU-resident data, compute cull/LOD/gather
  wgpu_overlay.py   - WGPUDevOverlay, WGPUUserMenu (wgpu panel rendering)
  overlay.py        - Panel/PanelStyle base, DevOverlay, UserMenu
  camera.py         - 6DOF camera with cached basis vectors
  data_manager.py   - HDF5 I/O with lazy loading and cosmological corrections
  field_ops.py      - Field arithmetic and vector projections
  colormaps.py      - Matplotlib colormap to GPU texture
  shaders/          - WGSL shaders (common, splat_subsample, resolve, composite,
                      star, text)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vizmo-0.1.6.tar.gz (558.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vizmo-0.1.6-py3-none-any.whl (556.9 kB view details)

Uploaded Python 3

File details

Details for the file vizmo-0.1.6.tar.gz.

File metadata

  • Download URL: vizmo-0.1.6.tar.gz
  • Upload date:
  • Size: 558.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for vizmo-0.1.6.tar.gz
Algorithm Hash digest
SHA256 d11738058e4ab1071239741325a4ecbb452914837a944edf62cfaee306c8f246
MD5 36a9081d8a70a15b49185e00294bb7fd
BLAKE2b-256 917dd5aff5b9dd5f9e0bcd4bcadf00f3fcb96c131316702a980fb5332a2f7ad8

See more details on using hashes here.

File details

Details for the file vizmo-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: vizmo-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 556.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for vizmo-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 4c1bae430e0be94d876d4db15f0076a5ef75e99c8e5897ee0fe493e73a272eee
MD5 cc07457cdc8cde63ef4723eb6dbb4522
BLAKE2b-256 0cc3ae24c7021f7127bf49287ee1378924514768685f02c4532fe6a599177392

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page