The Unreal Content Pack Workflow
The Unreal Content Pack Workflow – Organizing your growing Content libraries the right way!
Using the Unreal Engine 5 you most likely will gather a huge library of Contents that you need to manage. Often these libraries land in some „Dumping-Ground“ Projects, clogging up extra space on your hard drive or even worse, get lost at some point. Also you loose the overview. Quickly making content updates to your libraries can swiftly become tedious work or even completely undoable. Trying to stay on top of things turned out to be less easy the more a project or library grows. Utilizing Quixel Megascans or Unreal Marketplace Content accelerated that problem even more. If this sounds familiar to you, we got a solution!
It all comes down to your content management Workflow
Having worked on several projects over the course of many years with a lot of our Trainers and Unreal Engineers over time we collaboratively developed our own kind of content management workflow. By chance Epic Games working on huge, decentralized projects like Fortnite also found a very similar workflow solution, what confirms and encourages us that this is in fact the right workflow to go on with.
The key to managing growing libraries of assets in unreal projects are plugins. „Plugins?“ you may ask now. „I thought they are for enhancing what Unreal Engine can do?!“. And you are absolutely right with that! Epic Games designed Unreal Plugins to be modular extensions of the Unreal Engine, allowing you to add or modify existing features and add new Editor-Tools in a modular, plug-in way, therefore the name. Unfortunately reality shows that a lot of plugins built-into Unreal Engine by Epic Games are not traditionally a plug-in nor modular, but some are and originally that was their design. In the last couple of Unreal Engine Releases Epic Games made significant progress on establishing more and more features as plugins in the way they are intended to be, also updating old plugins in the process to actually be modular, plug-ins.
Content Plugins – Plugging Content into your projects
Plugins in Unreal Engine can contain C++ Source Code as well as Content, like Meshes, Textures or Materials. For now we will focus on „Content Only“-Plugins, as they don‘t contain any C++ Code. These „Content Only“-Plugins behave pretty much like any other Plugin in Unreal Engine. You can easily copy & paste them from one project to another, or store them on some other folder or network storage even outside of a project, just the plugin itself. Their Content is stored as Unreal Engine Version independent as possible, but if one Version is handling a specific asset type very different from the other, you may need to adjust them. That however rarely is the case. The Plugin itself also isn‘t versioned, though you can mark it to be compatible only with a specific Unreal Engine Version if you like.
A „Content Only“-Plugin has less characteristics of an actual Plugin and is more of a set of Content bundled together. Therefore I will from now on refer to it as a „Unreal Content Package“ or just Content Package. Naming a loose set of content a plugin is plainly wrong terminology.
The Advantages of Content Packages
So why do we bother to do the extra step of moving content to these and managing the projects content in a content package? What are the benefits?
Modularity
The biggest advantage is modularity. By not having your content sitting directly in the projects content, but instead in a seperate, standalone plugin content directory, you can easily bring your assets over to another project. Without the Content Package you need to have both projects on your machine and use the content migration feature of Unreal Engine, creating a copy of all the assets in the process automatically pasting them over to the other projects content folder in the exact same directory structure so that no links in between the assets break. This ultimately is the exact same process the „Add to Project“-button via the Unreal Marketplace / Epic Games Launcher is doing as well.
To come back to modularity, by putting the content instead into a content package, the assets are no actual part of your projects content itself. Still you can use any content from a content package just like regular content. No limitations, no problems. Compatibility while being modular, that is the key. This also makes it possible to store your content packages outside of an Unreal Project. And you can only add specifically the content packages you need in the next Project.
Easy to Manage
By going with the traditional „Add to Project“-button the content is plainly dumped into your projects content. But by having it managed in a content package, you can just delete the old plugin folder while the editor isn‘t running with your project and paste the latest version of your content package plugin in there, updating your content package in the process. Something not so easily doable in the traditional method. Managing content, updating it independently from other parts, is key to staying on top of growing projects.
Also you can add the content package plugin to your local Unreal Engine installation, so content packages can be used across all projects on your machine without the need to have any local copy in the project plugins directory itself.
Easy to Share
Sharing content packages with others also is much more easy than the alternative ways so far. You can prepare all your content as you normally would, but instead of migrating from project to project, you just give them the standalone content package plugin that they place in their projects plugins folder and they are good to go. This also enables you to bring prepared Unreal Engine content over into projects that for various reasons can‘t be made available to you like file size issues, transfer limits or NDAs prohibiting to share the original project. Especially as a freelancer working on remote projects of clients with strict NDAs this enables you to more conveniently add your work to their projects in an isolated fashion and without just sending unprepared assets as plain Mesh or Texture Files.
Better Content Organization by Design
Besides being more easy to manage or share, by design content packages are a way to better organize your Projects. In your project they go by their own isolated directory and inside the Unreal Editor they have their own „Root“-Level Content Directory. Also in the Plugins Browser you can categorize them and add some more info helpful for anyone working with them.
The Pitfalls of Content Packages
Now that we covered all the ground on why content packages are so great and you should adapt your workflow to them, let‘s discuss potential problems you need to watch out for. There‘s never any light without shadows.
References
References can be a major problem when it comes to creating isolated, standalone content packages. It varies from content to content, asset to asset, but most basic content is not referencing other content, like Textures or Audio Assets. But most more advanced assets do. Materials have references to Textures, Sound Cues have references to Audio Assets, Static Meshes have references to Materials and so on. These chains of references should be the first thing to watch out for managing your content in content packages. To get on top of that however Epic Games implemented the Reference Viewer feature to the Unreal Editor. With that you can right-click on any Asset in your content drawer and open up the Reference Viewer for that Asset.
The new Window that opens up is the Reference Viewer showing you all the referenced Assets of this Asset as well as other Assets referencing this one. From here you get a good feeling of what references what.
To make your Content Packages work as intended you need to make sure that all the Assets that are referenced anywhere in this Reference Viewer are part of your Content Packages Content and not sit in your Unreal Projects Content.
Another issue in terms of references happening quite often is when the assets themselves aren‘t prepared in a modular fashion, for example when a single texture is shared among multiple elements, but you only want one specific element to be part of the content package. That happens quite often when the artist that created the assets wanted to reduce filesize or the amount of individual textures by packing multiple textures into one. The workflow will still work, but you may have to bring more over into your content package, than necessary. So if you have any control over the assets or their creation make sure that each asset is modular and standalone, so try to avoid packing textures for multiple different assets together. PBR Texture Packing for one asset will ofcourse still work and is suggested. (Packing multiple PBR Channels into one texture that‘s used by the Materials of your Mesh for example)
Project Settings can become a problem
Unreal Engine Projects all have a small list of configuration or *.ini files in their Configurations folder. Whatever is set there is by design not part of the Plugins and therefore also not in any way stored in your content packages. That can become problematic if any of your content relies on these settings. Some content can still work on but other content will stop working completely up to not being loadable or result in errors. Epic Games ofcourse knows about this and by going with a similar approach in their own projects they are now moving more and more of these Project Settings over to something a content plugin can work with: Assets.
To give a good example on this you may know of the Enhanced Input System introduced in Unreal Engine 5 and established as the go to way for setting up User Inputs in Unreal Engine 5.1. This new system moved the Inputs that are defined from the Project Settings over to Data Assets that can also be stored in the Content of Plugins ofcourse, so you can now setup Inputs in your Content Packages as well.
This is just one of many samples showing Epic Games is actively working towards doing more in Assets and less in centralized Project Settings. This will benefit everyone in the long term going more with this workflow / approach.
Embedding Movies currently is an issue
For embedding a Movie file at the moment Unreal Engine is hardcoded to look specifically in the „/Movies“-Subfolder of the Projects Content. Any movie file placed somewhere else in the project will not be packaged correctly, so you will not be able to embed movies into content packages. While this is rarely the case I want to point out this specific scenario as there‘s no actual solution to it at the moment, besides leaving movies behind in the projects content. However you can change your content to not work with an embedded movie file and instead go with a streaming source that, as the name says, streams a movie from a remote location, like a local directory outside of the application or a network / online source. This however is not always possible depending on the project.
As I observed all these changes of Unreal Engine in the past I think it will just be a matter of time until this hardcoded, unflexible circumstance will be resolved by Epic Games in a future Update of Unreal Engine just like what the Enhanced Input System did before.
Dependencies
Besides the previously mentioned asset references, the management of plugin dependencies is a challenge that should not be underestimated. As mentioned before, Epic Games has been moving the individual features of the Unreal Engine more and more into modules or plugins for years. The previously integrated Cascade VFX system was removed from the engine in the context of the introduction of Niagara VFX and all Niagara modules are available as built-in plugins. So single features can be switched on or off, depending on the project requirements. So the Unreal Engine itself will also be more and more stripped back to a solid base framework in the coming years and the actual features will be outsourced to built-in plugins. This has many advantages, but also comes with a handful of key disadvantages. One of these disadvantages are dependencies between content and certain features or plugins.
So if you manage content in your content packages that uses such a modular feature or plugin, then your content package should also have a dependency reference accordingly. Otherwise an Unreal project could try to load your content package, but unfortunately not find the corresponding function of the Unreal Engine and an error will occur. Within the plugin info, which can be edited per plugin in the plugins browser, a list of dependencies can be maintained at the very bottom of the window. Many of the features of the Unreal Engine are already stored in plugins and can be referenced there by their plugin name.
Content packages with too much granularity or that are too extensive
Another challenge one faces when using and planning content packages is the question of the fineness of the content package. Let’s take as an example a library of furniture assets with 300 pieces of furniture, each consisting of a static mesh, materials and textures. In order to remain truly modular, a separate content package would have to be created for each individual piece of furniture, in which only the one static mesh, the materials required for it and the associated textures would then be stored. In this example, 300 content packages would have to be created. Keeping track of this amount of plugins can also become challenging. Again, putting all 300 pieces of furniture into a single content package automatically leads to little to no modularity and if even one of the pieces of furniture is needed in a future project, the entire library from our one content package with all 300 pieces of furniture will still need to be added.
The most sensible approach to this is obvious. You should subdivide the content packages in a meaningful way, not for every single piece of furniture, but for a logical grouping of them. For example, you could group all the furniture that belongs in the dining room, or group all the furniture from a particular artist or designer, or simply filter by even simpler criteria, such as the material of the furniture, like wood or metal. Of course, it’s challenging to find a good grouping for your content packages, but libraries are easier to manage this way. Nevertheless, the right and modular approach would be that each content package contains a single element with all the necessary or intended assets.
How-To: Creating and working with Content Packages
So now that you know what Content Packages are, what they are good for and what to watch out for when working with them, let‘s take a look inside Unreal Engine to actually use this workflow.
For this example I‘ll be using some Content from the Unreal Marketplace and I‘ll bring this over to a content package. The Asset is randomly chosen and not created by me. Also I assume you have your content ready in your projects content as usual and opened up your project in the Unreal Editor.
Step 1 – Creating a „Content Only“-Plugin
First we need to actually create the new content package. For that we bring up the Plugins Browser. You can do that by going to the Menu, Edit-Button and there click on the Plugins-Button.
In the new Window that opened up, we can go to the top-left „Add“-Button, which brings up yet another Window.
Click on the „Content Only“ Button (yes, you can select that. It‘s a bit confusing) and give your Plugin a name. After that you can hit the Button „Create Plugin“ on the bottom-right of the Window to actually create this plugin. After a second of loading your Plugin Browser will show the new Plugin you just created.
After that you can also hit the „Edit“-Button on the Plugin in the list to further edit info about your Plugin. That can be especially helpful to organize your packages.
Congratulations, you created the plugin for your content package. Now we need to bring our content over into it. By the way: The friendly name you gave the plugin will be used after restarting the Editor. You don‘t need to do this, but maybe you are confused why the friendly name isn‘t used yet.
Step 2 – Bringing Content over into Content Packages
To bring our assets over we just need to move them and all their referenced assets into the newly created content plugin. For this example I‘ll be going with a piece of bread consisting of a Static Mesh and the referenced and necessary Assets, which are a Material and 3 Textures.
Select the Assets in the Content Drawer, Drag & Drop them over to your Plugins Content and pick „Move here“ in the context panel that shows up. After a second of loading, your Assets now should all be part of the Content Packages Content.
But now comes the tricky part! One that confuses the most learning this workflow. Even while your assets have been moved, there are still so called Redirectors placed in the old locations of these assets. This system is in place to make it more easy to move content without having to adjust all the other assets referencing them. For this, we need to fix up these redirectors, deleting them in the process and telling every asset that had referenced them to now reference them at the new path. We just need to right-click the old directory or directories containing them before and from the context panel, clicking on „Fix Up Redirectors“.
After another second of loading, all the assets referencing your content are adjusted (Don‘t forget to save them as well) and we can go on. But wait, there‘s still something you need to do. Not telling you this the References inside the moved content aren‘t updated as well, but they can‘t be fixed by going with the fix up redirectors as they didn‘t recognize being changed. To solve this just right click on your Plugins Content folder and hit „Resave All“. That will do the trick and your content is now correctly referencing the moved content.
Congratulations! Your modular content package is now ready to be used as intended. Don‘t forget to double-check all the references via the Reference Viewer, but you should be good to go!
If you want to make a backup of your content package, share it with others, bring it over to another project or archive it somewhere, you just need to go to your projects plugins folder and move the whole plugin folder to the next location.
For bringing this into another Unreal Project you just have to copy or move this directory over to the target Unreal Engine Projects Plugins folder as well and restart the Editor for that project.
Your Unreal Journey continues
We are the first contact for professional Unreal Engine trainings for various industries in German-speaking countries and also internationally with English-language courses as live online trainings. Our ambition is to continue on this path and to further expand our small share in the success story of the Unreal Engine. From now on also with new Unreal Engine 5 course offers!
Kontakt
"*" indicates required fields