BAM资产管理器

Refactoring linked blend-files is a common practice in a production environment.While some basic operations can be accomplished within Blender,sometimes it is more practical to perform them on the command line or via a script.During the production of Cosmos Laundromat (Gooseberry Open Movie Project)the BAM Asset Manager (BAM) was developed. The original scope of BAM includedclient-server asset management tools going beyond Blender,but it was later refocused on core utilities to perform two operations:

  • Blender文档打包
  • 依赖关系的自动映射下面重点介绍如何使用BAM。

../_images/pipeline_bam_chart.png资产管理器。

安装BAM

BAM是一个独立的Python安装包,不需要特殊的设置即可在任何系统中运行,唯一的要求是Python 3(以及pip,即Python安装包管理器,以便更容易的安装BAM)。

在Windows,Linux及macOS中安装Python 3和pip的方法各不相同,可查看在线文档来了解针对具体平台的相关事项。

安装好Python 3和pip以后,可通过命令行来安装BAM,指令如下:

  1. pip3 install blender-bam

安装成功后,就可以使用 bam 指令了。输入此指令并回车后,会列出所有可用的子命令。

bam pack

此命令用来把 .blend 文档和所有相关的依赖文件打包为一个 .zip 文档以便于重新分发。:

  1. usage: bam pack [-h] [-o FILE] [-m MODE] [-e PATTERNS] [-a] [-q] [-c LEVEL]
  2. paths [paths ...]

可以像这样把blend文档打包,并创建一个同名zip压缩文件。

  1. bam pack /path/to/scene.blend

也可以指定一个明确的输出目录。这个例子显示了如何把blend文件最大程度的压缩以供在线下载。

  1. bam pack /path/to/scene.blend --output my_scene.zip --compress=best

此指令提供了几种适用于不同工作流程的选项(如最终分发,部分提取,渲染等等)。

  • -o, —output <FILE>
  • 输出文档,或在多重输入时输出目录。
  • -m, —mode <MODE>
  • 输出文档,或在多重输入时输出目录。可选项为: ZIP, FILE
  • -e, —exclude <PATTERN(S)>
  • 打包时有选择性的排除一些文件。

    • —exclude="*.png"
    • 采用Unix shell方式的通配符(不区分大小写)。
    • —exclude=".txt;.avi;*.wav"
    • 可以使用多重类型,以“;”为分隔符。
  • -a, —all-deps
  • 采用所有的依赖关系(未使用的非直接的依赖关系也包括在内)。
  • -q, —quiet
  • 不作状态输出。
  • -c, —compress <LEVEL>
  • 结果文档的压缩等级。可选项为:default, fast, best, store
  • —repo <DIR PATH>
  • 为压缩所选文件指定根路径。这样可以不进行重映射即创建一个作品树结构的稀疏拷贝。
  • —warn-external
  • 报告外部库的错误(丢失路径)。

示例

考虑下列目录布局,其中 01_01_A.lighting.blend 文档带有关联库。

  1. ~/agent327/
  2. └─ lib/
  3. ├─ chars/
  4. | ├─ agent.blend ------------->|
  5. | ├─ boris.blend ------------->|
  6. | └─ barber.blend |
  7. └─ scenes/ |
  8. ├─ 01-opening |
  9. ├─ 01_01_A.lighting.blend <--| < BAM pack this file
  10. └─ 01_01_A.anim.blend ------>|

运行 bam pack /scenes/01-opening/0101_A.lighting.blend 命令后,会得到 _01_01_A.lighting.zip 文档,此文档内部结构如下所示。

  1. ~/01_01_A.lighting
  2. ├─ 01_01_A.lighting.blend
  3. └─ __/
  4. ├─ 01_01_A.anim.blend
  5. └─ __/
  6. └─ lib/
  7. └─ chars/
  8. ├─ agent.blend
  9. └─ boris.blend

请注意此输出结果中所有路径是如何以 01_01_A.lighting.blend 为根重映射的。如果运行 bam pack /scenes/01-opening/01_01_A.lighting.blend —repo ~/agent327 命令,输出结果就会不同了。

  1. ~/01_01_A.lighting
  2. ├─ lib/
  3. | └─ chars/
  4. | ├─ agent.blend
  5. | └─ boris.blend
  6. └─ scenes
  7. └─ 01-opening/
  8. ├─ 01_01_A.lighting.blend < The BAM packed file
  9. └─ 01_01_A.anim.blend

此处未进行重映射,仅仅简单地提取出所有文档而没有给出相对于 01_01_A.lighting.blend 的直接或间接的依赖关系。这实际上是原始作品树结构的稀疏拷贝。

bam remap

重映射blend文档的路径:

  1. usage: bam remap [-h] {start,finish,reset} ...

此命令有三个步骤:

  • 首先运行 bam remap start . 来(递归地)储存项目的当前状态。
  • 然后在文件系统中重新安置文档(重命名,更改放置位置)。
  • 最后运行 bam remap finish 来应用修改,并更新 .blend 文档内部路径。
  1. cd /my/project
  2.  
  3. bam remap start .
  4. mv photos textures
  5. mv barbershop_v14_library.blend barberhop_libraray.blend
  6. bam remap finish

Note

在当前目录下重映射创建一个名为 bam_remap.data 的文档。可以把整个项目重新放置到新的地方,但在执行 finish 的时候此文档必须是在当前目录内。

Note

此命令依赖文档的独占内容,故一旦开始重映射后要注意不要修改文档。

子命令

remap start

开始重映射blend文档:

  1. usage: bam remap start [-h] [-j] [paths [paths ...]]
  • -j, —json
  • 生成JSON输出。

remap finish

结束重映射blend文档:

  1. usage: bam remap finish [-h] [-r] [-d] [-j] [paths [paths ...]]
  • -r, —force-relative
  • 所有重映射路径采用相对路径(即使源文档采用绝对路径也改为采用相对路径)。
  • -d, —dry-run
  • 如同路径正在运行一样打印输出结果。
  • -j, —json
  • 生成JSON输出。

remap reset

取消路径重映射:

  1. usage: bam remap reset [-h] [-j]
  • -j, —json
  • 生成JSON输出。