Far bodies draw off a flattened scale curve, and the camera leans into the deep court

Oliver: the far-side opponent is barely visible in portrait, and the lens was
already at its measured ceiling. TUNE.farK (0.25) grows far bodies ~20% while
the court keeps the true projection — the 16-bit tennis trick, anchored so the
near player is untouched. TUNE.farCamY/farCamZ add a broadcast lean while the
ball is on the far half, pivoted about the player's feet (fOff) so the pull
room the apron math promised never moves. Both live in the T panel; both
awaiting the phone verdict — see the PROJECT.md session log.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-13 16:18:53 +02:00
1 parent 031a203bb4
commit e571e46d92
4 files changed
+82 -11

No files matched your search

+13
View File
@@ -274,6 +274,19 @@ export const TUNE = {
aimCamY: 0, // m of camera height change (negative drops you into the shot)
aimCamZ: 0, // m of camera dolly (negative = closer). Both 0 = the camera holds still,
// which is where Oliver landed: the aim graphics carry the read on their own.
// FAR-BODY READABILITY. Bodies (never the court) draw off a flattened scale curve:
// s' = s * (sNear/s)^farK, anchored at the player's deepest stance so HE is untouched. The court
// lines carry the perspective; an oversized far body reads as "legible", not "wrong" — the
// 16-bit tennis trick. It buys what the lens could not: the camZ-55 note above fitViewport
// measured the court being spent (umpire clipped, top-down look) for the same far pixels.
farK: 0.25, // 0 = pure projection. 0.25 grows the far-baseline opponent ~21%.
// BALL-FOLLOW LEAN (tennis + match only): while the ball is on the FAR half the camera eases
// toward camY+farCamY / camZ+farCamZ — a broadcast-style lean into the deep court. It pivots
// about the near player's feet (see fOff in render.js), so his stance and the pull room the
// apron math promised never move. Both 0 = the camera holds still. Defaults are deliberately
// shy of visible: the phone (not the desktop pane) is where a moving camera gets its verdict.
farCamY: 0.35, // m of camera rise while the ball is far (steepens the look-down)
farCamZ: -0.6, // m of camera dolly while the ball is far (negative = closer)
backstopZ: -1.8, // z of the far backstop — must sit IN FRONT of the -2 retire line, or balls die before they reach it
backstopKeep: 0.55, // pace a ball keeps after the rebound — still lethal, slower
backstopPop: 1.8, // m/s of lift off the fence, so the rebound travels back instead of dying at the net posts