Hello everyone!
I'm currently trying to research some naming conventions and structure that game artists use and why. I've currently hit a dryspot and is in need of more information.
So my question is how do you name your assets, how is your mapstructure and why is it like that? Do you change your way you name things when you work in a development team instead of working alone, why?
Would appreciate any answer very much! (If you have any article on the matter it would mean a lot to me if you posted it. This is for a school project so I'll need references and such)
Thank you and have a great day!
Replies
It goes level name (between 3 and 5 letters for the level name) followed by a descriptive one word for the type that prototype is (like rocks, cliffs, foliage, building) and then you can make more nested levels of different types within that first type if you need to specify more (so like buildings/windows or buildings/doors) followed by whatever you want to name your asset (like layered-cliff-a)
For Uncharted 3 on the horse chase level a lot of my stuff was set up as followed.
horse-rocks-layered-med-a
horse-plants-reeds-short-c
horse-cliffs-smoothedge-curve-b
horse-oasis-tents-tent-a
horse-oasis-objects-rugs-hanging-a
So in a folder they would look like...
horse/rocks/layered-med-a
horse/plants/reeds-short-c
horse/oasis/tents/tent-a
horse/oasis/objects/rugs-hanging-a
So Oasis has a Tents and Objects folder as these type of assets were limited to the Oasis used in a cutscene. Horse being the level name, Oasis being the first main folder, Tents/Objects being secondary folders and rugs-hanging-a being the name of the asset.
I like this set up and name things as such at home as well.
Map_Type_Desc_Number
so
A) Horse Chase Map
C) It's a Layered type of Rock which is Medium in Size
D) It's the First Variant (A)
usually objects that can be used everywhere can be given "generic" in front
Though some engines allow meta tagging, which allow for simpler names.
apart from generic vegetation and scatter props I imagine.
If you were working on other open world games, then usually they woudl be sorted by area. Im sure in RD:R, the mexico set peices were not going to be used in the american setting, and vice versa.
It is more important that you want to make sure assets are used and labeled where they are ment to be used, then you can sort them by its type. Very often in larger studios objects can be dumped in where they are not ment to be, naming coventions in this manner prevents that
How do you guys organize your packages. We are currently doing a package and in that we have 3 maps. One for meshes, one for textures, and one for materials. How is it done over at ND, or any other company for that matter?
Really appreciate the answers guys! It helps me a lot with my school project. It is also very intressting to see how other people and companies handle this matter.
As for different maps, i assume most use the same conventions for the sake of simplicity.
horse/oasis/objects/rugs-hanging-a-N.tga
horse/oasis/objects/rugs-hanging-a-S.tga
horse/oasis/objects/rugs-hanging-a-D.tga
I have a preference for "_" instead of "-" especially when using UDK since it reads easier. Again thats personal preference and may cock up some parsers in different workflows so.
The general key to naming conventions is to make it searchable, easy to find/differentiate and know what it is. Lastly, Consistency is the crux of working, everyone has to follow the same conventions otherwise it'll mess everyone else up.
Then we enter a world of pain.
How do you search for a diffuse in your example? If it's just "D" that indicates that it is a Diffuse isn't it quite easy to find results with objects that have a "D" in their name (For example Door)? Sorry if I don't quite understand, I can be stupid sometimes.
@JacqueChoi
Care to elaborate, JacqueChoi?
Perhaps category folder names like /trees and specific named assets like DeathWoods_TreeLarge_01 inside the tree folder. So designers can look and say "hmm, at this point, the player hasn't been in the Deathwoods for 10 hours so if we reuse the Deathwoods trees for the Necromancer's tower it will feel new again".
For character kitbashing, it's usually easy to have a folder structure and naming like:
Hat
Head
Hair
Accessories
UBody (Upper Body)
LBody (Lower Body)
Feet
And then at burn or build (or somewhere in the process I'm unfamiliar with) it will just breakup and distribute each texture pack into any arbitrary texture pack that a level might need.
But in an engine like UDK (the setup I'm familiar with) is each folder is their own package (UPK). So there isn't a lot of opportunity to GROW beyond that.. for instance.
Example:
Imagine you initially planned for 10 unique heads. But each texture package can only hold 5 heads. Common sense would dictate you split the head textures into 2 packets.
Lets say:
SHead (Skinny Head)
FHead (Fat Head)
Then partway through production, someone decides to add 5 more heads, 3 Skinny and 2 Fat: The naming becomes:
MHead
MHead1
FHead
FHead1
Then imagine they want to add 4x diffuse texture swaps for each head. It ends up being a bit of a clusterfuck.
Something like that works really well for AGILE development. But from my personal experience, Agile has always VERY quickly becomes fr'AGILE'.
Let's start with something easy then. I have a rock model & its maps that needs to be imported into the engine library, so lets name it appropriately.
RockSet1_Arch_1.ase
RockSet1_Arch_1_D.tga
RockSet1_Arch_1_N.tga
RockSet1_Arch_1_S.tga
Now RockSet1 is a generic library for filling out the environment, with as you guessed rocks. The groupings, Materials, Mesh & Textures, hold each respective files accordingly. This of course makes like easier to find files and search within the UPK for whatever i need.
Now suddenly, i decided to add a set of variant texture maps to Arch_1;
RockSet1_Arch_1.ase
RockSet1_Arch_1_V1_D.tga
RockSet1_Arch_1_V1_N.tga
RockSet1_Arch_1_V1_S.tga
RockSet1_Arch_1_V2_D.tga
RockSet1_Arch_1_V2_N.tga
RockSet1_Arch_1_V2_S.tga
If you never planned for the variants and can't change the previous names or structure then I'd most likely do the following;
RockSet1_Arch_1_D_V2.tga
RockSet1_Arch_1_N_V2.tga
RockSet1_Arch_1_S_V2.tga
In some cases i'll pack an entire .UPK set such as RockSet2 onto a single UV map. Making variations much easier since a single variation spans the entire pack:
RockSet2_D.tga
RockSet2_N.tga
RockSet2_S.tga
To cut a long explanation short, I'd just search for the set/the model name/Instance/or Grouping in UDK.
As long as you're organised from the start, keep to a set of strict rules, then you should be fine.
Making sure everyone else follows them is a whole other story though.
*Disclaimer this is just my own system born from OCD and organising/searching through a few thousand models.
With that said, we do often times reuse the same asset in multiple levels, but things like shaders/vert blending changes. If you want to use an asset in your level, you just break off a variation for your level so you can make all the adjustments you need/want to that asset without effecting the other artists.
An example would be, a few of the rocks I created for the Horse Chase level I reused the same model for the end of the game level Sandlantis, but the shaders/vert blending were different. Since we use tiling textures and vert blending over unique unwraps on most things you can get a ton of variation and make one asset look very different from the level it was originally used in with a different tiling texture and painted blend.
Another reason for this is that on the current generation of consoles we do not have physically based shaders so different lighting scenarios will change the way each shader works. If we have rocks that look fantastic in an open sunny environment, they might not hold up when they are in a deep dark cave. Not without physically based shaders that is.
As far as naming on textures/shaders its set up basically the same. But since we use a lot of tiling textures on assets meaning multiple assets use the same shader/texture we dont have as many shaders. So we would have something like "horse-cliffs-layered" and there would be like 5 models associated with that shader. And that shader is blending 2 different texture types together.
In terms of naming textures we use -color -normal -spec-map for things. Our in house shader tool will look for the -color when you click to add in a diffuse texture, a -normal to add a normal map and so forth. Speeds things up a good bit.