The BOHM System: Organization Pt. 2

Here is the second instalment to the developmental BOHM System. Organization. [If you missed the first part check it out here.] Now for more experienced developers this will seem very straightforward and can easily be skimmed over, making this part aimed more for those starting off in development or those who need some extra guidance. For students it’s a good idea to get into these habits early, allowing you to then bring this grounded skill set where ever you go. So, what are some good organization habits?

  1. Naming Conventions
  2. Sensible Folder hierarchy
  3. Pipelines
  4. Forward Thinking

Again some of these my be redundant to consider, but during my time in the industry these continue to be the root of large project troubles and even personal project endeavors. I’m going to expand and break down each point, provide some personal examples, and some helpful links. Below are a few links to some recommended reading, that if you have the time should check out at your local library.

  1. Insane Productivity for Lazy People by Andrii Sedniev [Link]
  2. The 4-Hour Workweek by Tim Ferriss [Link]

Before we begin let’s briefly discuss the benefits to clean organization. The major perk to all of this is that it just makes your projects easier to manage. It may be a small habit to pick up, but man, it sure beats sifting through a five month old project trying to figure out where you left off or if the “NewNew_Final_v4.3_ffs” is really the final. Other perks included are quicker development time, easy access to files, easier handoff between team members, debugging, reading console errors and of course establishing and meeting deadlines.

download (1).jpg

 

Good Organization

Naming Conventions

This is by the far the most important habit to establish. Proper naming conventions. You would think this would be straightforward but to this day I am still handed projects in which a character or environment is broken up into “polysurface2508” and the associated material is “pasted_pasted_pasted^5…pasted_plastic_poly_a_lambert” [ Real Talk. I have received entire builds with 20 different iterations of pasted_lambert. I have been on teams that have spent more time and effort cleaning these types of messes than if we had done it from scratch.]

Good naming conventions describe,

  1. What an object is.
  2. Where an object goes.
  3. What an object does.

With that being said however, there is no universal standard naming convention. Three basic types of naming conventions can be Camel Case (camelCase), Pascal Case (PascalCase), or Hungarian Notation (strHungarianNotaion). The difference between the three are which letter gets capitalized and the last having an identifier before the name. However this is more on the programming side of things and naming conventions can differ from studio to studio but listed below is a general starting point. If you don’t have the 15 seconds to properly name your materials and static meshes, you can always automate the process. Either through scripts or plugins that activate either before or after you export out of your modeling software.

Environment Modeling

Quick tip; try to avoid naming conventions that locks an asset to a certain level, character, or folder. So that when a small prop is used for a desert environment it can also be placed in a savannah environment while the mesh is still easily accessible and updated for both levels.

  • Textures – Either stored in your Source Images [Maya], an auto generated Materials folder in Unity, or a designated Texture folder in Unreal.
    • T_Name = Texture
    • T_Name_D.tga = Diffuse / Albedo / Base Color
    • T_Name_N.tga = Normal Map / Bump / Displacement
    • T_Name_R.tga = Roughness
    • T_Name_S.tga = Specular
    • T_Name_M.tga = Metal
    • T_Name_H.tga = Height
    • T_Name_O.tga = Opacity / Transparency
    • T_Name_AO.tga = Ambient Occlusion
    • T_Name_RMA.tga = Channel Packing three maps
      • Red Channel = Metal
      • Green Channel = Roughness
      • Blue Channel = Ambient Occlusion
  • Environment – If you want to get more specific with your naming conventions then you can use the following naming convention to sort your assets. Stored in your Assets folder [Maya], and designated Model folder [later to be migrated to a Unity prefab folder] in Unreal and Unity.
    • Chr_Name = Character
    • Ske_Name = Skeleton
    • Env_Name = Environment
    • Prp_Name = Props
    • Str_Name =Large Structures
    • Veh_Name = Vehicles
    • Itm_Name = Interactable Items
  • General Assets – Basic bare bones naming convention for any exported mesh. Stored in your Assests folder [Maya], and designated Model folder in Unreal and Unity.
    • SM_Name.fbx = Static Mesh
    • ANIM_Name.fbx = Animated Mesh
    • M_Name = Material
    • Vfx_Name = Visual Effect
    • Gui_Name = HUD
    • Vid_Name = Videos / cinematic
  • Version Control – Ending prefix to differentiate between updated models. Helps with rollbacks and tracking changes. For a final build you can go back and remove this extension if you choose to do so.
    • SM_Name_A =  Different variations of a model. A being Clean and B being Dirty, this really helps with vertex data and shaders.
    • SM_Name_v2 = Second Version of an Asset
    • SM_Name_001= First Version of an Asset
    • SM_AS_Name = Included initials of the artist who generated the Asset. This helps to make sure that artist don’t accidentally use similar naming conventions.

Essentially it goes < ID – Set – Instance – Variation >

Some examples would include,

  • SM_Prp_BattleAxe_A_v1 with M_BattleAxe_v3
  • ANIM_Chr_Attack_Alt_v3
  • SM_Veh_Wagon_v1 with M_Wagon_v1

