v0.13.1
·
323 commits
to master
since this release
Features
- Sprite rendering: place camera-facing textured billboards in 3D space via
SpriteItem. Per-sprite controls include position, color, size, rotation, and UV rect. Size can be screen-space (pixels, constant on screen regardless of distance) or world-space (expands along the camera right/up vectors so sprites scale with distance). Setdepth_writeto false for additive particle effects that composite correctly against opaque geometry, or true for opaque markers. Useuv_rectsto sample subregions of an atlas texture and cycle frames each tick for sprite-sheet animation. Particle simulation stays in host code; push positions and per-particle colors/sizes each frame. VolumeSurfaceSliceItem: samples a 3D volume on an arbitrary surface mesh and colors each fragment by the volume scalar at that world position. UnlikeImageSliceItem, the slice surface is not restricted to axis-aligned quads -- any mesh produced byupload_mesh_dataworks: flat planes, disks, saddle surfaces, paraboloids, or imported geometry. Fragments whose world position falls outside the volume bounding box are discarded automatically. Push aVolumeSurfaceSliceItemintoSceneFrame::volume_surface_sliceseach frame, referencing the mesh byMeshIdand the volume byVolumeId.prepare_callback/paint_callback: unified entry points for the eframeCallbackTraitmodel. Callprepare_callbackfromCallbackTrait::prepareandpaint_callbackfromCallbackTrait::paintinstead of managing separateprepare,prepare_ldr_dyn_res, andprepare_hdr_callbackcalls manually. The methods dispatch internally based on whetherpost_process.enabledis set, so OIT, EDL, and tone-mapping are active in eframe apps without extra code in the callback.TransparentVolumeMeshItemgainsthreshold_minandthreshold_maxfields. Tetrahedra whose scalar value falls outside the range are discarded by the shader without re-uploading geometry. Set both fields to the same raw scalar units used at upload time. Defaults to no clipping (all tets rendered).ViewportGpuResources::replace_sparse_volume_grid_data: replaces a previously uploaded sparse voxel grid in place without allocating a new mesh slot. Use this for per-interaction updates such as voxel painting to avoid leaking GPU memory. Mirrors the existingreplace_clipped_volume_mesh_datapattern.
Fixes
- Uploading a large transparent volume mesh could crash with an out-of-memory error. The decomposed tet data is now split into device-limit-bounded chunks on upload, so meshes of any size load correctly. No API changes.
- Transparent volume meshes and Surface LIC were silently invisible in eframe applications. Both features require the HDR pipeline, which was never activated via the
prepare+paintcallback path.