def _build_scene()

in gym_genesis/tasks/cube_stack.py [0:0]


    def _build_scene(self, num_envs, env_spacing):
        if not gs._initialized:
            gs.init(backend=gs.gpu, precision="32")

        self.scene = gs.Scene(
            sim_options=gs.options.SimOptions(dt=0.01),
            rigid_options=gs.options.RigidOptions(box_box_detection=True),
            show_viewer=False,
        )

        self.plane = self.scene.add_entity(gs.morphs.Plane())

        # === Main task cubes ===
        self.cube_1 = self.scene.add_entity(
            gs.morphs.Box(
                size=(0.04, 0.04, 0.04),
                pos=(0.6, -0.1, 0.02),
            ),
            surface=gs.surfaces.Plastic(color=(1, 0, 0)),
        )

        self.cube_2 = self.scene.add_entity(
            gs.morphs.Box(
                size=(0.04, 0.04, 0.04),
                pos=(0.45, 0.15, 0.02),
            ),
            surface=gs.surfaces.Plastic(color=(0, 1, 0)),
        )

        # === Distractor cubes ===
        self.distractor_cubes = []
        for _ in range(3):  # add 3 distractors (shared across batched envs)
            xy = np.random.uniform(low=[0.3, -0.3], high=[0.7, 0.3])
            cube = self.scene.add_entity(
                gs.morphs.Box(
                    size=(0.04, 0.04, 0.04),
                    pos=(xy[0], xy[1], 0.02),  # dummy, randomized in reset()
                ),
                surface=gs.surfaces.Plastic(color=(0.5, 0.5, 0.5)),  # gray
            )
            self.distractor_cubes.append(cube)

        # === Franka arm ===
        self.franka = self.scene.add_entity(
            gs.morphs.MJCF(file="xml/franka_emika_panda/panda.xml"),
            vis_mode="collision",
        )
        
        if self.enable_pixels:
            self.cam = self.scene.add_camera(
                res=(self.observation_width, self.observation_height),
                pos=(3.5, 0.0, 2.5),
                lookat=(0, 0, 0.5),
                fov=30,
                GUI=False
            )

        self.scene.build(n_envs=num_envs, env_spacing=env_spacing)
        self.motors_dof = np.arange(7)
        self.fingers_dof = np.arange(7, 9)
        self.eef = self.franka.get_link("hand")