The world of software development has changed and evolved significantly over the last two decades from when Git was introduced. The world of cloud and microservices, CI/CD and automation have introduced scale, efficiency and velocity made possible through as-a-service models for both software and infrastructure. However, there is an entire industry that could not derive the same benefits that traditional software has seen, due to its own unique complexities. Much in the world of game development has not significantly or sufficiently evolved, due to its inherent limitations of size, performance, and collaboration that look quite different in the game development world.
A core piece in the complexity is a byproduct of how gaming assets are created, managed and versioned in game development, which is quite different from typical software engineering disciplines. From 3D models to audio files, textures, and other media, game assets are critical components of any game development project. This is why managing game assets efficiently is essential for creating high-quality games, and source control systems can play a significant role in this process––both in managing the assets and from a collaboration perspective.
With much of the modern software delivery world relying heavily on Git and the SaaS tooling that makes git source control available at scale (from Github to Gitlab and Bitbucket), the world of game development requires different capabilities, as noted in previous posts––leaving game developers to work with a different set of version control tools. As a byproduct, there is often much less community and ecosystem support and help that focuses specifically on these unique complexities.
In this blogpost we’d like to focus on this specific area and explore the different source control systems that are optimized for game development, alongside best practices for how to manage game assets effectively. We'll cover the benefits of using source control systems. We’ll focus on the basics of asset management, version control for asset management, and how this applies to your source control of choice.
Assets are a core component in games, and asset management is a crucial aspect of game development that involves organizing and tracking all digital resources used in the game.
Asset management is typically comprised of several steps in the process, as follows:
With all of this in mind it is really critical to have a strong version control and source management solution that is optimized for the diversity of collaborators and stakeholders in the game development world. This is where the right version control software comes into play, and has a huge impact on the speed, quality, and productivity of game development teams.
Version control software (AKA source control management––SCM) is the backbone of modern engineering practices, and it provides essential features for efficient asset management critical in today’s engineering processes. A good place to get started is this post, on the current state of the SCM union for the game development world (read: Unleashing Git for the Game Development Industry).
This begins with structured workflows that all of the collaborators and stakeholders in the organization can align with, making it possible for teams to manage their assets in a more organized and efficient way. Another mission critical capability that version control will provide is backup and recovery: Using a version control system allows teams to back up and recover binary files, which can be especially important for these large and complex files that would take a significant amount of time to recreate.
As the name implies, version control also provides much-needed versioning and change history of binary files, which can be used to track progress, understand changes made, and document the development process. While merging is not possible for binary files, version control software still enables collaboration by allowing multiple team members to access and work with the same file. Some version management tools also allow checking-out/locking a file so that it is not modified by two people in parallel to avoid conflicts. One way this comes in handy with version control software is branching. This allows teams to create separate branches of a binary file, which can be useful for experimenting with different versions or testing new features without affecting the main branch of the file.
Finally no piece of software is complete without verifying its quality, through reviewing and approval processes. Your version control software will enable you to review changes made to binary files and approve them before they are implemented in the game engine. This can help to ensure that all assets meet quality standards and are error-free.
The first step though, and likely the most important is choosing the right system for your needs. This is an entire blog post unto itself (and we plan to release one soon on this topic - so subscribe if you’d like more on this topic), but just to touch on this briefly––this should be based on factors such as the size of your project, the number of assets you're managing, and the type of assets you're working with, as well as other SW development practices and processes you apply across your company. The popular tools leveraged for game development include Git, Perforce, SVN and Unity PlasticSCM.
There really is a lot that can be said about each of these, but the most critical pieces you would need to explore is large binary file support, performance with large repositories, branching and merging capabilities, as well as collaboration through permissions and access control to files and repositories. Each of the popular tools in the ecosystem plays to different strengths and use cases, and we’ll be sure to dedicate a post to this in the coming weeks.
Once you've chosen a source control system, you can start applying best practices for asset management, which we’ll dive into below.
Once you have proper version management in place for assets, you are halfway to having an efficient process for asset management, as basic aspects, regular backup, are covered for you.
Let’s dive into some good practices around asset management processes and workflows that are built around how you leverage your version control software and play to its strengths.
Like software pipelines, assets should be handled in a similar fashion. It’s a good practice to establish a clear and well-defined asset pipeline to manage the flow of assets from creation to implementation. This will also ensure that all team members are aware of the process.
Another good practice that contributes to effective teamwork and workflows is defining a consistent naming convention for assets. This makes it easier to locate and manage files that multiple collaborators need to work on. Suggested methods are to include information such as the type of asset and the date it was created. Once you have good processes, and naming conventions, knowing where to find these key assets is important.
This is where your version control software or cloud storage comes in to provide a central repository where all assets should be stored that is easily accessible to all team members. This helps to prevent duplicate files and reduces the risk of lost or misplaced assets. When these types of files are stored in a centralized location, their size can impact cost and performance, and this is where asset optimization comes into play.
Optimizing assets such as textures and models can reduce file size and improve performance. This can be achieved by reducing polygon counts, compressing textures, and using LODs. Storage is also expensive, so the additional value of reducing file size is that you can also derive cost benefits.
After all is said and done, one of the backbones of great collaboration that is often underestimated is documentation. By taking the time to create great documentation regarding the creation, modification, and usage of assets you can ensure that all team members are on the same page and can easily refer to previous decisions and iterations.
Finally we come to actually making use of your assets, and no engineering assets should be pushed to production without proper testing. Make sure to take the proper time to test your assets in the game engine to help identify issues early in the development process, and ensure that assets are working as intended.
Eventually game development is not much different than other software engineering disciplines. There are mission critical assets that need to be properly maintained, backed up, versioned, and managed for productive teamwork and operational best practices.
Choosing version management software that is optimized for game development will help you overcome some of the unique challenges in the game development world when it comes to asset management and collaborative work. Once you have good version control software to help with the version control, backup and collaboration, you can then set out to apply best practices for processes and workflows to ensure you manage assets properly in the long term.
In our next posts we will dig deeper into the game development world, and provide more insights into unique challenges for gaming engineers.