def test_extend(self): B = 5 mesh = TestMeshes.init_mesh(B, 30, 50) V = mesh._V num_faces = mesh.num_faces_per_mesh() num_verts = mesh.num_verts_per_mesh() faces_uvs_list = [ torch.randint(size=(f, 3), low=0, high=V) for f in num_faces ] verts_uvs_list = [torch.rand(v, 2) for v in num_verts] tex_uv = TexturesUV( maps=torch.ones((B, 16, 16, 3)), faces_uvs=faces_uvs_list, verts_uvs=verts_uvs_list, ) tex_mesh = Meshes(verts=mesh.verts_list(), faces=mesh.faces_list(), textures=tex_uv) N = 2 new_mesh = tex_mesh.extend(N) self.assertEqual(len(tex_mesh) * N, len(new_mesh)) tex_init = tex_mesh.textures new_tex = new_mesh.textures for i in range(len(tex_mesh)): for n in range(N): self.assertClose(tex_init.verts_uvs_list()[i], new_tex.verts_uvs_list()[i * N + n]) self.assertClose(tex_init.faces_uvs_list()[i], new_tex.faces_uvs_list()[i * N + n]) self.assertClose(tex_init.maps_padded()[i, ...], new_tex.maps_padded()[i * N + n]) self.assertClose( tex_init._num_faces_per_mesh[i], new_tex._num_faces_per_mesh[i * N + n], ) self.assertAllSeparate([ tex_init.faces_uvs_padded(), new_tex.faces_uvs_padded(), tex_init.faces_uvs_packed(), new_tex.faces_uvs_packed(), tex_init.verts_uvs_padded(), new_tex.verts_uvs_padded(), tex_init.verts_uvs_packed(), new_tex.verts_uvs_packed(), tex_init.maps_padded(), new_tex.maps_padded(), ]) with self.assertRaises(ValueError): tex_mesh.extend(N=-1)
def test_clone(self): tex = TexturesUV( maps=torch.ones((5, 16, 16, 3)), faces_uvs=torch.rand(size=(5, 10, 3)), verts_uvs=torch.rand(size=(5, 15, 2)), ) tex_cloned = tex.clone() self.assertSeparate(tex._faces_uvs_padded, tex_cloned._faces_uvs_padded) self.assertSeparate(tex._verts_uvs_padded, tex_cloned._verts_uvs_padded) self.assertSeparate(tex._maps_padded, tex_cloned._maps_padded) self.assertSeparate(tex.valid, tex_cloned.valid)