Substance Painter is perhaps the most powerful tool offered for texturing game assets, and as of recent, Roblox games as well!
Earlier in the year, Roblox released the “SurfaceAppearance” Beta for Studio users. This allows you to input 4 different texture maps for meshes using Physically-Based Rendering (PBR) to provide more accurate mesh lighting and textures. You can read more about it here:
I’ll assume that you’re somewhat familiar with using SurfaceAppearance and how it can be applied to meshes. If you aren’t, I suggest reading the above post to get yourself up to speed.
This post will cover how you can export your Substance Painter projects to Studio in the method I’ve found to be most effective.
For this post I’ll be using my Glock 19X project.
(This mesh is separated for animation since I haven’t used SkinnedMeshes yet as of writing. This won’t affect the end result and should apply to most other projects even with a single texture set.)
We can start by heading to the texture export screen (
File > Export Textures).
Before setting up a new template, it’s crucial to understand that Roblox takes 4 different maps:
Substance Painter uses the same naming scheme. This will help us create our export template for future use.
Change over to the
OUTPUT TEMPLATES tab and click the
+ symbol to make a blank template.
This will create a new template at the bottom of the list, called
new_export_preset. Open it. (Your template can be renamed by right-clicking it in the list and using
At the top of the template’s window you’ll see 5 buttons:
Here is the way I like to set up my template, since it keeps it true to Studio’s required maps and utilizes any baked AO you have (more on that in the color map dropdown).
Now, moving on to actually assigning your textures their correct maps.
This is done by dragging labels from the right side columns (
Input maps, Mesh maps, Converted Maps) onto the
RGB, Gr, and RGB+A squares.
GIFs on how to accomplish this for each map are below.
Color (+AO) Map
Setting up your color map this way allows you to actually have and adjust your ambient occlusion within Studio. In the GIF, the model’s AO color can be changed to any color using the MeshPart’s BrickColor/Color.
Phew! With that sorted, we can actually get to exporting your meshes.
Head back to the
SETTINGS tab, and set a export location for your textures. I have mine in the
Documents\Allegorithmic\Substance Painter\export subfolder, and create another folder within that for each project I make.
Here are what the rest of your settings should look like:
“Wait a minute. Why only 1024x1024? Substance Painter can export 8K textures!”
The huge caveat in uploading textures to Roblox at the moment is that textures are capped at a 1K resolution. Even if you tried uploading a 4K texture, it would only make the process longer and your file size larger. It will still reduce it down. So, for the time being, just stick to 1K. Sorry!
Now, having selected your texture sets from the left list, you can click
Export and sit back while it works away!
Assuming you have the mesh already in Studio, you can get on to applying your textures to your mesh.
(If you haven’t exported it yet, Substance Painter can do that too! Go to
File > Export Mesh and save it as an .fbx file.)
Importing your textures will be done in the
Game Explorer window. Enable it through
View > Game Explorer if it isn’t visible.
Import and select all the maps you want to import from the File Explorer. Click
Open after selecting them to start uploading them.
This will open a new window which will show the progress of your importation. Once again, sit back and relax until it’s finished!
Open up the
Insert Object window and search for anything close to “SurfaceAppearance” in the search bar. The first result should be the
SurfaceAppearance object itself.
(If this isn’t visible, make sure that in
File > Beta Features “Advanced SurfaceAppearance Textures” is enabled.
Select your mesh and double click on the
SurfaceAppearance object to insert it.
If your mesh consists of multiple parts, you can copy it into your MeshParts using this little trick:
(Inserting objects into others doesn’t support multiple selections.)
Assuming all of your textures have uploaded, your
Images folder in the Game Explorer window should look something like this:
Of course, there will be multiple repetitions of this pattern depending on how many texture sets you had in Substance Painter.
Now comes the most boring part of the whole process.
Right-clicking your texture map, you can copy the decal’s ID to your clipboard and then paste it into the SurfaceAppearance properties. Make sure that the texture you’re applying is to the correct mesh and map!
If your mesh consists of multiple meshes with different texture sets for each (which mine does) then it’s simply just a rinse-and-repeat affair until you finish. If you have multiple meshes that do use the same texture set then you can just copy and paste the SurfaceAppearance object into each mesh.
After doing all this, your mesh is almost done.
You will notice, however, that if you set up your ColorMap the way described, your mesh will have this odd white glow around it. Fear not, for this is where your AO was baked and can be adjusted easily. (Make sure that
AlphaMode is set to
After you do that, your mesh is actually complete and ready to use!
Move your camera around your mesh to make sure that your Normal maps work as intended. If something is off, refer to the aforementioned DevForum post to optimize your lighting settings.
Hopefully, this guide has helped you learn how to effectively use a Substance Painter to Studio pipeline. When I first started, stuff like this wasn’t very accessible to me so I felt that making my own in due time was the best option. I know this tutorial won’t exactly apply to the vast majority of Roblox developers since the program itself is subscription-based, but if even one person gets something out of it I’ll consider it a bonafide success.
Want to learn a little more about how you can use Substance Painter with Roblox Studio? Check out Noviius’ Recolorable PBR Textures tutorial!
Of course, thank you so much for reading this!