Skip to content

feat(court): render mascots as full figures in the 3D world view - #29

Merged
haritabh17 merged 3 commits into
badmlabs:mainfrom
haritabh17:feat/3d-mascots
Jul 5, 2026
Merged

haritabh17 merged 3 commits into
badmlabs:mainfrom
haritabh17:feat/3d-mascots

Conversation

@haritabh17

Copy link
Copy Markdown
Collaborator

Summary

The 3D world view drew generic pins for every player while the flat court showed full mascot art — mascots now carry into 3D as the same figures, billboarded into the projection:

  • Orientation: far-court figures face the camera, near-court figures show their backs (handedness-mirrored) — the flat court's own rules, which cover every reachable angle of the ±18° yaw camera
  • Depth: perspective-scaled with a ground contact shadow; feet plant on the shadow at full tilt, and at b=0 the figure recenters on its court spot so the 2D↔3D tilt morph stays seamless
  • Occlusion: the scene renders in layers around the net — far figures stand behind it, near figures in front; shuttle and flight stay on top
  • Correctness detail: each mascot renders in its own Svg root because the art's gradient ids (mFace etc.) differ per animal and would collide inside one shared root
  • Non-mascot looks keep the existing pins; playback gliding works unchanged (figures move with the flight interpolation)

CUF coverage

Flow 06-tilt-3d-drill now dresses both singles players in mascots (Fox far / Koala near) before tilting to 3D, and adds a slow yaw sweep on the standing figures — so the PR's recorded video showcases front and back views, net occlusion, and mid-rally movement.

Test plan

  • tsc / eslint / full jest suite green
  • Maestro flow 06 run locally against the release build: all steps pass
  • AVD screenshots: Fox front-facing behind the net, Koala back-view (cape) in front of it, contact shadows, correct perspective scale, figures gliding during 3/9 playback

The 3D view drew placeholder pins for every player; mascot looks now
render as the same 2D figure art, billboarded into the projection:

- far-court figures face the camera, near-court figures show their
  backs with handedness mirroring — the flat court's orientation rules,
  which cover every angle the +/-18-degree yaw camera can reach
- perspective-scaled with a ground contact shadow; feet plant on the
  shadow at full tilt and the figure recenters at b=0 so the 2D<->3D
  morph stays seamless
- scene split into layers around the net so far figures stand behind
  it and near figures in front; each mascot keeps its own Svg root
  (per-mascot gradient ids collide inside a shared root)
- non-mascot looks keep the existing pins; shuttle untouched
- CUF 06 now dresses both singles players in mascots first, with a
  slow yaw sweep on the standing figures for the PR video
The shuttle layer drew over everything, so it slid across a near
player's body on approach. Near figures now sandwich the shuttle by
court depth each frame: a shuttle between the player and the net is
beyond him from the camera and his body occludes it; once it passes
behind him it draws over him. Sprites also depth-sort within a side.
@haritabh17

Copy link
Copy Markdown
Collaborator Author

Pushed a depth fix from review: the shuttle no longer slides across a near mascot's body on approach — near figures sandwich the shuttle by per-frame court depth, so the body occludes it at the hit and it draws over him only after passing behind. Re-verified with a frame burst during 3D playback (chip visibly clipped by Koala's body at contact) and a full green Maestro run of flow 06.

maestro inputText over gRPC intermittently hits DEADLINE_EXCEEDED on CI
emulators (flow 03 flaked with a green local run and a green previous
CI run). A real regression still fails twice.
@haritabh17
haritabh17 merged commit 7253c03 into badmlabs:main Jul 5, 2026
2 checks passed
@haritabh17
haritabh17 deleted the feat/3d-mascots branch July 5, 2026 23:31
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