Skip to content

feat(scaffold): post-mount readouts + yaw on the post's axis (not world-vertical) #286

Description

@bradleypmartin

Surfaced from #285 (PR for #270 round 3) headset smoke (Brad, 2026-06-01). Stub-only — direction TBD; capturing while fresh.

What headset smoke surfaced

#285 extruded the readout back-plate to a depth slab (final 14mm) which got the panel reading reasonably as a solid screen turning rather than a flat decal sliding. Two things still in the way of full presence:

  1. Uniform-color slab masks the depth cue at typical pancake viewing distance. "Takes getting into VR to see the depth." (Pre-tracked under feat(scaffold): display-mock visual-language pass on plinth-mounted readouts (post-#252) #270's bezel / rim-glow candidate list — that issue stays the parent for screen-surface chrome.)
  2. Yaw axis still reads as detached from the plinth. The readout group yaws around a world-vertical Y through its own center — so even with depth, it reads as a free-floating monitor that happens to be near the plinth, not as something physically mounted to the plinth. Brad (paraphrased):

Instead of rotating the screen around a strict world- or math-z axis, would it be possible to 'attach' it via a post in the plane of the 'drafting board' part of the plinth (where the controls are), and then rotate it on the axis of the post?

Direction (open)

Not pre-committing to a shape. The general idea has two coupled pieces:

  • Render a physical post / stem / arm rooted on the plinth's drafting-board working surface, terminating at the readout's mount point. Kills any residual "floating in front of the plinth" read (the parent feat(staging): control plinth hosting interactive UI (sub-epic) #225 §3.5 v3 escape-ladder concern, but addressed by mounting rather than by counter-rotating to surface-tilt).
  • Yaw the readout around the post's axis rather than around world-vertical. Since the drafting board tilts ~20° forward toward the user (PLINTH_TILT_DEFAULT = 20° * π/180), a post perpendicular to the working surface tilts ~20° forward too. Yaw on that axis means the readout's face tracks lateral viewer motion with a slight nodding-toward-them quality — closer to the natural angle a viewer holds their head when looking down at a desk-height plinth than world-vertical-yaw is.

Open questions to surface at plan-doc / roundtable time:

  • Post visual vocabulary. Thin metal stem? Stubby pylon? Same body color family as the plinth (PLINTH_BASE_COLOR_RGB) or a distinct accent? Should the post itself have any chrome (segmenting, base flange) that reads as "this is mounting hardware"?
  • Mount-point geometry on the readout. Pin at the center-back of the slab? Off-center to suggest gimbal-style articulation? Centered on the slab's bottom edge (more "monitor on a stand" reading)?
  • Yaw range. Free 360° (matches current behavior — readout always faces user, never reads its own back), or capped to e.g. ±90° from a forward-facing rest pose (more "physical articulation, can be pointed away from you" semiotic)? Capping breaks readability if user walks behind the plinth — probably wrong call for the cluster's audition-context posture; flag for plan-doc.
  • Post anchor point on the drafting surface. Per-scene tunable, or scaffold-default behind the readout's footprint?
  • Single-scene first or all-four together. The four readout sizes differ (READOUT_PANEL_HALF_WIDTH_* per scene); the post-mount calibration is per-scene-aware. Likely start in one scene (quadrics is the template per feat(staging): control plinth hosting interactive UI (sub-epic) #225's locked pattern) then cluster-sweep.

Composition with adjacent work

Code anchors

  • Current yaw implementation: src/scaffold/ui/PanelReadout.ts faceCameragroup.rotation.set(0, Math.atan2(dx, dz), 0) (world-vertical Y).
  • Plinth working surface + tilt: src/scaffold/staging/Plinth.tsPLINTH_TILT_DEFAULT = (20 * Math.PI) / 180, 'surface' slot orientation already tilts children with the working face.
  • Per-scene plinth slot for the readout: src/exhibits/quadrics/index.ts (and the three sibling exhibits) — slot localXYZ + orientation: 'surface' / 'world' are the inheritance hooks the post-mount design will likely extend.

Refs

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions