Yes, definitely great contributions, thanks for that.
In an effort to try and tally up and put a name on the various qualifiers we’ve identified thus far.
-
Identifier … Examples
-
scene
… v001.mb
, hulk_ra1600_1400_v0005_mottosso.ma
-
camera
… main
, left
, right
, persp
, face
-
version
… v001
, r03_351
, 0001
-
topic
… thedeal_seq01_1000
, s079s_c49
, hulk_ra2400_5600
-
wedge
… tinted
, grayscale
, lowquality
-
renderLayer
… bg
, fg
, heroModel
, face
-
renderPass
… ao
, beauty
, sss
, motion
-
take
… ?
A note on wedge
, I saw it referred to in a Houdini context, not sure it applies across all software. Here’s the definition.
Wedge: Render multiple times with varying parameters
-
Reference
-
A: Does this apply to your scenario @BigRoy, about the “300+ variations”?
-
B: Are there any identifiers missing?
What goes into a name?
The naive directory structure for all of these identifiers might end up looking like this.
# / Root / Version
/thedeal/film/seq01/1000/lighting/publish/v024/..
# / Scene / Topic
..thedeal_seq01_1000_lighting_v152_mottosso/thedeal_seq01_1000_lighting/..
# / Camera / Layer / Pass / Wedge
..mainCamera/background/ambientOcclusion/grayscale/..
# / Filename
..thedeal_seq01_1000_lighting_v024_mainCamera_background_ambientOcclusion_grayscale_001.exr
At which point, ladies and gentlemen, we are 5 characters away from the 260 character limit for paths on Windows operating systems. Yes, there is a limit, and it is low. Any directory after this point will become unbrowsable and unreadable.
I think we can all agree that it’s TMI, too much information. So what can we do?
Ultimately the goal is to enable tools built on-top of whatever convention we choose, so we’ll need to find a method of encapsulating all relevant information, without getting bogged down in directories or ultra-long names.
Some options
- We could include everything always, as in the example above (obviously not).
- We could build the hierarchy dynamically, excluding that which isn’t changed across renders, such as
wedge
.
- We not rely on paths at all, storing all relevant information elsewhere, such as a sidecar
.json
. In this case, we still need a unique separator for the number of renders will happen, in which case we could introduce build
; an infinitely increasing number per render, irrelevant of task or logic, just an identifier of which render comes after another to avoid paths from clashing.
An example of (3) could look like this.
1000
▾ lighting
▾ v024
▸ b00033 # Build
▸ b00034
▾ b00035
▸ 0001.exr
▸ 0002.exr
▸ 0003.exr
▸ meta.json
For which meta.json
could look like this.
{
"scene": "myfile_v154_mottosso.mb",
"camera": "main",
"version": "v013",
"topic": "thedeal_seq01_1000_lighting",
"wedge": "grayscale",
"renderLayer": "bg",
"renderPass": "ao",
}
The problem with this is that it’s difficult to manually browse to or even interpret what it could mean, without being rather tech-savvy and dig into the JSON
or, alternatively, have a dedicated tool to make this separation for them and visualise it more elegantly.
In short, (3) is great when you can rely on tools 100%, which is rarely if ever the case. (1) is great when you can never rely on a tool, which is safe, but clearly overzealous (and dangerously close to the Windows path-limit).
Dynamically allocated paths - publishing w/ template
Roy showed me that he typically enters a “template” of sorts into the Maya render editor and I take it this is a common thing to do?
If so, maybe we could leverage this and export this template alongside each render. That way, we could use this template in order to parse what each part of a path means?
Basically, it would facilitate (2).
Instance-first
I was also thinking, especially in context of what @mkolar talked about in Shot and Task publishes, what if only a single render layer needs work and is incremented to the next version?
Basically, would it make sense to publish versions on a per-layer basis? Or more generally, to publish versions on a per Instance
-basis?
1000
▾ lighting
▸ heroCharacters
▾ foreground
▸ v001
▸ v002
▾ background
▸ v001
▸ v002
▾ v003
▾ mainCamera
▾ ambientOcclusion
▸ wedge1_0001.exr
▸ wedge1_0002.exr
▸ wedge1_0003.exr
It would mean a lot of duplicated content initially, as each layer would get v001, v002 etc. in unison. But eventually, things may disperse into individual updates, and this might facilitate this.