К ленте · Россия

РоссияНовостьМодели

Из серой глины в кошмар: как мы сделали монстров для 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

Если интересен какой-то шаг (скрипт переноса клипов, промпты, бюджет), напишите в комментариях, раскрою.

Источник: Хабр · статьиПубликуется с разрешения правообладателя, подтверждённого редакцией.Оригинал: Из серой глины в кошмар: как мы сделали монстров для AR-хоррора по «Вию» (Tripo AI, авториг, Quaternius, Blender) ↗

Есть кому отправить?

Скопируется постоянная ссылка на этот материал.

Комментарии

Обсуждайте статью, отвечайте и оценивайте комментарии. Вход — через ваш Яндекс ID.

Загружаем обсуждение…