Skip to content

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 09 May 14:33
· 328 commits to master since this release

Features

  • Five new interactive probe widgets in interaction::widgets:
    • PlaneWidget: an infinite plane defined by a center point and normal. Drag the center to translate the plane freely; drag the normal-tip handle to reorient it. Use the output center and normal directly as clip-plane inputs or with ObliquePlaneSliceItem.
    • DiskWidget: a bounded circular plane with center, normal, and radius handles. The rim handle scales the radius while the normal-tip handle reorients the disk. Renders as a wireframe circle with a normal indicator.
    • CylinderWidget: a cylinder defined by two endpoint handles and a radius handle at the midpoint. Drag the endpoints to reposition or tilt the axis; drag the rim handle to resize the radius. Renders as two wireframe end caps with four longitudinal lines.
    • PolylineWidget: an ordered sequence of N draggable waypoints connected by straight segments. Add or remove points programmatically via add_point and remove_point. With ctx.double_clicked set, double-clicking a segment inserts a new point at the projected position and double-clicking a handle removes it (minimum two points enforced).
    • BoxWidget now supports rotation: a rotation quaternion field orients the box as an OBB. Three arc handles (one per world axis) appear around the box; drag an arc to spin the box around that axis. obb() returns the full oriented geometry; contains_point tests membership in local box space. wireframe_item and handle_glyphs reflect the current orientation automatically.
  • WidgetContext gains a double_clicked field for passing framework double-click events to widgets that support structural editing (currently PolylineWidget). Set it from egui::Response::double_clicked() or the equivalent in other frameworks; leave it false if not needed.
  • Ribbon representation: visualize flow paths as flat swept strips. Push a RibbonItem into SceneFrame::ribbon_items with concatenated positions and per-strip lengths. Width can be uniform or driven per-point via width_attribute. An optional twist_attribute orients the ribbon face normal at each point, useful for showing material frame rotation along fibers or vortex filaments. Scalar coloring via a colormap is supported the same way as polylines and tubes.
  • GPU vertex warp: set warp_attribute and warp_scale on any SceneRenderItem to displace vertex positions in the vertex shader by a named per-vertex vector attribute. The displacement is applied in local space before the model transform, so the scale is in mesh units. Use this for interactive deformation previews or for animating a scalar-driven surface morphing without re-uploading geometry each frame.
  • SplineWidget: an interactive N-point Catmull-Rom spline in world space. Drag any control point to reshape the curve. Call polyline_item to get the sampled curve as a PolylineItem for rendering, and handle_glyphs for the draggable sphere handles. Call sampled_positions directly to read the evaluated spline output at configurable resolution.
  • Keyframe camera animation: build a CameraTrack from any number of timed CameraTarget keyframes and call interpolate_camera each frame to get a smoothly interpolated position, distance, and orientation. Position and distance use Catmull-Rom interpolation; orientation uses spherical interpolation between adjacent keyframes. Add keyframes in any order; the track sorts them automatically.
  • TurntableController: continuously orbits the camera around its current center point at a configurable angular velocity and elevation. Call from_camera to initialize from the current view, then call update with the frame delta each frame. Distance and center are unchanged; only the orientation advances.
  • Depth of field: blurs geometry outside a configurable focal band. Set PostProcessSettings::dof_enabled and tune dof_focal_distance, dof_focal_range, and dof_max_blur_radius to control which depth band stays sharp and how much out-of-focus geometry blurs. Requires the HDR render path.
  • SSAO for point clouds: when SSAO is enabled, point cloud billboard fragments use a depth-cavity test instead of hemisphere sampling. Pixels between clusters are darkened relative to their depth difference from neighbors, giving separation cues without the noise artifacts that hemisphere SSAO produces on flat billboards.
  • Tensor glyph rendering: visualize second-order symmetric tensors as instanced ellipsoids. Push a TensorGlyphItem into SceneFrame::tensor_glyphs each frame with per-point eigenvalues and eigenvectors; each glyph is scaled anisotropically along its principal axes and colored by a scalar attribute or by a diverging colormap via ColormapId.
  • Gaussian splat point clouds: set PointCloudItem::gaussian to render points as soft radial splats with alpha falling off from the center. Per-point radius can now be driven by a scalar field via radius_scalars and radius_range, mapping data values to a pixel-radius interval independent of the scalar colormap.
  • TubeItem: swept tube geometry with configurable cross-section resolution (sides), optional per-point radius, and per-vertex scalar coloring via a colormap. Use this instead of StreamtubeItem when you need scalar-colored tubes or finer/coarser geometry.
  • ImageSliceItem: renders a single axis-aligned cross-section of an uploaded volume as a flat textured quad. Faster than full ray-marching for inspecting individual slices. Set axis, offset (normalized position along the axis), bbox_min/bbox_max, and an optional colormap LUT. The quad dimensions follow the bounding box, so non-cubic volumes produce the correct rectangular slice.
  • GlyphItem now accepts a default_color and use_default_color flag to render glyphs in a fixed RGBA color instead of the scalar LUT. When enabled, the per-instance scalar acts as a brightness multiplier and lighting is skipped, producing flat unlit glyphs.
  • LineProbeWidget, SphereWidget, and BoxWidget now expose a handle_color field. Set it to any RGBA color to override the default viridis-mapped coloring on the drag handles.

Fixes

  • Clicking a probe widget handle near its edge could fail to start the drag even when the handle was visually highlighted. The hover state from the previous frame is now preserved on the click frame so edge clicks register reliably.
  • Probe widget hit-test radii now match the rendered glyph sizes. Previously the hover detection zone was larger than the visible sphere, producing a highlighted ring at the edge that appeared clickable but was outside the actual handle geometry.