Для Dungeon Cult на Unreal Engine 5 попробовал 13 ИИ-моделей и сервисов — для кода, картинок, 3D, голосов и музыки. Рассказываю, какие оставил в работе и почему. Подробнее — о локальной озвучке на RTX 5060 Ti 16 ГБ: 24 звука за 94 секунды в одном запуске и целиком забракованная подборка из 45 звуков в другом. А ещё — как существа выбирают занятия и что проверяю в бою 45 на 45. Читать далее
В первой статье я показывал, как делаю существ для Dungeon Cult — игры про строительство подземелья в духе Dungeon Keeper, но с лавкрафтовскими обитателями.
Теперь расскажу, как устроено само подземелье, как его жители выбирают занятия и как добавляю им голоса. А ещё — как слежу за развитием проекта, когда задач становится больше, чем помещается в голове.
В разработке мне помогают ИИ‑агенты: пишут код и инструменты, собирают ассеты, запускают проверки. А поведением существ внутри игры управляет логика на C++ — без запросов к нейросетям.
Заодно разберу 13 ИИ‑моделей и сервисов, которые использовал или тестировал: для кода, картинок, 3D, голосов и музыки. Что я думаю о каждой модели, какие запускаю локально и что в итоге оставил в работе — собрал в таблице ниже. Там же указал, какие из них открытые.
Что это за играИгрок — хранитель подземелья. Он распоряжается, где копать и какие комнаты строить, заботится о жителях: обеспечивает их едой и отдыхом, следит за настроением, тренирует и отправляет воевать. Пока на карте два хранителя. Цель каждого — разрушить сердце вражеского подземелья и защитить своё.
От веб‑прототипа к подземелью, которое можно копатьВсё началось с веб‑прототипа и нескольких изометрических вариантов. Картинки были, но производительность и поведение существ не радовали. Потом перешёл на Unreal Engine и полноценное 3D. Один из ранних вариантов подземелья попал в игру из Blender цельной статической моделью. Красиво, но копать нечего: игра не знала, где отдельный блок породы, кому принадлежит земля и что должно измениться после удара рабочего.
Поэтому основой подземелья стала сетка клеток. Каждая хранит своё состояние: порода, открытый пол, присвоенная земля или комната. Unreal уже по этим данным рисует подземелье из повторяющихся моделей. Теперь можно изменить одну клетку, а не переделывать целую сцену. Не вся обстановка здесь нейросетевая. Часть мебели собрал скриптами в Blender, предусмотрев отдельные оси для подвижных деталей.
ИИ хранителя и ИИ существВ игре два уровня управления. Хранитель планирует копку, строит комнаты, нанимает рабочих, выбирает исследования и собирает отряд. У отдельного существа свои заботы: поесть, поспать, полечиться, поработать или драться.
Как выбирает существо. За выбор мирных занятий отвечает Utility AI — система оценок полезности. На оценку влияют голод, усталость, здоровье, склонности вида и расстояние до нужной комнаты. Нет подходящей комнаты — нет и этого варианта. Это собственная реализация на C++, а не обученная нейросеть. Правила заданы в проекте, многие коэффициенты вынесены в отдельный конфиг.
Пример с текущими коэффициентами: чтение набрало 0,70. Существо уже читает, поэтому получает ещё 0,15 за продолжение — итого 0,85. При голоде 70 из 100 оценка еды достигает 0,88 и при прочих равных побеждает. Решение обычно пересчитывается раз в 0,5–0,7 секунды. Чтобы монстр не метался между книгой и курицей, текущее доступное занятие удерживается минимум 3 секунды, если не вмешалось внешнее событие. Бонус за продолжение тоже помогает избежать постоянных переключений. Бой и бегство обрабатываются отдельно.
Как решает хранитель. Здесь работает планировщик на правилах с оценками срочности. Отсутствие курятника даёт стройке 0,95, а необходимость первой библиотеки — 0,80. Если обе задачи допустимы, еда важнее исследований. При этом учитываются деньги, условия развития и уже начатая работа. Зал, который сейчас копают, хранитель не бросает из‑за нового желания. Поэтому в отладочном журнале полезно видеть не только решение, но и его причину: «курятник: 0,95, нет еды».

Ночной гаунт в библиотеке. Комнаты нужны не только для вида: у жителей есть занятия и потребности
Самая полезная просьба агенту здесь — не «улучши ИИ», а «запиши, почему он выбрал это действие». В журнале нужны существо, время, цель и причина. На видео видно, что кто‑то тупит. Из журнала уже можно понять, что ему не хватило места, денег или доступного пути.
Как существа получили голосаСуществам нужны не только движения, но и звуки: рычание, дыхание, крик от боли, шум атаки. Я начинал с ElevenLabs, затем попробовал локальные модели. В итоге большую часть новых голосов и эффектов подбирал в Stable Audio 3 Medium, прямо на своём ПК.
Сколько времени занимает локальная генерацияКонкретный запуск на моей RTX 5060 Ti 16 ГБ: Stable Audio 3 Medium подготовила для ночного гаунта 24 звука примерно за 94 секунды. Восемь действий, по три варианта на каждое. Длительность отдельных записей — от 1,5 до 3,5 секунды, суммарно получилось 53 секунды исходного аудио. Настройки: 12 шагов, CFG 1,8.
До первого сохранённого звука прошло около 64 секунд, остальные 23 появились за следующие 30 секунд. В этом запуске ожидание первого результата заняло больше времени, чем вся оставшаяся пачка.
Время приблизительное: восстановлено по журналу запуска и времени записи исходных файлов. Установка и скачивание модели сюда не входят. Прослушивание и дальнейшая обработка — тоже.
А вот сколько попыток может потребоваться до принятого результата: для Ноденса первая подборка из 45 звуков была целиком отклонена. Нужен был брутальный мужской бас. Сделал вторую подборку — ещё 45 вариантов на те же 15 действий. Два результата дополнительно перегенерировал из‑за ухода высоты голоса вверх. В игру в итоге попали 15 выбранных записей.
Поэтому «сколько генерируется звук» и «сколько времени нужно на подходящий звук» — разные вопросы. На первый у меня есть замер. На второй нет честного числа в минутах: время прослушивания я отдельно не фиксировал.
Чтобы не тратить время на целую неподходящую подборку, задачу агенту можно поставить так:
Что локальная модель действительно заменилаНе делай сразу полный набор звуков. Сначала подготовь три разных характера голоса, по две короткие реакции на каждый. Дай послушать и дождись выбора. После этого делай остальные реакции в выбранном характере. Финальная проверка — в игре: отдельно одно существо, затем несколько одновременно.
Переход с ElevenLabs не был полной заменой одного сервиса другим:
Звук | Что осталось в игре |
|---|---|
Реакция гуля на поднятие | Локальный вариант Stable Audio заменил ElevenLabs |
Реакция гуля на боль | Тоже заменена локальным вариантом |
Удар кирки | Остался ElevenLabs, но потребовалась обрезка |
Сердцебиение подземелья | Осталось ElevenLabs |
При этом объявлять Stable Audio победителем такого сравнения нельзя. Для заменённых голосов гуля использовались аудиореференсы, то есть условия отличались от первоначальных облачных генераций. Это история выбора звуков для проекта, а не тест двух моделей с одинаковыми вводными.
Хороший аудиофайл ещё нужно подогнать под игру. У кирки главный удар начинался примерно через 0,943 секунды от начала файла. Даже при правильном запуске на контакте кирки звук запаздывал. После удаления первых 0,91 секунды сильный удар начинался примерно через 0,033 секунды. Перегенерировать его не понадобилось. Поэтому при рассинхроне стоит проверить и момент запуска, и сам файл.
И обязательно слушать всё в толпе. Один монстр рычит убедительно, десять одновременно — уже гул. У одного из персонажей я ограничил голос атаки одним срабатыванием в 8 секунд, а звук самого заклинания оставил на каждый выстрел. Так атаки слышны, но существо не орёт без остановки.
Проверка в массовом бою
Свежая запись тестовой арены. На старте 45 на 45, девять видов существ
В таком бою сразу видно то, что теряется в одиночном просмотре: закрывают ли эффекты персонажей, различимы ли атаки, не превращается ли сцена в сплошную кашу. Это отдельный боевой стенд: потребности обнулены, дальность обнаружения увеличена. Этот стенд нужен для проверки драки, а не развития двух подземелий.

