class_docstr: Base class for all types of cameras.
  
  Args:
    min_render_distance (float): The minimum rendering distance for the camera
      `m`. `Default = 0.1`
    max_render_distance (float): The maximum rendering distance for the camera
      `m`. `Default = 1000.0`
class_docstr_tok: ["Base","class","for","all","types","of","cameras",".","Args",":","min_render_distance","(","float",")",":","The","minimum","rendering","distance","for","the","camera","`","m","`",".","`","Default","=","0.1","`","max_render_distance","(","float",")",":","The","maximum","rendering","distance","for","the","camera","`","m","`",".","`","Default","=","1000.0","`"]
docstr: Compute the image space coordinates [0, 1] for a given point in world coordinates.
docstr_tok: ["Compute","the","image","space","coordinates","[","0",",","1","]","for","a","given","point","in","world","coordinates","."]
code: def project_point(self, point3d, frame=None):
      """Compute the image space coordinates [0, 1] for a given point in world coordinates."""
      with self.at_frame(frame):
          homo_transform = np.linalg.inv(self.matrix_world)
          homo_intrinsics = np.zeros((3, 4), dtype=np.float32)
          homo_intrinsics[:, :3] = self.intrinsics
  
          point4d = np.concatenate([point3d, [1.0]])
          projected = homo_intrinsics @ homo_transform @ point4d
          image_coords = projected / projected[2]
          image_coords[2] = np.sign(projected[2])
          return image_coords
  
imports: import numpy
  import traitlets
  from kubric.core.assets import UndefinedAsset
  from kubric.core import objects
  from kubric.kubric_typing import ArrayLike
label_desc: Use image node_id 4 for calling the Camera obj's underlying member method code with example usage: obj.project_point(point3d, frame) and returns: image_coords