3D模型文件格式之《STL格式介绍》
STL(Stereolithography 或 Standard Tessellation Language)是一种广泛用于3D打印和计算机辅助设计(CAD)的简单三维模型文件格式,由3D Systems公司于1987年开发。它以三角面片(Triangles)描述物体表面几何形状,是3D打印领域的事实标准格式。
1. 基本特性
- 仅存储几何信息:只包含顶点坐标和面片法向量,不保存颜色、纹理、材质等属性。
- 三角化表面:所有曲面均被离散为三角形面片(网格越密,精度越高)。
- 两种格式:
- ASCII STL:可读性强,文件较大。
- 二进制 STL:体积小,读写速度快(更常用)。
2. 文件结构
ASCII STL 示例
plaintext
solid object_name # 文件开头声明模型名称facet normal 0 0 1 # 三角面片的法向量 (x,y,z)outer loopvertex 0 0 0 # 三角形顶点1 (x,y,z)vertex 1 0 0 # 三角形顶点2vertex 0 1 0 # 三角形顶点3endloopendfacet... # 其他面片
endsolid object_name # 文件结束
二进制 STL 结构
- 文件头:80字节(通常为注释或空字符)。
- 面片数量:4字节无符号整数(表示总三角形数)。
- 每个面片数据:
- 法向量(3×4字节浮点数)。
- 3个顶点坐标(各3×4字节浮点数)。
- 属性字节(2字节,通常为0,保留字段)。
3. 关键特点
- 法向量方向:决定面的内外(符合右手法则,指向物体外部)。
- 水密性(Manifold)要求:3D打印需要模型为封闭的流形(无孔洞、无自相交)。
- 无层级结构:所有面片平铺存储,不支持分组或对象命名(ASCII格式中的
solid
名称通常被忽略)。
4. 优缺点
优点 | 缺点 |
---|---|
格式简单,兼容性极强 | 无颜色/材质信息 |
3D打印行业通用标准 | 网格冗余(相邻面片重复存储顶点) |
适合快速导出和切片处理 | 精度依赖三角化密度 |
5. 与PLY格式对比
特性 | STL | PLY |
---|---|---|
数据内容 | 仅三角面片+法线 | 支持顶点、面片、颜色等扩展属性 |
精度控制 | 依赖三角化细分程度 | 可保留原始几何数据 |
文件大小 | 二进制格式更紧凑 | ASCII格式更易读但较大 |
主要用途 | 3D打印、CAD快速交换 | 科研、图形学、扫描数据处理 |
6. 常见问题
- 非流形错误:STL模型出现裂缝或孔洞时,需用软件(如Netfabb、MeshLab)修复。
- 单位问题:STL无单位信息,需在3D打印前确认尺寸(通常默认为毫米)。
- 二进制乱码:若用文本编辑器打开二进制STL,会显示乱码(需专业软件查看)。
7. 相关工具
- 编辑/修复:MeshLab、Blender、Autodesk Meshmixer。
- 3D打印切片:Ultimaker Cura、PrusaSlicer、Simplify3D。
- 开发库:Python的
numpy-stl
、C++的OpenMesh
。
STL因其极简的设计,成为3D打印的黄金标准,但在需要更多元数据的场景中,PLY或OBJ格式可能更合适。