docstr: Test cases:
  1. Where the mesh is completely outside the view
  frustrum so all faces are culled and z_clip_value = None.
  2. Where the part of the mesh is in the view frustrum but
  the z_clip value = 5.0 so all the visible faces are behind
  the clip plane so are culled instead of clipped.
docstr_tok: ["Test","cases",":","1",".","Where","the","mesh","is","completely","outside","the","view","frustrum","so","all","faces","are","culled","and","z_clip_value","=","None",".","2",".","Where","the","part","of","the","mesh","is","in","the","view","frustrum","but","the","z_clip","value","=","5.0","so","all","the","visible","faces","are","behind","the","clip","plane","so","are","culled","instead","of","clipped","."]
code: def test_mesh_outside_frustrum(self):
      """
      Test cases:
      1. Where the mesh is completely outside the view
      frustrum so all faces are culled and z_clip_value = None.
      2. Where the part of the mesh is in the view frustrum but
      the z_clip value = 5.0 so all the visible faces are behind
      the clip plane so are culled instead of clipped.
      """
      device = "cuda:0"
      mesh1 = torus(20.0, 85.0, 32, 16, device=device)
      mesh2 = torus(2.0, 3.0, 32, 16, device=device)
      for mesh, z_clip in [(mesh1, None), (mesh2, 5.0)]:
          tex = TexturesVertex(
              verts_features=torch.rand_like(mesh.verts_padded())
          )
          mesh.textures = tex
          raster_settings = RasterizationSettings(
              image_size=512, cull_to_frustum=True, z_clip_value=z_clip
          )
          R, T = look_at_view_transform(3.0, 0.0, 0.0)
          cameras = PerspectiveCameras(device=device, R=R, T=T)
          renderer = MeshRenderer(
              rasterizer=MeshRasterizer(
                  cameras=cameras, raster_settings=raster_settings
              ),
              shader=SoftPhongShader(cameras=cameras, device=device),
          )
          images = renderer(mesh)
          # The image should be white.
          self.assertClose(
              images[0, ..., :3], torch.ones_like(images[0, ..., :3])
          )
  
imports: import unittest
  import imageio
  import numpy
  import torch
  from pytorch3d.io import save_obj
  from pytorch3d.renderer.cameras import FoVPerspectiveCameras, look_at_view_transform, PerspectiveCameras
  from pytorch3d.renderer.lighting import PointLights
  from pytorch3d.renderer.mesh import clip_faces, ClipFrustum, convert_clipped_rasterization_to_original_faces, TexturesUV
  from pytorch3d.renderer.mesh.rasterize_meshes import _RasterizeFaceVerts
  from pytorch3d.renderer.mesh.rasterizer import MeshRasterizer, RasterizationSettings
  from pytorch3d.renderer.mesh.renderer import MeshRenderer
  from pytorch3d.renderer.mesh.shader import SoftPhongShader
  from pytorch3d.renderer.mesh.textures import TexturesVertex
  from pytorch3d.structures.meshes import Meshes
  from pytorch3d.utils import torus
  from .common_testing import get_tests_dir, load_rgb_image, TestCaseMixin
label_desc: Use image node_id 12 for calling the TestRenderMeshesClipping obj's underlying member method code with example usage: obj.test_mesh_outside_frustrum() without return types