|  | @@ -416,94 +416,73 @@ def set_environment(scene_data):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def create_cameras(scene_data):
 | 
	
		
			
				|  |  | -    # Get the 05_Cameras collection, or create it if it doesn't exist
 | 
	
		
			
				|  |  | +    # # Get the 05_Cameras collection, or create it if it doesn't exist
 | 
	
		
			
				|  |  |      collection_name = "05_Cameras"
 | 
	
		
			
				|  |  |      if collection_name in bpy.data.collections:
 | 
	
		
			
				|  |  |          collection = bpy.data.collections[collection_name]
 | 
	
		
			
				|  |  |      else:
 | 
	
		
			
				|  |  |          return
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    for camera_data in scene_data["scene"]["cameras"]:
 | 
	
		
			
				|  |  | -        if camera_data["properties"]["active"]:
 | 
	
		
			
				|  |  | -            # Create a new camera object
 | 
	
		
			
				|  |  | -            # bpy.ops.object.camera_add()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            camera = bpy.data.objects["Camera"]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # Get the newly created camera
 | 
	
		
			
				|  |  | -            # camera = bpy.context.object
 | 
	
		
			
				|  |  | -            camera_position = bpy.data.objects["Camera_Transform"]
 | 
	
		
			
				|  |  | -            camera_rotation = bpy.data.objects["Camera_Rotation"]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            position = camera_data["properties"]["transform"]["position"]
 | 
	
		
			
				|  |  | -            camera_position.location.x = position[0]
 | 
	
		
			
				|  |  | -            camera_position.location.y = -position[2]
 | 
	
		
			
				|  |  | -            camera_position.location.z = position[1]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            rotation = camera_data["properties"]["transform"]["rotation"]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            rotation_euler = Euler(
 | 
	
		
			
				|  |  | -                (
 | 
	
		
			
				|  |  | -                    math.radians(rotation[0] - 90),
 | 
	
		
			
				|  |  | -                    math.radians(rotation[2]),
 | 
	
		
			
				|  |  | -                    math.radians(rotation[1]),
 | 
	
		
			
				|  |  | -                ),
 | 
	
		
			
				|  |  | -                "XYZ",
 | 
	
		
			
				|  |  | -            )
 | 
	
		
			
				|  |  | +# Assuming `scene_data` and `collection` are already defined
 | 
	
		
			
				|  |  | +for camera_data in scene_data["scene"]["cameras"]:
 | 
	
		
			
				|  |  | +    # Create a new camera object
 | 
	
		
			
				|  |  | +    bpy.ops.object.camera_add()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Get the newly created camera
 | 
	
		
			
				|  |  | +    camera = bpy.context.object
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Set the camera's name
 | 
	
		
			
				|  |  | +    camera.name = camera_data["name"]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Set the camera's position
 | 
	
		
			
				|  |  | +    position = camera_data["properties"]["transform"]["position"]
 | 
	
		
			
				|  |  | +    camera.location.x = position[0]
 | 
	
		
			
				|  |  | +    camera.location.y = -position[2]
 | 
	
		
			
				|  |  | +    camera.location.z = position[1]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Set the camera's rotation
 | 
	
		
			
				|  |  | +    rotation = camera_data["properties"]["transform"]["rotation"]
 | 
	
		
			
				|  |  | +    local_rotation = Euler(
 | 
	
		
			
				|  |  | +        (
 | 
	
		
			
				|  |  | +            math.radians(rotation[0]),
 | 
	
		
			
				|  |  | +            math.radians(rotation[1]),
 | 
	
		
			
				|  |  | +            math.radians(rotation[2]),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        "XYZ",
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            camera_rotation.rotation_euler = rotation_euler
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # Set the camera's name
 | 
	
		
			
				|  |  | -            # camera.name = camera_data["name"]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # Set the camera's position
 | 
	
		
			
				|  |  | -            # position = camera_data["properties"]["transform"]["position"]
 | 
	
		
			
				|  |  | -            # camera.location.x = position[0]
 | 
	
		
			
				|  |  | -            # camera.location.y = -position[2]
 | 
	
		
			
				|  |  | -            # camera.location.z = position[1]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # Set the camera's rotation
 | 
	
		
			
				|  |  | -            # rotation = camera_data["properties"]["transform"]["rotation"]
 | 
	
		
			
				|  |  | -            # local_rotation = Euler(
 | 
	
		
			
				|  |  | -            #     (
 | 
	
		
			
				|  |  | -            #         math.radians(rotation[0]),
 | 
	
		
			
				|  |  | -            #         math.radians(rotation[1]),
 | 
	
		
			
				|  |  | -            #         math.radians(rotation[2]),
 | 
	
		
			
				|  |  | -            #     ),
 | 
	
		
			
				|  |  | -            #     "XYZ",
 | 
	
		
			
				|  |  | -            # )
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # # Apply the local rotation to the camera
 | 
	
		
			
				|  |  | -            # camera.rotation_euler = local_rotation
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # # Update the camera's matrix_world to apply the local transformation
 | 
	
		
			
				|  |  | -            # camera.matrix_world = camera.matrix_basis
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # # Calculate the global rotation
 | 
	
		
			
				|  |  | -            # global_rotation = camera.matrix_world.to_euler()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # # Set the camera's rotation to the global rotation
 | 
	
		
			
				|  |  | -            # camera.rotation_euler = global_rotation
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # Set the camera's lens properties
 | 
	
		
			
				|  |  | -            lens = camera_data["properties"]["lens"]
 | 
	
		
			
				|  |  | -            type_mapping = {
 | 
	
		
			
				|  |  | -                "PERSPECTIVE": "PERSP",
 | 
	
		
			
				|  |  | -                "ORTHOGRAPHIC": "ORTHO",
 | 
	
		
			
				|  |  | -                "PANORAMIC": "PANO",
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            camera.data.type = type_mapping.get(lens["type"].upper(), "PERSP")
 | 
	
		
			
				|  |  | -            camera.data.angle = math.radians(lens["fov"])
 | 
	
		
			
				|  |  | -            camera.data.clip_start = lens["near"]
 | 
	
		
			
				|  |  | -            camera.data.clip_end = lens["far"]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # Add the camera to the 05_Cameras collection
 | 
	
		
			
				|  |  | -            # collection.objects.link(camera)
 | 
	
		
			
				|  |  | -            # bpy.context.scene.collection.objects.unlink(camera)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            # Set the camera as the active camera if "active" is true
 | 
	
		
			
				|  |  | -            # if camera_data["properties"]["active"]:
 | 
	
		
			
				|  |  | -            #     bpy.context.scene.camera = camera
 | 
	
		
			
				|  |  | +    # Apply the local rotation to the camera
 | 
	
		
			
				|  |  | +    camera.rotation_euler = local_rotation
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Update the camera's matrix_world to apply the local transformation
 | 
	
		
			
				|  |  | +    camera.matrix_world = camera.matrix_basis
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Calculate the global rotation
 | 
	
		
			
				|  |  | +    global_rotation = camera.matrix_world.to_euler()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Set the camera's rotation to the global rotation
 | 
	
		
			
				|  |  | +    camera.rotation_euler = global_rotation
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Set the camera's lens properties
 | 
	
		
			
				|  |  | +    lens = camera_data["properties"]["lens"]
 | 
	
		
			
				|  |  | +    type_mapping = {
 | 
	
		
			
				|  |  | +        "PERSPECTIVE": "PERSP",
 | 
	
		
			
				|  |  | +        "ORTHOGRAPHIC": "ORTHO",
 | 
	
		
			
				|  |  | +        "PANORAMIC": "PANO",
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    camera.data.type = type_mapping.get(lens["type"].upper(), "PERSP")
 | 
	
		
			
				|  |  | +    camera.data.angle = math.radians(lens["fov"])
 | 
	
		
			
				|  |  | +    camera.data.clip_start = lens["near"]
 | 
	
		
			
				|  |  | +    camera.data.clip_end = lens["far"]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Add the camera to the 05_Cameras collection
 | 
	
		
			
				|  |  | +    collection.objects.link(camera)
 | 
	
		
			
				|  |  | +    bpy.context.scene.collection.objects.unlink(camera)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Set the camera as the active camera if "active" is true
 | 
	
		
			
				|  |  | +    if camera_data["properties"]["active"]:
 | 
	
		
			
				|  |  | +        bpy.context.scene.camera = camera
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def set_output_paths(base_path, project_name):
 |