Blender AI Wiki / Русский Поиск

SETUP 31: MAKEHUMAN / MPFB

Получить в Blender параметрически управляемого человека через MPFB (MakeHuman Project for Blender), разобраться, как устроены таргеты (morphs), одежда и скелет, и выгрузить результат в FBX для рига или движка. Отдельно: MPFB — это не MakeHuman 1.x, это переписанный аддон, и старые инструкции к нему

⚙️ Сетапы ⭐ полная 12 блоков кода обновлено 2026-11-12

ID: SETUP-31 | Type: Base Human | Difficulty: ⭐ | Time: 20 min RU/EN Bilingual

Когда применять: нужен параметрический человек как отправная точка — для прототипа, для стокового персонажа или чтобы не моделить гуманоида с нуля.

🎯 ЦЕЛЬ

Получить в Blender параметрически управляемого человека через MPFB (MakeHuman Project for Blender), разобраться, как устроены таргеты (morphs), одежда и скелет, и выгрузить результат в FBX для рига или движка. Отдельно: MPFB — это не MakeHuman 1.x, это переписанный аддон, и старые инструкции к нему неприменимы.

📋 ЧТО ПОНАДОБИТСЯ

Компонент Версия Зачем
Blender 4.x хост аддона
MPFB релиз под свою версию Blender генерация человека, таргеты, одежда
MPFB-ресурсы пакеты с одеждой и материалами обход голого тела
Старый MakeHuman 1.x не нужен можно держать, но в Blender он больше не интегрирован

[!NOTE] Официальная точка входа по MPFB — сообщество makehumancommunity, репозиторий проекта ищется там. Не указываю конкретный URL: аддон регулярно меняет имя пакета и способ установки между релизами. Смотри Help → Manual → Add-ons в своей сборке или README актуального релиза — там указан способ установки для твоей версии.

🛠️ НАСТРОЙКА

1. Установка аддона

# Установка из исходников в папку аддонов Blender
git clone <репозиторий-MPFB> mpfb
# затем: Edit → Preferences → Add-ons → Install… → выбрать zip-пакет аддона
# или положить папку mpfb в %APPDATA%\Blender Foundation\Blender\<версия>\scripts\addons

После включения аддона в 3D-вьюпорте появляется отдельная вкладка с панелью MPFB, в N-панели — меню операций.

import bpy

print("blender:", bpy.app.version_string)
print("дополнения:", [k for k in bpy.context.preferences.addons.keys()
                       if "mpfb" in k.lower() or "makehuman" in k.lower()])

2. Создание человека

Панель MPFB даёт набор базовых параметров: пол, возраст, рост, телосложение (мускулистость, полнота), отдельные блоки под лицо и под тело. Параметры — это не ползунки в сцене, а таргеты: контрольные вершины, которые по умолчанию скрыты.

import bpy

human = next((o for o in bpy.data.objects if o.type == 'MESH'), None)
if human:
    print("объект:", human.name)
    print("вершин:", len(human.data.vertices))
    if human.data.shape_keys:
        keys = human.data.shape_keys.key_blocks
        print("ключей формы:", len(keys))
        for k in list(keys)[:10]:
            print(f"  {k.name}: value={k.value:.3f} "
                  f"(slider {k.slider_min}..{k.slider_max})")

3. Работа с таргетами

Таргеты — это shape keys с нулевым значением, которые можно поднимать и опускать.

def set_target(obj, name_part, value):
    """Найти таргет по подстроке имени и выставить значение."""
    sk = obj.data.shape_keys
    if not sk:
        return None
    for k in sk.key_blocks:
        if name_part.lower() in k.name.lower():
            k.value = max(k.slider_min, min(k.slider_max, value))
            return k
    return None

human = next(o for o in bpy.data.objects if o.type == 'MESH')
# Не угадывай имена — выведи их:
print([k.name for k in human.data.shape_keys.key_blocks][:20])

[!NOTE] Имена таргетов заданы сообществом MakeHuman и включают идиомы вроде macro, detail, male/female и коды регионов. Не переводи и не переименовывай их: одежда и пресеты из пакетов рассчитаны на эти имена. Просто выведи список — он сам покажет структуру.

4. Скелет

MPFB умеет добавить к человеку скелет. Это отдельное действие, и после него меш получает арматуру и веса.

rig = next((o for o in bpy.data.objects if o.type == 'ARMATURE'), None)
if rig:
    print("костей:", len(rig.data.bones))
    for pb in rig.pose.bones:
        pb.use_deform_preserve_volume = True

Проверка привязки — та же, что и для любого рига: у каждой кости должна быть непустая группа весов.

def bone_weight_report(rig, mesh):
    for b in rig.data.bones[:8]:
        vg = rig.vertex_groups.get(b.name)
        if vg is None:
            print(b.name, "-> нет группы")
            continue
        n = sum(1 for v in mesh.data.vertices for g in v.groups
                if g.group == vg.index)
        print(b.name, "->", n, "вершин")

if rig and human:
    bone_weight_report(rig, human)

5. Одежда

