code: def ray(
      point_2d: type_alias.TensorLike, name: str = "orthographic_ray"
  ) -> tf.Tensor:
      r"""Computes the 3d ray for a 2d point (the z component of the ray is 1).
  
      Computes the 3d ray \\((r_x, r_y, 1)\\) for a 2d point \\((x', y')\\) on the
      image plane. For an orthographic camera the rays are constant over the image
      plane with
  
      $$
      \begin{matrix}
      r_x = 0, & r_y = 0, & z = 1.
      \end{matrix}
      $$
  
      Note: In the following, A1 to An are optional batch dimensions.
  
      Args:
        point_2d: A tensor of shape `[A1, ..., An, 2]`, where the last dimension
          represents a 2d point.
        name: A name for this op that defaults to "orthographic_ray".
  
      Returns:
        A tensor of shape `[A1, ..., An, 3]`, where the last dimension represents
        a 3d ray.
  
      Raises:
        ValueError: If the shape of `point_2d` is not supported.
      """
      with tf.name_scope(name):
          point_2d = tf.convert_to_tensor(value=point_2d)
  
          shape.check_static(
              tensor=point_2d,
              tensor_name="point_2d",
              has_dim_equals=(-1, 2),
          )
  
          ones = tf.ones_like(point_2d[..., :1])
          # point_2d is multiplied by zero to ensure it has defined gradients.
          return tf.concat((point_2d * 0.0, ones), axis=-1)
  
file_path: graphics/tensorflow_graphics/rendering/camera/orthographic.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import tensorflow
  from tensorflow_graphics.util import export_api
  from tensorflow_graphics.util import shape
  from tensorflow_graphics.util import type_alias
label_desc: Use image node_id 2 for calling a global function with example usage: ray(point_2d, name) and returns: tf