funny.JPG

[Image Link]

Character Modeling

As I am not a character modeller I rely heavily on naming conventions found online. One source I like to use is a blog post by Ronald Fog [ Link ] in which they cover good character naming conventions using Camel Case. So check out their blog for additional information. In addition to that, listed below are more naming conventions to follow when creating characters. Since the most I do with characters is textures so here is a list of suggested texture names.

  • Textures – Either stored in your Source Images [Maya], an auto generated Materials folder in Unity, or a designated Texture folder in Unreal.
    • T_Name = Texture
    • T_Name_RMA.tga = Channel Packing three maps
      • Red Channel = Metallic
      • Green Channel = Roughness
      • Blue Channel = Subsurface Opacity
    • T_Name_Hair_RMA.tga = Channel Packing three maps for hair cards
      • Red Channel = Hair Alpha
      • Green Channel = Specular / Roughness
      • Blue Channel = Anisotropic Direction Map
  • Texture set up depends on the camera position and artistic style. Low poly assets can have a single diffuse texture map that includes a characters prop, face, and body.
  • Other options include breaking up hands and face, body, and additional accessories all into their own texture sets.

 

Folder Hierarchy

Now, after we create easily identifiable game ready assets the next step is to bring them into our game engine of choice. But where to put them? In all honesty you have really two options here. First option is to follow the established hierarchy or, second option, you can be a deranged psychiatric patient and export to a single large folder called “Final”. The second could lead to quick termination or a sharp decrease in your will power.

For hierarchy set up you can build your project folders by either Type or Relevance. Each has their own pros and cons, with Type being best for small projects and Relevance for large-scale projects. Again organizing your hierarchy will allow for quick searches and project updates.

Included hierarchy examples are Unity, Unreal, and Maya.

unity.jpg

[ Unity Image from Rivello Link ]

Unreal.jpg

[Unreal Image captured from my project]

Maya.jpg

[Default Maya Project hierarchy with a few added folders]

Unreal shows a very simple hierarchy that is used for personal projects, like my latest environment [Link], while Unity shows a hierarchy best suited for larger scale projects.

 

Pipelines

The bread and butter to any major and indie development team. The method behind turning raw data and vertice coordinates into glorious pixel filled entertainment. The process of creating 3D assets is supported by the backbone that is a production pipeline. Generally there is one large pipeline in which all aspects of production fall under, there is also individual pipelines that suit either character, environment, or vfx that are sub sets of the main pipeline.The one presented here is a typical 3D asset pipeline.

Blank Diagram.png

Out of Pre-Production the team general receives tasking or concept art. From that the concept art is thrown through the pipeline above. Generally there are some review periods sprinkled in between the steps to ensure that the asset is coming along, but this is how 3D assets are created. For most of my freelancing experience and in my current job this is the realm of the pipeline that I stay in. I hand of characters to animators and I hand off polished assets to the design team. If you want to learn more about the pipeline or if this pipeline doesn’t fall in with your speciality then check out the links below, that give a brief introduction.

  • Animation – [Link]
  • Level Designer – [Link]
  • Pre – Production – [Link]

 

Forward Thinking

In order to stay motivated and get shit done a little forward thinking really goes a long way. By planning and tasking out your work into bite sized chunks you will be able to visualize the end. If you are creating your own game then this is very important as you will be wearing many hats and seeing a project to completion will be even harder. Some great apps to use to help manage tasks are,

I use trello and enjoy their mobile app. It really helps to quickly generate a card when something pops in my head, then later fill it on the computer. So here is a brief look at my current set up in trello along with a task tracking method based off the mentioned books at the beginning.

TrelloStuff

So first things first is to create a card and give it a score or rating that signifies some sort of importance. I use the “Golden Task” scale, also referred to the 80/20 rule in which 80% of your progress comes from about 20% of the work you do. This involves a goal that gauges a task’s levels of importance towards a given goal. This helps keep the work you are doing relevant and helps trim off any excess distractions. For example if you set a goal to complete a prop by the end of the month then the highest ranked task would be given to the actual High Poly modeling of the prop, followed by lower numbers and moderate time to UVing, Texturing, and extremely low numbers (like 0-1) to rigging it.   Then of course we organize our trello board by putting the highest numbers at the top and working down.

The next part of my process is that I like to do things in two-week sprint increments. In which I set a goal at the end of a two-week period so that I dedicate all my free time towards it. At the end of the sprint I do a one week period of lower rated tasks. A planned break to slow things down, reexamine my current progress, and set up my next benchmark. This week also serves as a buffer in case I don’t finish my sprint and need a little extra time. At the end of a sprint I then generally publish my current progress to sites like Polycount, 10k Hours, and CG Society to get feedback to continue to push a piece.

 

Conclusion

As per my last post here is the TL;DR Recap for those out there.

  1. Name your work in a reasonable manner
  2. Organize your mess in a seasonable manner
  3. Look into pipelines and studio examples
  4. Set up your own method to get shit done and stay organized
  5. You can still be messy, just try to keep it to your desk

 

download.jpg

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s