The basic idea
Volume data is a three-dimensional grid of measurements. BorgVR divides this grid into small blocks called bricks and loads only the bricks and detail levels required for the current image. This makes it possible to explore datasets larger than the available GPU memory.
A voxel may contain one or more measurement channels. BorgVR supports up to four channels with 8 or 16 bits per channel; scalar datasets may additionally use 32-bit values. Voxel spacing stored in the dataset is interpreted in meters, enabling physically meaningful dimensions and measurements.
All native applications and the WebGPU renderer understand the same dataset format. A dataset can be opened locally, streamed from a BorgVR server, or discovered through known sources in a SharePlay session.
Rendering modes
- Transfer function + light
- Maps values to color and opacity and lights visible structures. This provides stronger shape cues but requires additional gradient and lighting work.
- Transfer function
- Composites color and opacity along each ray without lighting. This mode works well for color-coded or translucent structures.
- Isosurface
- Shows a surface where the dataset reaches a selected value. The corresponding editor controls that isovalue.
Transfer functions
A transfer function contains separate curves for red, green, blue, and alpha. Alpha determines which values become visible. Transfer functions can be stored with the dataset, loaded from a .tf1d file, or selected from the server catalog.
For multi-channel data, each data channel has its own RGBA transfer function. Select the data channel in the editor before changing its color and opacity curves. Rendering composites the contributions of all active channels.
Lighting
In Transfer function + light mode, the lighting editor controls light direction and ambient, diffuse, and specular colors. A shaded preview sphere responds immediately. These settings intentionally have no effect in the unlit transfer-function mode.
Sampling, LOD, and bricks
The sampling rate controls the spacing between samples along a ray. Higher values usually improve quality at a performance cost. The level-of-detail system selects coarser or finer bricks. The optional brick visualization is a diagnostic tool and is hidden by default.
Opening and importing data
- Local: An existing
.datafile is read directly from the device. - Remote: The app first reads the catalog of a configured BorgVR server and then fetches required bricks on demand.
- Import: DICOM, NRRD/NHDR, PVM, or QVIS data is converted into the bricked BorgVR format. Import settings only affect newly converted datasets.
The dataset's unique ID connects local copies, server origins, transfer functions, objects, measurements, and saved views. Origins are stored per ID. If one source cannot be reached, BorgVR tries other known sources in most-recently-announced order and can switch origins after a connection failure.
Objects, drawings, and measurements
All annotations live in dataset coordinates and are depth-composited correctly with the volume. Object rendering and the complete measurement visualization can be hidden independently without deleting data.
- Sphere
- A named, colored point with an adjustable radius. An optional ray points from the sphere center toward the original camera position.
- Stroke
- A sequence of spatial points. Strokes can be drawn with touch or mouse and, on Apple Vision Pro, with hands, Logitech Muse, or PlayStation VR2 Sense controllers.
- Polygon object
- An imported, optionally textured object in BorgVR's mesh format. Object coordinates are interpreted in meters. The same asset can be instantiated repeatedly with independent position, orientation, and scale.
- Measurement
- A sequence of editable points describes a path length, the convex hull of a planar area, or a convex volume. BorgVR automatically chooses an appropriate physical unit for the result and its label.
Object files use the .marker extension and contain spheres, strokes, and instances of imported objects. Measurements are stored separately as .measurement. Both formats carry the associated dataset ID; BorgVR asks for confirmation before loading them for another dataset.
Saving dataset state
Save Dataset State stores the current transfer function, objects, measurements, and the remaining visualization state under the dataset name. This includes transform, rendering mode, isovalue, lighting, clipping, and annotation visibility. Restore Dataset State reloads these parts together.
Settings can enable automatic loading and saving independently for transfer functions, objects, measurements, and visualization state.
BorgVR files
| Extension | Contents | Use |
|---|---|---|
.data | Metadata and bricked, optionally LZ4-compressed volume data | Renderers and servers |
.tf1d | One-dimensional transfer function and display metadata | Transfer-function catalog |
.mesh | Polygon geometry with positions, normals, colors, texture coordinates, and optional embedded textures | Reusable object assets |
.marker | Spheres, directions, spatial strokes, and mesh instances with dataset ID | Load, save, and share objects |
.measurement | Length, area, and volume measurements with dataset ID | Load, save, and share measurements |
.state | Transform, rendering mode, isovalue, lighting, clipping, and visibility | Restore visualization state |
