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:
- Empacotamento de arquivos Blender
- Remapeamento automático de dependências
A seguinte seção do manual tem como foco explicar a utilização do gerenciador BAM.
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:
- Inicialmente, execute o comando
bam remap start .
, que guarda o estado atual de seu projeto (recursivamente). - Then re-arrange the files on the file system (rename, relocate).
- 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.