РоссияНовостьМодели
Из серой глины в кошмар: как мы сделали монстров для AR-хоррора по «Вию» (Tripo AI, авториг, Quaternius, Blender)
Я делаю прототип AR-хоррора для iPhone по «Вию» Гоголя: Home Haunt. Игра ставит историю в вашу комнату: стены кровоточат, из гроба на вашем полу встаёт мёртвая панночка. Делаю на Unity с октября: журнал проекта начинается 2 октября, к 30 октября в нём больше 50 номеров сборок. В статье про монстров: чем они сделаны, что пришлось урезать, чтобы тянул телефон, и что пока не готово.
Сразу о том, что здесь сделано нейросетью, а что нет:
- Все 12 моделей сгенерированы в Tripo AI. 11 — text-to-model, Старуха — image-to-model по концепту в T-позе.
- Риг — автоматический риг Tripo, 23 кости. Adobe Mixamo мы не использовали, ни для рига, ни для анимаций.
- Анимации не наши: бесплатная библиотека Quaternius Universal Animation Library 1 и 2 (CC0). Мы сами перенесли клипы на скелет Tripo.
- Ролики и кадры в статье поставлены в Blender специально для девлога. Последние секунды ролика — запись экрана iPhone.
Состав
Двенадцать моделей: Панночка, Вий, Чёрт, Старуха, Упырь, Кикимора, Вурдалак (дух на стене), Крылатый, три духа со стены (Свинорылый чёрт, Волосатый бес, Тощий чёрт) и Петух. Всё это «Вий» в нашей версии, образы свои, не из экранизаций.
Шаг 1. Генерация в Tripo
Вызываем API Tripo из скрипта на Python (tools/tripo/generate.py), модель v3.1. Промпт на английском, жёстко задаём позу под риг (A-поза или T-поза), чтобы авториг не споткнулся. Промпт Панночки из нашего списка:
Full-body young dead Ukrainian woman, 19th century, pale grey-blue skin, closed eyes, long loose black hair, white linen embroidered shirt (vyshyvanka) with red-black cross-stitch, long white burial skirt to the floor, floral wreath of poppies, cornflowers and daisies on her head, barefoot, standing in A-pose, realistic, horror, game-ready
Первая партия из шести персонажей плюс гроб, аналой и икона обошлась в 425 кредитов: баланс упал с 1 500 до 1 075. По условиям Tripo, платный пользователь владеет результатами, указывать автора не требуется (пункт 5.2.2 их Terms, как мы его читаем; перед релизом перечитаем).
Не всё прошло с первого раза. Кикимора и старая ведьма не прошли проверку перед ригом (prerigcheck), пришлось перегенерировать — версии _v2. Позже сделали детальные варианты Вия и Чёрта (06.10), духов со стены (18.10) и Старуху по картинке (25.10).
Шаг 2. Бюджет треугольников
Tripo отдаёт от 5 до 39 тысяч треугольников и текстуры 4096. Для AR на телефоне это много: камера, ARKit и сетка комнаты делят то же железо. Поэтому дальше идёт скрипт на Blender (tools/blender/tripo_mobile.py): decimate до целевого числа треугольников и текстуры 4096 → 1024. Потом GLB → FBX и в Unity.
Модель
Tripo, тр.
В игре, тр.
Панночка
23 528
14 774
Вий
38 566
15 759
Чёрт
38 444
7 880
Старуха
28 101
13 789
Упырь
23 872
11 819
Кикимора
24 111
11 818
Вурдалак
14 872
11 820
Крылатый
9 498
5 910
Свинорылый чёрт
14 336
11 820
Волосатый бес
13 801
8 864
Тощий чёрт
14 736
11 819
Петух
4 781
4 781 (не трогали)
Больше всего срезали Чёрта: с 38 444 до 7 880 треугольников, это самый лёгкий из персонажей с ригом. Меньше всех у Петуха и Крылатого, но их мы почти не трогали.
Шаг 3. Авториг
Tripo делает риг сам (animate_rig, режим biped): скелет из 23 костей с именами в стиле Mixamo. Это просто совпадение имён, сервис Mixamo в процессе не участвует. Дальше в Unity модель получает Humanoid-аватар.
Подводные камни:
- У Кикиморы поза покоя рига — A-поза, и в Blender её пришлось выровнять перед переносом клипов.
- Крылатый и Петух без костей: у них нет человеческого скелета, они двигаются кодом.
Шаг 4. Перенос анимаций Quaternius
В игре клипы из Quaternius UAL1 и UAL2 ретаргетятся штатным Unity Humanoid. Это быстро и ничего не надо делать руками.
Для роликов Unity не нужен: нужно было крутить модели в Blender. Я написал скрипт, который переносит те же клипы на риг Tripo: берёт дельты поворотов костей относительно T-позы и выравнивает конечности. Результат близок к тому, что идёт в игре, но не идентичен Unity покадрово. Позы на долю секунды могут отличаться.
Клипы по моделям:
- Панночка: Idle, LayToIdle (встаёт из гроба), ZombieScratch (шарит руками);
- Вий и Чёрт: WalkFormal (Вий на 0,5× скорости — тяжёлый шаг; Чёрт на 0,7× рывками);
- Старуха и Упырь: ZombieWalk (Старуха на 0,85×);
- Кикимора: CrouchIdle, CrouchWalk на 1,3× рывками;
- Вурдалак и духи со стены: Idle.
В ролике Панночка встаёт на 0,55× скорости: на нормальной скорости движение не читается в кадре. Остальные скорости совпадают с игрой.
Крылатый летит кодом, как в игре: сжатие размаха крыльев 0,8 ± 0,2 с частотой 2 Гц, покачивание и крен.
Шаг 5. Рендер в Blender
Для ролика я собрал сцену в Blender 5.1.1: Eevee, 24 сэмпла, квадратный кадр 1920×1920, 30 к/с, 3 002 кадра. Свет: тёплая свеча, холодный контровой, лёгкий туман, свечи на полу. Туман сначала засвечивал пол, поэтому студийный свет привязан только к модели (light linking). Турнтейбл: 360° за 5 секунд (150 кадров), а снизу вверх по модели проходит раскалённая линия: под ней текстура, над ней серая глина. Монтаж и титры собирает скрипт tools/marketing/devlog_models_1030.py.
Как это живёт в AR на iPhone
В игре работает Unity 6 (6000.5.6f1) с URP и AR Foundation 6 поверх ARKit. Игрок поворачивается с телефоном, ARKit находит пол и стены, и игра ставит монстров в настоящую комнату: Панночка встаёт из гроба на вашем полу, вурдалак смотрит из вашей стены. Отсюда и бюджет: модель делит с камерой и сеткой комнаты один телефон.
Для проверки прохода у нас 24 smoke-теста соло и 9 пар кооператива (регрессия на 30 октября, всё PASS). Это тесты игры, красоту моделей они не проверяют.
Чего нет
- Мимики и анимации лица нет. Веки Вия в игре процедурные, на модели их нет.
- Глаза Панночки в Blender не светятся (в игре свечение — отдельный эффект).
- Рой «волосатых» в ролике не показан: сейчас вместо него в игре Чёрт.
- На турнтейбле Упыря в глине у пояса видны тёмные точки. Причину не нашёл, на скорости не заметно.
Итог
Что сработало: Tripo даёт узнаваемый силуэт и текстуры быстро, а дальше работает обычный пайплайн — Blender для облегчения, готовый риг и готовые CC0-клипы. Что не сработало с первой попытки: авториг на нестандартных телах (Кикимора, старая ведьма). Чему научился: бюджет треугольников надо считать на сцену, а не на модель.
Игра пока в закрытом тесте на TestFlight (iPhone). Хотите попробовать — hello@artuplabs.com. Сайт: https://paledoorgames.artuplabs.com
Если интересен какой-то шаг (скрипт переноса клипов, промпты, бюджет), напишите в комментариях, раскрою.
Комментарии
Обсуждайте статью, отвечайте и оценивайте комментарии. Вход — через ваш Яндекс ID.
Загружаем обсуждение…