将 OBJ 资产转换为 glTF 2.0/glb格式模型

开始

如果还没有安装Node.js,请安装它,然后:

npm install -g obj2gltf

使用 obj2gltf 作为命令行工具:

obj2gltf -i model.obj

obj2gltf -i model.obj -o model.gltf

obj2gltf -i model.obj -o model.glb

使用 obj2gltf 作为库:

将 obj 模型转换为 gltf:

const obj2gltf = require("obj2gltf"); const fs = require("fs"); obj2gltf("model.obj").then(function (gltf) { const data = Buffer.from(JSON.stringify(gltf)); fs.writeFileSync("model.gltf", data); });

将 obj 模型转换为 glb

const obj2gltf = require("obj2gltf"); const fs = require("fs"); const options = { binary: true, }; obj2gltf("model.obj", options).then(function (glb) { fs.writeFileSync("model.glb", glb); });

材料类型

传统上,.mtl 文件格式描述了 Blinn-Phong 着色模型。同时,glTF 2.0 引入了基于物理的 材料。

支持三种着色模型:obj2gltf

如果材料类型是预先已知的,则应使用 or 标志指定。metallicRoughnessspecularGlossiness

如果模型中已存在照明信息,则应使用该标志。这将保存带有扩展名的 glTF。unlitKHR_materials_unlit

如果模型是使用 PBR 纹理创建的,则应传入 or 标志。 有关如何在 .mtl 文件中指定 PBR 值的更多信息,请参阅下表。metallicRoughnessspecularGlossiness

如果未提供这些标志,则假定 .mtl 包含传统的 Blinn-Phong 材质,这些材质将转换为金属粗糙度 PBR。 由于传统材料无法完美映射到 PBR 材料,因此可能会有一些质量损失。

通常,在 PBR 工作流程中,.mtl 文件可能不存在,或者其值可能已过时或不正确。 为方便起见,PBR 纹理可以直接提供给命令行。

将 mtl 插槽映射到着色模型

金属粗糙度

镜面光泽度

遮挡值

遮挡值

自发光颜色

自发光颜色

Kd

底色

漫反射颜色

Ks

金属值

镜面反射颜色

NS

粗糙度值

光泽度值

d

阿尔法

阿尔法

Tr

1.0 - 阿尔法

1.0 - 阿尔法

map_Ka

遮挡纹理

遮挡纹理

map_Ke

自发光纹理

自发光纹理

map_Kd

底色纹理

漫反射纹理

map_Ks

金属质感

镜面反射纹理

map_Ns

粗糙度纹理

光泽质感

map_Bump

正常纹理

正常纹理

用法

命令行标志:

描述

必填

-h,--help

显示帮助。

-i,--input

obj 文件的路径。

✅ 是的

-o,--output

转换后的 glTF 或 glb 文件的路径。

-b,--binary

另存为二进制 glTF (.glb)。

否,默认false

-s,--separate

写出单独的缓冲区和纹理,而不是将它们嵌入到 glTF 文件中。

否,默认false

-t,--separateTextures

仅写出单独的纹理。

否,默认false

--checkTransparency

通过查看每个像素的 alpha 通道,对纹理透明度进行更详尽的检查。默认情况下,纹理被认为是不透明的。

否,默认false

--secure

防止转换器读取输入 obj 目录之外的纹理或 mtl 文件。

否,默认false

--packOcclusion

将遮挡纹理打包到金属粗糙度纹理的红色通道中。

否,默认false

--metallicRoughness

mtl 文件中的值已经是金属粗糙度 PBR 值,不应应用任何转换步骤。金属存储在 Ks 和 map_Ks 槽中,粗糙度存储在 Ns 和 map_Ns 槽中。

否,默认false

--specularGlossiness

mtl 文件中的值已经是镜面光泽度 PBR 值,不应应用任何转换步骤。镜面反射存储在 Ks 和 map_Ks 插槽中,光泽度存储在 Ns 和 map_Ns 插槽中。glTF 将与扩展名一起保存。KHR_materials_pbrSpecularGlossiness

否,默认false

--unlit

glTF 将使用 KHR_materials_unlit 扩展名保存。

否,默认false

--metallicRoughnessOcclusionTexture

金属-粗糙度-遮挡纹理的路径,该纹理应覆盖 .mtl 文件中的纹理,其中遮挡存储在红色通道中,粗糙度存储在绿色通道中,金属色存储在蓝色通道中。模型将使用 pbrMetallicRoughness 材质保存。这在 .mtl 不存在或未设置为使用 PBR 材质的工作流程中通常很方便。适用于具有单一材料的模型。

--specularGlossinessTexture

应覆盖 .mtl 文件中纹理的高光光泽度纹理的路径,其中高光颜色存储在红色、绿色和蓝色通道中,高光光泽度存储在 alpha 通道中。模型将与使用KHR_materials_pbrSpecularGlossiness扩展名的材质一起保存。

--occlusionTexture

应覆盖 .mtl 文件中纹理的遮挡纹理的路径。

--normalTexture

应覆盖 .mtl 文件中纹理的法线纹理的路径。

--baseColorTexture

应覆盖 .mtl 文件中纹理的 baseColor/diffuse 纹理的路径。

--emissiveTexture

应覆盖 .mtl 文件中纹理的自发光纹理的路径。

--alphaTexture

应覆盖 .mtl 文件中纹理的 alpha 纹理的路径。

--input-up-axis

obj 的上轴。

--output-up-axis

转换后的 glTF 的上轴。

--triangle-winding-order-sanitization

应用三角绕组顺序消毒。

构建说明

运行测试:

npm run test

要在整个代码库上运行 ESLint,请运行:

npm run eslint

要在保存文件时自动运行 ESLint,请运行以下命令并将其在控制台窗口中保持打开状态:

npm run eslint-watch

运行测试覆盖率

覆盖范围使用纽约市。 跑:

npm run coverage

有关完整的覆盖范围详细信息,请打开 。coverage/lcov-report/index.html

测试和覆盖范围涵盖Node.js模块;它不包括很小的命令行界面。

生成文档

要生成文档,请执行以下作:

npm run jsdoc

glb格式官网

posted @ 2025-08-28 09:28  吃饭不忘  阅读(58)  评论(0)    收藏  举报