Skip to content

Placement accuracy, chirality fix, Mannequin actors, diagnostics + changelog#2

Open
dropchop wants to merge 5 commits into
mainfrom
worktree-props-diagnostics
Open

Placement accuracy, chirality fix, Mannequin actors, diagnostics + changelog#2
dropchop wants to merge 5 commits into
mainfrom
worktree-props-diagnostics

Conversation

@dropchop

Copy link
Copy Markdown
Owner

Week's worth of prop/actor placement fixes, verified by 64 tests. See README changelog for the summary.

https://claude.ai/code/session_013hs93AfUfGEaf5cKBTKDgj

dropchop and others added 5 commits July 17, 2026 00:29
Placement audit against the real sample scene found freestanding props
rotated 90 degrees wrong (the sofa punched 50 cm through the wall it was
placed against) and asymmetric parts mirrored to the wrong side (the
open door panel swung outside the room).

Calibrated ground truth from Sceneforclaude.hcw + the palette
screenshots:

* Freestanding props (RotatorObject): the stored angle points at the
  prop's BACK -- the recipe front faces angle+180, so the recipe frame's
  screen rotation is angle+90. The sofa now sits flush against the rear
  wall (back edge 240.3 vs wall 240 -- the scene's own placement
  precision), length parallel, facing the room.

* Wall-snapped sets (doors/windows): <snapPath> names the wall and
  snapPercent the position along it; the angle is the wall segment's
  direction, and the recipe width lies along it. Parser now records
  wall_snapped from snapPath.

* _bake_parts gains mirror_y: recipes are authored in screen orientation
  (+Y = prop front), so the screen->Unreal Y flip must also negate local
  +Y offsets, part yaws and rolls -- otherwise backrests/door panels land
  mirrored. The door panel now swings into the room, hinge edge on the
  wall plane. Lights keep the legacy bake until their own calibration.

Sizes verified accurate: sofa depth 79.4 cm (wall gap) vs recipe 80;
door opening 70 = 100 x objectScale 0.7. 1 SD unit = 1 cm holds.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hs93AfUfGEaf5cKBTKDgj
Micah placed a table in a room and it appeared on the other side. Root
cause: ir_to_ue_location negated Y ("screen down becomes -Y"). Shot
Designer's floor-plan frame (x right, y down, z up) and Unreal's frame
are BOTH left-handed, so that map has determinant -1 -- it reflected the
entire scene. Everything was self-consistent, which is why walls and
distances always looked right, but chirality was flipped: an actor on
the camera's screen-left in Shot Designer rendered on the camera's
RIGHT in Unreal, and every through-lens shot was mirrored.

The conversion is now the identity (metres->cm scale only, yaw
unchanged), verified through-camera against the sample scene: the Red
actor lands on the camera's left, matching the Shot Designer screen.

The mirror_y local-frame compensation added in the previous commit
existed only to counter this reflection inside prop recipes -- removed;
recipes' screen-frame authoring now carries into UE directly. Prop
angle conventions (freestanding = back direction, wall-snapped = wall
direction) are unchanged and re-verified: sofa flush against the rear
wall, door panel swinging into the room.

Sizing double-checked while here: objectScaleX/Y flows through
correctly (synthetic 2.5x square table -> 225x225 cm top at the exact
SD plan position; sample door opening 70 = 100 x 0.7).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hs93AfUfGEaf5cKBTKDgj
…ation

Micah's "large square table" is stored at objectScaleX/Y = 0.5673 (the
Scaler sub-object is empty -- objectScale is definitively where resize
lands). He shrank the icon below its native size and it still read as
large on the Shot Designer canvas, so SD's table art at scale 1.0 is
far larger than the 90 cm real-world recipe base; recipe x objectScale
emits a 51 cm table. Recipe base sizes happen to match the SD natives
for SOFA (~80) and DOOR (100) but not for tables -- per-icon native
sizes need calibration against user-measured spans.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hs93AfUfGEaf5cKBTKDgj
…ight

Actors were falling back to capsule cylinders in projects without the
Third Person content pack, silently. Now:

* Shot Designer Type B characters (<female>) spawn SKM_Quinn, Type A
  spawn SKM_Manny (Actor.female carried through IR and payload); Quinn
  falls back to Manny if absent.
* More candidate paths covered (UE5 template old/new layouts, UE4
  mannequin packs).
* Mannequin meshes are authored facing +Y, so spawns apply a -90 yaw
  offset -- the Manny now looks where the Shot Designer character faces.
* When no mannequin exists in the project, the script logs how to add
  one (Content Drawer -> +Add -> Add Feature or Content Pack -> Third
  Person) instead of silently dropping capsules.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hs93AfUfGEaf5cKBTKDgj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant