GLTF-pipeline

gltf-pipeline可用作命令行工具或 Node.js 模块。

开始

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

npm install -g gltf-pipeline

使用 gltf-pipeline 作为命令行工具:

将 glTF 转换为 glb

gltf-pipeline -i model.gltf -o model.glb

gltf-pipeline -i model.gltf -b

转换好的模型可使用GLTF编辑器进行查看和编辑。

将 glb 转换为 glTF

gltf-pipeline -i model.glb -o model.gltf

gltf-pipeline -i model.glb -j

转换好的模型可使用GLTF编辑器进行查看和编辑。

将 glTF 转换为 Draco glTF

gltf-pipeline -i model.gltf -o modelDraco.gltf -d

保存单独的纹理

gltf-pipeline -i model.gltf -t

使用 gltf-pipeline 作为库:

将 glTF 转换为 glb:

const gltfPipeline = require("gltf-pipeline");
const fsExtra = require("fs-extra");
const gltfToGlb = gltfPipeline.gltfToGlb;
const gltf = fsExtra.readJsonSync("./input/model.gltf");
const options = { resourceDirectory: "./input/" };
gltfToGlb(gltf, options).then(function (results) {
fsExtra.writeFileSync("model.glb", results.glb);
});

将 glb 转换为嵌入式 glTF

const gltfPipeline = require("gltf-pipeline");
const fsExtra = require("fs-extra");
const glbToGltf = gltfPipeline.glbToGltf;
const glb = fsExtra.readFileSync("model.glb");
glbToGltf(glb).then(function (results) {
fsExtra.writeJsonSync("model.gltf", results.gltf);
});

将 glTF 转换为 Draco glTF

const gltfPipeline = require("gltf-pipeline");
const fsExtra = require("fs-extra");
const processGltf = gltfPipeline.processGltf;
const gltf = fsExtra.readJsonSync("model.gltf");
const options = {
dracoOptions: {
compressionLevel: 10,
},
};
processGltf(gltf, options).then(function (results) {
fsExtra.writeJsonSync("model-draco.gltf", results.gltf);
});

保存单独的纹理

const gltfPipeline = require("gltf-pipeline");
const fsExtra = require("fs-extra");
const processGltf = gltfPipeline.processGltf;
const gltf = fsExtra.readJsonSync("model.gltf");
const options = {
separateTextures: true,
};
processGltf(gltf, options).then(function (results) {
fsExtra.writeJsonSync("model-separate.gltf", results.gltf);
// Save separate resources
const separateResources = results.separateResources;
for (const relativePath in separateResources) {
if (separateResources.hasOwnProperty(relativePath)) {
const resource = separateResources[relativePath];
fsExtra.writeFileSync(relativePath, resource);
}
}
});

命令行标志

描述必填
--help,-h显示帮助
--input,-iglTF 或 glb 文件的路径。✅ 是的
--output,-oglTF 或 glb 文件的输出路径。单独的资源将保存到同一目录中。
--binary,-b将输入 glTF 转换为 glb。否,默认false
--json,-j将输入 glb 转换为 glTF。否,默认false
--separate,-s编写单独的缓冲区、着色器和纹理,而不是将它们嵌入到 glTF 中。否,默认false
--separateTextures,-t仅写出单独的纹理。否,默认false
--stats将统计信息打印到控制台以输出 glTF 文件。否,默认false
--keepUnusedElements保留未使用的材料、节点和网格。否,默认false
--keepLegacyExtensions如果为 false,则带有 、 或 的材料将转换为 PBR。KHR_techniques_webglKHR_blendKHR_materials_common否,默认false
--draco.compressMeshes,-d使用 Draco 压缩网格。添加扩展。KHR_draco_mesh_compression否,默认false
--draco.compressionLevelDraco压缩级别[0-10],大多数为10,最少为0。值为 0 将应用顺序编码并保留人脸顺序。否,默认7
--draco.quantizePositionBits使用 Draco 压缩时位置属性的量化位。否,默认11
--draco.quantizeNormalBits使用 Draco 压缩时正常属性的量化位。否,默认8
--draco.quantizeTexcoordBits使用 Draco 压缩时纹理坐标属性的量化位。否,默认10
--draco.quantizeColorBits使用 Draco 压缩时颜色属性的量化位。否,默认8
--draco.quantizeGenericBits使用 Draco 压缩时用于蒙皮属性(联合指数和联合权重)和自定义属性的量化位。否,默认8
--draco.unifiedQuantization使用相同的量化网格量化所有基元的位置。如果未设置,则单独应用量化。否,默认false
--draco.uncompressedFallback添加压缩网格的未压缩回退版本。否,默认false
--baseColorTextureNames从扩展更新到 PBR 材料
时应考虑引用基色纹理的制服名称。KHR_techniques_webgl
不。(此处未指定默认值)
--baseColorFactorNames从扩展更新到 PBR 材料时应考虑参考基本颜色因子
的制服名称。KHR_techniques_webgl
不。(此处未指定默认值)

构建说明

运行测试:

npm run test

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

npm run eslint

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

npm run eslint-watch

为CesiumJS集成而构建

gltf-pipeline 的某些功能被 CesiumJS 用作第三方库。可以使用以下方法生成必要的文件:

npm run build-cesium

这会将一部分 gltf-pipeline 代码输出到文件夹中,以便在浏览器中与 CesiumJS 一起使用。将文件复制到 cesium 存储库中并提交拉取请求。dist/cesiumSource/Scene/GltfPipeline/

运行测试覆盖率

覆盖范围使用NYC。跑:

npm run coverage

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

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

生成文档

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

npm run jsdoc

文档将放置在文件夹中。

原文链接:GLTF-pipeline (mvrlink.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/109717.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云云服务器云耀L实例评测 | 在华为云耀L实例上搭建电商店铺管理系统:一次场景体验

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

windows10搭建llama大模型

背景 随着人工时代的到来及日渐成熟,大模型已慢慢普及,可以为开发与生活提供一定的帮助及提升工作及生产效率。所以在新的时代对于开发者来说需要主动拥抱变化,主动成长。 LLAMA介绍 llama全称:Large Language Model Meta…

信息安全三级概述

信息安全三级概述

Outlook无需API开发连接钉钉群机器人,实现新增会议日程自动发送群消息通知

Outlook用户使用场景: 在企业中,会议和活动的顺利举行对于业务运转和团队协作至关重要。然而,计划的变动总是无法避免,这可能会导致其他人的计划受到影响,打乱原有的安排。为了解决这个问题,许多企业开始使…

记录第一个启动代码的诞生

核使用R52,参考汇编模板,一步一步来实现。 首先是ld文件,这个没啥好说的,主要是关注给vector_table划一块地址、stack地址,如下: .text.intvec :{_vectors_start .;KEEP(*(.text.intvec))_vectors_end .;…

健康与福祉:心理健康和身体健康的重要性

健康与福祉:心理健康和身体健康的重要性 健康与福祉:心理健康和身体健康的重要性摘要引言心理健康的重要性1. 理解心理健康2. 影响心理健康的因素 影响心理健康的因素社会支持的重要性实际案例:孤独与社会支持实际案例:家庭支持与…

低代码开源项目整理

低代码是基于可视化和模型驱动理念,结合云原生与多端体验技术,它能够在多数业务场景下实现大幅度的提效降本,为专业开发者提供了一种全新的高生产力开发范式。下面就来分享几个值得学习和使用的前端低代码开源项目,更深入地了解什…

利用芯片74hc165为单片机增加输入扩展端口proteus仿真arduino

我们前面的博文《输入端口少如何扩展?74hc148或74ls148级联在arduino中实现16转4的应用》介绍了148,148输入后可以立即输出到数码管,可以说它是自带编BCD编码器的。而今天这里我们主要介绍的74hc165是没有编码器,这里我们以proteus为仿真环境…

OPTEE异常调用栈解析

安全之安全(security)博客目录导读 目录 一、OPTEE标准的异常调用栈格式 二、OPTEE异常调用栈解析脚本 三、如何执行解析命令 四、OPTEE异常调用栈解析结果 序言:当OPTEE发生异常时,安全控制台会输出dump信息,虽然有了Call stack&#x…

【Unity每日一记】资源加载相关和检测相关

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

初识Mybatis(二)动态SQL、缓存和逆向工程

动态SQL Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。 (比如多条件查询的设置,实现判空等) 1、if 创建DynamicSQLMapper接口,DynamicSQL…

机器学习——boosting之XGBoost(未完)

划水一整天,模型看了仨!不错,虽然现在在打哈欠,还是很想把XGBoost梳理梳理 先从名字开始 XGBoost,eXtreme Gradient Boosting: em。。。。不理解 书上说,XGBoost有很好的性能,在各大比赛中大放异…