code: def lambertian_spotlight(v, vn, pos, dir, spot_exponent, camcoord=False, camera_t=None, camera_rt=None):
      
  
      if camcoord: # Transform pos and dir from camera to world coordinate system
          assert(camera_t is not None and camera_rt is not None)
          from opendr.geometry import Rodrigues
          rot = Rodrigues(rt=camera_rt)
          pos = rot.T.dot(pos-camera_t)
          dir = rot.T.dot(dir)
  
      dir = dir / ch.sqrt(ch.sum(dir**2.))
      v_minus_light = v - pos.reshape((1,3))
      v_distances = ch.sqrt(ch.sum(v_minus_light**2, axis=1))
      v_minus_light_normed = v_minus_light / v_distances.reshape((-1,1))
      cosangle = v_minus_light_normed.dot(dir.reshape((3,1)))
      light_dot_normal = ch.sum(vn*v_minus_light_normed, axis=1)
      light_dot_normal.label = 'light_dot_normal'
      cosangle.label = 'cosangle'
      result = light_dot_normal.ravel() * cosangle.ravel()**spot_exponent
      result = result / v_distances ** 2.
      result = maximum(result, 0.0)
  
      return result
docs: :param v: vertices
      :param vn: vertex normals
      :param light_pos: light position
      :param light_dir: light direction
      :param spot_exponent: spot exponent (a la opengl)
      :param camcoord: if True, then pos and dir are wrt the camera
      :param camera_t: 3-vector indicating translation of camera
      :param camera_rt: 3-vector indicating direction of camera
      :return: Vx1 array of brightness