How to create multiple unique materials across multiple objects without assigning a material to each object?


I need to assign unique textures to all objects for export to another program. At the moment I assign all objects the same material ie white paint and then have to click on each individual object and create a unique editable copy. Is there a faster way to do this or another way to have each object have it’s own texture set ?



Hi Glenn - if the material has a single texture that is shown across all the objects, you can map them all wuith the same mapping - - say Planar - if they have the same planes mapping to each object, each should get the right part of the texture from one material - but I do not know if I understand the scenario completely.


Hi Pascal.

Thanks for the reply. I think maybe my original question was worded badly.

When exporting an Fbx from rhino to substance painter each object in the scene has to have a unique texture.

Say I have three objects in my rhino project and assign white paint to them all in one go and then export to painter it does not read as three individual objects painter just see’s the one white paint material and breaks the uvs across all objects. As in if I paint on the sphere it will paint randomly across all three objects as it only sees the one texture ( texture sets in painter ).

So at the moment I either have to assign each object in rhino a different material or as I am doing I group select all objects and assign 1 material. Then I cycle through each object and click " create unique editable copy " both methods of which are laborious / time consuming.

With 3 unique materials applied to the objects in rhino when exported to painter it then reads those 3 objects as distinct Texture sets so if you paint on the sphere this time it only affects that texture.

if you group select all objects once they have the 1 material applied the option to " Create unique editable copy " appears but if you click it, it doesn’t do the whole selection as Ideally I would want.

Does this make more sense ?


I have to do something similar to export for keyshot

What I do to ease my work is creating a copy of the assembly I am about to render, and dividing the objects into layers by material, as they are set to Layer Material by Default, once I get into keyshot it is easy to just edit a single layer material and all objects update.

To get things even easier, I name the material to a equivalent in keyshot and in keyshot import use the Assign Materials from Library option.

the only work I have to do then is to edit manually materials that need orientation or logo etc etc.

Hi Glenn - here is a python from Steve Baer that does what I think you need - (2.0 KB)

To use the Python script use RunPythonScript, or a macro:

_-RunPythonScript "Full path to py file inside double-quotes"


Hi Thanks for the reply,

That doesn’t really help with the substance issue unfortunately and I do some of that with Keyshot but I’ve never used assign from library so I’ll deinatley be trying that one !!



Hi Pascal.

Maze balls thanks.

Seems to only work if all objects are set to default material. Does that sound right ?

Just managed to get it to run on a scene with over 40 objects and there were only 3 that did not get assigned unique materials.

Thats just sped my days up considerably.

Ill google stalk Steve Baer and see if I can find any more info.



yeah, I didn’t get the full of what you needed on the first read.

Looks like you found a solution already, if by any means you need another, I just stated learning the Elefront Grasshopper plugin trying to use as a layout tool, but it has a material attribute as well, maybe you can try it and see if it works for you.

I Kinda got it working, but the material generation needs improvement to not generate duplicates