增加转格式

This commit is contained in:
yinsx
2025-12-20 11:51:35 +08:00
parent 5315a97613
commit d9abc57b0b
32 changed files with 4339 additions and 229 deletions

71
lib/model/config.js Normal file
View File

@ -0,0 +1,71 @@
import { listAllModelFiles } from "../utils/gltf.js";
const transformOptions = [
{ value: "dedup", label: "dedup去重", hint: "删除重复的访问器、材质、网格" },
{ value: "prune", label: "prune清理无用节点", hint: "移除未被引用的节点、材质、动画" },
{ value: "resample", label: "resample动画重采样", hint: "统一动画关键帧间隔,减少多余数据" },
{ value: "weld", label: "weld合并顶点", hint: "合并共享位置的顶点以减少面数" },
{ value: "quantize", label: "quantize量化顶点数据", hint: "降低顶点属性精度减小模型体积" }
];
const quantizePresets = [
{ value: "high", label: "高质量位置16位法线12位UV14位", hint: "尽量保证细节,适合高保真场景" },
{ value: "balanced", label: "均衡位置14位法线10位UV12位", hint: "默认推荐,兼顾体积与质量" },
{ value: "aggressive", label: "极限压缩位置12位法线8位UV10位", hint: "最小体积,但可能损失细节" },
{ value: "light", label: "轻量位置10位法线8位UV10位", hint: "适合移动端、卡通等对精度不敏感场景" }
];
const outputFormats = [
{ value: "auto", label: "保持原格式", hint: "glTF/GLB保持原格式OBJ/FBX转为GLB" },
{ value: "glb", label: "统一导出为 GLB二进制", hint: "单文件发布更方便" },
{ value: "gltf", label: "统一导出为 glTFJSON", hint: "可读性好,调试方便" }
];
const outputOptions = [
{ value: "overwrite", label: "覆盖原文件", hint: "直接把结果写回源文件" },
{ value: "backup", label: "保留备份 (_备份)", hint: "覆盖前在同目录生成 _备份 副本" },
{ value: "copy", label: "输出副本 (_compressed)", hint: "保留原文件不动,结果写入新文件" }
];
export function getSteps() {
const files = listAllModelFiles();
const fileStep = {
name: "模型选择",
type: "multiselect",
message: files.length ? "选择要处理的模型(支持 glTF/GLB/OBJ/FBX" : "当前目录未找到模型文件",
options: files.map(file => ({ value: file, label: file })),
default: [...files]
};
return [
fileStep,
{
name: "压缩命令",
type: "multiselect",
message: "请选择要执行的 gltf-transform 操作",
options: transformOptions,
default: ["dedup", "prune", "weld", "quantize"]
},
{
name: "量化级别",
type: "select",
message: "量化可显著减小体积(如未启用 quantize 可直接 Tab",
options: quantizePresets,
default: "balanced"
},
{
name: "输出格式",
type: "select",
message: "选择最终模型格式",
options: outputFormats,
default: "auto"
},
{
name: "输出选项",
type: "multiselect",
message: "请选择输出行为",
options: outputOptions,
default: ["overwrite", "backup"]
}
];
}