Skip to content

Releases: NCrashed/demiurg

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 19:12
68f5a13

Transparency: give voxels a blend mode and opacity, so models, clips, and
procedural effects can be glass, glowing energy, or soft smoke instead of solid.
Requires roxlap 0.17 (per-voxel clip materials + the volumetric blend mode).

Added

  • Per-colour materials. Each colour used in a model gets a blend mode and an
    opacity in the tool panel's new "Materials" section, composited live in the
    preview:

    • Alpha — front-to-back glass / water.
    • Additive — order-independent glow, for spells / fire / energy.
    • Volumetric — depth-weighted opacity, for soft smoke / fog.

    Opaque is the default, so an all-opaque model renders exactly as before.
    Material edits are undoable (a slider drag is one step) and saved in the
    .demiurg project.

  • Clip transparency. A clip carries one material table shared by every
    frame; converting a translucent model to a clip keeps its materials. While a
    clip is playing, the preview runs through the engine's real clip player so
    the transparency matches what the game shows.

  • Translucent procedural presets. The Rhai generator gains a
    material(col, mode, alpha) call so a script can declare its own materials —
    the Smoke preset is now volumetric fog and the Energy preset an
    additive-glow sphere.

Notes

  • Materials are kept in the lossless .demiurg project only; the .kv6 and
    .rvc exports have no material channel yet, so they load back as opaque (the
    same boundary as enclosed interior voxels). Projects saved before this release
    load unchanged (all-opaque).

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 27 Jun 21:46
3734b70

Bring skeletal animation and voxel clips closer together: bake a rig into a
clip, and ease its motion.

Added

  • Bake a rig's animation into a clip. "Bake to clip" (Animate ▸ clips
    panel, with a frame-count field) samples a skeletal clip's poses and
    rasterizes every bone attachment — static mesh or animated clip layer — into a
    voxel-flipbook clip, opened as a new clip document to preview / tweak / export
    or drop back onto a bone. The bake matches the viewport exactly (same posing +
    voxel placement) and bounds the result to a fixed box (capped at 256³).
  • Keyframe easing. A skeletal clip can interpolate with an easing curve —
    Linear, In, Out, or In-out — chosen per clip in the Animate panel, for smooth
    motion instead of the engine's robotic linear blend. The curve is saved with
    the rig (.rkc / .demiurg), shows live in the preview, and is carried into a
    bake.

Fixed

  • A bone whose primary attachment is an animated clip but that also carries a
    static-mesh extra no longer draws that extra twice in the posed-rig preview.

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 27 Jun 20:58
ff91019

Procedural clips: script a flame, smoke, or energy effect instead of sculpting
it frame by frame.

Added

  • Procedural clip generator (Rhai). A clip can be driven by an embedded
    Rhai script that fills its frames — ideal for dynamic
    effects that are tedious to animate by hand:
    • Imperative API — the script body runs once per frame with globals
      (frame, frames, t, w/h/d) and flat helpers: set / get,
      sphere, box, rgb / hsv, a stable noise field, fractal fbm, and a
      per-frame rand.
    • Presets — Flame, Smoke, Energy, Plasma, and Sparkle, loadable as a
      starting point (and a live API example).
    • Editing — a floating, syntax-highlighted script window with an API
      cheat-sheet, frame-count and seed controls, and an Auto toggle that
      regenerates a short moment after edits settle for a near-live preview.
    • Deterministic & safe — the same seed yields the same clip; scripts are
      sandboxed (no I/O) and capped against runaway loops.
    • The script + parameters are saved in the .demiurg project; a procedural
      clip exports to .rvc (and drops onto bones as a clip layer) like any other.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 27 Jun 19:12
90629d0

Animated voxel clips: author "GIF/MP4 for voxels" as their own documents, and
hang them off bones as animated layers.

