diff --git a/workflows/simbox/core/cameras/custom_camera.py b/workflows/simbox/core/cameras/custom_camera.py index 2b92c66..e427431 100644 --- a/workflows/simbox/core/cameras/custom_camera.py +++ b/workflows/simbox/core/cameras/custom_camera.py @@ -32,16 +32,7 @@ class CustomCamera(Camera): reference_path: Reference prim path for camera mounting name: Camera name """ - # ===== Initialize camera ===== - super().__init__( - prim_path=prim_path, - name=name, - resolution=(cfg["params"]["resolution_width"], cfg["params"]["resolution_height"]), - *args, - **kwargs, - ) - - # ===== From cfg ===== + # ===== Pre-compute camera parameters ===== pixel_size = cfg["params"].get("pixel_size") f_number = cfg["params"].get("f_number") focus_distance = cfg["params"].get("focus_distance") @@ -50,18 +41,38 @@ class CustomCamera(Camera): height = cfg["params"].get("resolution_height") self.output_mode = cfg.get("output_mode", "rgb") - # ===== Compute and set camera parameters (before initialize to avoid aperture mismatch warnings) ===== - horizontal_aperture = pixel_size * 1e-3 * width - vertical_aperture = pixel_size * 1e-3 * height + horizontal_aperture = pixel_size * 1e-3 * width / 10.0 + vertical_aperture = pixel_size * 1e-3 * height / 10.0 focal_length_x = fx * pixel_size * 1e-3 focal_length_y = fy * pixel_size * 1e-3 - focal_length = (focal_length_x + focal_length_y) / 2 + focal_length = (focal_length_x + focal_length_y) / 2 / 10.0 - self.set_focal_length(focal_length / 10.0) + # Pre-set aperture on USD prim before Camera.__init__ to avoid mismatch warnings + from pxr import UsdGeom + import omni.usd + stage = omni.usd.get_context().get_stage() + cam_prim = stage.GetPrimAtPath(prim_path) + if cam_prim.IsValid(): + cam = UsdGeom.Camera(cam_prim) + cam.GetHorizontalApertureAttr().Set(horizontal_aperture * 10.0) # USD uses mm + cam.GetVerticalApertureAttr().Set(vertical_aperture * 10.0) + cam.GetFocalLengthAttr().Set(focal_length * 10.0) + + # ===== Initialize camera ===== + super().__init__( + prim_path=prim_path, + name=name, + resolution=(width, height), + *args, + **kwargs, + ) + + # ===== Set camera parameters ===== + self.set_focal_length(focal_length) self.set_focus_distance(focus_distance) self.set_lens_aperture(f_number * 100.0) - self.set_horizontal_aperture(horizontal_aperture / 10.0) - self.set_vertical_aperture(vertical_aperture / 10.0) + self.set_horizontal_aperture(horizontal_aperture) + self.set_vertical_aperture(vertical_aperture) self.set_clipping_range(0.05, 1.0e5) try: self.set_lens_distortion_model("pinhole")