Пример #1
0
    def __init__(self):
        AttributesContainerBase.__init__(self)

        attribute = self.define_attribute("CurrentFocalLength")
        attribute.construct_usd_attribute = lambda camera: UsdGeom.Camera(
            camera).GetFocalLengthAttr()
        attribute.get_from_usd = lambda usd_node: usd_unreal.utils.get_usd_attribute_value(
            usd_node.GetPrim(), "focalLength")
        attribute.unreal_property_path = [
            "camera_component", "current_focal_length"
        ]
        attribute.get_from_actor = lambda actor: actor.camera_component.current_focal_length

        attribute = self.define_attribute("ManualFocusDistance")
        attribute.construct_usd_attribute = lambda camera: UsdGeom.Camera(
            camera).GetFocusDistanceAttr()
        attribute.get_from_usd = lambda usd_node: usd_unreal.utils.get_usd_attribute_value(
            usd_node.GetPrim(), "focusDistance")
        attribute.unreal_property_path = [
            "camera_component", "focus_settings", "manual_focus_distance"
        ]
        attribute.get_from_actor = lambda actor: actor.camera_component.focus_settings.manual_focus_distance

        attribute = self.define_attribute("CurrentAperture")
        attribute.construct_usd_attribute = lambda camera: UsdGeom.Camera(
            camera).GetFStopAttr()
        attribute.get_from_usd = lambda usd_node: usd_unreal.utils.get_usd_attribute_value(
            usd_node.GetPrim(), "fStop")
        attribute.unreal_property_path = [
            "camera_component", "current_aperture"
        ]
        attribute.get_from_actor = lambda actor: actor.camera_component.current_aperture

        attribute = self.define_attribute("SensorWidth")
        attribute.construct_usd_attribute = lambda camera: UsdGeom.Camera(
            camera).GetHorizontalApertureAttr()
        attribute.get_from_usd = lambda usd_node: usd_unreal.utils.get_usd_attribute_value(
            usd_node.GetPrim(), "horizontalAperture")
        attribute.unreal_property_path = [
            "camera_component", "filmback", "sensor_width"
        ]
        attribute.get_from_actor = lambda actor: actor.camera_component.filmback.sensor_width

        attribute = self.define_attribute("SensorHeight")
        attribute.construct_usd_attribute = lambda camera: UsdGeom.Camera(
            camera).GetVerticalApertureAttr()
        attribute.get_from_usd = lambda usd_node: usd_unreal.utils.get_usd_attribute_value(
            usd_node.GetPrim(), "verticalAperture")
        attribute.unreal_property_path = [
            "camera_component", "filmback", "sensor_height"
        ]
        attribute.get_from_actor = lambda actor: actor.camera_component.filmback.sensor_height
Пример #2
0
    def test_AbcToUsd(self):
        """
        Test conversion of an ABC camera to USD.
        """

        # Open ABC file on USD stage and get camera
        abcFile = 'testAbcCamera.abc'
        self.assertTrue(abcFile)
        stage = Usd.Stage.Open(abcFile)
        self.assertTrue(stage)
        cam = stage.GetPrimAtPath('/World/main_cam')
        self.assertTrue(cam)
        
        # Convert to Gf camera to check the frustum
        gfCam = UsdGeom.Camera(cam).GetCamera(1.0)
        expected  = (
             Gf.Vec3d(-4.27349785298,       -2341.70939914119,      -10.0),
             Gf.Vec3d(4.27349785298,        -2341.70939914119,      -10.0),
             Gf.Vec3d(-4.27349785298,       -2338.29060085880,      -10.0),
             Gf.Vec3d(4.27349785298,        -2338.29060085880,      -10.0),
             Gf.Vec3d(-42734.97852984663,   -19433.99141193865,     -100000.0),
             Gf.Vec3d(42734.97852984663,    -19433.99141193865,     -100000.0),
             Gf.Vec3d(-42734.97852984663,   14753.99141193864,      -100000.0),
             Gf.Vec3d(42734.97852984663,    14753.99141193864,      -100000.0))
        self._CompareFrustumCorners(gfCam.frustum.ComputeCorners(), expected)
