4 分钟 · 中文笔记YouTube 标准许可
本期视频介绍了 NVIDIA Kaolin 库新增的 `SurfaceMesh` 类,旨在解决 PyTorch 工作流中管理 3D 网格属性(如顶点、面、法线等)的复杂性。该功能支持从 OBJ、USD 和 GLTF 格式一致地导入网格,自动计算法线等属性,并简化了索引和批处理操作。
你会学到
- Kaolin 库的 `SurfaceMesh` 类用于简化 PyTorch 中 3D 网格属性的管理。
- 支持读取常见的 3D 文件格式,包括 USD、GLTF 和 OBJ。
- 默认加载时仅包含基础几何数据(顶点 vertices 和面 faces),法线等属性需后续处理或自动计算。
- 对于包含三角形和四边形的混合网格,可通过设置 `triangulate=True` 将其统一转换为三角形网格。
- `SurfaceMesh` 支持自动计算(auto-computable)属性,例如访问 `face_vertices` 或 `face_normals` 时会自动生成对应的张量。
- 支持常见的网格操作,包括转换为批次表示(batch representation)、拼接(concatenate)以及在不同设备(如 CPU 到 CUDA)之间转换。
步骤与时间轴
- 1:07 · 加载网格文件
使用 Kaolin 加载 3D 网格文件。支持 USD、GLTF 和 OBJ 格式。加载后,默认只包含基础几何属性:`vertices`(顶点位置)和 `faces`(顶点索引)。可以通过打印网格对象查看张量的大小、类型和设备位置。 - 1:44 · 处理混合拓扑网格
如果网格同时包含三角形和四边形,无法直接用二维索引张量表示 `faces`。在加载时指定 `triangulate=True`,可以将所有面转换为三角形。转换后,面的数量会增加(四边形变为两个三角形),且所有面均为三角形。 - 2:15 · 访问自动计算属性
`SurfaceMesh` 允许在访问时自动计算某些属性。例如,直接访问 `mesh.face_vertices` 会返回每个面中每个顶点的 3D 坐标(XYZ)。同样,访问 `face_normals` 会根据顶点位置自动计算面法线。如果网格文件本身包含法线数据,建议直接加载而非自动计算。 - 3:08 · 执行常见网格操作
演示了三种常见操作:
1. **批次转换**:将网格转换为批次表示,除 `faces` 外,其他属性会增加一个批次维度。
2. **设备转换**:可以将整个网格或特定属性(如仅 `vertices`)转换到指定设备(如 CUDA)。例如,使用 `mesh.to('cuda')` 将所有属性移至 GPU。
3. **拼接**:支持将多个网格作为固定策略进行拼接。
要点与注意
- 如果网格包含四边形,务必使用 `triangulate=True` 参数加载,否则 `faces` 张量无法正确表示混合拓扑。
- 对于法线等属性,如果源文件已提供,优先加载现有数据;只有在缺失时才依赖自动计算功能。
- 在将网格移至 GPU 时,可以只转换部分属性(如仅顶点),以节省显存或满足特定计算需求。
- 参考 Kaolin GitHub 仓库中的 `working_with_meshes.ipynb` 教程,了解梯度流过自动计算属性等高级功能。
适合谁看
国内 CG、3D、AI 创作从业者,特别是使用 PyTorch 进行 3D 深度学习开发的人员。
本页是根据公开视频整理的中文学习笔记,视频版权归原作者 NVIDIA Developer 所有。如有问题请联系我们。
© 版权声明
本文由 CG热榜基于公开资料重新撰写,原始资料版权归原作者,来源见文末。