Files
yinx-cli/lib/model/config.js
2025-12-20 11:51:35 +08:00

72 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"]
}
];
}