Gerenciador de recursos 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. Empacotamento de arquivos Blender
  2. Remapeamento automático de dependências

A seguinte seção do manual tem como foco explicar a utilização do gerenciador BAM.

../_images/pipeline_bam_chart.png

Asset manager.

Instalando o BAM

O BAM é um pacote Python separado, que pode ser executado em qualquer sistema sem quaisquer configurações em particular. O único requerimento é a utilização da linguagem de programação Python versão 3.x ou superiores (e o pip, que é um gerenciador de pacotes Python, para instalar o BAM facilmente).

As plataformas Windows, Linux e macOS provêem diferentes maneiras de instalar o Python 3 e o pip. Por favor, verifique as documentações online para aprender mais sobre como realizar a instalação em uma plataforma em específico.

Once Python 3 and pip3 are available, BAM can be installed via command line by typing:

pip3 install blender-bam

After a successful installation, the bam command will be available. By typing it and pressing Enter, all the available subcommands will be displayed.

bam pack

Este comando é usado para empacotar um arquivo .blend e todas as suas dependências em um arquivo de extensão .zip para redistribuição.

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

You can simply pack a blend-file like this to create a zip-file of the same name.

bam pack /path/to/scene.blend

Talvez você queira fornecer um diretório de saída explícito. O exemplo mostra como empacotar um arquivo Blender usando a máxima compressão possível para downloads online.

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

O comando fornece diversas opções para que seja possível adaptar o funcionamento do BAM a diferentes fluxos de trabalho (como distribuição final, extração parcial, renderização).

-o, --output <ARQUIVO>
A saída para um arquivo ou diretório quando múltiplas entradas são fornecidas nos argumentos.
-m, --mode <MODO>
A saída para arquivos ou diretórios quando múltiplas entradas são fornecidas como argumento. As escolhas possíveis são: ZIP, FILE.
-e, --exclude <PADRÃO(ÕES)>

Opcionalmente exclui arquivos a partir do pacote.

--exclude="*.png"
Usando caracteres coringa em estilo de linha de comando Unix (Shell) (insensível a maiúsculas e minúsculas).
--exclude="*.txt;*.avi;*.wav"
Múltiplos padrões podem ser fornecidos usando o separador ;.
-a, --all-deps
Segue todas as dependências (juntamente com as dependências indiretas não utilizadas).
-q, --quiet
Suprime o status de saída dos comandos.
-c, --compress <NÍVEL>
O nível de compressão para o arquivo resultante. As opções possíveis são: default, fast, best, store. (padrão, rápida, melhor, armazenar).
--repo <CAMINHO DE DIRETÓRIO>
Especifica um caminho «raiz» a partir do qual será empacotado o arquivo selecionado. Isto permite a criação de cópias esparsas da árvore de produção, sei quaisquer remapeamentos.
--warn-external
Informa sobre erros que possam vir a ocorrer em bibliotecas externas (como caminhos que estão faltando).

Exemplos

Considere o seguinte esquema de diretórios, e em particular o arquivo 01_01_A.lighting.blend com suas bibliotecas vinculadas.

~/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  ------>|

Uma vez que tenhamos executado bam pack /scenes/01-opening/01_01_A.lighting.blend, nós obteremos um arquivo chamado 01_01_A.lighting.zip dentro do qual encontraremos a seguinte estrutura:

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

Note como todos os caminhos foram remapeados em relação ao posicionamento do arquivo 01_01_A.lighting.blend na raiz da saída. Caso executemos o comando bam pack /scenes/01-opening/01_01_A.lighting.blend --repo ~/agent327, a saída será diferente.

~/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

Neste caso, nenhum dos caminhos será remapeado, e nós simplesmente desconsideramos quaisquer dos arquivos que não tenham sido referenciados como dependências diretas ou indiretas do arquivo 01_01_A.lighting.blend. Isto é, na prática, efetivamente uma cópia esparsa da árvore de produção original.

bam remap

Remap blend-file paths:

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

Este comando é um processo que envolve três etapas:

  1. Inicialmente, execute o comando bam remap start ., que guarda o estado atual de seu projeto (recursivamente).
  2. Then re-arrange the files on the file system (rename, relocate).
  3. Finalmente, execute o comando bam remap finish para aplicar as alterações, atualizando os caminhos internos dos arquivos .blend.
cd /my/project

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

Nota

O remapeamento cria um arquivo chamado bam_remap.data no diretório atual. Você pode realocar o projeto como um todo para um novo local mas quando se executa o comando finish, este arquivo deverá ser acessível a partir do diretório atual.

Nota

Este comando depende exclusivamente dos conteúdos dos arquivos, tenha o cuidado de não modificar os arquivos quando o remapeamento tiver sido iniciado.

Subcomandos

remap start

Start remapping the blend-files:

usage: bam remap start [-h] [-j] [paths [paths ...]]
-j, --json
Gera uma saída em formato JSON.

remap finish

Finish remapping the blend-files:

usage: bam remap finish [-h] [-r] [-d] [-j] [paths [paths ...]]
-r, --force-relative
Torna todos os caminhos remapeados relativos (mesmo que originariamente eles tenham sido criados como absolutos).
-d, --dry-run
Simplesmente imprime a saída como se os caminhos estivessem sendo percorridos.
-j, --json
Gera uma saída em formato JSON.

remap reset

Cancela o remapeamento dos caminhos:

usage: bam remap reset [-h] [-j]
-j, --json
Gera uma saída em formato JSON.