Isaac sim rendering is getting slow after some time

I am using isaac sim for the following purpose

  1. Place a camera object in the scene
  2. Place a usd object in the scene
  3. Change the pose of object in a loop
  4. render the object in the camera on every loop iteration.
    Initially the speed was satisfactory but the speed gradually drops and takes more than 10 seconds to render a frame after some 1000 frames.
    Why is this happening? Is there any way to improve the rendering speed?

Hi @nv_rtx - The gradual slowdown in rendering speed could be due to a few reasons:

  1. Memory Usage: If each loop iteration is creating new objects or data and not properly releasing them, this could lead to increased memory usage over time, which could slow down the rendering.
  2. Complexity of the Scene: If the complexity of the scene is increasing with each loop iteration (for example, if more objects are being added), this could also slow down the rendering.
  3. GPU Utilization: If other processes are using the GPU, this could impact the rendering speed of Isaac Sim.

Here are a few suggestions to improve the rendering speed:

  1. Optimize Memory Usage: Make sure to properly release any resources that are no longer needed. This includes objects, textures, and other data.
  2. Optimize the Scene: Try to keep the scene as simple as possible. Remove any objects or details that are not necessary for the rendering.
  3. Use a More Powerful GPU: If possible, use a more powerful GPU. Isaac Sim can take advantage of the advanced features of NVIDIA RTX GPUs.
  4. Optimize the Rendering Settings: You might be able to improve the rendering speed by adjusting the rendering settings in Isaac Sim. For example, you could reduce the resolution, disable ray tracing, or adjust other settings.
  5. Use a Profiler: Use a profiler to identify any bottlenecks in your code or in the rendering process.
    def set_pose(self,trans, rot):
        self.ros_world.step(render=True)
        rot = rot_utils.quats_to_euler_angles(rot)
        rot = rot*180.0/np.pi
        with rep.get.prim_at_path("/World/bolt"):
            rep.modify.pose(position=trans,
                            rotation=rot)
        self.ros_world.step(render=True)
        self.ros_world.render()
        
    
    def render(self):
        self.ros_world.step(render=True)
        self.ros_world.render()
        image = self.camera.get_rgba()
        image = image[:, :, 0:3]
        resized = cv2.resize(image, (640,480), interpolation = cv2.INTER_AREA)
        return resized

after setting the world I am calling set_pose first to change the position of the object. Then using render function I am getting the image. This happens in loop in an another program. Do you think I am missing something here

Hi @nv_rtx - Your code seems to be fine at first glance. However, there are a few things you might want to consider:

  1. Make sure that the trans and rot values you are passing to the set_pose function are correct and within the expected range.
  2. You are calling self.ros_world.step(render=True) twice in the set_pose function and once in the render function. This might be unnecessary and could potentially slow down your program, especially if you are calling these functions in a loop. You might want to consider removing the extra step calls.
  3. You are resizing the image in the render function. This could also potentially slow down your program if you are doing it in a loop. You might want to consider resizing the images in a separate step after you have collected all of them.
  4. Make sure that the path “/World/bolt” is correct and that the object you are trying to modify actually exists in your world.
  5. If you are still experiencing performance issues, it might be a good idea to profile your code to see where the bottleneck is. You can use Python’s built-in cProfile module for this.
  6. Lastly, make sure that your system has enough resources (CPU, GPU, memory) to run the simulation. If your system is under heavy load, it might slow down the simulation.