UNDER DEVELOPMENT
Candlewick is a WIP library for a renderer based on SDL3's new GPU API.
Candlewick comes with some basic graphical features.
- Shadow mapping using directional shadow maps
- Screen-space ambient occlusion (SSAO)
- WIP: Screen-space shadows (SSS)
Candlewick visualization utilities for robotics based on Pinocchio.
You can load a Pinocchio model, its geometry model, and create a visualizer that can be used similar to the other visualizers included in pinocchio.visualize
.
Here's a Python example:
import example_robot_data as erd
import pinocchio as pin
import numpy as np
from candlewick.multibody import Visualizer, VisualizerConfig
robot = erd.load("ur10")
model: pin.Model = robot.model
data: pin.Data = robot.data
visual_model = robot.visual_model
config = VisualizerConfig()
config.width = 1280
config.height = 720
viz = Visualizer(config, model, visual_model)
q0 = pin.neutral(model)
viz.setCameraPose(pin.SE3.Identity())
viz.display(q0)
Candlewick depends mainly on:
- SDL3 for windowing, processing input events, and of course SDL GPU.
- EnTT for the entity-component system (ECS)
- the Eigen linear algebra template library
- Open Asset Importer Library (assimp) for loading meshes
- eigenpy for Python bindings.
- FFmpeg for support for recording videos from the rendered graphics.
- For loading and visualizing robots:
- the Pinocchio rigid-body dynamics library (required for the
candlewick::multibody
classes and functions). - robot_descriptions_cpp, a suite of loaders for robots (required for some examples)
- the Pinocchio rigid-body dynamics library (required for the
Many of the design choices of this library are heavily inspired by other, more mature work in the open-source 3D graphics middleware space.
Here are some of the resources I've looked at:
- the Magnum graphics middleware (the design ideas around mesh layouts, how to load geometry primitives, and the type-erased
MeshData
type) - bgfx
- Sascha Willems' Vulkan examples: https://github.com/SaschaWillems/Vulkan/