def find_probe_to_update(self):
        """ Finds the next probe which requires an update, or returns None """
        if not self.probes:
            return None

        view_frustum = Globals.base.camLens.make_bounds()
        view_frustum.xform(Globals.base.cam.get_transform(Globals.base.render).get_mat())

        def rating(probe):
            return probe.last_update

        for candidate in sorted(self.probes, key=rating):
            if view_frustum.contains(candidate.bounds) == BoundingVolume.IF_no_intersection:
                continue
            return candidate
        return None
 Finds the next probe which requires an update, or returns None 
metadrive/render_pipeline/rpplugins/env_probes/probe_manager.py