Outsource Asset Validator for UE
- Jesse Olchawa

- Jan 4
- 6 min read
Updated: Jan 5

Introduction:
In this project I will explore creating a tool to automate the importing of assets, texture creation and material setup pipelines for 3D assets in Unreal Engine. This tool is intended to be used for outsource asset management as creating bespoke textures for repetitive asset surfaces such as wood, metal or plastic can cost time spent away from working on bespoke assets. By cutting down on unique repetitive textures this tool can leverage Unreal engines powerful material shaders to make variations inside the engine ready for level designers to work directly with.
Week 1:
Project Outline:

This project is heavily inspired by my freelancing work as there was often many assets that simply needed smart masks and a light coat of paint applied after baking to make them match the scene. Modular background assets tend to eat up production time so searching for solutions I stumbled onto Marcus Whites talk from 2019 about how to “Streamline Asset Workflows” in UE using Python (Epic Games, 2019). He outlines using substance baker API to bake out mask maps that are then fed into shaders into engine after successful import and setup.
I knew this was the next challenge I wanted to work on to finesse my Python skills, so I got to work outlining my goals:
Creating a python tool that integrates multiple APIs for baking, GUI and engine in one script.
Can take an asset, validate it and import into UE.
Can bake and channel pack maps for each mesh.
Follows industry naming conventions and fixes issues.
Has written, easy to follow documentation.
Stretch goals:
Create thumbnails of assets and send them to Trello boards for outsource management.
Planning:

I’m still teaching at the moment so knowing my busy schedule and oncoming marking season I have blocked out this project for a tight 4-week plan. Furthermore, the Trello integration during the final week can be abandoned should the project run overtime. I do anticipate I’ll have some issues during the week working with baking as I have never used Substances baking API before and hope it is still supported as the video is 7 years old. I may need to look for another baking tool to create curvature maps should that occur. Now let’s dig into the assets I will be testing this on!
Assets Chosen:

I have chosen a variety of free to use assets from FAB to experiment with. For full links to them please head to the bottom of the page as they are all cited. I wanted this project to differentiate from Marcus White usage on his stylised game by instead tackling a tool and shaders for full realistic PBR props instead. Unfortunately, some of the assets are made a bit funny such as the barrel with broken scale and overlapping UVS and fantasy weapons being the size of a nail (I got rid of these).

So, I have downscaled it to the wooden crate and fixed barrel for testing and debugging as they provide a good variety of wood and metal ids to test for import. I did some research of how I wanted my shader values to look later as they would need gradients and noises to make them work.

I did encounter some odd issues on the barrel due to the hatch having its own map meaning UVS were overlapped so I deleted that part of the mesh. I needed to conserve the original normal map so that I can bake out curvature and the rest of my thickness maps from it in Painter.
Channel Packing and Noises:

To build the shaders I needed noises and the noise baked texture the script would create. So I used the existing normals to bake out manual exports for me to work with. For my seamless noises for masking and basecolor value variation I used Designer to grab some good textures that would work. As I will be making only a wood and metal shader I chose to pack maps for both into one texture to save on cost. Here’s what I chose:

For the baked mesh maps however I went into painter and added some generators after rebaking all the maps from the normal included from Fab. I created a smart material stack so I could bake the same type of maps out for packing on both the barrel and crate. For this texture the focus is to grab interesting masks to use later to create basecolor and roughness. I used ambient occlusion as standard for the red channel and then curvature for green. Curvature gives great outline and edge damage. For a bigger impact of damage and dirt accumulations I used the blue channel to store a dirt edge generation. I still have the alpha channel left so for this I added a ground dirt-based generator instead. I knew from my previous project I could create masks from the ground using world position but figured a texture would be a way to offload those calculations to a greyscale map. After packing I moved into engine.
Creating Smart Mats in UE:
After getting all the maps I needed I imported them into UE and set them up in two materials. I did consider between having a master material that has tons of static mesh toggles to create wood or metals, but I did not like the idea of so many samples and instructions packed into one graph. It would be a nightmare to troubleshoot if something became unconnected, so I instead opted for separate base materials but with similar parameters for consistent user experience.

As assets need to be created with the same noise and bake layout in RGBA there are similarities I can paste across for these variable names as well. For the wood graph I used the normals green channel to create initial grain that is then mixed in with the streak noise channel green. I had to create my own variation of the world align texture function to be able to rotate the UVS of the tileables as not all meshes have normals that are straightened. This noise creates a better gradient that blends with original dents and grain from the normals. Whilst this makes one tone of wood for more interesting basecolor I used the dirt edges to create darker buildup of value and curvature for lighter wooden flecks on chipped edges. I had to flatten the normals to make the basecolor look less noisy. For roughness I desaturated the basecolor which regularly makes a dark grey map so after flipping with one minus the roughness has enough to be light enough for a dry wood appearance. As I had baked a dirt gradient from ground, I toggled this and my other masks to make it possible to create variations such as painted wood, stained or dirtied effects.

For my metal shader my graph began in the roughness area as I used flat scratchy noise to create interesting tiling roughness values. For colour I used a flat value with a toggleable rust mask that uses many of the baked channels and packed noise. Rust is first built up from the dirt edges which appear around the rings and corners of the barrel. For filling in more rust I used the packed noise to tile the effect with adjustable intensity values making it possible to create variations of either scuffed or damaged rust metals. Compared to my wood material I also added edge detection to build up rust on surfaces that make contact with the ground. This is toggleable however as it uses distance fields and I did not want to push the cost if unnecessary onto all metal meshes.
Week 2:
Working on this!
Assets Used:
Fab. “Big Crate.” Fab.com, 2025, www.fab.com/listings/6403b02c-8a96-44c9-bf9b-f80cd0cf958c .
---. “Industrial Pallet.” Fab.com, 2025, www.fab.com/listings/6a8546f0-6e83-4a3a-9035-c9306cd22441 . Accessed 3 Jan. 2026.
---. “METAL BARREL | Post-Apocalyptic Videogame Props.” Fab.com, 2025, www.fab.com/listings/2b6a823a-ffff-4c2b-99b6-8b2bafc7c917 . Accessed 3 Jan. 2026.
---. “Misc Props - UB Free Pack.” Fab.com, 2025, www.fab.com/listings/e5bb46ab-edf1-4530-8797-703f4c98b4a6 . Accessed 3 Jan. 2026.
---. “Simple Sword and Axe.” Fab.com, 2025, www.fab.com/listings/e3a09acc-5704-4cb3-9485-45ad39414fce . Accessed 3 Jan. 2026.
---. “Survival Props.” Fab.com, 2024, www.fab.com/listings/d5d45ca2-d957-447a-8744-ea1f8aabece3. Accessed 3 Jan. 2026.
Research Bibliography:
Epic Games. “Using Python to Streamline Asset Workflows | Unreal Fest Europe 2019 | Unreal Engine.” YouTube, 20 May 2019, www.youtube.com/watch?v=FOSwlDQY6N0 . Accessed 11 Dec. 2025.



Comments