Skip to content

Richer occlusion and distractor regimes (multiple / moving occluders) #32

Description

@bamdadd

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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions