Об именовании текстур
Префиксы:B_ - brows, атлас бровей, 128х128
C_ - clothes, атлас одежды, 256х256
E_ - eyes, атлас глаз, 256х256
H_ - hair, атлас волос, 256х256
M_ - mouths, атлас ртов, 256х256
P_ - pupil, зрачок, 64х64
S_ - skin, атлас кожи, 256х256
W_ - white, белки глаз, 128х128
Затем идет имя или идентификатор персонажа, которому принадлежит текстура.
Затем идет маркер текстуры. Пока у них у всех маркер Standart, что символизирует, что это обыкновенное состояние персонажа. Для ртов точно будет Happy, Sad и Angry плюс произвольное количество атласов, хранящих разные нестандартные рты - поджатые губы там или свист или что-то еще.
Затем опционально может идти указатель стороны для парных органов. R для правого, L для левого, U (universal) для общего.Теория определения визем
Попробуем отбросить транскрипцию (так как полноценного инструмента, учитывающего произношение, все равно нет) и разбиение по слогам (потому что хуле толку?).Разбиваем аудиофайл на отдельные слова, спасибо Whisper.
Определяется ударная буква слова.
Если перед словом стоит предлог или другая часть речи, состоящая из согласных, пришиваем ее к слову.
Унижаем слово, проводя изменение безударных гласных, редукцию гласных и слияние согласных. Получаем что-то приближенное к транскрипции.
Транскрипция разбивается на группы согласных и единичные гласные. Это практически готовая карточка для подбора визем.
Будем считать, что ударный слог имеет 1.5х от базовой длительности, первый предударный 1х, остальные безударные: 0.7х. Согласно этим коэффициентам делим общую продолжительность слова на промежутки и расставляем тайм-коды гласных (идти должны в начале слога).
Между ними добавляем тайм-коды согласных и промежуточные положения по алгоритму, который еще предстоит написать (ставятся перед гласными и сдвигают их к концу).
- На этом этапе можно расставить разные маркеры для изменения настроения говорящего, чтобы переключать атласы ртов.
Производим смещение относительно позиции слова в предложении, сшиваем все в единую последовательность визем для всего аудиофайла.
Экспортируем данные, которые позже подсовываются алгоритму в Blender, где уже будет происходить автоматическая анимация.
Много анимации придется делать вручную - вообще всё, что не является речью. Но иначе никак.
Как улучшить итоговую программу
Присобачить GUI, хотя бы простой.
Пусть при запуске обрабатывает все wav-файлы в директории и создает для каждой экспортный файл. Или один большой файл - тут уже встает вопрос о скрипте в блендере, как будет работать он.
Сделать возможность замены слова с сохранением его границ (если неправильно распознает). Несколько конфликтует с предыдущим пунктом, будет довольно заёбно подтверждать каждый файл.
- Отделить распознавание от разбиения. Отдельный скрипт, распознающий речь, отдельный, разбивающий ее.