指南

什么是 OBJ 文件:OBJ转STL 的来源

更新 · 仅网格 OBJ 到 STL

了解 Wavefront OBJ 存什么,MTL 和 UVs 跟它是什么关系,以及什么时候为了打印把网格导出成 STL。在浏览器里本地转换。

OBJ 是从 Wavefront 出来的文本网格格式。你会看到它是一个 .obj 文件,有时旁边有 .mtl,还有 MTL 指向的一文件夹图片。Blender 这类建模软件在你要 Wavefront 时会写出它。切片软件有时也能打开它,但它们对 STL 往往更老实。这个页面是入门。首页的转换才把网格变成那份 STL。

文本里有什么

OBJ 按行组织。以 v 开头的行是顶点位置,每行三个数。以 f 开头的行是面,写成指向顶点列表的序号。一个面可以列三个序号(三角形),也可以更多(四边形或 n 边形)。有法线时用 vn。纹理坐标用 vt。一个面随后可能看起来像 f 1/1/1 2/2/2 3/3/3,把顶点、UV 和法线捆在一起。物体行(o)和组行(g)把文件拆成有名字的块。注释以 # 开头。

这些字母都不声明单位。数字只是数字。10 0 0 处的顶点可能是 10 mm,也可能是 10 m。转换要问你,以及有 毫米与米 这篇指南,就是因为这段沉默。文件不会替你把争论定下来。

因为它是文本,你可以打开一个小 OBJ 来读。正式的雕刻仍然是文本,而且可以非常大。本站在解析前拒绝超过 40 MB 的文件,免得一次放下就只因大小把标签页冻住。低于这个上限的密网格仍然可能很重。解析后的三角形数量会告诉你 STL 里将有什么。

材质是第二份文件

mtllib 行给出 MTL 文件的名字。MTL 里面可能有颜色和图片路径。那些图片不在 OBJ 里面。它们是磁盘上的普通图片。这个转换忽略 mtllib,忽略 usemtl,也忽略 UVs。我们写的 STL 格式没有可以诚实放贴图的地方。如果 OBJ 是游戏资产或渲染用的,把 OBJ、MTL 和图片放在一起。另做一份给切片软件的 STL。OBJ 与 STL 是这次拆分的决定表。

几个有名字的物体在 STL 里会变成一份三角形列表。对单次打印这很方便,如果你想要分开的零件,这就是问题。零件是分开的活,就导出分开的 OBJ。转换上的物体数量会告诉你合并了多少块网格。

我们能转换什么,不能转换什么

我们转换网格的面。四边形和 n 边形会三角化。点和线段会跳过。如果没有剩下有面积的东西,页面会说这个 OBJ 没有三角形面。

我们不转换 STEP 或 STP。那是边界表示的 CAD 文件。它们不是 v 和 f 行的列表,本站也没有 CAD 内核。从 CAD 程序导出网格 OBJ,再回来。

我们不转换 PNG 或 JPG。图片有像素,没有面。把一张图命名成 model.obj,如果后缀仍然是图片后缀,会在扩展名检查上失败;改了名但没有面的文件,会在空网格检查上失败。两条路都不会变成高度图。需要几何就在建模软件里建网格,再导出 OBJ。

已经是 STL 的文件应该继续是 STL。丢到这里会被拒绝,以免你不小心把一份打印文件“转换”成第二份打印文件。

从这份文件到切片软件

实际的顺序很短。在 Blender 里应用缩放后导出 OBJ。把它放到 转换 上。对齐单位。读包围盒和三角形数量。下载二进制 STL。在 Bambu Studio、Cura 或 PrusaSlicer 里打开那份 STL 并确认尺寸。更长的点击路径是 如何 OBJ转STL。最后你拿到的东西,写在 什么是 STL。

OBJ 是好的交换格式,却是存放“能打印”这个承诺的坏地方。面可以是反的。外壳可以是开的。转换仍然会写出三角形。想快速看朝向就看预览,长打印之前相信切片软件自己的检查。

问题

每个 .obj 都是三角形网格吗?

不是。OBJ 可以存多边形,有些文件只有点或线。这个转换需要面。解析时多边形会被三角化。没有面的文件会以明确的错误失败。

OBJ 旁边的 MTL 是什么?

MTL 是材质库。它给颜色和贴图文件起名字。这个转换不读它。如果还要渲染 OBJ,就留着它。做 STL 不需要它。

OBJ 会不会是伪装的 STEP 模型?

不会。STEP 是另一种 CAD 格式。把它改名成 .obj 不会让它变成网格。从 CAD 应用导出真正的 OBJ。

把这种 OBJ 转成 STL