Об именовании текстур
Префиксы:
- 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-файлы в директории и создает для каждой экспортный файл. Или один большой файл - тут уже встает вопрос о скрипте в блендере, как будет работать он.
- Сделать возможность замены слова с сохранением его границ (если неправильно распознает). Несколько конфликтует с предыдущим пунктом, будет довольно заёбно подтверждать каждый файл.
- Отделить распознавание от разбиения. Отдельный скрипт, распознающий речь, отдельный, разбивающий ее.