Project Structure & Naming Conventions

Project Structure & Naming Conventions

Table of Contents


Summary

Working in a multi-studio pipeline has been proven challenging, but if all partners are well informed and communication flows fluently, it can be a very enriching experience for all parties involved. Therefore, this document describes all necessary terminology, naming conventions, data-flows and data structures for The Pack productions. We provide it so we can have a common understanding of the technical setups and the jargon of the project. Of course we look forward to reiterate and fine-tune together with all involved to achieve the best possible set-up.


Terminology

General

  • Pipeline: a linear sequence of specialised modules to deliver a piece of work.

  • Workflow: sequences of processes through which a piece of work passes.

  • Data flow: data generated by the processes through which a piece of work passes.

  • Asset: one unit of work with a deliverable.

  • Sanity check: predefined checks which verify if an asset is “sane” for publishing.

  • Publishing: the process of making content (in our case assets) available for use.

  • Deliverable: one unit of the end product, exists out of one or more assets.

  • Workspace: an area where work is done on assets that provide the deliverables.

  • Tool-belt: software specific tool kit for artists to interact with the pipeline.

  • Task: a piece of work that needs to be done.

  • Language: more precisely the jargon of the project, the common ground to communicate about work.

  • Context: the setting of statements that provide the terms in which something can be fully understood.

Project

  • Project: the software specific workspace where work is done on the assets. (For example: a Unity project)

  • Scene: project file that contains the assets. (For example: a Unity scene - .scene , a maya scene - .ma)

  • Script Scene: a subdivision of an act in the storyboard or script in which the setting is fixed and the time continuous.

  • Prefab: a unity asset that can be instanced and reused in a scene.

  • Time Unit: a time based operation.

  • Reel: a group of one or more sequences.

  • Sequence: a group of one or more shots.

  • Shot: a group of one or more frames.

  • Container: a locator that has an asset referenced underneath.

  • Placement: a container that is linked to a Time Unit, mainly used as an asset override/extension of the current environment(s) or placement on a shot. Environment assets that are moved or hidden based on a shot or have another shot based override.

Steps

Work in progress

  • des: Design

  • mpt: Matte Paint

  • scu: Sculpting

  • mdl: Modeling

  • grm: Grooming

  • tex: Texturing

  • shd: Shading

  • rig: Rigging

  • wbx: Whiteboxing

  • drs: Set Dressing

  • edi: Editing

  • lay: Layout

  • ani: Animation

  • mgx: Motion Graphics

  • lgt: Lighting

  • fxd: Effects

  • fin: Finalizing

  • trk: Tracking

  • cmp: Compositing

 

  • pfb: Prefab

  • dev: Development

Tasks

Work in progress

  • Design: Designing an asset in 2D

  • Concept Art: Drawing or painting the art for an asset

  • Moodboard: Collecting images and references for an asset

  • Level Design: Designing the layout of a level for a game in 2D

  • Matte Paint: Creating 2D elements to serve as background of a shot

  • Sculpting: Creating 3D meshes by pushing, pulling, smoothing, and shaping digital "clay"

  • Modeling: Creating, optimizing and unwrapping 3D meshes

  • LOD Modeling: Creating additional decimated meshes for distance-based switching

  • Grooming: Adding hair or fur to a mesh

  • Texturing: Creating 2D bitmaps or procedural textures for materials

  • Texture Assignment: Assigning textures and materials to meshes

  • Shading: Assigning (newly created) materials to an asset and tweaking their look in Unity

  • Rigging: Creating a skeleton, control rig (and blendshapes) and linking them to meshes

  • Whiteboxing: Designing the layout and functionality of a level with simple 3D placeholders

  • Set Dressing: Decorating an environment with models

  • Editing: Empty task to publish the renders of the offline/online

  • Layout: Placing cameras and assets in accordance with a script/storyboard/animatic

  • Animation Prep: Preparing layout exports for (external) animation

  • Animation: Manipulating controllers to create asset animations or move assets in a shot

  • Animation Integration: Importing and manipulating (asset) animation exports inside a shot

  • Motion GFX: Animating 2D elements inside a shot (screen replacement, title ...)

  • Lighting: Placing and manipulating the properties of lights in an asset, environment or shot

  • FX: Creating effects and/or integrating them in an asset, environment or shot

  • Finalizing: Iterative stage at the end of a real-time project where all final tweaks are done

  • Tracking:

  • Compositing:

  • Precomp:

  • Rendering: Task used for the estimate of the rendering times

