import numpy as np from matplotlib import colormaps import rerun as rr from rerun.components import Material from scipy.spatial import transform def color_fn(x, cmap="tab10"): return colormaps[cmap](x % colormaps[cmap].N) def log_sample( root_name: str, traj: np.ndarray, K: np.ndarray, vertices: np.ndarray, faces: np.ndarray, normals: np.ndarray, caption: str, mesh_masks: np.ndarray, ): num_cameras = traj.shape[0] rr.log(root_name, rr.ViewCoordinates.RIGHT_HAND_Y_DOWN, timeless=True) rr.log( f"{root_name}/trajectory/points", rr.Points3D(traj[:, :3, 3]), timeless=True, ) rr.log( f"{root_name}/trajectory/line", rr.LineStrips3D( np.stack((traj[:, :3, 3][:-1], traj[:, :3, 3][1:]), axis=1), colors=[(1.0, 0.0, 1.0, 1.0)], ), timeless=True, ) for k in range(num_cameras): rr.set_time_sequence("frame_idx", k) translation = traj[k][:3, 3] rotation_q = transform.Rotation.from_matrix(traj[k][:3, :3]).as_quat() rr.log( f"{root_name}/camera/image", rr.Pinhole( image_from_camera=K, width=K[0, -1] * 2, height=K[1, -1] * 2, ), ) rr.log( f"{root_name}/camera", rr.Transform3D( translation=translation, rotation=rr.Quaternion(xyzw=rotation_q), ), ) rr.set_time_sequence("image", k) # Null vertices if vertices[k].sum() == 0: rr.log(f"{root_name}/char/char", rr.Clear(recursive=False)) rr.log(f"{root_name}/camera/image/bbox", rr.Clear(recursive=False)) continue rr.log( f"{root_name}/char/char", rr.Mesh3D( vertex_positions=vertices[k], indices=faces, vertex_normals=normals[k], mesh_material=Material(albedo_factor=color_fn(0)), ), )