Молнии, заморозка и ближний бой в одном кадре. Красивый эффект отдельно ещё надо проверить в толпе.
Ролик снят с фиксированным шагом симуляции, поэтому выдавать его за замер FPS я не буду. Мне сейчас важнее связать всё в одну работающую сцену: чтобы существо выбрало цель, дошло, ударило, попало и издало звук именно в этот момент. На каждом из этих глаголов нашлась своя маленькая проблема.
Какие ИИ в итоге пригодилисьСобрал весь набор, который использовал в разработке, ассетах и сюжетных роликах. «Лучшее» здесь — что прижилось у меня, а не рейтинг моделей вообще. Версии агентов менялись, поэтому Sol, Astra и Opus называю семействами.
Модель или сервис | Открытость | Для чего и что в итоге |
|---|---|---|
Нет, закрытая | Решение простых задач. Например, Sol настроил открытие заклинаний по уровням: паук со 2-м уровнем только кусает, с 3-м применяет паутину, с 5-м — ещё и ускорение. Для проверки сделал отдельную сцену. | |
Нет, закрытая | Основная модель от чата ГПТ. Например, Astra довела лунную тварь до игры: подключила три способности, восемь выбранных звуков, занятия в комнатах и проверила существо в бою. | |
Нет, закрытая | Лучшая модель в проекте, решает самые сложные задачи, справляется чаще лучше Astra. Например, Opus разобрал неравный старт хранителей: один успевал нанять рабочего до создания второй стороны. Исправил порядок запуска и подготовил автоматические серии боёв для проверки. | |
Нет, закрытая | Основной путь для образов существ и иллюстраций. Для сюжетных кадров использовал gpt‑image-2 | |
Да, MIT* | С него я начинал перевод существ в 3D. Для новых моделей перешёл на Pixal3D: у моего культиста TRELLIS склеил щупальца на лице | |
Да, MIT* | Текущий выбор для новых 3D‑существ. На том же исходнике щупальца разделились; проверка сетки дала 4 открытых ребра против 5629 у TRELLIS. Это один пример, не общий бенчмарк. Доводка всё равно нужна | |
Нет, закрытая | Первые игровые звуки; кирка и сердцебиение остались в проекте. Для дальнейшего подбора голосов я перешёл к локальным моделям | |
Да, Apache 2.0 | Пробовал для локальной генерации звуков существ. Качество меня не устроило, дальнейшие подборки делал в Stable Audio | |
Открытые веса; Community License, не свободная MIT/Apache | Мой основной локальный инструмент для голосов существ и эффектов. Отдельные подборки я браковал, но после доработки результат меня устраивал | |
Да, MIT* | Локальная фоновая музыка. Принятые треки я уже подключил к игре и продолжаю использовать этот инструмент | |
Нет, закрытый сервис | Отдельный эксперимент с музыкой: я получил два варианта, но в игру их не подключал. Пока проба, а не замена ACE‑Step | |
Нет, закрытая | Голос ранних сюжетных роликов, варианты Ash и Onyx. В ролике с Проводником затем использовал уже свой голос (про ролик будет в отдельной статье) | |
Да, MIT | Использовал для локального распознавания своей записи: по словам собрал нарезку и субтитры. Это не генератор голоса, а помощник при монтаже (про ролик будет в отдельной статье) |
* Указал лицензии основных проектов; у зависимостей могут быть другие условия. Локальный запуск сам по себе не означает open source. У Stable Audio есть ограничения Community License. И лицензия модели не даёт автоматически прав на чужую музыку для обучения LoRA или каверов — это отдельный вопрос перед релизом.
Чтобы проект не остался в перепискеЕщё я сделал себе отдельную локальную страницу — карту проекта. Когда существ, заклинаний и звуков стало много, вспоминать по чатам, что уже работает, стало неудобно. В карте собраны существа, комнаты, анимации, магия, аудио и оба уровня игрового ИИ.
Самое полезное — не одна галочка «готово», а раздельные состояния. Модель может быть принята внешне, но ещё не иметь нормальной атаки. Звук может лежать на диске, но не вызываться игрой. Поэтому «файл создан», «подключено» и «я посмотрел и принял» — разные вещи. После работы агенты фиксируют в файлах проекта, что поменяли, чем проверили, что не получилось и какой следующий шаг. Часть сведений карта собирает автоматически из ассетов и конфигов; оценки качества и причины отказа я записываю отдельно.
Практический совет: добавьте к задаче агенту требование «после выполнения обнови карточку: результат, путь к проверке, ограничения, следующий шаг; не ставь „принято“ без моего просмотра». Новый чат тогда начинает с состояния проекта, а не с пересказа предыдущих десяти разговоров.

Моя карта проекта: отдельно видно, что у ИИ хранителя работает, что я исправил, где остались проблемы и что делать дальше

На соседней вкладке — умения существ по уровням: что уже доступно в игре, что работает без ограничения по уровню, а что пока только в плане
На выходе — существа уже ведут себя достаточно разумно, а ИИ хранитель способен неплохо посоревноваться с игроком. В следующих статьях я продолжу рассказывать о своем прогрессе.
О сотрудничестве и нетворкингеСам я работаю в hh.ru, а Dungeon Cult — мой личный проект. Готов к сотрудничеству и открыт к разным предложениям — по игре, инструментам или совместным экспериментам с ИИ. Если есть идея для совместной работы, напишите мне в личные сообщения на Хабре:)
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Не делайте NPC умнее игрока | 0 | 10.84 | 13-10-2026 |
| 2 | LLM для игры в ДнД: эволюция подхода | 0 | 7 | 23-06-2026 |
| 3 | Правильное использование ИИ: AnyPS5 успешно эмулирует больше 90% системных функций ... | 0.5 | 13.67 | 19-10-2026 |
| 4 | Нейрогенератор игровых миров. Часть 2: «оно» ожило | 5 | 8 | 13-06-2026 |
| 5 | Как ИИ не дал загнуться ещё одной ноунейм игре. Даже текстовой | 0 | 8.88 | 24-07-2026 |
| 6 | Недельный геймдев: #297 — 18 октября, 2026 | 0 | 13.29 | 19-10-2026 |
| 7 | Как сделать портрет с помощью ИИ — чтобы действительно было похоже | 0 | 12.14 | 19-08-2026 |
| 8 | Я не боюсь, что меня заменит ИИ. Я боюсь работать с ИИ | 0 | 6.4 | 25-09-2026 |
| 9 | Когда контекстное окно кончается, а проект — нет | 5 | 7 | 23-06-2026 |
| 10 | 7 месяцев вайбкодинга: как в одиночку делать то, что раньше требовало команду | 0 | 9 | 01-08-2026 |