Added

  • Animated voxel clips (.rvc) — a new document type. A clip is a flipbook
    of voxel frames, sculpted with the usual tools and rendered by the engine:
    • Frames — add / duplicate / delete / reorder, each with its own duration
      (or a clip-wide default), plus a loop mode (loop / once / ping-pong).
    • Playback — play / pause and step with Space / , / ., scrub a
      bottom frame timeline; the playhead and the edited frame are one, so you
      stop on any frame and sculpt it.
    • Onion-skinning — ghost the previous (cool) and next (warm) frames while
      sculpting, so motion registers; the ghosts are never picked or edited.
    • Crop warning — when the bounding box dwarfs the content the clip warns
      and offers a crop-to-content that tightens every frame at once.
    • Files — New clip, Open / Export .rvc (the engine's clip codec), and
      lossless .demiurg clip projects that keep every frame's interior voxels.
  • Clips as bone layers. Any bone attachment — a bone's base mesh or an extra
    layer — can be an animated clip instead of a static mesh:
    • Author in place — "To clip" turns the current mesh into a clip (its
      first frame), "+ Clip layer" adds an empty one, and "Import .rvc" drops an
      authored clip onto the bone; selecting a clip layer brings up the full clip
      editor (frames, timeline, onion-skin) to sculpt it inside the rig.
    • Plays on the posed rig — a clip layer animates in the Animate preview
      along the rig's playhead, with per-layer speed and phase so the same
      clip can run fast on one bone and slow / offset on another.
    • Round-trips through .rkc (the engine character container) and
      .demiurg; clip layers show their frame count in the Layers list.
  • Select allCtrl+A selects every occupied voxel of the current model
    and switches to the Select tool, ready to delete / copy / move.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 27 Jun 11:09
7b1cd30

Layers: build a bone out of several meshes, each sculpted, placed and named on
its own.

Added

  • Layers — multiple meshes per bone. A bone can now carry several meshes (a
    base mesh plus extra layers), each one:
    • sculpted on its own — pick the active layer in the Layers panel and the
      voxel tools edit it;
    • placed by its own offset — translate / rotate / scale it numerically, or
      drag it against the posed bone with "Move layer" (Skeleton mode);
    • named — rename it in the panel (names are saved with the project);
    • drawn together in the Skeleton / Animate preview.
  • Extract to layer — carve the current selection into a new layer on the
    same bone (it stays exactly where it was), the layer counterpart of "Extract
    to bone".
  • Copy / paste across bones and layers — copying voxels from one mesh and
    pasting into another (a different bone, or a layer) now lands the paste inside
    the target instead of off its edge.

Changed

  • Bumped roxlap to 0.15.0 — its animated-voxel-clips character container and
    renderer are what layers build on (a bone's layers map to the engine's
    per-bone attachment list).

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 23 Jun 18:30
1e2f650

Rigging quality-of-life: slice a model into a skeleton faster, place each bone's
pivot where it belongs, and bring reference art in from anywhere.

Added

  • Extract a selection into a child bone — in a rig's Sculpt mode, select a
    region and "Extract to bone" carves it out of the current mesh into a new child
    bone, left exactly where it was. Its joint defaults to the centre of the cut,
    so it rotates about where it joins (a shoulder / hip). The fast way to slice a
    whole model into a skeleton.
  • Edit a bone's mesh pivot in Skeleton mode — the point a bone's mesh sits on
    and rotates about is now editable while the skeleton is in view: numeric X/Y/Z
    fields + Center, or a "Move pivot" toggle to drag the mesh against its joint.
  • Rotate the selection 90° — a Rotate panel turns the selected voxels a
    quarter turn clockwise or counter-clockwise about a chosen X/Y/Z axis. The
    result floats so it can be nudged into place before it settles.
  • Paste a reference image from the clipboard (Ctrl+V, or the Reference
    panel button) — copy an image in a browser or any app and paste it straight in
    as a tracing guide, since a browser can't drop one onto the window.
  • Scale a reference image — a Scale control sizes a guide to the model
    without re-importing it.

Fixed

  • A bone's voxels could suddenly be replaced by another bone's (most visibly an
    extracted bone reverting to the one it was cut from) when the background
    autosave fired while a different bone was selected in Skeleton or Animate.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 22 Jun 20:04
cc603b9

Skeletal animation (preview): rig a model into bones and animate it with
keyframes, posed right in the viewport and saved to roxlap's .rkc rigged-
character format. Formats and UI may still change.

Added

  • Skeletal animation editor — build a rigged character (a skeleton of bones,
    each carrying its own voxel mesh) and animate it:
    • Rig a model: File ▸ New rig (one root bone) or Convert to rig (wrap the
      current model). Bones can be added, duplicated, reordered and deleted, with
      3-axis ball joints and a dummy root for full-body motion.
    • Three sub-modes: Sculpt (edit the active bone's mesh with the usual voxel
      tools), Skeleton (set each bone's joint / parent / rotation axis, or drag a
      bone in the viewport to place it), and Animate (preview and pose the clip).
    • Pose in the viewport: click a bone to select it, then left-drag to
      transform it on the selected keyframe — R / G / S switch the gizmo
      between rotate (trackball / ring), move and scale. Each keyframe stores a
      full per-bone transform (translation + rotation + scale).
    • Timeline (bottom bar): play / pause with Space, step keyframes with
      , / ., add / delete / copy / cut / paste keyframes, and drag a tick to
      retime it; a pose inspector edits the selected key's move / rotate / scale
      numerically.
    • Clips (left panel): add, rename and delete animation clips, set each
      clip's length, and toggle whether it loops.
    • Export to .rkc (File ▸ Export character); a .demiurg project stores
      the full rig too, and opening or dropping a .rkc loads it.
  • Recent files: File ▸ Open recent reopens a recently used document, and the
    file dialog now remembers the last folder you used.
  • The menu bar shows a build stamp — demiurg <version> · <commit> — so you
    can tell which version and git commit a binary was built from (selectable to
    copy into a bug report). Source-tarball builds with no git show unknown.

Changed

  • Bumped roxlap to 0.13.0, which adds the roxlap_formats::character rigged-
    character container (per-keyframe translation + rotation + scale) the
    animation editor builds on.

Fixed

  • Editing a rig or animation now marks the project unsaved (the title * and
    the quit guard), so posing / keyframing work can't be lost by quitting a
    document that still looked saved.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 15 Jun 22:43
888fb37

Reference images: trace voxels over loaded pixel art, drawn in the viewport as a
flat, depth-tested guide on roxlap 0.12's world-placed image sprites.

Added

  • Reference images: load pixel art (PNG / BMP / JPG / GIF / TGA / WEBP) as a
    flat guide to trace voxels from — via File ▸ Open reference image or by
    dragging an image onto the window. It's non-destructive (never
    saved/exported/edited): place it on the Front / Side / Top plane, set its
    depth, flip it, hide it, or remove it. The Reference panel's Move toggle
    lets you drag it into position on the grid with the mouse (left-drag slides it
    in its plane, whole-voxel snap). It's drawn as a flat, world-placed image
    sprite (roxlap 0.12 draw_images), so the model occludes the parts behind it
    and it stays undistorted from any angle, with an Opacity slider to dim a
    too-bright reference to a faint guide. The eyedropper (the tool, or Ctrl
    +click from any tool) picks colours straight off the reference image —
    whichever of the model voxel or the reference is nearer the cursor wins.
    Dropping a .kv6 / .vox / .demiurg file opens it as the model. The tool
    panel now scrolls so every section stays reachable.

