3D-ассеты через агента Живой кейс: ассеты для Corners Arena и что не сработало
0%

Живой кейс: ассеты для Corners Arena и что не сработало

Живой кейс: ассеты для Corners Arena и что не сработало

Всё предыдущее — на кружке. Здесь — настоящий проект: Corners Arena, игра в уголки на трёхмерной доске. Нужны были робот-фигура, арена и окружение.

Исходная позиция: игра уже работала

Важнейшее решение было принято до всякого Blender: игра уже игралась на процедурной геометрии, собранной кодом в Three.js. Некрасиво, но полноценно.

Отсюда правило, определившее весь пайплайн:

Авторские модели улучшают картинку на высоких настройках. Процедурная геометрия остаётся запасным путём и работает, если ассет не загрузился.

Это меняет цену ошибки. Кривой .glb не ломает игру — он до неё не доезжает. Можно экспериментировать, не рискуя продуктом. Если бы игра зависела от моделей, каждая итерация была бы блокирующей.

Приём общий: новый рискованный путь добавляют рядом со старым рабочим, а не вместо него. Тот же принцип — за флагами функциональности в https://courses.digitable.life/post/devops/00-overview/.

Что не сработало

Два подхода были испробованы и отвергнуты. Это полезнее списка успехов.

Сборка из примитивов «на глаз»

Первая попытка: пусть агент соберёт робота из капсул, сфер и цилиндров.

Получилась дешёвая игрушка. Не потому, что примитивы плохи — из них собран весь финальный робот. А потому, что не было брифа: агент не знал, каким должен быть размер головы относительно тела, насколько утоплено забрало, где акцент. Он выдал усреднённое, а усреднённое в дизайне читается как никакое.

Лечится не сменой инструмента, а брифом. См. следующий раздел.

Image-to-3D (Hyper3D Rodin)

Вторая попытка: взять концепт-арт и прогнать через генератор модели по картинке.

Результат — оплывший «скан» с артефактами: лишние ступни, хвост, размазанные текстуры. И, что важнее, без риггинга: анимировать нечего.

Вывод не «генераторы бесполезны», а: у них другая ниша. Для фоновой пропсы, где нужно правдоподобие и не нужен контроль, они экономят время. Для героя, у которого узнаваемый силуэт и анимация, — нет. Форма получается приблизительной, а приблизительный главный герой — это провал.

Итог: робот смоделирован вручную кодом — ради чистого пластикового вида и полного контроля.

Бриф вместо «сделай красиво»

То, что сработало. Бриф на робота выглядел так:

  • куполообразная голова, утопленное тёмное забрало с гладкой окантовкой и двумя ясно читаемыми светящимися глазами;
  • золотые «уши»-корпуса; округлое тело с золотым поясом и двумя точками на груди; короткие культи рук; округлое основание — без ног и без хвоста;
  • высота ≈ 1,6 единицы;
  • силуэт читается с изометрической камеры по умолчанию;
  • никаких тонких деталей, пропадающих на мобильных пресетах.

Обратите внимание на форму записи. Это проверяемые утверждения, а не настроение. «Без ног и без хвоста» появилось не от хорошей жизни — именно ноги и хвост дорисовал генератор. Явный запрет в брифе дешевле, чем разбирательство после.

Так же записан и бриф на материалы: тёмная минеральная керамика доски с лёгкой потёртостью — не яркий шахматный пластик; матово-бирюзовый металл рамы со сдержанной латунью.

Практика, переносимая куда угодно: если задача поставлена агенту, бриф должен состоять из утверждений, каждое из которых можно проверить на готовом результате. «Премиально» проверить нельзя. «Без хвоста» — можно.

Один меш на обе команды

Фигур две расцветки — бирюзовая и коралловая. Соблазн — сделать два меша.

Сделан один, с именованными слотами материалов: Robot_Shell, Robot_ShellShadow, Robot_Visor, Robot_Glow, Robot_Metal, Robot_Gold. Цвет назначается в рантайме подстановкой в слот по имени.

Выигрыш не только в размере файла. Правка формы делается один раз. С двумя мешами любое изменение силуэта надо повторить, и рано или поздно копии разъедутся — сначала незаметно, потом стыдно.

Побочная выгода вылезла позже: когда понадобились дополнительные стили фигур, они получились бесплатно — тем же мешем с другой подстановкой цветов. Разделение «форма отдельно, цвет отдельно» окупилось на задаче, которой в исходном плане не было.

LOD: арифметика, а не эстетика

Робот — 32 тысячи треугольников. Приемлемо.

Только на доске 12×12 их по 25 у каждой стороны. 50 фигур × 32 000 = 1,6 миллиона треугольников на одну геометрию фигур, до всякой арены.

Поэтому рядом лежит облегчённая версия: ~13 тысяч треугольников, 553 КБ против 1,2 МБ. Полная — на ultra, облегчённая — на high.

Здесь снова счёт, а не ощущение. «32 тысячи — нормально для персонажа» верно ровно до умножения на количество. Первый вопрос к полигонажу: сколько таких на экране одновременно?

Имена слотов материалов у LOD обязаны совпадать с полной версией — иначе перекраска отвалится ровно в момент переключения, то есть в движении, то есть воспроизводиться будет плохо.

Приёмочные критерии

Чтобы авторский ассет заменил работающий процедурный код, он проходит гейт:

  • трансформации применены, масштаб согласован, ориджин осмыслен;
  • имена мешей, материалов и клипов стабильны и записаны;
  • UV не перекрываются непреднамеренно;
  • текстуры встроены либо скопированы в объявленный путь рантайма;
  • сжатие измерено, а не предположено;
  • сборки под все платформы грузятся без обращения к сети;
  • на низком и среднем качестве остаётся процедурный запасной путь;
  • скриншоты из настоящего рантайма подтверждают, что сцена не пустая и доска читается;
  • изменения времени кадра и размера бандла записаны.

Последние три — самые важные и самые пропускаемые.

«Грузится без сети» отсекает ассет, который на машине разработчика работает за счёт кеша, а у игрока — нет.

«Скриншоты из настоящего рантайма» — прямое следствие https://courses.digitable.life/post/3d-pipeline/04-seeing/: рендер из Blender ничего не доказывает про игру. Доказывает только картинка, снятая с того, что получает игрок. Отдельным правилом проекта записано: маркетинговые материалы снимаются с тех же моделей, что уехали в билд, — нарисованный отдельно робот не считается доказательством.

«Записаны изменения времени кадра и бандла» превращает «стало красивее» в измеримый размен. Красота, стоившая 8 мс на кадр, — это решение, которое кто-то должен принять сознательно.

Что перенести к себе

Даже если вы не делаете игру:

  1. Держите рабочий запасной путь. Новое добавляется рядом со старым.
  2. Бриф из проверяемых утверждений. Каждый пункт — то, что можно предъявить готовому результату.
  3. Разделяйте форму и параметры. Один меш и слоты цвета — та же мысль, что код и конфигурация.
  4. Считайте, а не прикидывайте. 32 тысячи треугольников — это ×50 на сцене.
  5. Приёмка на реальном артефакте. Не на превью, не на статусе success, а на том, что получит пользователь.

Пятый пункт — то, ради чего написан весь трек. Инструмент, который врёт бодро и уверенно, обходится дороже инструмента, который честно падает. Работая с агентами, стройте свой пайплайн так, чтобы ложь была видна дёшево и сразу.


Набор для запуска: digitable-lol/blender-mcp. Скил для агента Digitcreative/blender-mcp. Карточка в Digitable Workbench — открытый гайд, покупка не требуется.

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов