Project Structure & Naming Conventions
Table of Contents
- 1 Table of Contents
- 2 Summary
- 3 Terminology
- 3.1 General
- 3.2 Project
- 3.3 Steps
- 3.4 Tasks
- 3.5 Asset Types
- 4 Assets
- 5 Time Units
- 5.1 Naming Conventions
- 5.1.1 Unity Structure (Hierarchy)
- 5.1.2 Object & Filename
- 5.2 Cameras
- 5.2.1 Object & Filename
- 5.2.2 Unity Structure (Hierarchy)
- 5.2.3 Director Approved Published Camera (Backup)
- 5.2.4 Object & Filename
- 5.2.5 Example
- 5.2.6 Unity Structure (Hierarchy)
- 5.2.7 Example
- 5.1 Naming Conventions
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: Designmpt: Matte Paintscu: Sculptingmdl: Modelinggrm: Groomingtex: Texturingshd: Shadingrig: Riggingwbx: Whiteboxingdrs: Set Dressingedi: Editinglay: Layoutani: Animationmgx: Motion Graphicslgt: Lightingfxd: Effectsfin: Finalizingtrk: Trackingcmp: Compositing
pfb: Prefabdev: 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
decodecors: static assets that are part of a set (e.g. a house's interior, a table, a vase)static, not animated
propsprops: animated assets that a character can interact with (e.g. a door, a chair, a hammer)rigged, animated
vhclvehicles: vehicle assetsrigged, animated
charcharacters: character assetsrigged, animated
matsmaterials: Substance Designer or Unity materialsatlsatlas: textures that are a combination of multiple other texturestrimtrimsheet: textures that are used to unwrap mutliple meshes ondcaldecal: textures that are projected on top of other geometry in Unityeffxeffects: FX assetsmtptmatte paints: 2D matte paintshudshead-up displays: 2D HUD and UI elementssetssets: built from containers which can reference all other asset typesenvsenvironments: 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:
OldManKitchenWardrobePortHouse01,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_texprop_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}.extensiondeco_ApartmentBuilding01_A_tex_v012.maprop_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
Environments: These only use camel casing for naming the asset. No digits in the names.
Examples:
SpitPort
YourlandDesert
YourlandBigOcean
Unity Effects: Don't use a version number and have an additional effect variant in their naming.
{AssetType}_{AssetName}_{AssetVariant}_{EffectVariant}_{Department}.extensionPrefab:
effx_Cloud_F_01_pfb.prefabVFX 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}.extensionAn 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.maUnity 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_vfxTime 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.extregex:
(bott\\d{2})_(v\\d{3})
[Sequence]: Sequence → 0320 → bott01_0320
naming: 4digits
regex:
(\\d{4})
filename:
{Reel}_{Sequence}_v001.extregex:
(bott\\d{2})_(\\d{4})_(v\\d{3})
[Shot]: Shot → 00010 → bott01_0320_00010
naming: 5digits
regex:
(\\d{5})
filename:
{Reel}_{Sequence}_{Shot}_v001.extregex:
(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.extCameras
Object & Filename
GAMEOBJECT/LOCAT0R --> FILENAME
-----------------------------------------------------------
00010_refCam --> bott01_0320_00010_refCam_v001.ext
00010_wrkCam --> bott01_0320_00010_wrkCam_v001.extUnity 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.extExample
GAMEOBJECT/LOCATOR --> FILENAME
------------------------------------------------------------
00010_layCam --> bott01_0320_00010_layCam_v001.ext
00010_aniCam --> bott01_0320_00010_aniCam_v001.extUnity 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]