Author Topic: Re-importing the same model, at different scale breaks all the painting work?  (Read 3216 times)

Is their a solution to this yet, I made a model, brought it into SP, painted it all, then needed to make revisions which including scaling the whole model up.

when I re import it into SP, the textures are broken and I basically have to paint it all again, which is not pipeline efficient, it basically means I now have to carry the pre scaled version so I can make texture changes going forward, and if there are model changes I have to account for that on both models.

The UVs are the same, is their not a way to re-project the paint work on the new scaled model, based on the UV space?

In a studio, where you tweak and change asset scales and things throughout development its not ideal to have to carry the original SP mesh, or have to paint it again.

any thoughts on how to tackle this?


Did you rebake the maps in SP? If the UV layout has not changed, then I don't see how changing the scale would have any impact.  However, if you've added gemeotry or modified it there's a good chance the UV's may seem to be the same, but actually are not.
I had that situation where I had made changes and "broken" my initial UV maps without realising it. IMHO the scale alone would have zero impact on the painting as it is purely driven by the UV map layout.

It is not possible to re-import a model at a different scale while retaining MANUAL paint work. Texturing based on generators ect will be preserved, you simply need to re-bake the textures (normals, AO ect).

I am working in the industry, and I am absolutely surely not allowed to change the scale of a model after the texturing process has already started. The model needs to be 100% final before any texturing is happening.

The UVs can change at any time, Painter will re-project everything onto the new UV layout. It is not possible to change the 3D model in any way though (if you have painted manually) because Painter records each stroke in 3D world space.

I have posted about this problem numerous times. You could change the scale of your model (or import a completely different model, Painter doesn't know its the same one) AND the UV layout, how would any 3d application know where the manually painted strokes need to be applied on the new model?

Hey, yeah its the manual paint work that gets busted,

From my experience in the film and game industry nothing is ever 'final' until the project is shipped, the word 'final' is almost a running joke in the film industry ;-)

While I understand that the paint strokes are saved in 3d space, if you have some connective tissue between the old and new scales, or the old and new UVs, then in theory you should be able to transfer those stroke coordinates to a scaled model.
In my case the scale changed, but the UVs are the same, so potentially you could store the world space stroke data, relative to UV space, import the new scale with the same UVs, and recalculate the 3d stroke data onto the new model.

Its certainly not as trivial as I have suggested, its a complex task, but was wondering if its something Algorithmic had thought of?

Final is never final.

If you need to scale your model, then you should import it without checking the "Preserve strokes position on mesh" on the import dialog. This will cause hand-painted layers to scale with the model. If you keep that box checked on import, the paint won't scale, and you'll be left with a mess. If you need to scale the model, I'd recommend having that be the only change you make to the model during that import.

So, to walk through a hypothetical workflow:
  • You create your model in Blender, and export the FBX, which you import into Substance Painter.
  • You spend hours painting it, of hours setting up fills using masks, then you realize the scale of the object needs to be adjusted. You go back into blender and change the scale, apply the scale, then export the FBX again.
  • You go back to SP and reimport the FBX, making sure to uncheck "Preserve strokes position on mesh". You should find that all your strokes scale properly, and everything looks the way it should.

Note that this doesn't work as well if you don't scale all the axes equally. For me this works perfectly if I double x, y, and z scale (for example). But if I just double y, then things don't quite look right.

Hey, dgoyette

Yeah thats the first thing I tried, but it never seems to work properly, it will display correctly initially, but as soon as I say, toggle the visibility of a layer on the texture set, it will bust all the painting and masking, similar to what having stroke positions turned on. looks like.

I have seen this behavior consistently in many assets over many versions.

So it would seem for now that their isnt a reliable solution that I can see?