Пример #3
0
    def _getCurrentClippingRange(self):
        """Returns the current clipping range (near, far) that should be
        displayed in the spin boxes.

        If the view settings have values for freeCameraOverrideNear/Far, then
        those values should be chosen. Otherwise, take the clipping range from
        the current camera (whether a camera prim or the free camera)."""

        viewSettings = self._dataModel.viewSettings
        near = viewSettings.freeCameraOverrideNear
        far = viewSettings.freeCameraOverrideFar
        if near is not None and far is not None:
            return Gf.Range1f(near, far)

        cameraPrim = viewSettings.cameraPrim
        if cameraPrim and cameraPrim.IsActive():
            gfCam = UsdGeom.Camera(cameraPrim).GetCamera(
                self._dataModel.currentFrame)
            if near is None:
                near = gfCam.clippingRange.min
            if far is None:
                far = gfCam.clippingRange.max
        elif viewSettings.freeCamera:
            if near is None:
                near = viewSettings.freeCamera.near
            if far is None:
                far = viewSettings.freeCamera.far

        if near is None:
            near = 1.0
        if far is None:
            far = 1e6
        return Gf.Range1f(near, far)
Пример #4
0
    def _GetUsdCamera(self, cameraName):
        cameraPrimPath = '/UsdExportCameraTest/Cameras/%s' % cameraName
        cameraPrim = self.stage.GetPrimAtPath(cameraPrimPath)
        self.assertTrue(cameraPrim)

        usdCamera = UsdGeom.Camera(cameraPrim)
        self.assertTrue(usdCamera)

        return usdCamera
Пример #5
0
    def __init__(self, appController, item):
        PrimContextMenuItem.__init__(self, appController, item)

        self._nonActiveCameraPrim = None
        if len(self._selectionDataModel.getPrims()) == 1:
            prim = self._selectionDataModel.getPrims()[0]
            from pxr import UsdGeom
            cam = UsdGeom.Camera(prim)
            if cam:
                if prim != appController.getActiveCamera():
                    self._nonActiveCameraPrim = prim
Пример #6
0
    def test_RoundTrip(self):
        baseName = 'testShotFlattened'
        camPath = '/World/main_cam'

        oldUsdFile, abcFile, newUsdFile = (self._RoundTripFileNames(baseName))

        # USD -> ABC
        self.assertTrue(UsdAbc._WriteAlembic(oldUsdFile, abcFile))

        # ABC -> USD
        layer = Sdf.Layer.FindOrOpen(abcFile)
        self.assertTrue(layer)
        self.assertTrue(layer.Export(newUsdFile))
        layer = None

        # Open old and new USD file on stages
        oldStage = Usd.Stage.Open(oldUsdFile)
        self.assertTrue(oldStage)
        newStage = Usd.Stage.Open(newUsdFile)
        self.assertTrue(newStage)

        # Get old and new camera
        oldCam = oldStage.GetPrimAtPath(camPath)
        self.assertTrue(oldCam)
        newCam = newStage.GetPrimAtPath(camPath)
        self.assertTrue(newCam)

        # Iterate through frames
        for frame in range(
            int(oldStage.GetStartTimeCode()),
            int(oldStage.GetEndTimeCode()) + 1):

            # Convert to Gf camera
            oldGfCam = UsdGeom.Camera(oldCam).GetCamera(frame)
            newGfCam = UsdGeom.Camera(newCam).GetCamera(frame)

            # Compare frustums
            self._CompareFrustumCorners(oldGfCam.frustum.ComputeCorners(), 
                                        newGfCam.frustum.ComputeCorners())
Пример #7
0
    def _getCurrentFov(self):
        """Returns the current vertical field of view that should be displayed
        in the spin box.

        If a camera prim is active, reflect that value. Otherwise, use the
        current setting."""
        cameraPrim = self._dataModel.viewSettings.cameraPrim
        if cameraPrim and cameraPrim.IsActive():
            gfCam = UsdGeom.Camera(cameraPrim).GetCamera(
                self._dataModel.currentFrame)
            return gfCam.GetFieldOfView(Gf.Camera.FOVVertical)

        return self._dataModel.viewSettings.freeCameraFOV
Пример #8
0
    def _getCurrentAspectRatio(self):
        """Returns the current aspect ratio that should be displayed in the spin
        box.

        If a camera prim is active, reflect that value. Otherwise, use the
        current setting."""
        cameraPrim = self._dataModel.viewSettings.cameraPrim
        if cameraPrim and cameraPrim.IsActive():
            gfCam = UsdGeom.Camera(cameraPrim).GetCamera(
                self._dataModel.currentFrame)
            return gfCam.aspectRatio

        return self._dataModel.viewSettings.freeCameraAspect
