MMD-блендшейпы в VRChat: оживляем лицо аватара в танцевальных мирах
31 июля 2026 г., 9 мин чтения
В MMD-мире вы запускаете танец: тело честно повторяет хореографию, а лицо стоит неподвижно, хотя у половины зала мимика работает. Дело не в мире и не в «несовместимой базе» - мир ищет у аватара вполне конкретные блендшейпы и не находит их. Это лечится, причём без пересборки аватара с нуля.
Как MMD-миры анимируют лицо
MMD (MikuMikuDance) - японская программа для танцевальных роликов, из которой VRChat-миры унаследовали и моушены, и лицевую анимацию. Когда вы выбираете трек и занимаете место танцора, мир проигрывает на аватаре готовую анимацию. С костями всё просто - они стандартные humanoid. А вот мимика записана как анимация блендшейпов с японскими именами на меше с именем Body.
Мир ничего не знает о строении вашего аватара. Анимация просто ищет путь `Body` и имена вроде あ, い, まばたき: если совпали - лицо двигается, если нет - не происходит ничего. Так что почти вся MMD-совместимость упирается в правильное имя меша и правильные имена блендшейпов.
Отдельная история - аниматоры. По официальной документации VRCFury, MMD-миры не работают как надо с аватарами на Write Defaults off, отключают Gesture-контроллер, а в некоторых треках - первые два слоя FX. Если ваша мимика или тогглы живут именно там, в танце они поведут себя непредсказуемо. Эту часть берёт на себя компонент VRCFury, о нём ниже.
Чек-лист MMD-совместимости
- Меш лица называется Body и лежит первым уровнем под корнем аватара.
- На нём есть блендшейпы с японскими именами из таблиц ниже.
- Аватар не конфликтует с миром на уровне аниматора - вручную или через VRC Fury | MMD Compatibility.
Таблицы блендшейпов
Добавлять шейпы будем дублированием: у аватара почти наверняка уже есть визевы (viseme_aa и компания) и мигание - нужно лишь сделать их копии под японскими именами. В колонке «донор» - типичные имена исходных шейпов; у вашей базы они могут звучать чуть иначе.
Для начала хватит пяти гласных и моргания - с ними лицо в танце уже двигается. Остальное добавляет выразительности: подмигивания, брови, эмоции.
Рот
| Имя в MMD | Читается | Что делает | Донор |
|---|---|---|---|
| あ | а | широко открытый рот | viseme_aa |
| い | и | губы растянуты, рот почти закрыт | viseme_ih |
| う | у | губы трубочкой | viseme_ou |
| え | э | полуоткрытый рот | viseme_E |
| お | о | округлый открытый рот | viseme_oh |
| ▲ | - | маленький «треугольный» приоткрытый рот | viseme_th или viseme_oh на полсилы |
| ω | омега | сомкнутые «кошачьи» губы | нейтральная форма губ или viseme_PP |
| にやり | нияри | ухмылка уголками вверх | Smile |
| ぺろっ | пэро | высунутый язык | Tongue_Out, если есть |
Глаза
| Имя в MMD | Читается | Что делает | Донор |
|---|---|---|---|
| まばたき | мабатаки | моргание обоими глазами | Blink |
| 笑い | варай | зажмуренные «счастливые» глаза | Blink_Happy |
| ウィンク | винку | закрыт левый глаз | Blink_L |
| ウィンク右 | винку миги | закрыт правый глаз | Blink_R |
| ウィンク2 | - | мягкое подмигивание левым | happy-вариант Blink_L |
| ウィンク2右 | - | мягкое подмигивание правым | happy-вариант Blink_R |
| なごみ | нагоми | глаза «>_<» | сильное зажмуривание |
| びっくり | биккури | распахнутые глаза | Eye_Wide / Surprised |
| じと目 | дзитомэ | полуприкрытый скептический взгляд | Eye_Half / прищур |
Брови
| Имя в MMD | Читается | Что делает | Донор |
|---|---|---|---|
| 真面目 | мадзимэ | ровные серьёзные брови | нейтраль / Brow_Serious |
| 困る | комару | брови «домиком» | Brow_Worried / Sad |
| にこり | никори | приподнятые довольные | Brow_Happy |
| 怒り | икари | сведённые сердитые | Brow_Angry |
| 上 | уэ | обе брови вверх | Brow_Up |
| 下 | сита | обе брови вниз | Brow_Down |
Полный набор морфов MMD длиннее, но этих трёх таблиц хватает почти для любого танца. Дальше идут редкие вещи вроде отдельных морфов зрачков - миры пользуются ими нечасто.
Дублируем шейпы в Blender
- Откройте модель, выделите меш лица и перейдите в Object Data Properties (зелёный треугольник) - там список Shape Keys.
- Сбросьте значения всех шейпов в 0, а донору (например, viseme_aa) выставьте 1.0.
- В меню под кнопками списка выберите New Shape from Mix - внизу появится новый шейп, повторяющий текущее состояние меша.
- Переименуйте его двойным кликом, а имя вставьте копированием из таблицы. Перепечатывать руками не стоит: ウィンク2右 и ウィンク2右 выглядят близнецами, но это разные символы - полная и половинная ширина. Мир ищет точное совпадение.
- Верните донору 0 и повторите для каждой строки таблицы.
- При экспорте FBX не включайте галку Apply Modifiers - она молча выбрасывает все шейп-кеи из файла.
- Подмените FBX в Unity-проекте и проверьте SkinnedMeshRenderer меша Body: в списке BlendShapes должны появиться японские имена.
Если лицо у базы - отдельный меш «Face» или «Head», у мира нет шансов до него дотянуться. Варианты: объединить меши в Blender (Ctrl+J, объединяя В меш Body), либо переименовать лицевой меш в Body, если он лежит прямо под корнем аватара.
Путь без Blender
Если модель трогать не хочется, есть неразрушающий вариант - открытый инструмент Make It MMD: он создаёт копии блендшейпов с MMD-именами прямо при сборке аватара, исходный FBX остаётся нетронутым. Какой шейп в какое имя копировать, задаётся в инспекторе, без экспорта-импорта.
И проверьте описание своей базы: некоторые современные базы уже поставляются с MMD-набором - тогда достаточно убедиться, что меш называется Body.
Компонент VRC Fury | MMD Compatibility
Сами по себе блендшейпы ещё не гарантируют результат: аватар может конфликтовать с миром на уровне аниматора, и вот эту часть проще целиком отдать VRCFury. Компонент добавляется как обычно: Add Component → VRC Fury | MMD Compatibility (в разделе прочих компонентов). По официальной документации он:
- сохраняет MMD-блендшейпы при использовании Blendshape Optimizer - иначе оптимизатор удалит ваши японские копии как «неиспользуемые», ведь собственные анимации аватара их не трогают;
- уводит слои VRCFury-фич с позиций, которые MMD-миры отключают (те самые FX 1 и 2);
- отключает анимации рук на время танца, чтобы жесты не ломали хореографию;
- придерживает команды Tracking Control от других плагинов до конца танца - такие команды умеют ломать MMD-анимацию;
- решает известные несовместимости из списка исправлений VRCFury: поведение Write Defaults off и отключение Gesture-контроллера в MMD-мирах.
В расширенных настройках можно указать дополнительные слои аниматора, которые нужно глушить в танце, и глобальный bool-параметр, который компонент выставит в true при обнаружении MMD-мира - на него удобно вешать свою логику.
Пока компонент не добавлен, VRCFury в MMD-поведение аватара не вмешивается - всё перечисленное включается только вместе с ним. Если VRCFury у вас ещё не стоит - вот установка и первые шаги, а как вообще устроены его компоненты - в обзоре компонентов.
Если лицо всё равно не двигается
Проверьте имя меша. Шейпы могут быть идеальными, но лежать на меше «Face» - мир смотрит только на Body.
Проверьте имена посимвольно. Опечатка, лишний пробел, полная ширина вместо половинной - и совпадения нет. Надёжнее всего копировать имена из таблицы.
Мимика конфликтует. Если своя лицевая анимация живёт вне отключаемых миром слоёв, она перетягивает блендшейпы у танца. Компонент MMD Compatibility как раз разруливает это.
Шейпы пропали после сборки. Скорее всего, Blendshape Optimizer вычистил их как «неиспользуемые». Лечится тем же компонентом - он не даёт оптимизатору трогать MMD-имена.
Мир не при делах. Не каждый трек содержит лицевую анимацию, и мимика работает только во время самого танца. Проверяйте на популярных MMD-мирах и известных треках.
Дальше остаётся зайти в любимый танцевальный мир и проверить. А одежда, аксессуары и текстуры под популярные базы есть в каталоге FurHorizon.