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 included client-server asset management tools going beyond Blender, but it was later refocused on core utilities to perform two operations:

  1. Blender文档打包
  2. 依赖关系的自动映射

下面重点介绍如何使用BAM。

../_images/pipeline_bam_chart.png

资产管理器。

安装BAM

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

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

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

pip3 install blender-bam

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

bam pack

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

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

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

bam pack /path/to/scene.blend

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

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 文档带有关联库。

~/agent327/
└─ lib/
   ├─ chars/
   |  ├─ agent.blend  ------------->|
   |  ├─ boris.blend  ------------->|
   |  └─ barber.blend               |
   └─ scenes/                       |
      ├─ 01-opening                 |
      ├─ 01_01_A.lighting.blend  <--|  < BAM pack this file
      └─ 01_01_A.anim.blend  ------>|

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

~/01_01_A.lighting
   ├─ 01_01_A.lighting.blend
   └─ __/
      ├─ 01_01_A.anim.blend
      └─ __/
         └─ lib/
            └─ chars/
               ├─ agent.blend
               └─ boris.blend

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

~/01_01_A.lighting
   ├─ lib/
   |  └─ chars/
   |     ├─ agent.blend
   |     └─ boris.blend
   └─ scenes
      └─ 01-opening/
         ├─ 01_01_A.lighting.blend  < The BAM packed file
         └─ 01_01_A.anim.blend

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

bam remap

重映射blend文档的路径:

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

此命令有三个步骤:

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

bam remap start .
mv photos textures
mv barbershop_v14_library.blend barberhop_libraray.blend
bam remap finish

Note

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

Note

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

子命令

remap start

开始重映射blend文档:

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

remap finish

结束重映射blend文档:

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

remap reset

取消路径重映射:

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