Skip to content

v0.7.0

Latest

Choose a tag to compare

@libraz libraz released this 06 Oct 07:23

A minor release. The wire vocabulary only gains: BGM has two new effect groups, dsp.pitch and dsp.presence, and a line can carry a new [@bgm set {JSON}] cue. Both are off at their defaults, so a caller written against 0.6.0 sends and hears the same thing. One behaviour did change:

  • A descriptor's anatomy override now reaches the profile. buildProfile used to drop it and fall back to the human joint table, so an avatar that declares one may now move differently.

Backdrop rooms

The window no longer shows a painted sky plane. It samples a crop of a CC0 panorama, chosen by the direction the window faces, for morning, dusk, night and rain. The rain view runs through a rain-on-glass lens shader in place of the old alpha streaks on the pane.

The rooms gain painted plaster walls, a plain ceiling, linen curtains with sheers, an oval wool rug and a wall shelf with books and a lamp. They also bring in more furniture: a plant, a low table, a tea set, vases, framed prints, a basket, and a wall clock whose hands show local time. The bed, sofa and pillows take linen and timber finishes. The new textures are credited in the README.

Feet stay on the floor

The profile now resolves the upper leg, lower leg, foot and toe, and a two-link solver keeps both ankles where they stand while the pelvis moves. The knees absorb the drop through breathing, weight shift and hops instead of the feet sliding or sinking. Hips sway and lift are written in world metres through the parent transform and recomputed every frame, so a root or wrapper that is turned or scaled after the avatar loads no longer skews them. avatars.md and motions.md describe which bones are needed.

BGM

The BGM-only chain gains a tempo-preserving pitch shifter (semitones −24..24, mix 0..1) and a nonlinear presence enhancer (amount 0..1, drive 0..8, frequencyHz 500..8000). A pitch mix of 0 and a presence amount of 0 are the defaults and leave the track untouched. The controls are in the panel's BGM tab, the bgm command, the MCP tools and the CLI.

[@bgm set {JSON}] applies one BGM command patch at the point in the line where it is written: transport, track, volume, looping, fade durations and any DSP field. Omitted fields keep their values and the change persists after the line. Unknown fields, empty patches, envelope fields and out-of-range values reject the line before it is queued. The field table is in lines-and-cues.md.

Voice and lip sync

  • When the last renderer waiting for a line goes away, the server aborts the upstream synthesis and the sidecar stops generating, so the GPU is not left speaking to nobody.
  • A line that fell back to silence because the browser refused the audio device is synthesised again once the device unlocks, without spending its one retry.
  • ゔ and ヴ read as the u viseme. Ellipses and dashes are pauses, and quotation marks and brackets are skipped instead of being voiced as morae.
  • Envelope windows sit on exact 10 ms boundaries at any sample rate, and a take that is mostly silence still moves the mouth on its loudest burst.

Motion and rendering

  • The wave follows the hand it was given, mirroring its head and chest accents, instead of always using the right.
  • Gaze bearing is computed in avatar-root space, so tracking follows where the avatar is placed rather than the room's axes.
  • Every spring joint takes its origin from its freshly solved parent, so multi-joint chains stay connected. A disabled group returns to its rest pose every frame and is reseeded when enabled again.
  • Cloth casts shadows in proportion to its opacity instead of as a solid silhouette.
  • Disposing the studio environment frees its PMREM render target and generator, including when building it throws.