Загрузка данных


import bpy

bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)

def create_block(name, loc, scale):
    bpy.ops.mesh.primitive_cube_add(size=1.0, location=loc)
    obj = bpy.context.active_object
    obj.name = name
    obj.scale = scale
    bpy.ops.object.transform_apply(scale=True)
    return obj

parts = []

parts.append(create_block("Torso", (0.0, 0.0, 4.0), (0.9, 0.5, 1.4)))
parts.append(create_block("Head", (0.0, 0.0, 5.2), (0.45, 0.45, 0.5)))

parts.append(create_block("Arm_Upper_L", (0.9, 0.0, 4.5), (0.7, 0.25, 0.25)))
parts.append(create_block("Arm_Lower_L", (1.7, 0.0, 4.5), (0.6, 0.2, 0.2)))
parts.append(create_block("Hand_L", (2.2, 0.0, 4.5), (0.25, 0.15, 0.15)))

parts.append(create_block("Arm_Upper_R", (-0.9, 0.0, 4.5), (0.7, 0.25, 0.25)))
parts.append(create_block("Arm_Lower_R", (-1.7, 0.0, 4.5), (0.6, 0.2, 0.2)))
parts.append(create_block("Hand_R", (-2.2, 0.0, 4.5), (0.25, 0.15, 0.15)))

parts.append(create_block("Leg_Upper_L", (0.45, 0.0, 2.3), (0.35, 0.35, 0.9)))
parts.append(create_block("Leg_Lower_L", (0.45, 0.0, 1.0), (0.3, 0.3, 0.9)))
parts.append(create_block("Foot_L", (0.45, -0.2, 0.2), (0.32, 0.5, 0.2)))

parts.append(create_block("Leg_Upper_R", (-0.45, 0.0, 2.3), (0.35, 0.35, 0.9)))
parts.append(create_block("Leg_Lower_R", (-0.45, 0.0, 1.0), (0.3, 0.3, 0.9)))
parts.append(create_block("Foot_R", (-0.45, -0.2, 0.2), (0.32, 0.5, 0.2)))

bpy.ops.object.select_all(action='DESELECT')
for p in parts:
    p.select_set(True)
bpy.context.view_layer.objects.active = parts[0]
bpy.ops.object.join()

char_obj = bpy.context.active_object
char_obj.name = "Персонаж"

mat = bpy.data.materials.new(name="Character_Mat")
mat.use_nodes = True
bsdf = mat.node_tree.nodes.get("Principled BSDF")
if bsdf:
    bsdf.inputs['Base Color'].default_value = (0.8, 0.65, 0.55, 1.0)
    bsdf.inputs['Roughness'].default_value = 0.6

char_obj.data.materials.append(mat)

bpy.ops.object.select_all(action='DESELECT')