STL(STereoLithography,译作:立体光刻)是由3D Systems软件公司创立,原本用于立体光刻电脑辅助设计软件的文件格式[1][2][3]。它有一些逆向首字母缩略词如“标准三角语言”(Standard Triangle Language)、“标准曲面细分语言”(Standard Tessellation Language)、“立体光刻语言”(STereolithography Language)和“立体光刻曲面细分语言”[4]。许多套装软件支持这种格式,它被广泛用于快速成型、3D打印和电脑辅助制造[5]。STL文件仅描述三维物体的表面几何形状,没有颜色、材质贴图或其它常见三维模型的属性。STL格式有文字和二进码两种型式。二进码型式因较简洁而较常见。[6]
STL档描述原始非结构化三角网格由表面单位法线和由右手定则排序的顶点用三维三角形笛卡儿座标系。STL座标必须是正数,没有尺度信息,且计量单位为任意的。[7]
文字(ASCII)STL
文字STL档以下列来开始
solid name
name是个可有可无的字符串。不过,即使省略了name,solid后的空白必须存在。这列之后跟着任意数量的以下列方式表示的三角形:
facet normal ni nj nk outer loop vertex v1x v1y v1z vertex v2x v2y v2z vertex v3x v3y v3z endloop endfacet
当中,每个n或v都是正负-假数-"e"-正负-幂数型式的浮点数,如"2.648000e-002"(注意:每个v都必须不是负数)。文件以
endsolid name
来结束。格式结构暗示其他可能的存在(如,不只一个loop定义同一个小面(facet),或一个loop具有三个以上顶点)。然而在实践中,所有小面都是简单三角形。
除了数字或单词内以外,文件中任何地方都可使用空白字符(空格、tab、换列)。"facet"和"normal"以及"outer"和"loop"之间的空白是必要的。[6]
二进码 STL
由于文字STL档会非常大,因此有二进码版的STL。二进码STL档有个80字符的标头(内容通常都被忽略但绝不可用"solid"来开始!这样会使不少软件认为这是文字STL档)。接着是一个4字节无号整数,它表示这文件中的三角形数。再来是描述每个三角形的信息。之后就结束。
每个三角形以12个32位浮点数来描述:3个描述法线,接着三顶点的X/Y/Z座标─正如文字STL一样。之后是一个2字节无号整数(unsigned short),它代表“属性字符数”─在标准格式中它该是0,因为多数软件不明白其它事项。[6]
虽然文件内没有说明,浮点数以little-endian的IEEE 754表示。
UINT8[80] – Header UINT32 – Number of triangles
foreach triangle REAL32[3] – Normal vector REAL32[3] – Vertex 1 REAL32[3] – Vertex 2 REAL32[3] – Vertex 3 UINT16 – Attribute byte count end
二进码STL的颜色
二进码STL至少有两种非标准方式来加上颜色信息:
- VisCAM和SolidView软件用每个三角形后的2个“属性字符数”存放15比特RGB色码:
- 比特 0到 4是蓝的强度(0~31)。
- 比特 5到 9是绿的强度(0~31)。
- 比特10到14是红的强度(0~31)。
- 比特15是1表颜色有效;0表无效(同正常的STL档)。
- Materialise Magics软件用开头的80位标头表示模型整体颜色。若有使用颜色,标头某处会是文字字符串"COLOR="接着4字节的RGBA(透明度),值域为0–255。这是整个模型的颜色,每个小面可以另外指定。这软件还可以指定更详细的表面特性,即物质(电脑图形)。在"COLOR=RGBA"后可加上ASCII字符串",MATERIAL=",接着3颜色(3×4位):
先是漫反射的颜色,第二个是反射高光颜色,第三是环境光。物质设置优于颜色。每个小面的颜色是用三角形后的2个“属性字符数”以下列方式来存放:
- 比特 0到 4是红的强度(0~31)。
- 比特 5到 9是绿的强度(0~31)。
- 比特10到14是蓝的强度(0~31)。
- 比特15是0表用小面颜色;1表用模型颜色。
上述两种小面颜色信息中,2比特里的红/绿/蓝顺序相反,因此,虽然这些格式容易兼容,反序表示并非如此!更糟的是:通用的STL读取器不能自动分别它们!也无法指定小面有透明度!因为没有α值!虽然对目前的快速原型机而言,这不重要。
小面法线
文字(ASCII)和二进码版的STL,小面法线必项是指向模型外部的单位向量。若设为(0,0,0),多数软件会自动以三角形三顶点的顺序根据右手定则计算法线。一些STL读取器(如:Art of Illusion的STL外挂)会检查小面的法线与它们用右手定则算出来的相符。若不同,会警告用户。有的软件会完算用自己根据右手定则算的。虽然可以不使用右手定则来计算法线的情况罕见,为了完全兼容,文件都应提供小面法线及正确指定顶点顺序。一个出名的例外是SolidWorks,它用法线当浓淡处理。
历史
立体光刻机是能用一系列切片来构建任何体积形状的3D打印机。这些机器需要一系列用凝固材料填充在封闭的2D轮廓中,最后再与各层熔合在一起。对这样的机器而言,自然的文件格式是一系列对应不同Z值的封闭的多边形。然而,因为改变层的厚度可能会得到更快(虽然不太精确)的构建,若能以可在必要水平切片的封闭多面体来定义模型,会更好。
STL文件格式看似能用多边形来定义多面体,但在实用上它只被用过三角形。这表示ASCII协议的语法是多余的。
要能正确组成3D体,STL档表示的表面必须是封闭同相连的,且每个边都正好是二个三角形的一部分,且没有交叉。 由于STL语法对此属性不严紧,应用程序能忽视其封闭性。
作为切片的该软件的封闭性仅事项只要三角形需要它以确保所得到的二维的多边形是封闭的。对切片三角形后须确保所得到的2D多边形是封关闭的软件而言,封闭性才会重要。这类软件有时会移动接近的顶点到同一位置,来清理小的差异。结果是不可预测的,但它往往足够。
其它使用领域
STL文件格式简单且容易输出。因此,许多电脑辅助设计(CAD)系统能输出STL文件格式。虽然输出简单产生,一些联结性信息却被丢弃!例如:A和B在CAD系统是相异、但座标恰好相同的两点。STL只输出点的座标,因此点A和B在STL就有同的表示。还存在其他的问题。
许多电脑辅助制造(CAM)系统必须是三角形化的模型。STL文件格式不是存储器和计算上最有效转换资料的方法,但STL常被CAM系统用于输入三角化的几何。这格式随手可得,所以CAM系统用它。为了使用资料,CAM系统可能要重建连接性。重建会导致误差。
STL也能在CAD、CAM和计算环境(如:Mathematica)间交换资料。
支持STL的软件
参见
- Additive Manufacturing文件格式 (AMF), 一个自然支持颜色、多种物质和星座的较新标准。
- PLY, 一个比多数立体光刻规格提供更弹性的格式。
- Wavefront .obj文件, 一个扩展名为.obj的3D几何定义文件格式。
- X3D, 免专利费的三维电脑图形ISO标准。
参考资料
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.