A lightweight scientific visualisation tool with a python interface for fast and flexible visual analysis.
LavaVu provides access to OpenGL powered 3D rendering of point, line, surface and volume data with minimal setup and an interface focused on simple mapping of values to visual properties while abstracting all the intricacies of OpenGL.
LavaVu development is supported by the Monash Immersive Visualisation Plaform and the Simulation, Analysis & Modelling component of the NCRIS AuScope capability.
Introduction¶
Originally a set of tools for visualising geodynamics simulations on HPC facilities without GPU access (in the gLucifer [1] framework, part of the Underworld2 geodynamics simulation code).
LavaVu is now a separate library and general purpose visualisation tool..
LavaVu provides a rendering engine for creating 2d and 3d visualisations, particularly focused on time varying simulation data, 3D volume (eg: medical CT/MRI) capable of interactively viewing sampled data inline within interactive IPython notebooks and offline through saved visualisation databases and images/movies.
As a standalone tool it is a scriptable 3D visualisation tool capable of producing publication quality high res images and video output from time varying data sets along with HTML5 3D visualisations in WebGL. Rendering features include correctly and efficiently rendering large numbers of opaque and transparent points and surfaces and volume rendering by GPU ray-marching. There are also features for drawing vector fields and tracers (streamlines).
Control is via python and a set of simple verbose scripting commands along with mouse/keyboard interaction. GUI components can be generated for use from a web browser and a built in web server.
A native data format called GLDB is used to store and serialise visualisation data and state in a compact single file, using SQLite for storage and fast loading. A small number of other data formats are supported for import (OBJ surfaces, TIFF stacks etc). Further data import formats are supported with python scripts, with the numpy interface allowing rapid loading and manipulation of data.
A CAVE2 virtual reality mode is provided by utilising Omegalib (http://github.com/uic-evl/omegalib) to allow use in Virtual Reality and Immersive Visualisation facilities, such as the CAVE2 at Monash, see (https://github.com/mivp/LavaVR). Side-by-side and quad buffer stereoscopic 3D support is also provided for other 3D displays. VR output can also be used to view WebGL content using a WebVR capable browser.
(The acronym stands for: Lightweight, Automatable Visualisation and Analysis Viewing Utility, but “lava” is also a reference to its origins as a viewer for geophysical simulations. It’s also unique enough to find the repository with google.)
How do I get started?¶
Then to get started with the python API LavaVu: python API quickstart guide
The core of LavaVu is an OpenGL powered rendering engine written in C++, this library is accessible via the python API with interactive output in Jupyter notebooks or as a standalone application
Some of the documentation applies primarily to the standalone viewer application, but much of the content is still applicable when using via the python API.
Most important for both use cases is the Properties reference, these are values that can be changed globally or per object to modify the rendering parameters.
The Scripting Commands reference also still applies to the python API, but it has many more commands available through python functions that are not available to the standalone Viewer.
In python : all the properties available on the Viewer and Objects can be set in python using a dictionary style interface:
lv = lavavu.Viewer()
lv["background"] = "grey"
pts = lv.points()
pts["pointsize"] = 10
All the scripting commands can be run by calling them as functions on the Viewer object:
lv.rotate('x', 45)
lv.export()
For more information on the python and IPython interface, see
For more information on using the standalone viewer, see
Who do I talk to?¶
Report bugs or request help on the github issue tracker: https://github.com/lavavu/LavaVu/issues
Contact developers: Owen Kaluza (at) monash.edu
Included libraries¶
In order to avoid as many external dependencies as possible, the LavaVu sources include files from the following public domain or open source libraries, many thanks to the authors for making their code available!
SQLite3 https://www.sqlite.org
JSON for Modern C++ https://github.com/nlohmann/json
Tiny OBJ Loader https://github.com/syoyo/tinyobjloader
jpeg-compressor https://github.com/richgel999/jpeg-compressor
GPU Cubic B-Spline Interpolation (optional) in volume shader http://www.dannyruijters.nl/cubicinterpolation/ [2]
Citation¶
If you use LavaVu in any published work we would appreciate a citation of the code using the zenodo DOI. There is a master DOI for all releases and releases after 1.3.2 are automatically given a DOI under the master.