Поговорите с детализированным 3D-аватаром на базе искусственного интеллекта. Используйте большую языковую модель (LLM), преобразование текста в речь (TTS), игровой движок Unity и синхронизацию губ, чтобы оживить персонажа.
В ролике мы спрашиваем персонажа «Кто такой Майкл Джордан?». Аватар «отвечает» на вопрос после небольшой задержки. Используя предыдущие сообщения в качестве контекста, мы можем вести целые разговоры. Обратите внимание на физику волос и моргание!
Демонстрация удаленных событий, запускаемых из веб-браузера. После выбора каждого VFX воспроизводится соответствующая система частиц. Популярное использование — эффект частиц фейерверка, когда кто-то жертвует 5 долларов на Twitch и т. д. Во время дождя вы можете даже заметить всплеск и отскок, когда капля взаимодействует с персонажем (макушка волос).
Основная функциональность — это «говорящая» пользовательская 3D-модель. Он издает голос и использует библиотеку синхронизации губ Oculus, чтобы произвести (надеюсь, убедительное) впечатление. Вот набор функций:
Поток не зависит от какой-либо конкретной реализации. Не стесняйтесь комбинировать LLM, TTS или любые подходящие 3D-модели (требуются определенные ключи формы). Как вы могли заметить, эта архитектура дает нам максимальную гибкость. Как вы можете себе представить, предыдущее предложение является преуменьшением.
Распознавания речи нет, подсказка только текстовая. Было бы просто добавить эту функцию с помощью Whisper Fast. Инструкции см. ниже. TL;DR отправляет GET или POST в конечную точку
/prompt
.
Используя TTS с потоковой передачей и DeepSpeed, я обычно получаю ответ <4 с (от отправки приглашения до первого звука). Он достаточно мал, чтобы разговор происходил в реальном времени. На данный момент узким местом является LLM. На одном графическом процессоре вы не можете одновременно запускать LLM и TTS (я пробовал, проверьте FAQ по параметру конфигурации tts.chunk_size
). Нам нужно сначала сгенерировать все текстовые токены и только потом генерировать звук. Я пробовал разгрузить TTS на процессор, но это тоже проблема.
Потоковая передача означает, что мы разбиваем сгенерированный текст на более мелкие фрагменты. Имеется небольшой кроссфейд для маскировки переходов фрагментов. Небольшой первый фрагмент означает быстрое появление первого звука. DeepSpeed — это библиотека Microsoft для ускорения вывода GPT. И потоковая передача, и DeepSpeed не являются обязательными, но рекомендуются.
Первый вопрос после запуска сервера всегда занимает больше всего времени (около 10 секунд), поскольку серверу приходится загружать модели ИИ. При использовании в редакторе Unity у вас редко будет пауза при сборке мусора (что заметно по звуку). Но я был бы удивлен, если бы у вас действительно возникла проблема со сборкой мусора в производственной сборке.
Должен сказать, меня это забавляет. Я ожидал некоторых проблем при использовании одного и того же графического процессора как для рендеринга Unity, так и для искусственного интеллекта. Я знал, что приложение для Android/iOS — это простой вариант переложить затраты на Unity на отдельное устройство. Но на моем оборудовании это не обязательно. Как-то неожиданно, что всё работает гладко. Не буду жаловаться. Я также ограничил Unity частотой 30 кадров в секунду (на всякий случай).
Если вы зайдете в панель управления, то увидите тайминги для каждого этапа реагирования. Для Unity используйте встроенный профилировщик.
См. INSTALL_AND_USAGE.md. Он также включает инструкции по использованию/расширению текущих функций.
Вопросы ниже касаются общей философии этого приложения. Более ориентированные на использование часто задаваемые вопросы см. в INSTALL_AND_USAGE.md.
Это приложение показывает, что у нас уже есть технология для визуализации подробного 3D-аватара и запуска нескольких нейтральных сетей на одном графическом процессоре потребительского уровня в режиме реального времени. Он настраивается и не требует подключения к Интернету. Он также может работать в архитектуре клиент-сервер, чтобы облегчить, например, рендеринг на мобильных устройствах.
Я мог бы использовать стандартную модель Sintel. Я создал своего собственного персонажа, потому что я могу. От перетаскивания вершин, рисования текстур, анимации рта и настройки физики волос до «говорящего» 3D-аватара. Довольно приятное времяпрепровождение, если я так говорю.
Я также хотел протестировать перепроецирование текстуры из стабильного изображения, созданного диффузией. Например, вы можете добавить «лысый» к положительному подсказке и «волосы» к отрицательному. Это значительно ускоряет рабочий процесс. Увы, перепроецирование будет иметь зеркальные блики и т. д., которые придется удалять вручную.
Я использовал Sintel в качестве базовой сетки, поскольку у нее уже есть основные ключи формы. Специально для управления каждой частью рта — просто добавьте драйверы, совместимые с Blender 4.0. Это упростило создание ключей формы висем. В прошлом я уже много раз использовал модель Sintel, так что для этого проекта это не составило труда.
ПС. Я ненавижу такелаж.
Вы, наверное, видели «говорящих» в реальном времени стабильных виртуальных персонажей, генерируемых диффузией. Это статичное изображение, в котором область рта регенерируется в каждом кадре на основе звука. Вы заметите, что он нестабильен. Если вы будете раздвигать зубы в каждом кадре, они будут постоянно смещаться. Я часто использовал стабильную диффузию. Я видел свою долю искалеченных частей тела (руки!). Это... заметно по зубам. Популярная реализация — SadTalker. У него даже есть расширение веб-интерфейса Stable Diffusion.
Вместо этого мое приложение использует скучную старую технологию, которая уже много лет используется в видеоиграх. Если у вас сотни часов диалогов (Baldur's Gate 3, Cyberpunk 2077 и т. д.), вы не сможете анимировать все вручную. Такие системы, как JALI, используются во всех крупных играх.
Если вам нужны анимированные персонажи в реальном времени, зачем использовать исключительно искусственный интеллект? Почему бы не поискать решения, используемые крупнейшим сектором развлечений в мире? По крайней мере, вы можете использовать его как основу для img2img. В последние годы у нас также были VTubers, которые каждый день выходят за рамки привычного. Многие из этих вещей основаны на технологиях, разработанных фанатами Хацунэ Мику.
Neuro-sama — популярный виртуальный стример. Это персонаж, управляемый искусственным интеллектом, который играет в видеоигры и разговаривает со своим создателем Ведалом. Вот как мое приложение сочетается с этим:
Это приложение включает исходный код/ресурсы, созданные другими людьми. В подпапке каждого такого экземпляра имеется специальный файл README.md, в котором объясняется лицензирование. Например, я зафиксировал в этом репозитории исходный код библиотеки «Oculus Lipsync», которая имеет собственную лицензию (примите ее перед использованием!). XTTS v2.0 также предназначен только для некоммерческого использования. Абзацы ниже касаются только вещей, созданных мной.
Это GPLv3. Это одна из лицензий с авторским левом. Лицензии GPL/авторское лево должны быть знакомы большинству программистов по Blender или ядру Linux. Это довольно экстремально, но это продиктовано характером приложения. И, в частности, одно из возможных применений.
Недавно я посмотрел «Кошмар Apple за 3500 долларов» Эдди Бербака. Это обзор Apple Vision Pro за 3500 (!) долларов. Одно из представленных приложений позволяет пользователю встречаться с «подругой» ИИ. Интерфейс слева имеет стабильное изображение, созданное диффузией (я чувствую запах PastelDiffusedMix с Seraphine LoRA?). Текстовый чат справа. Это современный уровень для такого рода программного обеспечения? Это лениво.
Конечно. Мобильные приложения для знакомств с самого начала были полны противоречий. Tinder и компания не хотят терять постоянных клиентов. Мошенничества в изобилии еще до того, как мы дошли до машинного обучения. В Tinder миллионы профилей искусственного интеллекта. А с прямыми свиданиями с помощью ИИ это совсем другая проблема.
Вы можете использовать любую понравившуюся модель. Синхронизация губ использует клавиши формы, соответствующие виземам ovrlipsync. С помощью технической демонстрации «Враги» Unity доказала, что может отображать реалистичных людей.
Лично я бы использовал метачеловека Unreal Engine. Вам придется переписать мой код Unity. За эти усилия вы получаете современную установку и бесплатный высококачественный актив. Вы также можете попробовать импортировать метачеловека в Unity.
По какой-то причине в Unity нет встроенного конвейера для человеческих персонажей. Даже при создании ролика «Враги», упомянутого выше, они не удосужились сделать его жизнеспособным для сообщества. Это специальный набор инструментов, специально разработанный для Autodesk Maya. И я никогда не слышал о формате файлов клипов 4D. Поздравляем руководителя проекта! Это сбивающее с толку решение. Например, у них есть HairFX для рендеринга и моделирования волос. Он основан на TressFX. Я портировал TressFX на OpenGL, WebGL и Vulkan. Я это прекрасно понимаю. И все же в этом приложении используются карточки для волос! Оригинальный Sintel имеет волосы на основе сплайнов, это должна была быть простая операция экспорта. Эти системы нуждаются в соответствующей документации.
В конце концов, инструмент — это всего лишь инструмент. Мне бы хотелось, чтобы Unity расставила приоритеты. Я бы сказал, что рендеринг людей очень важен на сегодняшнем рынке.
Да, но убедитесь, что вы понимаете, почему вы хотите использовать 3D-движок для техники 2D-рендеринга. В Guilty Gear Xrd авторам пришлось настраивать нормали для каждого кадра. Даже сегодня фанаты аниме не одобряют 3D. Единственное исключение (насколько я знаю) — Страна Блестящих. И этому способствует потрясающая композиция кадров.
Глядя на западную анимацию в реальном времени, мы имеем, например, Borderlands. Он повторяет стиль комиксов, используя плоское освещение, приглушенные цвета и толстые чернильные линии. На YouTube есть множество уроков по плоской штриховке, но вы не получите близкого результата, не умея рисовать текстуры.
Хотя это может показаться обескураживающим, я хочу, чтобы вы обдумали свою цель. Есть причина, по которой все остальные используют VTubeStudio и Live2D. Создание моделей для 2D и 3D не имеет себе равных по сложности, это даже не один и тот же вид искусства.
Не обращайте внимания на все, что я сказал выше, если вы работаете в Riot Games, Fortiche, Disney/Pixar DreamWorks или Sony Pictures Animation.
Размер установки Unity меньше. Он ориентирован на любителей. Вы можете просто написать сценарий C# и поместить его в объект, чтобы добавить новое поведение. Хотя UX может быть повсюду, в основных аспектах он безупречен.
Unity превосходит UE5 по простоте использования и времени итерации. Основной причиной перехода на UE5 может быть метачеловек (!), виртуальное производство или стандартный мокап.
Зависит от модели LLM. gemma:2b-instruct
по умолчанию крошечная (3 миллиарда параметров). Он может создавать связные предложения, но это то, насколько далеко он может зайти. Если вы можете использовать современную модель 7B (даже с квантованием) или что-то большее, дерзайте. Вы всегда можете заменить его на ChatGPT. Или используйте установку с несколькими графическими процессорами. Или запустите Unity на мобильном телефоне, TTS на Raspberry PI и используйте полную видеопамять для LLM.
Я этого не добавлял. Это потребует добавления особых случаев в 3D-модель. Например, может быть сложно анимировать рот во время синхронизации губ. Покраснение 3D-аватаров обычно выполняется путем смешивания специальной текстуры в графе шейдера.
Однако базовые технологии уже есть. Если вы хотите обнаружить эмоции в тексте, вы можете использовать LLM для анализа настроений. Я также добавил технологию запуска событий с помощью WebSocket. Банкомат, начинается эффект частиц. Половина кода C# посвящена срабатыванию клавиш формы. Мигание — это функция, вызываемая каждые несколько секунд. Создав взаимодействие в 3D-модели, вы можете запустить его в любое время. Просто на создание уходит много времени.
Да, я пробовал (не добавлен в этот репозиторий). Первоначальный план заключался в том, чтобы перенести визуализированный кадр в стабильное изображение, созданное диффузией. Судя по моим быстрым экспериментам, помимо проблем с производительностью, самые простые решения не обладают необходимым качеством или временной стабильностью.
У нас нет бюджета производительности для запуска VGG16/19. Сюда не входят «оригинальные» методы, такие как «Нейронный алгоритм художественного стиля» [Gatys2015] или «Перцептивные потери для передачи стиля в реальном времени и сверхразрешения» [Johnson2016]. Никто из них также не смотрел на мерцание. Они были разработаны только для статических изображений, а не видео. Были и другие работы, посвященные этой проблеме: [Jamriska2019], [Texler2020].
Я знаю, что Unity также пробовала передачу стилей в реальном времени в 2020 году: «Передача стилей в реальном времени в Unity с использованием глубоких нейронных сетей».
После этого мы оказываемся на территории трансформеров (сюрприз!). В прошлом году в проекте «Дополнение данных с помощью моделей диффузии (DATUM)» [CVPR-W 2023] использовалась диффузия (опять же сюрприз!). Если вы хотите отслеживать современное состояние техники, существует категория документов с кодом под названием «Перевод из синтетического в реальный».
На этом этапе я решил, что попытка встроить это в приложение — это ерунда.
Был эпизод «Двухминутных газет», в котором рассматривались аналогичные методы: «Видеоигра Intel выглядит как реальность!». На основе «Улучшения фотореализма» Intel [Richter2021].
Да, проверьте .fbx внутри unity-project/Assets/Sintel.
Все мои проекты имеют утилитарные названия. На этот раз мне хотелось чего-то более отчетливого. Ирис – цветок фиолетово-синего цвета. Радужка – часть глаза. Кажется подходящим? Тем более, что проблемы у компьютерных персонажей — это глаза и волосы.