All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- multibody : enable displaying forces applies to frame (with lifetime) (#93)
- core/DebugScene : add function to add arrow entities (#93)
- core : Add
LambertMaterial(#92) - multibody/Visualizer : remove default world triad (#92)
- (user must add it explicitly)
- multibody/Visualizer : pass scale to addFrameViz() (#92)
- core/DebugScene : ensure we re-use
Meshobjects effectively (#92)
0.8.0 - 2025-07-25
- Added tools for loading models from a given description struct
RobotSpec(#37) - Added Candlewick visualizer runtime, to be used to (up)load Pinocchio models and submit states to be displayed asynchronously. (#37)
- Embed Inter Medium font into the application (#37)
- Add
RobotDebugSystem::reload()function to switch out models
- CMake : sync jrl-cmakemodules to new release 1.0.0 (#37)
- CMake : change option
BUILD_PYTHON_BINDINGStoBUILD_PYTHON_INTERFACE(#37) - multibody/Visualizer :
stopRecording()now returns a flag (#37) - core/Components : add
MeshMaterialComponent::hasTransparency() - multibody/RobotScene : allow reloading models, decouple model loading from render pipeline creation
- core/DepthAndShadowPass : add
ShadowMapPass::initialized() - core | multibody : rework of debug subsystem API, allow reloading RobotDebugSystem
- multibody/Visualizer : implement
loadViewerModel(), allow it to actually reload models
core/Device.h: fix release() function- Python examples : wrap some import statements in try/except statements (#37)
- Remove dependency on
robot_descriptions_cpp(#37)
0.7.0 - 2025-07-04
- bindings/python : add expose-debug.cpp, expose DebugMeshComponent
- slightly rework file dialog GUI
- core/DebugScene : make setupPipelines() private, do not use optional
- multibody/Visualizer/GUI : display info for robot debug frames
- fix screenshot PNG color channel ordering
0.6.0 - 2025-06-19
- multibody/Visualizer : expose 'device'
- core : make
renderShadowPassFromFrustum()work properly
- core : remove using-decl of
coal::OBB
0.5.0 - 2025-06-13
- bindings/python : expose video recorder settings
- bindings/python : add function
hasFfmpegSupport()to check if... library was built with FFmpeg support - pixi : separate
pinocchioandffmpegfeatures, add to CI build matrix
- multibody/Visualizer : expose video settings directly instead of passing fps parameter
- cmake : allow user to turn off FFmpeg support/video recording features even if FFmpeg was detected (#83)
- support for Coal's current
develbranch (remove incompatible fwd-declarations, just include<coal/shape/geometric_shapes.h>) (#81) - Make FFmpeg actually optional: add option to turn off support even with FFmpeg installed, fix building with support turned off (#83)
- multibody/LoadCoalGeometries : fix setting the shape parameters for Capsule primitive (#84)
- multibody::loadGeometryObject() : always override material for
OT_GEOMgeometries (#84)
0.4.0 - 2025-06-10
- multibody/Visualizer : add frame visualization
- core/DebugScene : clean up entities with
DebugMeshComponent - core/DebugScene : add move ctor, explicitly delete move assignment op
- core/DebugScene : pass
Float3scale toaddTriad() - multibody : deprecate header
<candlewick/multibody/Components.h> - rename macro
CDW_ASSERTtoCANDLEWICK_ASSERT(for consistency) - multibody/Visualizer : make more mouse buttons configurable
- docs : fix linking to pinocchio docs
- remove default plane from Visualizer class
Python
- Removed
multibodysubmodule. All symbols included in the main module. (BREAKING CHANGE) - Fix stubs being generated for non-extension module classes/functions
0.3.1 - 2025-06-05
- utils/VideoRecorder.cpp : fix
m_frameCounternot being initialized - bindings/python : fix recorder context helper
0.3.0 - 2025-06-05
- multibody/Visualizer : pass fps to startRecording()
- core : rename header
{ Renderer.h => RenderContext.h } - multibody : remove world scene bounds from RobotScene
Visualizer: addworldSceneBoundsdata member- python : expose
Visualizer::worldSceneBounds
0.2.0 - 2025-05-31
- core:
Renderer: fix not cleaning up depth texture if non-null (critical) - core :
DebugScene: fix not setting pipeline handles to nullptr - multibody/Visualizer : fix not releasing transfer buffers before destroying render context (critical)
- core : set max number of directional lights to 4
0.1.1 - 2025-05-26
- core/GuiSystem : add overload for adding multiple GUI elements for
DirectionalLights (#69) - core/CommandBuffer.h : add overload for C-style arrays to uniform-pushing methods (#69)
- core/Shader : store shader stage (#69)
- core/DepthAndShadowPass.h : handle multiple shadow maps using a texture atlas (#69)
- multibody : handle two-light setup w/ shadow mapping (#69)
- multibody/Visualizer : use
Hkey to toggle GUI (#70) - shaders : Soft shadows in PBR using percentage-closer filtering (PCF) (#71)
- core : Tighter shadow frustum around the world-scene AABB (#71)
- core : add
getAABBCorners()util function inCollision.hheader (#71)
0.1.0 - 2025-05-21
- core : add
guiAddFileDialog(#61) - utils : refactor
VideoRecorderctor, addopen()member function (#62) - multibody/Visualizer add screenshot button in visualizer's GUI (#62)
- utils : add
generateScreenshotFilenameFromTimestamp()(#63) - multibody/Visualizer : GUI : add buttons to start video recording, add
takeScreenshot()method (#63) - utils: add VideoRecorder::close() API (to manually close recorder) (#61)
- multibody/Visualizer : add
startRecording(std::string_view)andstopRecording()methods, expose to Python (#65)
- utils : avoid public inclusion of
libavutil/pixfmtheader for video recorder (#61) - core :
errors.h: make terminate_with_message a template (with formatting arguments, etc) (#61) - multibody/RobotDebug.cpp : fix velocity arrow direction (#61)
- utils : make
writeTextureToVideoFramea member function (#62) - utils : rename
writeToFiletosaveTextureToFile(#62) - utils/PixelFormatConversion.h : make bgra conversion function in-place (#63)
- utils & third-party : switch from
stb_image_write.htofpngfor writing PNG files (#64)
- core : fix
CommandBuffer::submitAndAcquireFence()not setting the internal pointer to null (#61) - Fix all calls to
terminate_with_message()(format string with%) (#62)
0.0.7 - 2025-05-17
- core : make DepthPassInfo an aggregate (#57)
- core : add
updateTransparencyClassification()to tag an entity as opaque or untag it (#57) - proper support for transparent objects (#58)
- shaders : add WBOIT composite shader, PBR transparent shader,
utils.glslutil module,pbr_lighting.glsl(#58) - core/
CommandBuffer: type-safe wrappers for pushing uniforms, addRawsuffix to raw methods (#59)
- remove
projMatrixfrom PBR shader ubo (#58) - multibody/RobotScene : early return if pipeline is nullptr (#58)
- multibody/RobotScene : reorganize pipelines (accomodate for transparent PBR shader)
- shaders : refactor basic PBR shader (move some functions to new
pbr_lighting.glsl) (#58) - interleave debug scene render between robot render system opaque and transparent passes (#59)
- revamp depth and shadow map pass classes (#60)
- core/Texture : do not store pointer to
Devicebut rawSDL_GPUDevice *handle (#60)
0.0.6 - 2025-05-14
This is the first release to use a changelog.
- Remove
MeshData loadCoalHeightField(const coal::CollisionGeometry &collGeom)
RobotScene.h: move invalid_enum() out to public header- Add template class
strided_view<T>for non-contiguous evenly-strided data errors.h: Usestring_viewfor_error_message_impl- Extend support for coal
CollisionGeometryobjects- Add support for
coal::GEOM_ELLIPSOID - Add support for
coal::GEOM_CONVEX - Add loader
loadCoalConvex()
- Add support for
- multibody : change signature and rename { guiPinocchioModelInfo() => guiAddPinocchioModelInfo() } (#54)
- core : pass wrap width to showCandlewickAboutWindow (#54)
- Visualizer: set next window pos (#54)
- core/GuiSystem.h : rename some free functions, group them in topic
- Read geometry object
meshColormeshScalewhen updating robot scene (#50) - Set minimum version of ffmpeg to 7.x (#50)
- Change signature of
loadCoalPrimitive()to takecoal::ShapeBase - Change signature of
MeshData::getAttribute()template member function to use strided view
- Visual bug (uninitialized data) when disabling SSAO