Changed

  • Bumped roxlap to 0.12.0, for the world-placed 2D image sprites
    (SceneRenderer::upload_image / draw_images) that draw reference images.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 15 Jun 16:38
ccdf71a

MagicaVoxel .vox interop, and the CPU renderer is now the default to dodge a
Windows GPU-init hang.

Added

  • MagicaVoxel .vox import and export (File ▸ Open .vox / Export .vox, and a
    .vox path argument). Import uses the dot_vox parser (handles real-world
    files) and takes the first model; export writes a single model. The height
    axis is flipped between MagicaVoxel's z-up and demiurg's z-down so models stay
    upright, and colours map through a 256-entry palette. .vox has no pivot, so
    import centres it.

Fixed

  • The 0.2.0 white-window fix wasn't enough: on some Windows GPUs/drivers wgpu
    device creation itself hangs (before the first frame), which a synchronous
    call can't be timed out of. The CPU renderer is now the default (reliable
    everywhere); the GPU backend is opt-in via --gpu or ROXLAP_GPU=1 (--cpu /
    ROXLAP_GPU=0 force CPU).

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 15 Jun 15:09
38ebb37

Editing and save quality-of-life: voxel-edge readability, a proper Save / Save
As flow, non-blocking file I/O, and crash-recovery autosave.

Added

  • Voxel-edge overlay (View ▸ Voxel edges, on by default): a light wireframe on
    exposed voxel faces so boundaries read even on flat-shaded faces in shadow,
    where coplanar voxels would otherwise blend into one patch (there is no
    ambient occlusion / light baking).
  • Save / Save As for the project: Ctrl+S overwrites the open .demiurg file
    without a dialog once its path is known; Save As picks a new path. The kv6 and
    vxl menu entries are now labelled Export.
  • File I/O no longer freezes the window (which the OS would flag as hung and
    offer to kill, losing the model): the open/save dialogs run on a worker
    thread off the event loop, and saves serialize/write on a worker thread
    too, with a "Saving…" spinner.
  • Background autosave: while there are unsaved changes the project is snapshotted
    to the OS temp dir every 20 s; on the next launch a surviving autosave (after a
    crash) is loaded automatically with a "Recovered work" banner. A clean exit
    removes it.

Fixed

  • Startup could open a white, frozen window on some Windows GPUs/drivers/remote
    sessions: the forced Fifo (vsync) present mode could stall present()
    indefinitely. Present is now uncapped — the ~60 fps frame timer already caps
    GPU load — and --cpu was added as an escape hatch (alongside ROXLAP_GPU=0)
    when GPU device creation itself hangs.
  • Place tool: when the cursor ray hits no voxel it now falls back to the model's
    floor (the volume's bottom face), so you can seed voxels — and rebuild a model
    emptied of its last voxel — instead of having nothing to click.