Setting up model with many objects for Substance Painter


(frig) #1

Summary: I am trying to texture a complex model with 100+ objects split among 15 UV maps in Substance Painter. How do I accomplish this without joining the objects together so that I can still rig/animate it later?

I have a model with 100+ separate objects that I wish to paint within Substance Painter, but I am having difficulty understanding how to set up this mesh the proper way so that I am able to isolate each object within Substance Painter (For example, in its own texture set), still be able to paint across multiple objects at once, and end up with 15 textures based on their assigned UV maps. Parts of the mesh will be animated, so I need to be able to hide some of the objects in Substance Painter so I can paint parts that will be visible once they move.

I have the 100+ objects spread across about 15 different UVs. On my first attempt, I assigned each object its own material within Blender so that they would have their own Texture Set in Substance Painter. This turned out to be incorrect because I cannot paint across multiple texture sets at once and I will end up with a separate set of textures for each object (100+ different textures vs the 15 I want to end up with).

How can I keep each object separate and also have it share a Texture Set with several other objects in Substance? My next idea is to create a duplicate mesh with the objects that share a UV map joined together. I can paint on this duplicate model, perhaps using a third mesh to bake an ID map in Substance. Then I will have to go back and assign the textures to the original version of this project.

Or is there another way? This seems a bit convoluted, and i wont be able to paint ‘under’ some of the objects like I would like to since they’ll be joined together,

To further explain, here is a picture showing how I wish each object to be separate, but would like to be able to paint in the inaccessible areas (such as between the fingers) in Substance Painter by hiding the other objects since they’ll be animated later. This is about 21 separate objects, but they share the same UV map and will share the same texture map as well.


(jamesgtmoore) #2

You can simply select all objects you want to send to Substance Painter (SP) then export them to a single fbx . Be sure to tick the box “Selected objects” in the fbx export dialog. Then use that fbx with SP. Then click “Solo” in the texture set frame in SP to isolate all polygons assigned to that textureset/Blender material. If you want to only see 1 object at a time then just export fewer objects to the fbx.


(frig) #3

Thank you for the answer, but I don’t think I worded my question very clearly due to my lack of familiarization with the process.

If I assign a separate material to each object I would end up with over 300 texture sets, which just isn’t practical. I also need to be able to paint the object as a whole and not in separate parts, but you can’t paint across texture sets in Substance Painter as far as I can tell.

I am able to export the objects just fine, but was looking for a way to hide individual objects within a texture set (or some other way I was unaware of) so I can paint objects that are hiding behind others, or that are in hard-to-reach spaces.

Ultimately the best I could do was to group the objects into 35 or so texture sets so I can at least hide parts of the project. I’ll just have to paint on the UV map in Substance Painter for the parts I can’t see.

It’s a shame Substance Painter doesn’t have a way to hide polygons. That would solve a lot of my problems here.


(jamesgtmoore) #4

Rigging and animation can be achieved with a single mesh, a single Blender object, parented to a single armature.

Good texture resolution for a robot hand like this can be achieved with 1 material/texture set at 4k resolution.

If you rig it and then pose the hand so that the fingers are all spread out at different angles then export it as an FBX to SB then you will be able to see all angles of the mesh and paint it more easily in SB.

So you can join it, rig it, pose it, export it, then paint it.

If you have separate objects in order to bake “by mesh name” in SB then what you can do is export them as separate objects, export the high poly also as separate objects. Do the bake in SB, then import the joined mesh into SB and paint that but still use the baked textures (normal map etc) for the best definition.


(cgCody) #5

It is unfortunate that you can’t hide polygons, but there are work arounds. Like jamesgtmoore said, you can pose the object in a way that reveals more of the mesh

Alternately you can keep the pieces as separate objects and arrange the pieces in an exploded-view. If all of the objects are assigned the same material, Substance will treat them as one texture set. Just keep in mind this will effect the AO and world space maps baked in Substance.

