Substance Painter is perhaps the most powerful tool offered for texturing game assets, and as of recent, Roblox games as well!
“SurfaceAppearance” 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:
We’ll cover exporting from Substance Painter to Blender, applying textures to your mesh there and then exporting the mesh as an .FBX for use in Roblox Studio.
You should have a textured mesh ready for export in Substance Painter.
We’ll start exporting our textures by going to File > Export Textures
In the SETTINGS
tab, set an export location for your textures. I recommend you make a general folder for all your exports, with subfolders for each project.
Then, select Roblox (SurfaceAppearance)
from the dropdown as your output template:
It’s important to know that this template is only available on very recent versions of Substance Painter. This screencap was taken on version 8.3.1.
If you're on an older version, open this hidden image and copy these settings. The colored squares correspond to the smaller ones on the right side of the screen.
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!
You can export your mesh from Substance Painter using File > Export Mesh
if you need to, but this isn’t necessary if you already have a mesh file.
Open your .blend scene where your mesh is located. The first thing we’ll want to be doing is enabling the Node Wrangler
plugin.
Go to Edit > Preferences > Add-ons
then search for Node Wrangler and enable it.
We’re going to be using the Shader Editor window to apply our texture maps, and the simplest way to open this is going to the default Shading
layout at the top of your screen.
Your screen should look like this. The important window is the Shader Editor at the bottom, where we can see the node graph.
Select the Principled BDSF node.
(If you don’t have one, press Space and make one and connect the BSDF to a Material Outpout node.)
Press Ctrl+Shift+T
to open your file browser, then select the 4 maps that you exported from Substance.
Node Wrangler will automatically import and connect your texture maps to the selected BSDF node. Repeat this process for every texture set that you have. Switch the material you’re working in by clicking on different meshes.
Make sure viewport shading is on, and check that your textures have loaded.
Looks good!
Now, you can select your mesh, and go to File > Export > .fbx
to create a file in a chosen directory.
Importing your mesh will be done in the Import 3D
window. You can access it through the Home
tab.
You’ll be prompted to open your mesh file. After you select it, you’ll see this screen:
Open the dropdowns on each mesh to view their material. Make sure you aren’t getting any errors.
Adjust the settings as needed, such as renaming meshes.
Click Import
and voilà! Your mesh is imported! Scale it as you see fit, and adjust any mesh positions.
Congratulations! Your mesh is 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 documentation to optimize your lighting settings.
Read the documentation on the 3D Importer to help troubleshoot any problems:
Using opacity maps in Studio
The Roblox (SurfaceAppearance)
template uses the Opacity map from Substance Painter. What this means for you is that you can use AlphaMode
to either change the overlayed color of a mesh using it’s BrickColor or as a way to add transparency to objects.
If you’d like to learn how to paint opacity into your textures, I suggest following this tutorial by Stylized Station.
Using Overlay
allows you to change the color of the mesh using BrickColor
.
Using Transparency
will make your mesh transparent (shocker) where the opacity has been applied on the ColorMap.
Have fun with your newly textured mesh!
I’m glad to see that people have found this tutorial useful. I want to make sure that as many people as possible have the opportunity to getting their textured meshes from Substance to Roblox Studio as quickly as possible. The version of this tutorial you’re viewing is a rewrite completed in May 2024. The old versions of this tutorial were written when Substance Painter wasn’t commonly used by Roblox developers, and the tutorials available to them were pretty much nonexistent. I’ve decided to clean it up to get it up to date. The old versions had you manually import your texture maps and apply them one at a time. This new version uses .fbx files and linked textures to streamline that whole process.
The old method that is no longer recommended
Next, we’ll get to importing your textures.
Open the Asset Manager
window from the View
tab.
On this new window, click the bulk import icon.
Navigate to where you exported your textures from Substance. If you’re unsure, check the File > Export Textures
window in Substance. It will show you your last selected export directory.
Select your textures, and click Open
.
A Bulk Import window will open, showing the progress of every upload you have queued. Sit back and relax.
When they’re all done, you can find your new images in the Asset Manager
in the Recently Added
category.
Now, let’s start putting it all together.
Open up the Insert Object
window and search for “SurfaceAppearance”
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 with Shift + Left Click
!
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.
Thank you so much for reading!