Source: src/mcss/mechanism_pilot/synthetic.py · Plain text

src/mcss/mechanism_pilot/synthetic.py

"""Analytic fixture, independent of the network, exclusively for engineering smoke.

An infinite textured front plane supplies exact normalized-ray distance. These
three procedural fixtures are not real scenes, trained scenes, or confirmation.
Query fixtures must only be requested by the evaluator after sealing all states.
"""

import torch

from mcss.dynamic.types import OnlineObservation
from mcss.geometry import generate_rays, make_intrinsics
from mcss.types import Cameras


def fixture_camera(frame_id: int, image_size=(16, 16)):
    """Generate calibration without generating any RGB/depth labels."""
    pose = torch.eye(4)
    pose[0, 3] = 0.12 * frame_id
    pose[1, 3] = 0.06 * (frame_id % 3)
    camera = Cameras(make_intrinsics(image_size, 60.0), pose, image_size)
    return camera


def fixture(scene_index: int, frame_id: int, image_size=(16, 16)):
    camera = fixture_camera(frame_id, image_size)
    origins, directions = generate_rays(camera)
    distance = (4.0 + 0.7 * scene_index - origins[..., 2]) / directions[..., 2]
    points = origins + distance[..., None] * directions
    rgb = torch.stack(
        [0.5 + 0.4 * torch.sin(points[..., i % 2] * (i + 1) + scene_index) for i in range(3)],
        dim=0,
    )
    return camera, rgb, distance, points


def arrived_observation(scene_index: int, frame_id: int):
    if frame_id not in range(8):
        raise ValueError("Query fixture cannot enter arrived observations")
    camera, rgb, _, _ = fixture(scene_index, frame_id)
    return OnlineObservation(f"synthetic-{scene_index}", frame_id, rgb, camera)