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

【Blender】Blender 基础:导入导出

【Blender】Blender 基础:导入 & 导出

  • 引言
  • 一、Blender 支持的主要格式
  • 二、模型导入流程
  • 三、模型导出逻辑
    • (一)导出前准备:
    • (二)导出选项控制(以 glTF 为例):
  • 四、平台适配建议
  • 五、常见问题与排查建议
  • 六、使用Python代码批量导入glb(并保留原文件命名)
  • 七、使用Python代码批量导出glb

引言

Blender 是一款强大的开源 3D 建模与渲染工具,在实际项目中,我们往往需要与外部工具或平台对接三维数据。这使得“导入”和“导出”成为 Blender 使用中的基本且关键的环节。

本文将系统讲解 Blender 中模型的导入与导出流程,覆盖支持的常见格式、注意事项以及适配不同平台的实践建议。


一、Blender 支持的主要格式

操作常见格式用途
导入.obj.fbx.gltf/.glb.dae.stl从 CAD、Maya、3ds Max、Unity 等迁移
导出.fbx.gltf/.glb.obj.stl用于游戏引擎、Web 显示、3D 打印

✅ 推荐使用 .glb.gltf 格式导出,用于 Web 和实时场景,支持贴图、动画、材质完整性强。


二、模型导入流程

Blender 中导入模型操作简单,但在实际工作中仍有几个关键细节需要注意:

  1. 确认单位和坐标系

    • Blender 默认单位为米,Z轴朝上;
    • 某些格式(如 FBX)可能使用厘米、Y轴朝上。
  2. 集合自动命名机制

    • Blender 会以文件名创建集合(Collection);
    • 子对象可能会被自动重命名(如重复 Mesh 名称)。
  3. 贴图路径处理

    • 如果路径是相对的,需保持贴图与模型结构一致;
    • 外部贴图缺失会导致材质白模。
  4. 动画数据载入

    • 格式如 FBX、GLTF 会同时载入骨骼与动画轨迹;
    • 可在时间轴中直接预览。

三、模型导出逻辑

在导出模型时,我们需要明确目标平台的要求,比如是否需要压缩、是否保留动画、贴图格式等。

(一)导出前准备:

  • 应用变换(Apply All Transforms)

    • 保证模型位置、旋转、缩放一致性;
  • 合并对象(如有需要)

    • 合并子部件为整体模型,避免碎片;
  • 清理材质槽与无用数据块

    • 精简模型数据结构。

(二)导出选项控制(以 glTF 为例):

选项说明
导出格式.glb(二进制)或 .gltf(JSON + Bin + 图片)
压缩方式支持 Draco 压缩(减少顶点数据体积)
材质设置保留 Base Color、Metallic、Roughness、法线贴图等
动画设置可勾选导出动作(Action)与骨骼结构

四、平台适配建议

不同应用场景,对模型导出有不同的要求:

应用场景推荐格式关键配置
WebGL / Three.js / Cesium.glb(含 Draco)保留贴图、压缩顶点数据
Unity / Unreal Engine.fbx应用变换,保留骨骼动画
3D 打印.stl / .obj删除材质,闭合网格,检查法线
医学三维重建.glb / .obj精简材质结构,保留关键模型结构

五、常见问题与排查建议

问题原因建议
导入后模型尺寸异常单位不一致检查单位设置,统一为米
模型显示为纯白材质或贴图未绑定检查贴图路径,确认贴图存在
对象名称混乱自动重命名导入后手动重命名或脚本统一命名
动画丢失未导出动画轨迹导出前确认勾选动画选项
导出文件过大面数多、贴图大结合简化模型和压缩贴图处理

六、使用Python代码批量导入glb(并保留原文件命名)

import bpy
import os
import globdef import_gltf_strict_named(filepath: str):"""导入一个 glb 文件,将顶层对象命名为文件名,并放入同名集合"""filename = os.path.splitext(os.path.basename(filepath))[0]# 记录导入前所有对象existing_objects = set(bpy.data.objects)# 执行导入bpy.ops.import_scene.gltf(filepath=filepath)# 记录导入后新增对象imported_objects = [obj for obj in bpy.data.objects if obj not in existing_objects]# 获取场景中刚导入的顶级对象root_objects = [obj for obj in imported_objects if obj.parent is None]# 创建集合(名字与文件名相同)new_col = bpy.data.collections.new(filename)bpy.context.scene.collection.children.link(new_col)# 将所有导入对象放入新集合,清理原集合引用for obj in imported_objects:for col in obj.users_collection:col.objects.unlink(obj)new_col.objects.link(obj)# 如果只有一个顶层对象(比如是个 Group),重命名它if len(root_objects) == 1:obj = root_objects[0]if obj.name != filename and not bpy.data.objects.get(filename):obj.name = filenameelse:# 如果有多个顶层对象,可以创建一个空的根对象命名parent = bpy.data.objects.new(filename, None)new_col.objects.link(parent)for obj in root_objects:obj.parent = parentprint(f"✅ 已导入并命名:{filename}")def batch_import_glb_strict(folder_path: str):files = glob.glob(os.path.join(folder_path, "*.glb")) + \glob.glob(os.path.join(folder_path, "*.gltf"))print(f"发现 {len(files)} 个模型文件")for i, file in enumerate(files):print(f"[{i+1}/{len(files)}] 正在处理:{file}")import_gltf_strict_named(file)# 执行导入# 这里修改导出地址
folder_path = r"F:\project\"
batch_import_glb_strict(folder_path)

七、使用Python代码批量导出glb

import bpy
import os# 设置导出目录
export_dir = "G:\\new\\models"  # 修改为你自己的导出路径# 创建导出目录(如果不存在)
if not os.path.exists(export_dir):os.makedirs(export_dir)# 取消所有选择
bpy.ops.object.select_all(action='DESELECT')# 获取所有要导出的对象(例如:位于指定 Collection 中)
objects_to_export = bpy.context.scene.objects  # 或用:bpy.data.collections['YourCollection'].objectsfor obj in objects_to_export:if obj.type == 'MESH':# 仅选择当前对象bpy.ops.object.select_all(action='DESELECT')obj.select_set(True)bpy.context.view_layer.objects.active = obj# 设置导出路径和文件名export_path = os.path.join(export_dir, f"{obj.name}.glb")# 导出为 glTF/glb 文件bpy.ops.export_scene.gltf(filepath=export_path,use_selection=True,export_format='GLB',  # 改为 'GLTF_SEPARATE' 可导出 .gltf + .bin + texturesexport_apply=True)print("批量导出完成!")

相关文章:

  • Unity中如何播放视频
  • WEB3全栈开发——面试专业技能点P1Node.js / Web3.js / Ethers.js
  • webrtc 在线测试, 如何在线拉流测试
  • 建造者模式深度解析与实战应用
  • Framework开发之IMS逻辑浅析1--关键线程及作用
  • 软件工程的软件生命周期通常分为以下主要阶段
  • [论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景
  • 基于 Transformer robert的情感分类任务实践总结之三——FGM
  • day 18进行聚类,进而推断出每个簇的实际含义
  • Boost ASIO 库深入学习(3)
  • Unity VR/MR开发-VR/开发SDK选型对比分析
  • 服务器 | Centos 9 系统中,如何部署SpringBoot后端项目?
  • debian12拒绝海外ip连接
  • DHCP / DHCPv6 原理 / 报文解析 / 配置示例
  • 对比传统引擎,Unity3D 在生产配套中的独特优势
  • 前端打包工具简单介绍
  • 前端知识导图
  • Spring Boot中Bean注入方式对比与最佳实践
  • webpack其余配置
  • 详解鸿蒙Next仓颉开发语言中的动画
  • 做神马网站优化快速排名软件/国家培训网官网
  • 做任务领积分兑换别的网站上的会员/网络教学平台
  • 个体工商户经营范围网站开发/2021十大网络舆情案例
  • 七彩云南旅游网页设计毕业论文/百度热搜seo
  • 2017网站发展趋势/营销软文代写
  • 专业的营销型网站最新报价/360网站推广官网