Одежда приходит отдельными объектами (прокси в терминологии MakeHuman). Каждый вариант — отдельный объект в сцене, и одежда привязана к телу: при смене параметров таргета она растягивается вместе с ним.

bpy.ops.object.select_all(action='DESELECT')
cloth = next((o for o in bpy.data.objects
              if o.type == 'MESH' and o.name != human.name), None)
if cloth:
    cloth.select_set(True)
    bpy.context.view_layer.objects.active = cloth
    print("одежда:", cloth.name,
          "модификаторов:", [m.type for m in cloth.modifiers])

Одежда зачастую приходит с модификаторами (Subdivision, Shrinkwrap или Data Transfer) — не применяй их до экспорта, иначе она перестанет реагировать на таргеты.

6. Сохранение и повторное использование

Готового человека имеет смысл сохранить отдельным blend-файлом: иначе параметры таргетов придётся подбирать заново.

# Отдельный blend под библиотеку персонажей
bpy.ops.wm.save_as_mainfile(
    filepath=r"C:\work\mphuman\humans.fuse.blend",
    copy=True,          # copy=True — текущий файл останется прежним
)

# Ассеты из пакетов подключаются через Append, а не Link:
# link тянет внешний файл и ломается при его перемещении
bpy.ops.wm.append(
    filepath=r"C:\Users\<user>\AppData\Roaming\Blender Foundation\Blender\4.x\scripts\addons\<addon>\assets.human.female.json",
    directory=r"C:\Users\<user>\AppData\Roaming\Blender Foundation\Blender\4.x\scripts\addons\<addon>\",
    filename="<файл-ресурса>",
    link=False,
)

[!NOTE] Путь к пакетам ресурсов зависит от способа установки аддона (архивом в addons или через extensions) и от версии Blender. Точный путь смотри в Preferences → Add-ons и в самом аддоне — в текстовом поле ресурсов, если оно есть в панели.

7. Экспорт

bpy.ops.object.select_all(action='DESELECT')
human.select_set(True)
if rig:
    rig.select_set(True)
bpy.context.view_layer.objects.active = human

bpy.ops.export_scene.fbx(
    filepath=r"C:\work\mphuman\base_human.fbx",
    use_selection=True,
    object_types={'MESH', 'ARMATURE'},
    apply_unit_scale=True,
    add_leaf_bones=False,
    mesh_smooth_type='FACE',
    path_mode='AUTO',
)

Таргеты в FBX не попадают: морфы превращаются в shape keys только если экспортировать их как Blend Shapes через настройки FBX, и не все движки это читают. Для универсальности применяют таргеты перед экспортом.

# Применить все таргеты разом перед экспортом, если движок не понимает морфы
sk = human.data.shape_keys
if sk:
    for k in sk.key_blocks:
        k.value = 0.0   # reset -> значения из вкладки MPFB надо выставить заранее

⚙️ КЛЮЧЕВЫЕ КОМАНДЫ И ПАРАМЕТРЫ

# Итоговая сводка по сцене: что получилось
for o in bpy.data.objects:
    tris = sum(len(p.vertices) - 2 for p in o.data.polygons) \
        if o.type == 'MESH' else 0
    print(f"{o.name:24s} {o.type:9s} tris={tris:6d} mods={[m.type for m in o.modifiers]}")
Параметр Значение Когда менять
shape_key.value 0.0 – 1.0 диапазон ограничен slider_min/slider_max конкретного таргета
use_deform_preserve_volume True False — если части тела «схлопываются» на сгибах
object_types {'MESH','ARMATURE'} {'MESH'} — когда риг будет сделан позже (Mixamo, ARP)
add_leaf_bones False True — если движок требует хвосты
Применять модификаторы одежды нет только перед экспортом, если дальше не нужны таргеты

Порядок действий, который экономит время: сначала выставить все таргеты, потом надеть одежду, потом добавить скелет, и только в конце — экспорт. Любая из этих операций в обратном порядке заставит переделывать предыдущую.

⚠️ ТИПОВЫЕ ОШИБКИ

Симптом Причина Решение
Аддон не появился в списке не та версия Blender или не распакован архив Проверить требования релиза, ставить через Install…
Таргет не находится по имени имя на языке сообщества, а не английское Вывести key_blocks и искать по подстроке
Одежда «отстала» от тела таргет тела изменён после надевания одежды Настроить таргеты до надевания, либо обновить прокси
Морфы пропали при экспорте FBX не выгружает их как Blend Shapes Применить таргеты перед экспортом
Персонаж в 10 раз меньше роста единицы сцены не совпадают с единицами аддона Проверить Scene Unit Settings, применить трансформации
Скелет не появился скелет добавляется отдельным действием, не автоматически Добавить скелет из панели MPFB, затем перепривязать веса

🖥 MCP-ПРОМПТ

RU: "MPFB: создать человека, вывести список таргетов, сбросить значения,
     добавить скелет, применить preserve volume, экспорт FBX" /
EN: "MPFB: create human, list shape-key targets, reset values,
     add skeleton, preserve volume, FBX export"

🔗 СВЯЗИ

Связанные материалы

Подобраны по тегам и категории.