Hey folks,
I´ve downloaded a model and need to scale it to fit my needs. Problem is, the model consists of hundreds of objects with dozens of modifiers and curves and most of them cloned (linked) copies of one another.
I need to scale the thing as a whole single object but the guy didnt seem to have applied scale on all the sub objects. So all objects scale differently.
Tried selecting all objects (a) and applying scale (crtl+a) but get “Cannot apply to a multi user object” on dozens of objects. Trying to scale the engine from this file https://www.dropbox.com/s/onbz7g1w9ondsh0/R1820-60%20only.blend?dl=0
Any ideas on how to scale it uniformly?
can I know, press U for which menu items ? I am using Blender 2.8rc3 and it does not work with press U.
**I found in 2.8rc3, it’s the menu Object > Relation > Make Single User > “then we choose from the list”
But seem it work only on 1 object even multiple linked objects selected. How can I unlink multiple selected objects ?
Maybe old, but run into the same and solved it.
In Blender 3.0, Mac its
Select/linked or cmd+l and then chose object data
Object/Relationship/make single user/object and data (no shortcut, but you can define one)
Now you can apply the transform or what ever you want. (cmd+a)
To take it back: Object/Link/Link Object Data (Note that of course scaling of instances was undo in the step before. May be a problem with negativ scaling)
I only wonder why there is no script that does that automatically?
Now if someone wants a macro, these are the commands:
Object → Relationship → make single user → object & data
That worked for me. I’m new and I have literally no idea what any of this means, but it seems the objects were linked in some way that the scaling function did not like, and this unlinks them.
I don’t even think the other steps are necessary. Just unlink the object in question.
Linked means Instanced/Referenced. Its basically calling the mesh data for another object. This is also threaten in OpenGL and Render as an instance, meaning it performance faster, as it does need to be loaded individual. Think of a tree with 1 million polygons, and then instance it 10 times without performance problems.
However Blender Objects are not instances anymore, when a modifier get applied. Thats whats also called ‘reference’, its basically justing using the other object as reference for the base geometry.
If you unlink everything you also destroy any Reference or Instance.
But Blender let you reconnect that easily.
So, its a bit like C4D works, 3dsmax does that all automatically, same for Modo, only that Modo always has a main source item (which makes a lot things easier). Maya and Houdini are even more complicate here, allowing the same, but really tricky to relink things.
well it could be usefull when you import meshes in fbx format from other software like modo
some of the obj are linked and have bad scale, here’s a script to fix it, just select the object(s) you want to fix, you can select all the obj of the scene if you want
the script will unlink, fix scale then relink objects
if you want to fix rotation or position you can adjust the script or ask me if you can’t
import bpy
def fix_scale_linked():
obj = bpy.context.object
bpy.ops.object.select_linked(type='OBDATA')
selection_linked = bpy.context.selected_objects
# make single
bpy.ops.object.make_single_user(object=True, obdata=True, material=False, animation=False, obdata_animation=False)
for obj in selection_linked:
if obj.type == "MESH":
bpy.context.view_layer.objects.active = obj
bpy.ops.object.select_all(action='DESELECT')
obj.select_set(True)
if obj.scale.x !=1 or obj.scale.y!=1 or obj.scale.z!=1:
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
for obj in selection_linked:
print (obj.name)
obj.select_set(True)
bpy.ops.object.make_links_data(type='OBDATA')
linked = []
selection = bpy.context.selected_objects
for obj in selection:
linked = []
if obj.type == "MESH":
bpy.context.view_layer.objects.active = obj
bpy.ops.object.select_all(action='DESELECT')
obj.select_set(True)
if obj.scale.x <1 or obj.scale.y<1 or obj.scale.z<1:
for objet in bpy.data.objects:
if objet.data == obj.data and objet != obj:
linked.append(objet)
print (">>Pb of SCALE on linked objetcs : " + obj.name + " | " + objet.name + " | " + str(round(obj.scale.x,4)))
if linked:
fix_scale_linked()
else:
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
Hi Robert,
The newest version 3.2 of blender lets you apply transform on linked objects there’s no more warning message
So I think this script will be useless by now