Content Management Basics (Perforce)
Updated: May 21, 2021
What is content management? At a very high level, content management refers to the administration of digital content in a project, usually done by engineers or technical artists.
Why it's important? When you have a studio with a bunch of people working on a project, it's important to keep things organized. Content management software like Perforce allows users to share files, collaborate and iterate on them easily. It also keeps a history of every file so you have a backup in case something goes wrong.
Why should I learn about it? Like 99% of Tech Art skills, nobody wants to do it. It's also not the easiest thing to get into. That being said, if you want to add a valuable skill to your resume you should consider it, or at least familiarize yourself with the basics; every studio/team I've worked at required artists to know a little bit of P4V.
Super Basic Intro to P4V
Perforce (or P4V) is a content management software. When a studio starts working on a project they buy a perforce server, which is basically storage for the studio's digital content. The studio creates a "depot" and puts whatever files they want in there.
Perforce works by creating a mirror image of the depot files in your computer. Usually when you first start working at a new studio, one of your first tasks will be to create this new workspace on your machine. After that, you will go into the depot and "grab" the files you'll be working on, creating a local copy in your workspace.
Another advantage of this system is a more efficient use of storage, since perforce allows us to cherry-pick which files we want from the depot.*¹
Changelists are way to keep track of the changes in the server. It is quite literally a list that contains the files you're working on. Each has its own unique number that can be tracked and shared among users.
When you check something out in perforce it is automatically assigned to your default changelist. You can make new changelists, edit their description and move assets from one changelist to the other.
When we "get latest", we sync our local files to their latest version in the server. We usually do this every morning to make sure we have the latest build and assets in our workspace.
Check out, check in
So let's say you want to work on a file. The most common workflow would be the following:
1) Grab that file from the depot if you haven't already and check it out. Checking out a file allows us to modify it. (It also tells other users that someone is working on it. If the file is an exclusive check out, only one user can have that file checked out at a time.)
2) Once you're done working on it and saved it in your local workspace, you would check it in. This updates the file in the depot to match your local copy.
Checked something in by accident or broke something? That's ok! Because perforce keeps a history of every file in the depot you can roll it back to its previous working version.
Shelving is especially useful when you are troubleshooting something with someone else. I've many situations where I needed help with an asset and had to send it over to a senior for them to look at. The efficient way to do this is to shelf your files and give the senior the changelist number.
When you shelf a file you revert it to the original in the depot, but your version is still saved under the "shelf" you made. You would give the other person the changelist shelf number and they can access it from their workstation. That way you avoid checking in files to the server that could potentially break something while testing.
The Perforce Youtube Channel has a great series of tutorials (although the title of the videos can be intimidating, not gonna lie LOL). I recommend giving them a watch if you're interest in learning more in depth!
*¹ if what we're working on has dependencies, we'd grab those other files as well. For example, if we're downloading a build for a game, we have to download all of the files used by the engine to run the build in question. Or character maya file that has textures.