À chaque fois que nous visitons un studio ou que nous discutons avec un artiste CG du pipelining, la question de l’arborescence des fichiers finit par se poser. Cela peut sembler simple, mais la réalité nécessite beaucoup d’attention et d’ajustements. Nous avons déjà abordé ce sujet dans un article précédent, donc nous n’entrerons pas dans les détails. Ce que nous voulons vous montrer aujourd’hui, c’est à quel point il est facile de construire et de gérer votre arborescence de fichiers avec l’API CGWire et son client Python.
Allons-y pour notre premier tutoriel sur Pipeline !
1. Configuration
Nous partons du principe que vous avez une version en cours d’exécution installée sur votre serveur et accessible depuis votre réseau local. Si ce n’est pas le cas et que vous souhaitez démarrer rapidement, vous pouvez lancer une instance d’API via notre conteneur Docker.$ docker build -t cgwire .
$ docker run \
-ti -rm \
-p 80:80 \
-—name cgwire \
-v zou-storage:/var/lib/postgresql \
-v zou-storage:/opt/zou/zou/thumbnails \
cgwire
Une fois l’API en ligne, il est facile de générer votre arborescence de fichiers avec un script Python simple. Dans la suite, nous partons du principe que l’API est accessible depuis l’endpoint http://localhost/api.
Avant d’écrire notre script Python, vous devez installer le client d’API (Gazu) dans vos dépendances Python : pip install gazu
Maintenant, nous sommes prêts : nous pouvons écrire notre script (nom : build_file_tree.py). Nous devons commencer par configurer le client Python et s’y connecter à l’API :import gazugazu.set_host("http://localhost/api")
gazu.log_in("admin@example.com", "default")
2. Assets et shots
Une fois que le client Python est correctement connecté à l’API, vous pouvez exécuter le script qui créera les éléments de votre production. Ici, nous créons une production simple avec trois assets et trois shots :new_prod = gazu.project.new_project("Super production")
characters = gazu.asset.new_asset_type("Characters")
props = gazu.asset.new_asset_type("Props")rabbit = gazu.asset.new_asset(new_prod, characters, "Rabbit")
monkey = gazu.asset.new_asset(new_prod, characters, "Monkey")
chair = gazu.asset.new_asset(new_prod, props, "Chair")episode = gazu.shot.new_episode(new_prod, "E01")
sequence = gazu.shot.new_sequence(new_prod, episode, "SE01")
shot = gazu.shot.new_shot(new_prod, sequence, "SH01")
shot = gazu.shot.new_shot(new_prod, sequence, "SH02")
shot = gazu.shot.new_shot(new_prod, sequence, "SH03")
3. Tâches
Tous les éléments de notre production sont maintenant configurés. Nous pouvons passer à la partie suivante, en créant les tâches associées :modeling = gazu.task.get_task_type_by_name("Modeling")
setup = gazu.task.get_task_type_by_name("Setup")
animation = gazu.task.get_task_type_by_name("Animation")
render = gazu.task.get_task_type_by_name("Render")for asset in gazu.asset.all_assets_for_project(new_prod):
gazu.task.new_task(asset, modeling)
gazu.task.new_task(asset, setup)for shot in gazu.shot.all_shots_for_project(new_prod):
gazu.task.new_task(shot, animation)
gazu.task.new_task(shot, render)
4. Arborescence de fichiers
Nous pouvons maintenant passer à l’étape finale : créer les dossiers de notre arborescence de fichiers :import os
gazu.files.set_project_file_tree(new_prod, "simple")for asset in gazu.asset.all_assets_for_project(new_prod):
for task in gazu.task.all_tasks_for_asset(asset):
path = os.path.dirname(
gazu.files.build_working_file_path(task))[1:]
)
os.makedirs(path)
for shot in gazu.shot.all_shots_for_project(new_prod):
for task in gazu.task.all_tasks_for_shot(shot):
path = os.path.dirname(
gazu.files.build_working_file_path(task))[1:]
)
os.makedirs(path)
C’est tout ! Nous avons maintenant toute notre arborescence de fichiers. Voyons le résultat :$ tree -d my_root_folder
└── productions
└── super_production
├── assets
│ ├── characters
│ │ ├── monkey
│ │ │ ├── modeling
│ │ │ └── setup
│ │ └── rabbit
│ │ ├── modeling
│ │ └── setup
│ └── props
│ └── chair
│ ├── modeling
│ └── setup
└── shots
└── se01
├── sh01
│ ├── animation
│ └── render
├── sh02
│ ├── animation
│ └── render
└── sh03
├── animation
└── render
Le dossier peut être personnalisé via des templates qui correspondent à vos besoins. Voici celui que nous avons utilisé :{
"working": {
"mountpoint": "/my_root_folder",
"root": "productions",
"folder_path": {
"shot": "<Project>/shots/<Sequence>/<Shot>/<TaskType>",
"asset": "<Project>/assets/<AssetType>/<Asset>/<TaskType>"
}
}
Pour résumer, avec un script simple, nous avons généré les informations de production et créé tous les dossiers nécessaires pour travailler correctement. Et la bonne nouvelle, c’est que cela s’adapte facilement à une production comptant des milliers d’assets et de shots. Nous serions ravis de connaître votre avis.
Ce blog est dédié au pipeline CG et à la gestion de production. Si vous êtes intéressé par le scripting d’arborescence de fichiers, vous apprécierez probablement nos articles. Nous avons aussi un canal Discord où vous pouvez discuter de vos problèmes et de vos solutions, et apprendre des autres.



