code: def ray_bundle_variables_to_ray_points(
      rays_origins: torch.Tensor,
      rays_directions: torch.Tensor,
      rays_lengths: torch.Tensor,
  ) -> torch.Tensor:
      """
      Converts rays parametrized with origins and directions
      to 3D points by extending each ray according to the corresponding
      ray length:
  
      E.g. for 2 dimensional input tensors `rays_origins`, `rays_directions`
      and `rays_lengths`, the ray point at position `[i, j]` is::
  
              rays_points[i, j, :] = (
                  rays_origins[i, :]
                  + rays_directions[i, :] * rays_lengths[i, j]
              )
  
      Note that both the directions and magnitudes of the vectors in
      `rays_directions` matter.
  
      Args:
          rays_origins: A tensor of shape `(..., 3)`
          rays_directions: A tensor of shape `(..., 3)`
          rays_lengths: A tensor of shape `(..., num_points_per_ray)`
  
      Returns:
          rays_points: A tensor of shape `(..., num_points_per_ray, 3)`
              containing the points sampled along each ray.
      """
      rays_points = (
          rays_origins[..., None, :]
          + rays_lengths[..., :, None] * rays_directions[..., None, :]
      )
      return rays_points
  
file_path: pytorch3d/pytorch3d/renderer/implicit/utils.py
imports: import dataclasses
  from typing import NamedTuple, Optional, Union
  import torch
label_desc: Use image node_id 2 for calling a global function with example usage: ray_bundle_variables_to_ray_points(rays_origins, rays_directions, rays_lengths) and returns: rays_points