当前位置: 首页 > news >正文

模型优化——在MacOS 上使用 Python 脚本批量大幅度精简 GLB 模型(通过 Blender 处理)

目录

前言 

配置Blender环境变量 

PATH路径通过 Finder 查找

创建 Python 脚本 batch_optimize_glb.py 

参数解释

执行py脚本运行优化命令

果实


前言 

需要将n个glb模型文件在模型制作层面进行深度优化,此方案可将模型文件体积减少百分之50~90之间(具体优化幅度取决于模型贴图的尺寸及数量),效果显著,如下操作

用python脚本批量化的精简模型,具体精简模型在blender中的步骤是:

  • 导出glb模型的时候,在右侧面板 Material > Images 选项改为 JPEG Format(.jpg)
  • 导出glb模型的时候,在右侧面板 Material > Image Quality 由75改为30
  • 导出glb模型的时候,右侧面板 勾选 Compression 选项

 

配置Blender环境变量 

export PATH="/Applications/Blender.app/Contents/MacOS:$PATH"

PATH路径通过 Finder 查找

  1. 右键点击 Blender 应用图标 → 显示包内容

  2. 进入 Contents/MacOS 文件夹

  3. 在终端中复制完整路径:

# 获取实际路径(拖拽 MacOS 文件夹到终端即可显示)
/Applications/Blender-4.1.app/Contents/MacOS

 

创建 Python 脚本 batch_optimize_glb.py 

import bpy
import os
from pathlib import Pathdef optimize_glb(input_path, output_path):"""处理单个GLB文件(仅优化不缩放)"""try:# 清除场景bpy.ops.wm.read_factory_settings(use_empty=True)# 导入GLBbpy.ops.import_scene.gltf(filepath=input_path)# 注释掉以下缩放相关的代码块 ▼▼▼# bpy.ops.object.select_all(action='SELECT')# bpy.ops.transform.resize(value=(scale_factor, scale_factor, scale_factor))# bpy.ops.object.transform_apply(scale=True)# 注释掉以上缩放相关的代码块 ▲▲▲# 准备导出参数export_params = {'filepath': output_path,'export_format': 'GLB','export_yup': True,'export_apply': True,  # 仍然建议保留,确保应用其他变换'export_image_format': 'JPEG','export_jpeg_quality': 30}# 版本兼容的压缩设置if bpy.app.version >= (4, 0, 0):export_params['export_draco_mesh_compression_enable'] = Trueelse:export_params['export_compress'] = True# 导出GLBbpy.ops.export_scene.gltf(**export_params)return Trueexcept Exception as e:print(f"处理失败 {input_path}: {str(e)}")return Falsedef batch_process(input_dir, output_dir):"""批量处理GLB文件(不缩放)"""input_dir = Path(input_dir)output_dir = Path(output_dir)# 统计变量total_files = 0success_count = 0size_reduction = 0print(f"\n{'='*50}")print(f"开始批量优化模型(不缩放版本)")print(f"输入目录: {input_dir}")print(f"输出目录: {output_dir}")print(f"{'='*50}\n")# 递归遍历所有子目录for glb_file in input_dir.rglob("*.glb"):relative_path = glb_file.relative_to(input_dir)optimized_path = output_dir / relative_pathoptimized_path.parent.mkdir(parents=True, exist_ok=True)total_files += 1print(f"[{total_files}] 处理: {relative_path}", end=" => ")if optimize_glb(str(glb_file), str(optimized_path)):# 计算体积变化orig_size = glb_file.stat().st_size / (1024 * 1024)new_size = optimized_path.stat().st_size / (1024 * 1024)reduction = (orig_size - new_size) / orig_size * 100size_reduction += reductionstatus = f"✓ (-{reduction:.1f}%)"success_count += 1else:status = "✕"print(status)# 打印报告avg_reduction = size_reduction / success_count if success_count > 0 else 0print(f"\n{'='*50}")print(f"处理完成")print(f"{'='*50}")print(f"扫描到GLB文件: {total_files}个")print(f"成功处理: {success_count}个")print(f"失败: {total_files - success_count}个")print(f"平均体积减少: {avg_reduction:.1f}%")print(f"{'='*50}")if __name__ == "__main__":input_folder = "/Users/changchun/Downloads/usdz_to_glb"output_folder = "/Users/changchun/Downloads/usdz_to_glb_small"if not Path(input_folder).exists():print(f"错误:输入目录不存在 - {input_folder}")exit(1)batch_process(input_folder, output_folder)

参数解释

参数

作用

Blender 对应选项

export_image_format='JPEG'

纹理转为 JPEG 格式

Material > Images > JPEG

export_jpeg_quality=30

降低 JPEG 质量

Material > Image Quality = 30

export_compress=True

启用文件压缩

Compression 勾选

执行py脚本运行优化命令

blender --background --python /path/to/batch_optimize_glb.py

果实

按此方案执行后,你的 GLB 模型将自动完成:

  • ✅ 纹理转 JPEG

  • ✅ 模型大小优化为 50~80%

  • ✅  可选网格简化

http://www.dtcms.com/a/307620.html

相关文章:

  • 【linux驱动开发】Vscode + Remote SSH + clangd + bear=内核源码阅读环境搭建
  • Visual Studio Code (VSCode) 的常用快捷键
  • 33.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--财务服务--记账
  • Shader开发(五)什么是渲染管线
  • 【大模型理论篇】混合思考之自适应思维链
  • day28_2025-07-31
  • 基于京东评论的文本挖掘与分析,使用LSTM情感分析算法以及网络语义分析
  • 【数据结构】算法代码
  • 前端框架Vue3(三)——路由和pinia
  • 分布内侧内嗅皮层的层Ⅱ或层Ⅲ的网格细胞(grid cells)对NLP中的深层语义分析的积极影响和启示
  • vue3.0 +TypeScript 项目中pinia基础语法和使用
  • 【大数据】open_metadata 开源元数据管理平台建设与数据血缘实践
  • 「源力觉醒 创作者计划」开源大模型重构数智文明新范式
  • AI任务相关解决方案12-NLP的15项任务大融合系统:传统NLP与Qwen大模型的深度结合
  • NTLDR源代码分析之从GetSector函数到blread函数
  • 解决 IntelliJ IDEA Build时 Lombok 不生效问题
  • 商旅平台怎么选?如何规避商旅流程中的违规风险?
  • 【未解决】STM32无刷电机驱动电路问题记录
  • .NET Core部署服务器
  • 智慧收银系统开发进销存库存统计,便利店、水果店、建材与家居行业的库存汇总管理—仙盟创梦IDE
  • Spring Boot 异常处理:从全局捕获到优化用户体验!
  • PostgreSQL面试题及详细答案120道(01-20)
  • 解放双手!Report Distro 实现报表自动化分发
  • 微软发布Microsoft Sentinel数据湖国际版
  • SecurityContextHolder 管理安全上下文的核心组件详解
  • 【STM32】HAL库中的实现(一)GPIO/SysTick/EXTI
  • 【运维基础】Linux 计划任务管理
  • AI 安监系统:为工业园安全保驾护航
  • 社会治安满意度调查:为城市安全治理提供精准参考(满意度调查公司)
  • LeetCode 85:最大矩形