Meshes对象表示a batch of triangulated meshes,它是PyTorch3D的大部分功能的核心。并不要求一个batch中的网格的顶点或面的数量必须一致。Meshes对象可以存储与网格有关的其他信息,例如面的法线、面积和纹理。
两种常见的存储单个网格的文件格式是".obj "和".ply "文件
Meshes 是 PyTorch3D 中提供的一种独特的数据结构,用于处理大小不同的批量网格。
TexturesUV 是存储网格顶点 UV 和纹理贴图的辅助数据结构。
verts, faces, aux = load_obj(filename)
verts:(V,3)的张量,faces.verts_idx:面的每个顶点索引的(F,3)张量。aux是一个可以包含法线、UV坐标、材质颜色和纹理(如果有的话)的对象,并且面还可以在其NamedTuple结构中包含这些法线、纹理和材质的索引。
#一个包含单个网格的Meshes对象可以由顶点和面创建
meshes = Meshes(verts=[verts], faces=[faces.verts_idx])
如果.obj中有纹理信息,可以用来初始化一个Textures类,并传递给Meshes构造函数。目前,支持为整个网格加载纹理贴图,例如:
verts_uvs = aux.verts_uvs[None, ...] # (1, V, 2)
faces_uvs = faces.textures_idx[None, ...] # (1, F, 3)
tex_maps = aux.texture_images
# tex_maps is a dictionary of {material name: texture image}.
# Take the first image:
texture_image = list(tex_maps.values())[0]
texture_image = texture_image[None, ...] # (1, H, W, 3)
# Create a textures object
tex = Textures(verts_uvs=verts_uvs, faces_uvs=faces_uvs, maps=texture_image)
# Initialise the mesh with textures
meshes = Meshes(verts=[verts], faces=[faces.verts_idx], textures=tex)
由于目前只用到.obj就先不记录.ply的用法啦。