You can then assign different vertex colors to the various pieces that will have the same material to create an ID map for masking. ie Steel parts are assigned rgb 0.0.1, plastic parts 1.0.0, etc. This will allow you to work on one texture set, but use masking to apply materials to different parts.


(frig) #6

Thank you jamesgtmoore and cgCody, both of those responses help a ton.

I did try to bake an ID map as both of you suggested by using the node editor to assign a random color to each object but for some reason SP wouldn’t detect any vertex colors. I’ll try to iron out why that didn’t work later in my next project.


(cgCody) #7

Colors generated in Cycles aren’t going to export unless you bake them into a map in Blender beforehand.

I’d suggest you assign the vertex colors manually anyway, by going into vertex paint mode on each object, picking a color and filling the entire object. so that you can group objects that will have the same material.

Here’s an example of what I mean from my current project. In Blender each part of the robot is a separate object, but notice how they are grouped into just 5 different vertex colors? This allows me to use the color selection mask to apply plastic, metal, etc to those respective parts. And it’s all one texture set, so I can still go in and paint across the entire model.
droid_ID


(jamesgtmoore) #8

I’ve found that assigning colors to the high poly’s faces using the Color ID feature of the Textools Blender addon results in an FBX that SP can use to bake an ID map from the high poly.
textools

In SP’s baker I had to select the “Color Source” option of “Mesh ID/ Polygroup” to make it bake the ID map successfully:

sp


Distributing UV's of a joined object to different textures
(Richard Culver) #9

Unfortunately there are a number of limitations to the process. We use Substance painter at the studio. And while there are times we will have one object with 1 UV more often than not we have several UV tiles with one object. Ironically one of the recent projects is a robot with 1 4K texture. And for one client we regularly have 1 4K image. But this is not possible if the asset needs more detail. 1 4K won’t cut it. So we have come up with a temporary solution until we can cone up with a good UDIM workflow.

Here is some information you might find useful.

https://support.allegorithmic.com/documentation/spdoc/udim-144310352.html

Currently you can’t paint across UDIM tiles in substance. And UDIM support is planned for Bender 2.8.

So what I have always done is to treat my export mesh as different from the rigging and animating mesh.

In fact the process of baking can get very complex. But we usually do all of that in Blender. And a baking mesh will usually not be the same mesh we export to Substance Painter.

The one thing that is constant is the UV. Once that is finalized we will often do many things in the process that preserve the UV but allow us to paint on separate parts. So it comes down to planing. And I would err in the direction of more maps rather than less if it is not for a game object.

So to the issue of hiding objects the best practice I have ever used is exploding them which was mentioned already.

Then I would consider planing your meshes for baking and painting not animation. In fact you will find that you have a mesh joined completely differently than how it will be animated.

Once you have your best plan for painting and the UV set, then as a separate process rearrange your object to be rigged. Bring the maps back in and set them up for rendering. And then for that you would at least have a material set for each UV and image set. But this is preserved as you rig. So the process goes in that direction rather then the other way around.

And another tool we use regularly is Texture Atlas which is invaluable for this process of joining meshes temporarily for unwrapping.

Also have a look for UV packmaster.

These two last tools (atlas and packmaster) are crucial. Because the UV process should remain fluid. You might have several iterations to get it right. And these tools turn hours and days into minutes of work.


(Andrew) #10

My model consists of separate meshes. I don’t want them to me one mesh.
I need:

  1. make an ID map with texture atlas add-on
  2. load FBX into Substance Painter
  3. export textures back to Blender.

I used texture Atlas add-on to generate ID map and it looks fine in Blender since it’s still separated meshes. Then I exported FBX and got THIS in SP

How to make an atlas ID map work?


(Richard Culver) #11

When you make your texture atlas name it UVMap. This way it writes over the default map. Or make sure and put the new atlas map to the top of the list after you end the unwrap,

When you export, blender will export the first map in the list. Looks like substance is getting the wrong UV map.


(Andrew) #12

Thank you.


(Richard Culver) #13

You’re welcome. Hope that fixes your issue. It is all full of traps and tricks. But once you get the hang of it the process is smooth