Apply shading to multiple objects

Is there any way to apply the same smoothing to multiple objects at once?

I’ve tried linking mesh data to active and it does nothing to the shading

I’ve tried linking copy modifier(weighted normals) to active and it does nothing.
Modifier is applied but has no effect.

I have around 500 objects so I don’t want to do it one at a time.

Cheers.

im using script for this:

import bpy
import math

objects = bpy.context.selected_objects

for obj in objects:
    obj.active_material_index = 0
    
    for i in objects:
        bpy.ops.object.shade_smooth()
        obj.data.use_auto_smooth = 1
        obj.data.auto_smooth_angle = math.radians(180)
1 Like

Simplest case:

Select all objects to be smoothed (in the outliner or the viewport), right click in the 3D viewport and pick Shade Smooth from the context menu. Your active object has to be a mesh to get the right context menu. I believe this also works from the Object Menu.

But from your description it sounds like you might have a more complex setup? You can use the Data Transfer modifier to add/multiply/subtract/mix/replace normals from a source object onto your target (Face Corner Data → Custom Normals). The Blender manual actually has an example file demonstrating this. Then you can select all objects, make the one with the new modifier your active, and CTRL-L to copy modifiers. If you have more than one live modifier on your object and don’t want to copy them all, the bundled add-on Copy Attributes Menu lets you pick individual ones.

4 Likes

Thanks to both of you. I’ll try out both ways. :+1: