关于 blender-scene-setup
面向准备复用或导出资产的 Blender 美术人员的场景设置与清理技能,涵盖场景审计、组织、命名、比例、路径、资产库和清理规范。
主要功能
- 01审计场景问题并按需修复
- 02将资产整理到命名集合中
- 03统一命名、比例和原点规范
- 04管理链接与追加的数据
- 05准备资产库并清理文件
适用场景
- 01交付资产前检查场景
- 02统一集合结构和对象名称
- 03迁移或修复外部文件路径
- 04注册和维护资产库
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-scene-setup安装后在 Claude Code 中输入/blender-scene-setup确认已加载。
附带文件scripts/_bpyx.pyscripts/scene_audit.py
详细介绍
场景设置与规范
执行模型和验证步骤请参阅 blender-core。
流程
- 运行
scripts/scene_audit.py(仅对你拥有的文件添加--fix purge scale paths)。该脚本会报告单位、未应用的缩放/负缩放、默认名称、场景根目录中的对象、缺失的图像、孤立数据和远离原点的对象。 - 设置单位:公制,单位比例 1.0,长度单位为米。即使使用 Unreal/Roblox,也保持 1.0,因为导出器会处理转换(参阅
blender-export-pipelines)。 - 按照下方布局构建集合。每个对象都必须放在一个命名集合中,不能放在场景根目录。
- 按照下方约定为所有内容命名。每次复制或合并后都要重命名,确保不留下
.001后缀。 - 设置原点:道具设在底部中心(使其放置在地面上时 Z=0),角色设在双脚之间的世界原点处,门/铰链设在枢轴处。
- 对网格应用旋转和缩放(Ctrl+A)。除非资产应在原点导出,否则保留位置。
- 重新运行审计。当
issues为空,或所有剩余问题均为有意保留且已说明时,即表示完成。
集合布局(每个 .blend 放一个资产,或每个资产放一个集合)
ASSET_Crate
├── Crate_high # sculpt / subdiv source (exclude from export)
├── Crate_low # game mesh(es) SM_Crate, SM_Crate_LOD1..
├── Crate_bake # cages, bake helpers
├── Crate_collision # UCX_SM_Crate_00 (UE) / Crate-col (Godot)
└── Crate_ref # reference images/blockout (hide_render)
使用 Collection Exporters(4.2+)为每个集合定义一次导出,然后通过一次调用重新导出:
with bpy.context.temp_override(collection=col):
bpy.ops.collection.exporter_add(name="IO_FH_gltf2")
ex = col.exporters[-1]; ex.export_properties.filepath = "//export/SM_Crate.glb"
with bpy.context.temp_override(collection=col):
bpy.ops.collection.exporter_export(index=len(col.exporters) - 1)
bpy.ops.wm.collection_export_all() 会重新运行每个集合导出器。
命名约定(Unreal 风格,所有引擎均接受)
| 类型 | 模式 | 示例 |
|---|---|---|
| 静态网格 | SM_<Name>[_LOD#] | SM_Crate_LOD1 |
| 骨骼网格/绑定 | SK_<Name> / RIG_<Name>(骨架对象为 Armature 或 root) | SK_Hero |
| 材质 | M_<Name> / 实例 MI_<Name> | M_Wood_Oak |
| 纹理 | T_<Name>_<Suffix>:_BC 基础颜色,_N 法线,_ORM(R=AO G=Rough B=Metal),_E 自发光,_M 遮罩 | T_Crate_ORM |
| 碰撞 | UE UCX_<Mesh>_##,Godot 后缀 -col/-colonly/-convcolonly | UCX_SM_Crate_00 |
| 骨骼/侧向 | .L/.R 后缀(Blender 镜像工具依赖此后缀) | upper_arm.L |
| 动作 | <Rig>_<Clip> | Hero_Run |
| 仅使用 ASCII,不加空格,并在整个项目中统一使用 PascalCase 或 snake_case。 |
真实世界尺寸参考(米)
门 2.0–2.1 × 0.9 · 天花板 2.4–2.7 · 桌子 0.75 · 椅面 0.45 · 柜台 0.9 · 楼梯高度 0.18/踏面 0.28 · 成年人 1.7–1.8(眼睛高度 1.6)· 汽车 4.5 × 1.8 × 1.5。Roblox:1 stud ≈ 0.28 m;默认角色约 5 stud 高。尺寸错误会影响物理、光照衰减、DOF 和纹素密度,因此先检查 ob.dimensions。
链接、追加、覆盖
- 追加(
libraries.load(link=False))会创建本地副本。用于一次性复用。 - 链接(
link=True)为只读,会从源文件更新,也是流水线所用的方式。要编辑链接的集合,请添加库覆盖:ob.override_hierarchy_create(scene, view_layer, do_fully_editable=False)。只有可覆盖的属性(变换、姿态及任何标记为可覆盖的属性)可以更改。 - 保持库路径为相对路径(
//)。检查bpy.data.libraries中是否存在失效路径。
资产库
- 标记:
ob.asset_mark(); ob.asset_generate_preview()。元数据存放在ob.asset_data中(author、description、license、tags.new("wood")、catalog_id)。 - 分类目录位于库根目录下的
blender_assets.cats.txt中,每个分类目录占一行:UUID:Path/Sub:Simple Name。 - 使用
prefs.filepaths.asset_libraries.new(name=..., directory=...)注册库。5.2+:通过use_remote_url+remote_url使用远程库。在 5.2 中,active_asset_library的索引偏移量为 2(“All”、“Essentials”)。 - 每个库的导入方式:
LINK、APPEND、APPEND_REUSE(默认;复用已追加的数据)。
清理规则
- 发布前清除孤立数据块(
bpy.data.orphans_purge(do_recursive=True))。仅在有意为之时使用假用户。 - 图像路径:使用相对路径(
file.make_paths_relative),或打包资源以便单文件交付(file.pack_all)。 - 切勿发布使用了尚未应用的对象级缩放的多用户网格数据。实例可以保留,但导出前必须烘焙缩放。
- 使用
hide_render=True隐藏辅助对象,并且将其排除在导出集合之外;仅在视口中隐藏还不够。 - 交付文件中只保留一个活动场景。额外场景会让导出器混淆(
use_active_scene)。
评论
支持 Markdown