Blender 插件 • Unity 与 Unreal 插件
Loom
Blender 到 Unity 与 Unreal 的实时链接
- Blender
- Unity
- Unreal
- Python
- C++
- C#
在 Blender 中建模,在 Unity 或 Unreal 中即时看到效果。Loom 通过直接的二进制链接,将网格、绑定、灯光、摄像机和材质直接流式传输到引擎视口。编辑一个顶点、拖动一段动画、调整一盏灯,都会在几毫秒内显现。无需导出,无需 FBX 往返,也无需中继服务器。先用灰盒把关卡搭出来,再在任一应用中把这些占位物换成你真正的 prefab 或 Blueprint。每一次指定都会写回 .blend,因此只替换了一半的关卡,在两个应用都重启之后依然如故。满意之后,把整个会话烘焙成真正的 prefab、Blueprint 和资源。Loom 既是预览,也是一条流水线。
- Blender
- Unity
- Unreal
- Python
- C#
- C++
实时,而非导出
在 Blender 中编辑,引擎视口在几毫秒内更新。没有 FBX,没有中继,也不落盘。
两个引擎,一条线缆
一个 Blender 生产端同等驱动 Unity(URP)和 Unreal,二者运行在同一协议之上。
不只是网格,还有材质
将 20 多个着色器节点转译为真正的 URP 着色器,全部 19 种 Mix 混合模式均从 Blender 源码移植而来。
是流水线,不是玩具
在任一应用中把灰盒替换成你真正的 prefab 或 Blueprint,再把整个会话烘焙为带碰撞体和 LOD 的真正资源。
同步的内容
Loom 的覆盖范围正是重点所在。实时链接几乎承载了整个场景,以及围绕它的创作状态,这里列出的一切都会送达你打开的任一编辑器。
- 9 种 Blender 对象类型:网格、曲线、文本、曲面、融球、骨架、灯光、摄像机、空物体
- 全部 1 至 8 个 UV 通道,外加 RGBA 顶点色,并为大网格提供 32 位索引
- 骨架与形态键,含实时姿势和 blendshape 权重
- 4 种灯光类型,带景深的透视与正交摄像机
- 世界 HDRI 与雾
- 集合、几何节点与粒子实例化,含关联副本去重
- prefab 引用放置:给对象或其网格数据打上一个键,就能在任一引擎中从注册表生成你真正的 prefab 或 Blueprint
- 灰盒 → 成品的替换,可从 Blender 驱动,也可从任一编辑器驱动
- 一份 Tracked Objects 列表,准确说明正在传输的是什么,并带有 Exclude 与 Include
- 布尔切割体与 SNAP_ / SOCKET_ 标记空物体会被自动跳过
- 一份四页的“How replacement works”说明,三个应用中是同样的页面
- 带内容去重纹理的 Principled 材质
- 将 20 多个着色器节点转译为真正的 URP 着色器,全部 19 种 Mix 混合模式
- 实时碰撞体、LOD 组,以及面向游戏的层、标签和 static 路由
- 挂接点:带共享标签的插座与插头,在 Blender 中吸附并传到两个引擎;另有生成器替你创建碰撞代理与 LOD 链
- 刚体:Blender 的 Rigid Body 设置会在任一引擎中成为真正的物理刚体,并以 Blender 自身的模拟为基准进行了测量
- 平铺测试:在套件部件周围摆放它的副本,在引擎光照下检查接缝,副本不会进入任何烘焙
- 一条命令的无头烘焙(blender -c loom_bake),无需打开任何编辑器即可把 .blend 烘焙为 prefab 或 Blueprint,面向 CI
灰盒 → 成品
先在 Blender 里用灰盒把关卡搭出来,再把占位物换成你真正的 prefab 或 Blueprint。可以在 Blender N 面板的 Set Prefab Key… 中指定,也可以在 Unity 或 Unreal 窗口的 REPLACE GREYBOX 中指定。每一次指定都会写入 .blend,在那里按 Ctrl+Z 即可撤销,因此周五替换了一半的关卡,在两个应用都重启之后,周一还是同一个关卡。写入由编辑器请求 Blender 完成,没有任何东西只留在会话内的映射里。
一个键,九十处放置
给对象打的键只替换一处放置。给它的网格数据打的键,会替换共享这份数据的每一个关联副本,因此用 Alt+D 复制出的九十个副本都跟随同一次指定,而面板会在你按下任何按钮之前就说明这个影响范围。
按名字挑选的变体
一个注册表键携带一个基础 prefab 及其变体。你指定想要那件的名字,而不是它的编号,因此在池中插入一行,不会悄悄改变每一处放置所显示的内容。
由种子驱动的 Scatter pool…
同一根柱子复制九十份、全都显示同一个变体,那不叫关卡。从一个种子出发,把池分配到每一处放置上,选取结果会写入 .blend;同样的种子作用于同样的放置,在 Blender 和两个引擎中给出同样的布局。
灰盒标记,以及还剩多少
把占位物标记为灰盒,三个应用都会显示同样的 210 处中 62 处的进度。Clear to greybox 永远是回头路。
PREFAB CHECK
场景中每个键一行,列出它的放置数量和池的大小,并标出未映射的键、不在池中的变体名,或超出池末尾的索引,而不是悄悄换上某个看起来合理的东西。
“How replacement works”
一份四页的说明就藏在每一处会引发疑问的 ? 之后,也可以从 Unity 的 Window ▸ Loom Guide 和 Unreal 的 Tools ▸ Loom Guide 打开。它只做说明,从不代你动手。
两个引擎,一条链接
Loom 是一个 Blender 生产端,拥有两个一等的消费端。二者解析同样的字节,即线缆协议 v40,以及同样的黄金夹具,因此每项能力都会送达任一编辑器。Unreal 只是为每个 Unity 概念选用了地道的对应目标。
| 在 Unity 中 | 在 Unreal 中 | |
|---|---|---|
| 实时网格 | MeshFilter + MeshRenderer / SkinnedMeshRenderer | UDynamicMeshComponent(CPU 线性混合蒙皮) |
| 材质 | 生成的 URP 着色器 / URP Lit | 在 Custom 节点中移植 HLSL 的 LoomLit UMaterial |
| 实例化 | RenderMeshInstanced 散布 | UInstancedStaticMeshComponent(逐实例数据) |
| 灯光与摄像机 | Light / Camera(+ 景深) | U*LightComponent / UCineCameraComponent |
| LOD | LODGroup + 子网格 | 单个多 LOD 的 UStaticMesh |
| 动画 | .anim AnimationClip | UAnimSequence(+ 变形目标曲线) |
| 刚体 | Rigidbody + 碰撞体 + 物理材质 | 对象自身组件上的模拟刚体 |
| 烘焙 | prefab(.prefab) | 基于已保存资源、可复用的 BP_LoomBake Blueprint |
| 材质覆盖 | 通过 Material Overrides 资源固定的 Material | 通过 Loom UDataAsset 指定的 UMaterialInterface |
| prefab 注册表 | Loom › Prefab Registry 资源 | LoomPrefabRegistry 数据资源 |
| 落在哪里 | 所选 Target scene 中的 Root object | 所选 Target level 中的 Root actor |
| 说明文档 | Window ▸ Loom Guide | Tools ▸ Loom Guide |
材质与着色器
大多数实时桥接止步于几何体。Loom 把 Blender 着色器节点图转译为真正编译的着色器,在 Unity 中是 URP 的 .shader,在 Unreal 中是 LoomLit 材质内移植的 HLSL,而非扁平的近似。程序化节点移植自 Blender 5.1 自身的源码,因此生成的着色器是在再现 Blender 的外观,而不是凭猜测。
将 20 多个节点转译为真正的着色器
- Noise(精确 Perlin fBM)
- Voronoi(精确 PCG 哈希)
- Mix Color(全部 19 种模式)
- ColorRamp
- Math
- Vector Math
- Map Range
- Mapping
- Image Texture
- Bump
- Normal Map
- Fresnel
- Layer Weight
- Gradient
- Checker
- Wave
- Magic
- Separate / Combine
- Object Info
- Color Attribute
- Texture Coordinate
- 真正编译的着色器,而非预览取巧。生成的着色器支持前向与延迟渲染、阴影、深度预通道以及 SSAO。
- 忠实回退。不支持的节点图会降级为精确的 Principled 材质,离线预检会在你连接之前就点名相关节点。
- 当节点图实在够不着时,烘焙成纹理。逐材质选择启用,Cycles 会把它烘焙成贴图,再作为普通纹理传输过来。
- 固定你自己的材质。可用你自己的引擎材质覆盖任意 Blender 材质或对象,并在每次重新同步后保留。
- 风格化与卡通材质保留自己的纹理。非 Principled 的节点图没有可供转换的 PBR 参数,因此 Loom 不去伪造外观,而是把该材质具名的纹理传过来,交给你自己的卡通着色器使用。
- 正确处理纹理。按内容去重并打包进引擎贴图槽(金属度与光泽度、法线与强度、遮蔽),同时保留 HDR。
为何如此之快
Loom 发送 GPU 可直接使用的字节,且只发送发生变化的部分。同步路径上不会序列化为文本,也不会写入磁盘。
- 直接的二进制链接。原始 float32 与 uint32 缓冲区从 Blender 的 numpy 直达引擎。没有 JSON,没有中继,也不落盘。
- 只发送变化。移动一个对象只发送 40 字节的变换数据包。雕刻与动画只流式传输位置,绝不发送整个场景。
- 非阻塞。套接字 I/O 运行在工作线程上,因此两个编辑器都不会卡顿。
- 自愈。它能挺过脚本重新编译和断线,重新连接后会重新同步整个场景。
像素级忠实,且可证明
只有结果正确,广度才有意义。Loom 的构建目标就是让外观一致,并持续一致。
- 从源码移植,而非肉眼比对。程序化纹理和全部 19 种 Mix 模式都译自 Blender 5.1 自身的着色器源码,细到精确的 Perlin 与 PCG 哈希。
- 一条线缆,三种实现,经证明逐字节一致。Python 生产端与 C#、C++ 消费端都以同一套黄金线缆字节夹具进行校验。
- 在编辑器关闭的情况下端到端测试。无头 Blender 与 Unity 测试套件在 CI 中驱动真实的序列化、套接字、重建与烘焙路径,包括从 .blend 到 .prefab 的完整构建。
从预览到生产
实时预览并非死胡同。它会毕业成真正的项目资源。
Bake to Prefab… / Bake Scene…
共享网格与生成材质会去重为单个资源,节点图着色器会保存为真正的文件,并在树上保存一个 prefab 或 BP_LoomBake Blueprint。
Bake Selected…
只烘焙你挑中的已同步对象,外加保持它们变换所必需的上级对象,其余一概不含。
烘焙即游戏就绪
在烘焙后的资源上生成光照贴图 UV 与 static GI 标记、LOD 组以及碰撞体。
烘焙为 AnimationClip
将骨骼与 blendshape 动画的某一帧范围捕获为 Unity 的 .anim 剪辑或 Unreal 的 UAnimSequence。
录制与回放
把实时流录到 .loomcache 文件,并通过同一构建器回放,用于离线评审或回归夹具。
无头 / CI 烘焙
一条 blender -c loom_bake 命令即可在不打开编辑器的情况下,把 .blend 烘焙为 Unity prefab 或 Unreal Blueprint。它会自行以批处理模式启动引擎,并以 0 或 1 退出,因此使用 Loom 的不只是坐在工位前的美术师,还可以是工作室的构建系统。
控制、安全与手感
- 范围。首次连接只传输你的当前所选,并实时统计将要同步的与被排除的数量,你绝不会一不小心就把一个复杂场景整个倒出去。Whole scene 和 Collection 都只需一次点击。
- 被追踪的那一组。在 Selected only 之下,选中一个对象就等于追踪它:取消选中后它仍继续传输,能挺过重新连接或 Blender 重启,只有当你 Untrack 时才会离开编辑器。Exclude 与 Include 在任何范围下都有效。开启 Track the whole model(默认开启)后,一次点击会带上该对象的整棵父级树,因此点击角色的头发就会发送整个角色;要留下某一部分,请用 Exclude。在还没有任何内容会同步时,Blender 会询问 What do you want to send?,并提供整个场景和集合的一键按钮。
- Tracked Objects。一份真正在传输什么的列表,可按 Streaming、Excluded、Blockouts 或 All 过滤,每一行都能选择、冻结、排除和取消追踪。数字告诉你有多少,这份列表告诉你是哪些;当数字看起来不对时,你真正想问的正是后者。
- 辅助对象留在外面。布尔切割体与 SNAP_ / SOCKET_ 标记空物体会被自动跳过,而逐对象的状态会点名那个可以取消跳过的偏好设置。
- 默认单向,带手动编辑保护。在引擎中轻推一个已同步对象,会被暂停而非覆盖,直到你释放它。
- 可选的双向编辑,但按 Blender 的规矩来。把变换和选择推回去,或从引擎按需将不支持的图材质烘焙为贴图。Accept property edits from the editor 是 Blender 的一项偏好设置,被写入的只有 Loom 自己的创作属性,几何体永远不会被改动,而且每次写入都会压入一步撤销。
- 指定它落在哪里。已同步的对象位于 Unity 的 Root object 或 Unreal 的 Root actor 之下,整棵树还可以送到另一个已打开并已保存的 Target scene 或已加载的 Target level。
- 逐对象状态一目了然。Unity 的 Hierarchy 行上有一个状态指示点,Unreal 的 actor 上有 Loom.Paused 标签。在 Unity 中右键点击那个指示点,选择 Pause Loom sync (protect from Blender) 或 Resume Loom sync,无需打开窗口;在 Unreal 中选中 actor,再按 Loom 标签页里的 Pause selected。
- 色块化。固定一个 Global Material 并打开 Override all synced materials,你看到的就是关卡本身,而不是材质。prefab 引用保留各自的材质,而烘焙始终使用真正的材质。
- 运行模式中同步。实时编辑会流入正在运行的会话并挺过域重载,并带有清晰的运行中指示。
- 替身不会在不知不觉中丢失。Loom 放置的对象是实时预览,不会随场景保存;断开连接后,两个编辑器都会用横幅说明这一点,并提供 Bake Scene…、Clear Synced Objects 和 Keep for now。
- 英语与韩语。Blender 插件、两个编辑器窗口和应用内指南都支持这两种语言,编辑器会通过连接跟随 Blender 的语言设置。
- 暂停推流。Disconnect 旁边的 Pause 会保持连接但暂存所有更改,Resume 则发送改动的部分。两个编辑器都会显示 Blender 已暂停,静止的视口不再令人困惑。
- 在 localhost 上零配置,带有 Connecting、Reconnecting 和 Waiting for the editor… 状态,并以实时 HUD 显示吞吐量、队列深度、合并帧数以及最重的对象。
兼容性
- Blender 5.0 或更高版本(已在 5.0、5.1、5.2 上测试)
- Unity 2021.3 LTS 或更高版本(基于 Unity 6 开发)
- Unreal Engine 5.6(基于 5.6 开发、构建与测试,其他 5.x 未经验证),C++ 项目,Win64
- 渲染管线:Unity 中为 URP(生成的着色器需要它),Unreal 中为标准 UE 材质,并在编辑器构建里为每个材质生成 Custom HLSL 母材质
- 同一台机器上编辑器之间通过回环 TCP 连接(默认 127.0.0.1:8787)
- 线缆协议 v40,两个消费端收到的是同样的字节
供应情况
Loom 0.10.0 是 1.0 的候选发布版,目前在测试者手中,尚未发售。0.10.0 新增了以 Blender 自身模拟为基准测量的刚体物理,以及用于套件部件的平铺测试、暂停推流和一条命令的无头烘焙。1.0 计划的所有功能都已在两个引擎上实现,并持续测试。距离 1.0 还剩下对面板和首次运行的实机检查,以及商店上架。发布包附带一个示例场景:由一块地面、一个带盒形碰撞体的箱子、一个用节点贴图的球体、一只带修改器的金属猴头,以及太阳和世界环境组成的小型场景,第一次连接就能看到效果。Blender 插件免费且采用 MIT 许可,Unity 与 Unreal 消费端插件为商用,将在 1.0 时上架 Unity Asset Store 和 Fab。想获取更新或抢先体验?请在下方联系我。
支持
对候选发布版有疑问、错误报告或功能建议?发邮件给我,我会回复你。
你也可以浏览 文档 ,了解安装步骤、架构说明和路线图。