Asset Types

  • deco decors: static assets that are part of a set (e.g. a house's interior, a table, a vase)

    • static, not animated

  • props props: animated assets that a character can interact with (e.g. a door, a chair, a hammer)

    • rigged, animated

  • vhcl vehicles: vehicle assets

    • rigged, animated

  • char characters: character assets

    • rigged, animated

  • mats materials: Substance Designer or Unity materials

  • atls atlas: textures that are a combination of multiple other textures

  • trim trimsheet: textures that are used to unwrap mutliple meshes on

  • dcal decal: textures that are projected on top of other geometry in Unity

  • effx effects: FX assets

  • mtpt matte paints: 2D matte paints

  • huds head-up displays: 2D HUD and UI elements

  • sets sets: built from containers which can reference all other asset types

  • envs environments: built from containers which reference sets that fit together


Assets

Naming Conventions

For our general naming we use camel casing, for example ApartmentBuilding. We define multiple variants of assets by a letter, for example A, B. This can be used to define day and night versions for example. Publish Types are derived from the department where the deliverable is created.

  • {AssetName}(+{2 digits}): an asset name is composed of a name in camel casing with optionally two digits at the end. This is when multiple assets are not different enough to warrant an entirely new name.

    • Examples:

      • OldMan

      • KitchenWardrobe

      • PortHouse01, PortHouse02, PortHouse03, …

      • MarketStall01, MarketStall02, MarketStall03, …

  • {AssetVariant}: is a capital letter going from A to Z. A variant is a variation on an asset with minimal change. For example a change of clothes on a character, windows that are broken on a house after an explosion, a vase that gets cracked. Variants often use the same model and/or rig.

Examples of valid composed asset names:

  • {AssetType}_{AssetName}_{AssetVariant}_{PublishType}

  • deco_ApartmentBuilding23_A_tex

  • prop_GoldenVase02_C_mdl

Filenames for the assets follow the same system, with the exception of the version number. Examples of valid asset file names:

  • {AssetType}_{AssetName}_{AssetVariant}_{Department}_v{3digits}.extension

  • deco_ApartmentBuilding01_A_tex_v012.ma

  • prop_BottleOfWater01_A_mdl_v001.fbx

Difference between AssetName increment and Asset Variants

Examples:

  • SimpleMesh01 vs SimpleMesh02 vs SimpleMesh03:

    • SimpleMesh01 is a cube

    • SimpleMesh02 is a sphere

    • SimpleMesh03 is a pyramid

  • Cube01_A vs Cube01_B vs Cube01_C:

    • Cube01_A is a cube with a green material applied.

    • Cube01_B is a cube with a scale of 1.5 on the Y-axis with a green material applied.

    • Cube01_C is a cube with a red material applied.

Exceptions

  1. Environments: These only use camel casing for naming the asset. No digits in the names.

    • Examples:

      • SpitPort

      • YourlandDesert

      • YourlandBigOcean

  2. Unity Effects: Don't use a version number and have an additional effect variant in their naming.

    • {AssetType}_{AssetName}_{AssetVariant}_{EffectVariant}_{Department}.extension

    • Prefab: effx_Cloud_F_01_pfb.prefab

    • VFX Graph: effx_Cloud_F_01_fxd.vfx

Directory structure of 601_library

This defines the following library structure for assets:

001560_Heart_of_a_Tower/6_vfx/ ├── 601_library    ├── {AssetType} ├── {AssetName} ├── {AssetVariant}    ├── {LOD} ├── elements │   └── cache    │   └── {Department}    │   └── {Software}    │   ├── {AssetType}_{AssetName}_{AssetVariant}_{PublishType}_v001.abc │   ├── {AssetType}_{AssetName}_{AssetVariant}_{PublishType}_v001.fbx    ├── reviews    │   └── {Department}    │   └── {Software}    │   ├── v{3digits}    │      ├── {AssetType}_{AssetName}_{AssetVariant}_{PublishType}_v001.{frame}.png    │      └── ftrack_{AssetType}_{AssetName}_{AssetVariant}_{PublishType}_v001.mov    └── workspaces       └── {Department}       └── {Software}       ├── publish       │   └── {AssetType}_{AssetName}_{AssetVariant}_{PublishType}_v{3digits}.extension       └── work       └── {AssetType}_{AssetName}_{AssetVariant}_{Department}_v{3digits}.extension

An example:

002136_Bottanix/6_vfx/ ├── 601_library    ├── deco ├── PortHouse01/ ├── A │   ├── elements │   │   └── cache │   │   └── mdl │   │   └── maya │   │   ├── deco_PortHouse01_A_mdl_v002.abc │   │   ├── deco_PortHouse01_A_mdl_v002.fbx │   ├── reviews │   │   └── mdl │   │   └── maya │   │   ├── v002 │   │   │   ├── deco_PortHouse01_A_mdl_v002.0001.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0002.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0003.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0004.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0005.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0006.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0007.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0008.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0009.png │   │   │   ├── deco_PortHouse01_A_mdl_v002.0010.png │   │   │   └── ftrack_deco_PortHouse01_A_mdl_v002.mov │   └── workspaces │   └── mdl │   └── maya │   ├── publish │   │   ├── deco_PortHouse01_A_mdl_v002.ma │   └── work │   ├── deco_PortHouse01_A_mdl_v001.ma │   ├── deco_PortHouse01_A_mdl_v002.ma

Unity Structure (Hierarchy) of a Project

[1] bott01_fin [Unity Scene] . Main Camera (CineMachine Brain) . bott01 (timeline) |-- Titles |-- Vehicles |-- FX |-- CameraTargets |-- Cameras |-- Lighting |-- Characters |-- Placements |-- ----------------------- |-- 0320 (timeline) ****|-- Titles ****|-- Vehicles ****|-- FX ****|-- CameraTargets ****|-- Cameras ****|-- Lighting ****|-- Characters ****|-- Placements ****|-- ----------------------- ****|-- 00010 (timeline) ********|-- Titles ********|-- Vehicles ********|-- FX ********|-- CameraTargets ********|-- cameras (GameObject) ************|-- 00010_wrkCam (Camera Object) [WORK][Artists] ********|-- Lighting ********|-- Characters ********|-- Placements ************|-- [2] envs_Port_A_pfb [Unity Scene] [3] envs_Port_A_lgt [Unity Scene]

How to organise Unity Effects

. 601_library ├───effx │ └───Cloud │ └───F │ ├───Abc │ ├───Fbx │ ├───Materials │ └───mats_Cloud_F_01_custom │ └───mats_Cloud_F_02_custom │ ├───Prefab │ └───effx_Cloud_F_pfb │ ├───ShaderGraph │ └───effx_Cloud_F_shd │ ├───Textures │ └───effx_Cloud_F_tex │ └───VfxGraph │ └───effx_Cloud_F_vfx

Time Units

Naming Conventions

Timelines are made in unity and utilize the nesting feature. The general naming convention for timelines are defined through the following time units:

  • [Reel]: Reel → proj01 → bott01

    • naming: proj + 2digits

      • regex: (bott\\d{2})

    • Testing Can be: proj + 1digit + 1letter ex. bott0a

      • regex: (bott\\d{1}[a-z])

    • filename: {Reel}_v001.ext

      • regex: (bott\\d{2})_(v\\d{3})

  • [Sequence]: Sequence → 0320 → bott01_0320

    • naming: 4digits

      • regex: (\\d{4})

    • filename: {Reel}_{Sequence}_v001.ext

      • regex: (bott\\d{2})_(\\d{4})_(v\\d{3})

  • [Shot]: Shot → 00010 → bott01_0320_00010

    • naming: 5digits

      • regex: (\\d{5})

    • filename: {Reel}_{Sequence}_{Shot}_v001.ext

      • regex: (bott\\d{2})_(\\d{4})_(\\d{5})_(v\\d{3})

 

The naming of time units should always match with Ftrack. When in doubt check Ftrack or ask the supervisors.

Unity Structure (Hierarchy)

. bott01 (gameobject with timeline) |-- 0320 (gameobject with timeline) ****|-- 00010 (gameobject with timeline)

Object & Filename

TIMELINE --> FILENAME --------------------------------------------- bott01 --> bott01_v001.ext 0320 --> bott01_0320_v001.ext 00010 --> bott01_0320_00010_v001.ext

Cameras

Object & Filename

GAMEOBJECT/LOCAT0R --> FILENAME ----------------------------------------------------------- 00010_refCam --> bott01_0320_00010_refCam_v001.ext 00010_wrkCam --> bott01_0320_00010_wrkCam_v001.ext

Unity Structure (Hierarchy)

. bott01 (timeline) |-- 0320 (timeline) ****|-- 00010 (timeline) ********|-- cameras (GameObject) ************|-- 00010_refCam (Camera Object) [LOCKED][REF][HIDE] ************|-- 00010_wrkCam (Camera Object) [WORK][Artists]

Director Approved Published Camera (Backup)

Object & Filename

GAMEOBJECT/LOCATOR --> FILENAME ------------------------------------------------------------- 00010_{dep}Cam --> bott01_0320_00010_{dep}Cam_v001.ext

Example

GAMEOBJECT/LOCATOR --> FILENAME ------------------------------------------------------------ 00010_layCam --> bott01_0320_00010_layCam_v001.ext 00010_aniCam --> bott01_0320_00010_aniCam_v001.ext

Unity Structure (Hierarchy)

. bott01 (timeline) |-- 0320 (timeline) ****|-- 00010 (timeline) ********|-- cameras (GameObject) ************|-- 00010_{dep}Cam (Camera Object) [LOCKED][SAFETY]

Example

. bott01 (timeline) |-- 0320 (timeline) ****|-- 00010 (timeline) ********|-- cameras (GameObject) ************|-- 00010_layCam (Camera Object) [LOCKED][SAFETY] ************|-- 00010_aniCam (Camera Object) [LOCKED][SAFETY]