В Blender при использовании модификатора Subdivision Surface для управления жёсткостью сглаживаемых ребер используется параметр Mean Crease. Значения для жесткости можно устанавливать через стандартный UI в N-панели, или при помощи Python API.
Для того чтобы установить значение Mean Crease в Blender Python API, для начала инициируем объект BMesh и перенесем в него геометрию текущего активного объекта.
Объект должен находится в режиме редактирования Edit mode.
1 2 3 |
import bmesh bm = bmesh.from_edit_mesh(bpy.context.object.data) |
Значения силы сглаживания для всех ребер хранятся в объекте BMesh на специальном слое “crease”.
Чтобы получить доступ к этому слою, выполним следующую команду, которая возвращает указатель на нужный нам слой:
1 |
crease_layer = bm.edges.layers.crease.verify() |
Теперь мы можем получать и редактировать параметр жесткости для каждого ребра.
Например, выведем значение Mean Crease для первого ребра меша, его индекс равен 0.
1 2 3 |
print(bm.edges[0][crease_layer]) # 0.0 |
Таким же образом можно и устанавливать нужные значения для требуемых ребер.
Например, назначим всем выделенным ребрам значение Mean Crease равное 1.0.
1 2 3 4 5 |
for edge in bm.edges: if edge.select: edge[crease_layer] = 1.0 else: edge[crease_layer] = 0.0 |
Здесь мы проходим в цикле по всем ребрам меша и если ребро выделено, устанавливаем для него значение Mean Crease равное 1.0, а если ребро не выделено, сбрасываем значение в 0.0.
Чтобы изменения отразились на меше в окне 3D вьюпорта, перенесем измененные данные из объекта BMesh обратно в текущий меш.
1 |
bmesh.update_edit_mesh(bpy.context.object.data) |
Если объект BMesh больше не нужен, очистим его чтобы он не занимал лишнюю память.
1 |
bm.free() |