Как нейросетевые NPC в Скайриме затянули меня в кроличью нору
Мира и процветания.
Решил начать вести заметки как я докатился до того, что ИИ убедил меня вести записи о процессе разработки игры с активным использованием ИИ как части игрового процесса. Обо всем по порядку.
Нейросети и Скайрим
Вначале отношение было ну типа "Э...И че?". Было это год-два назад. Особо мне они были не нужны, особо от поисковика или специализированных инструментов не отличались. На том и забил на них. В какой-то момент, во время поисков на Ютубе я увидел нечто типа такого:
А я тот еще геймер и любитель Скайрима. Играть начал еще в прошлом веке в возрасте лет 7 на одном из первых компов в городе. А в Скайриме у меня сотни часов (и да - главный квест я ни разу не проходил и ни разу до конца игры не доходил :) ).
Идея показалась мне офигенной. Скайрим и так сам по себе богат на события и рофлы. А тут еще один слой веселья и безумия - оживление НПС с помощью ИИ.
Естественно сразу же захотелось самому порубиться в нечто подобное. Разобраться было несложно, попробовал пару вариантов и остановился на СкайримНет. В нем можно либо платить и наслаждаться - все уже по сути готово, только пополняй счет и вперед, либо заморачиваться и существенно экономить. А для игры не на английском - еще и значительно улучшить возможности.
Оптимизация СкайримНет
Так как платить много денег мне естественно не хотелось, взялся оптимизировать процесс. Некоторых вещей избежать не получится. Сетевые ЛЛМ необходимы для разбора ввода игрока, сложных решений, составления внятного ответа и некоторых других (например, генерации видео, аудио и т.д.).
Остальное в принципе никто не мешает перенести на свой компьютер, на свои локальные нейросети. Если позволяют мощности компа. В первую очередь в разрезе именно Скайрима, есть смысл перенести TTS и STT
STT - это Speech-to-text или перевод голосового ввода информации в текст. Иными словами, я говорю в микрофон "Эй, Лидия. Понесешь мой груз сегодня?" и именно такой, или очень похожий, текст должен появиться на экране. Или уйти в недра СкайримНета. Решается очень просто и очень дешево (по ресурсам компа). Есть масса мелких нейронок, которые заточены делать именно это. На английском и других языках. Вопрос только в поиске того, что устроит вас. Как именно эта нейронка распознает именно ваш голос и манеру речи именно на вашем языке.
TTS - это Text-to-speech или перевод текста в голос. Иными словами, Лидия отвечает нам на наш вопрос "Пошел ты! Сам таскай свою ношу." и мы слышим это ушами. Если все сделано правильно, то услышим именно голосом Лидии, которым она говорит свои реплики в игре. И вот с этой частью начались такие сексуальные утехи, что я в корне пересмотрел свое представление и отношение к современным нейронкам.
Возня с TTS
Возможность быть посланным любым стражником или бомжом в Скайриме мне показалась божественной. И это одно из самых дорогих удовольствий, если пользоваться услугами внешних нейронок. Поэтому это самый первый кандидат в перенос на свой же комп. Причем тот же СкайримНет это позволяет делать прямо из коробки. Но как в том анекдоте - есть нюанс.
В той версии СкайримНета, которую я использовал, без проблем у вас получится реализовать только TTS на английском языке. Так как вшиты вроде 2 нейронки, которые адекватно работают только с английским текстом. При попытке озвучивания, например, русскоязычного текста вас ждет безумный набор побуквенного чтения или другой вариант безумия. И изменить это невозможно. Нейронки вшиты внутрь СкайримНета, а он поставляется уже скомпилированным, без исходников. Из этих двух нейронок, одна крайне быстрая, но там буквально 4-5 вариантов голосов, а вторая - более медленная, но вроде с возможностью озвучивания любым голосом по шаблону.
Сдаваться не хотелось, пришлось как обычно искать способ. СкайримНет предоставляет ендпоинт для определенного вида TTS нейронок, куда можно подключиться. Скачал нечто похожее, подключил, попробовал - работает. Но как-то хреново. И качество озвучки не очень, и между моим вопросом и ответом НПС проходит вечность - секунд 10-20.
И вот тут у танка оторвало башню
Это если что из анекдота и символизирует начало больших любовных утех со всем подряд и потока отборного мата. Выяснилось, что найти нужную нейронку для этой задачи очень непросто.
Нейронка должна соответствовать как минимум такому:
- Занимать адекватное количество ресурсов при работе. В первую очередь VRAM в видеокарте. На моей видяхе с 16Гб мне показалось безопасным выделить около 8Гб под такую нейронку.
- Адекватно воспроизводить русский язык (в моем случае, у вас может быть какой-то другой). И тут все плохо. Много нейронок заявляют, что поддерживают те или иные языки.
А когда начинаешь реально проверять, то начинается цирк с конями:
- Вообще никак
- Смысл произносимого понять можно, но с каким-то жутким акцентом. Обычно или китайский, или какой-то кавказский.
- Разборчивость нормальная, но с интонацией беда
- Уметь работать по примеру голоса и генерировать звук по образцу длиной 5-10 секунд
- Уметь работать в стриминговом режиме. Любая может ждать, пока к ней придет вся реплика и потом полностью озвучить. Вот только пройдет это за гарантированные 10+ секунд. Это уже не игра будет, а издевательство. А про разговорчики в бою вообще можно забыть начисто. Стриминг позволяет нейронке начать генерацию звука по первым кускам текста, не дожидаясь всей реплики. Крайне сложно при этом удержать интонации, так как TTS просто не знает всего текста.
Продолжение следует