将 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

浙公网安备 33010602011771号