Пример #9
0
    async def _create_kaya(self, task):
        done, pending = await asyncio.wait({task})
        if task in done:
            print("Loading Kaya Enviornment")
            # Create empty scene and camera
            self._editor.set_camera_position("/OmniverseKit_Persp", -300, 300, 100, True)
            self._editor.set_camera_target("/OmniverseKit_Persp", 0, 0, 0, True)
            self._stage = self._usd_context.get_stage()
            asset_path = "omni:/Isaac/Robots/Kaya"
            kaya_usd = asset_path + "/kaya.usd"
            speed_gain = 10.0


            setUpZAxis(self._stage)
            SetupPhysics(self._stage)
            PhysicsSchemaTools.addGroundPlane(self._stage, "/physics/groundPlane", "Z", 4000, Gf.Vec3f(-100, -100, -0.001), Gf.Vec3f(0.0))
            # add_ground_plane(self._stage, "/physics/ground_plane", axis='Z', size=[10000, 10000], position=[-1000, -1000, 0], color=[0, 0, 0])

            # Load Kaya model
            self.kaya = Kaya(
                stage=self._stage, dc=self._dc, usd_path=kaya_usd, prim_path="/World/kaya", speed_gain=speed_gain
            )
            UsdGeom.XformCommonAPI(self.kaya.prim).SetTranslate([0, 0, 10])
            # Create camera for Kaya
            self.realsense_camera = self._stage.DefinePrim(f"/World/kaya/base_link/Kaya_Body/RealSense_Bridge_ASM_1/realsense/realsense_camera", "Camera")
            vpi = omni.kit.viewport.get_viewport_interface()
            vpi.get_viewport_window().set_active_camera(str(self.realsense_camera.GetPath()))

            xform_api = UsdGeom.XformCommonAPI(self.realsense_camera)
            camera_api = UsdGeom.Camera(self.realsense_camera)
            camera_api.CreateFocalLengthAttr(6)
            xform_api.SetRotate((0, 180, 0))
            xform_api.SetTranslate((0, 5, 6))

            # Load Environment
            CreateBackground(
                self._stage,
                "omni:/Isaac/Environments/Simple_Warehouse/warehouse.usd",
                # "omni:/Isaac/Environments/Grid/gridroom_curved.usd",
                background_path="/World/warehouse",
                offset=Gf.Vec3d(700, -3600, 0)
            )


            # Create cube and place
            self.cube_prim = self._stage.DefinePrim(f"/World/Cube", "Cube")
            # result, path = omni.kit.commands.execute("CreateShapesPrimCommand", prim_type="Cube")
            # self.cube_prim = self._stage.GetPrimAtPath("/World/Cube")

            UsdGeom.XformCommonAPI(self.cube_prim).SetTranslate((-100, 200, 2))
            UsdGeom.XformCommonAPI(self.cube_prim).SetScale((1.5, 1.5, 1.5))
            colorAttr = UsdGeom.Gprim.Get(self._stage, "/World/Cube").GetDisplayColorAttr()
            colorAttr.Set([(1.0, 0.0, 0.0)])
            utils.setRigidBody(self.cube_prim, "convexHull", False)

            self.place_prim = self._stage.DefinePrim(f"/World/place", "Cube")
            UsdGeom.XformCommonAPI(self.place_prim).SetTranslate((-400, 500, -0.95))
            UsdGeom.XformCommonAPI(self.place_prim).SetScale((50, 50, 1))
            colorAttr = UsdGeom.Gprim.Get(self._stage, "/World/place").GetDisplayColorAttr()
            colorAttr.Set([(1.0, 0.0, 0.0)])
            #
            # Synthetic Data Generatorscc
            self.sd = omni.syntheticdata._syntheticdata
            self.sdi = self.sd.acquire_syntheticdata_interface()

            # Unlock Buttons
            self._train_btn.enabled = True
            self._capture_btn.enabled = True

            # start stepping after kaya is created
            self._editor_event_subscription = self._editor.subscribe_to_update_events(self._on_editor_step)