Skip to main content

WGPU-based 3d viewer

Project description

octarine banner

Octarine is the eighth color of the Discworld's spectrum, which is described as the color of magic itself. Only wizards and cats can see it.

docs

Octarine

A minimalist, easy-to-use, high-performance 3D viewer. Octarine is build on top of the excellent pygfx WGPU rendering engine which does most of the heavy lifting - we're simply abstracting away some of the boiler plate code for you.

Rationale :thought_balloon:

Why another 3d viewer? There are plenty options out there: vedo, ipygany, polyscope, napari, fury, plotly or pyvista to name but a few. All of these are great in their own right but I wanted something (a) without heavy dependencies (i.e. no VTK), (b) that lets me interactively explore my data in both REPL and Jupyter and (c) is very performant. None of the existing solutions ticked all those boxes for me.

Octarine tries to fill that gap:

  1. Lightweight with very few direct or indirect dependencies.
  2. Works in both Jupyter and REPL.
  3. High performance: a mesh with 15M faces renders with 80 fps at 1080p on a 2023 MacBook Pro.

ToDo :ballot_box_with_check:

This is still a prototype but basic stuff already works (mostly because pygfx makes it so ridiculously easy).

  • basic datatypes: meshes, points, scatter, volumes
  • custom keyboard shortcuts
  • rudamentary controls + legend
  • screenshots
  • support for trimesh scenes
  • user-defined animations
  • documentation
  • methods/controls to manipulate image volumes
  • tests

Installation :rocket:

pip install octarine3d

In addition you will need to install at least one window manager supported by wgpu-py:

  • qt: PySide6, PyQt6, PySide2, PyQt5 all work but I recommend PySide6 (see below)
  • glfw: a lightweight GUI for the desktop
  • jupyter_rfb: only needed if you plan on using Octarine in Jupyter
  • wx

Please note that at this point, Octarine's controls panel requires PySide6. So if you want GUI controls you have to use PySide6.

Quickstart :fire:

# Create a Viewer instance
from octarine import Viewer
v = Viewer()

# Add random points as scatter
import numpy as np
points = np.random.rand(10, 3)  # 10 random points
v.add(points)

# Clear scene
v.clear()

# Add a mesh
# See also `Viewer.add_mesh`
import pygfx as gfx
m = gfx.geometries.mobius_strip_geometry()
v.add(m, color='b')

# Close the viewer
v.close()

demo gif

Other selected Viewer methods:

  • add(): generic method to add stuff to the viewer; will call respective specialised methods
  • add_lines(): add line plot
  • add_mesh(): add meshes (anything that has .vertices and .faces goes)
  • add_points(): add a scatter plot
  • add_volume(): add an image volume
  • center_camera(): center camera on scene
  • clear(): clear scene
  • close(): close viewer
  • colorize(): cycle colors for all objects
  • pop(): remove last added object
  • remove_objects(): remove a given object(s) from the scene
  • screenshot(): take (and save) a screenshot
  • set_bgcolor(): set background color
  • set_colors(): set object colors

Hotkeys

The following keyboard shortcuts are hard-coded:

  • 1: reset view to XY (frontal)
  • 2: reset view to XZ (dorsal)
  • 3: reset view to YZ (lateral)
  • f: show FPS
  • c: show control panel (requires PySide6)

You can also bind custom functions to keys:

# Bind `x` key to the cycle-colors method
v.key_events['x'] = lambda : v.colorize()

Want to contribute?

We welcome all kinds of contributions. For example:

  • reports of bugs, broken examples, etc.
  • feature requests
  • pull requests with bug fixes or new features

If you already know what needs doing, feel free to open a pull request right away. When in doubt please open an issue so we can discuss the best way to address the issue.

Development :dash:

Tests

TODO

Docs

To generate the documentation:

pip install -e .[docs]
mkdocs build

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

octarine3d-0.1.1.tar.gz (27.2 kB view hashes)

Uploaded Source

Built Distribution

octarine3d-0.1.1-py3-none-any.whl (26.9 kB view hashes)

Uploaded Python 3

Supported by

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