Context
Occlusion today is one static solid per schedule. Occlusion.realize (src/multicam_sim/dsl/occlusion.py:115) instantiates a single Box/Sphere/plane sized at the target's mid-frame position, and the occluder shapes (src/multicam_sim/occluders.py:35,48) don't move. Real scenes have several occluders, occluders that move, and distractor bodies. Harder scenes are what make the downstream benchmark discriminating.
What to do
Extend the occlusion regime:
- multiple occluders per scene that compose (a point is blocked if any solid blocks its sightline);
- a moving occluder that follows a path over frames (reuse the motion DSL so the occluder position is per-frame, not a single mid-frame snapshot);
- a distractor entity helper: extra entities that clutter views without being the triangulation target.
Keep the visible hard-DLT contract intact (a point is visible iff in-view and unblocked by any occluder).
Acceptance criteria
- A scene with two static occluders blocks a point that either one covers; a test asserts per-camera
visible reflects the union.
- A moving occluder blocks the target only during the frames its path crosses the sightline (verified against known geometry).
- A distractor entity appears in the manifest as its own entity and never changes the target's
visible/xyz_gt.
ruff, mypy src, pytest -q green.
Pointers: dsl/occlusion.py:115, occluders.py:35,48, dsl/motion.py. Occlusion fields in DESIGN.md.
Context
Occlusion today is one static solid per schedule.
Occlusion.realize(src/multicam_sim/dsl/occlusion.py:115) instantiates a singleBox/Sphere/plane sized at the target's mid-frame position, and the occluder shapes (src/multicam_sim/occluders.py:35,48) don't move. Real scenes have several occluders, occluders that move, and distractor bodies. Harder scenes are what make the downstream benchmark discriminating.What to do
Extend the occlusion regime:
Keep the
visiblehard-DLT contract intact (a point isvisibleiff in-view and unblocked by any occluder).Acceptance criteria
visiblereflects the union.visible/xyz_gt.ruff,mypy src,pytest -qgreen.Pointers:
dsl/occlusion.py:115,occluders.py:35,48,dsl/motion.py. Occlusion fields in DESIGN.md.