Рендеринг травы в Unity
Основан на методе описанном тут: https://gist.github.com/sebbbi/a599d7896aa3ad36642145d54459f...
Основная скорость достигается за счет минимизации чтений из памяти в угоду расчету всего что возможно напрямую в шейдере.
Основан на методе описанном тут: https://gist.github.com/sebbbi/a599d7896aa3ad36642145d54459f...
Основная скорость достигается за счет минимизации чтений из памяти в угоду расчету всего что возможно напрямую в шейдере.
Всем привет.
Недавно взялся делать музыкальное видео для youtube канала на который работаю, и в качестве эксперимента решил попробовать использовать юнити. В принципе фотореалистичный рендер не требовался, а время поджимало, поэтому идея имела место быть.
Идея видео подразумевала использование липсинка, однако порыскав некоторое время по интернетам, ничего актуального, рабочего и бесплатного найдено не было, ни для юнити, ни для 3д макса (в котором привык работать). Поэтому пришлось выкручиваться немного по другому. На затравку гифка с результатом работы:
Главная программулина которая нам понадобится - Rhubarb. Она анализирует звуковой файл и выдает текстовый файл с таймингами всех распознанных фонем. Абсолютно бесплатная, с открытым кодом. Качаем ее отсюда - https://github.com/DanielSWolf/rhubarb-lip-sync/releases и распаковываем.
В ту же папку, куда распаковали, закидываем наш wave файл. Так же для увеличения точности распознавания опционально можно создать текстовый файл с транскрипцией происходящего в звуковом файле (файл диалога).
Rhubarb не имеет графического интерфейса и работать с ней нужно через командную строку. Один из способов быстро открыть командную строку - нажимаем на пустое место в строке полного пути к папке:
Там всё стираем, вводим cmd и жмем энтер:
В появившемся окне вводим следующее:
rhubarb имя_звукового_файла.wav > имя_файла_вывода.txt -d имя_файла_диалога.txt
Соответственно, если файл диалога не используете, то -d имя_файла_диалога.txt вводить не надо. Жмем энтер и ждем. Программа создаст выходной текстовый файл с таймингами всех распознанных фонем, копируем его в наш юнити проект. Дальше необходимо подготовить модельку.
Rhubarb может распознавать 9 основных фонем. Таблицу фонем с примерной визуализацией рта и описанием можно найти в ридми у проекта (https://github.com/DanielSWolf/rhubarb-lip-sync/). Нужно все 9 расположений рта воссоздать в 3д редакторе. Должно получится что то подобное:
Импортируем модель в юнити и создаем анимационные клипы для каждой фонемы:
Дальше создаем контроллер, добавляем анимации и именуем их понятным образом. Ну и соответственно не забыть назначить его аниматору на модельке. Настраивать переходы не надо, мы будем просто использовать crossfade по имени анимации:
И последний шаг, самый сложный, нужно написать скрипт, который бы считывал текстовый файл, сгенерированный Rhubarb-ом, и проигрывал анимации с нужным таймингом. Можно использовать мой скрипт, но там говнокод, плодит кучу инстансов корутин, плюс сделан так чтоб проигрывать все с начала запуска сцены. Допилить до нужного функционала в принципе будет не сложно.
https://gist.github.com/CustomPhase/77ed1276485ad3be0ab78429...
Вешаем его на модельку с аниматором, в качестве textFile выбираем скопированный из Rhubarb текстовый файл и запускаем, все должно работать.
Ну и собственно полный результат работы:
Всем спасибо. Если интересно, могу запилить пост, про то как остальное видео сделано и что было использовано.
Немного шаманства с шейдерами в юнити
Тут фреймрейт и качество получше: http://i.imgur.com/bn7RR5d.gifv