Claude Code и 3D: как агент из терминала строит локации

Терминальный агент строит 3D-локации: как устроено подключение, какой промпт работает, зачем цикл проверки и где всё ломается.

Вид с высоты на целый квартал с домами и дорогами, построенный агентом в Cuberta

Claude Code — терминальный агент, сделанный для кода. Он читает файлы, планирует, правит, гоняет тесты, читает падения и возвращается внутрь. Подключите того же агента к 3D-редактору по MCP — и обнаружится слегка неожиданное: у него получается. Не потому, что он понимает архитектуру, а потому, что строительство локации устроено как крупный рефакторинг: сотни мелких вызовов инструментов, каждый проверяемый, и почти все скучные.

Что агент для кода уже умеет

Полезное в кодовом агенте — не знание JavaScript. Полезен цикл: собрать состояние, выбрать действие, вызвать инструмент, прочитать результат, заметить расхождение, поправить. Anthropic описывает работу Claude Code ровно так: модель действует, наблюдает, решает, повторяет — иногда сотни итераций подряд. Всё остальное — схема инструментов.

Локация — это длинная задача на инструментах

Посмотрите, как человек делает блокаут деревни, и увидите тот же цикл. Провести дорогу. Встать на неё. Заметить, что она слишком широкая. Сузить. Нарезать от неё участки. Поставить дом. Проверить, что он повёрнут правильно. Повторить тридцать раз.

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

Что не переносится

  • Вкус. Он не скажет вам, что площадь мёртвая, что линия крыш однообразна, что деревня читается как ряд домов, а не как место, где кто-то живёт. Любое из этих суждений он мгновенно примет от вас и отработает. Сам не предложит никогда.
  • Пространственная интуиция без обратной связи. Рассуждать об участке 40 на 60 метров по одним координатам — это счисление пути. Арифметика надёжна, но «читается ли этот зазор как улица» — не тот вопрос, на который отвечают числа. Чем дольше агент не считывает сцену обратно, тем больше накопленный снос.
  • Всё, что он не может наблюдать. Труба, утопленная в крышу, фонарь внутри кроны дерева, две компланарные стены, дерущиеся за одни и те же пиксели, — если ни один инструмент об этом не сообщает, для агента этого нет. Сенсором для всего неизмеряемого работаете вы, и это настоящая причина держать вьюпорт перед глазами.
  • Понимание, что работа закончена. Типичный отказ автономных циклов — преждевременная уверенность: агент, который что-то сделал, склонен это принять. Он отрапортует, что деревня готова, пока две дороги обрываются в воздухе.

Как подключить Claude Code к редактору

Подключение — самая неинтересная часть, и так и должно быть. Cuberta отдаёт Model Context Protocol сервер прямо из редактора. Вы нажимаете Copy connect command в приложении, вставляете команду в терминал — и у агента появляются инструменты редактора. Внутри сессии Claude Code команда /mcp показывает видимые серверы и их статус; если редактор в списке и подключён, настройка закончена.

Claude Code — привычная отправная точка не потому, что он обязателен, а потому, что это терминал: те же инструменты водит любой MCP-клиент. Протокольная сторона вопроса разобрана отдельно — MCP-серверы для 3D и геймдева. Дальше считаем, что соединение работает.

Первый промпт

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

Промпт, который сожжёт десять минут

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

Каждая фраза — настроение, и ничего из этого не проверить. Агент что-нибудь построит, потому что он всегда что-нибудь строит, и когда результат вам не понравится, ткнуть будет не во что. «Детально» дало разрешение поставить четыреста объектов. «Не торопись» сняло условие остановки. «Атмосферно» он не видит, поэтому аппроксимирует туманом и сухими деревьями — тем, что это слово означает статистически, а не тем, что имели в виду вы.

Промпт, в котором есть что править

Рыбацкая деревня примерно на 30 зданий на ровной земле. Работай проходами и останавливайся между ними. Проход 1: одна дорога вдоль береговой линии, около 400 м, и две короткие дороги вглубь, каждая заканчивается тупиком. Проход 2: участки вдоль этих дорог, ни один не пересекает береговую линию. Проход 3: одноэтажные деревянные дома, фронт 6–8 м, двускатные крыши, каждый развёрнут к дороге, на которой стоит его участок. Проход 4: каменный причал у южного края с тремя мостками, затем заборы и лодки. Проход 5: свет позднего дня, солнце низко с запада. Не строй внутри области, которую я разметил. После каждого прохода скажи, что создал, сколько и какой габаритный бокс.

Он длиннее, но длина здесь ни при чём. Количества, размеры, топология дорог, порядок работы, запрет, обратное считывание и правило остановки — каждый пункт либо число, либо инструкция про процесс. Когда что-то выйдет криво, вы назовёте проигнорированный пункт, и это правка в две строки, а не переписывание. Общий принцип — сцены отзываются на структуру там, где отдельные объекты отзываются на прилагательные, — разобран в статье текст в 3D-сцену.

Цикл проверки и есть весь фокус

Агент, который стреляет и забывает, выдаёт весь план одной очередью вызовов и не смотрит на результат. Это быстро, и именно поэтому люди делают вывод, что ИИ не умеет строить уровни. Проблема не в том, что какой-то один вызов неверен. Проблема в том, что ошибки накапливаются вниз по цепочке: если береговая дорога вышла на 40 м длиннее плана, все нарезанные от неё участки смещены, все дома на этих участках смещены, а причал у южного края оказывается в воде.

Агент, который после каждого действия считывает сцену обратно, ловит это на дороге — до того, как ошибку унаследуют. Это та же дисциплина, что прогонять тесты между правками, а не в конце, и стоит она того же: лишние обращения, лишние токены, более медленный прогон. И окупается по той же причине.

Получить её можно, просто попросив. Впишите обратное считывание в промпт — и оно станет привычкой сессии. Ещё лучше — впишите один раз в CLAUDE.md, файл проекта, который Claude Code подгружает в начале каждой сессии, рядом с договорённостями, которые вы устали повторять: высота этажа, ширина дороги, палитра материалов и правило, что новый проход не начинается, пока не подтверждён предыдущий.

Работа проходами

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

ПроходЧто решаетЧто проверить перед следующим
Дорогискелет, который наследуют все дальнейшие проходыперекрёстки действительно сходятся, суммарная длина совпадает с планом
Участкичто застраиваемо, а что нетничего не лежит поперёк дороги и не выходит за площадку
Зданиямасса, силуэт, фронтединая высота этажа, каждый фасад развёрнут к своей дороге
Наполнениетротуары, фонари, деревья, заборы, вывескиничего не пересекается, ничего не висит, шаг ровный
Светвремя суток, угол солнца, неботени согласованы, ничего важного не осталось в темноте

Проходы решают ещё и проблему контекста. Долгая стройка забивает контекстное окно результатами вызовов — каждое запрошенное вами считывание это текст, который модель теперь тащит. /context показывает, чем занято окно, /compact сворачивает разговор и освобождает место. Промежуток между проходами — безопасный момент и для того, и для другого: сцена живёт в редакторе, а не в переписке. Переписка — та половина, которой можно пожертвовать.

Когда всё пошло не так

Разметьте землю вместо спора

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

Откатите шаг, а не сессию

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

Когда он говорит, что закончил

Просите числа, а не резюме. Сколько зданий. Каковы общие габариты. Сколько зданий дальше 5 м от оси дороги. Есть ли объекты ниже уровня земли. Агент, который правда проверял, ответит из сцены за пару вызовов. Агент, который угадывает, выдаст уверенный абзац без единого числа, и это и есть признак.

Цена, время и то, что это не заменяет

Время — минуты, не секунды, и не тот вечер, который занимает ручной блокаут. Эти минуты предполагается провести за рулём, а не уйти по делам: весь аргумент выше в том, что именно надзор делает результат пригодным.

Настоящая цена — токены. Каждый вызов инструмента стоит их в обе стороны, и проверка, которую эта статья только что защищала целым разделом, — дорогая половина: считывание помогает только тогда, когда результат возвращается в контекст модели. Определения инструментов редактора занимают часть окна ещё до того, как вы что-то напечатали. Ничего из этого не спрятано: Cuberta бесплатна, а встроенные модели и материалы работают офлайн, но доступ к модели вы приносите свой — значит, счёт за токены ваш, и заполнение окна видно по /context.

Честное ограничение — последнее. Это не замена левел-дизайнеру. Это замена первым двум дням его работы: блокаут, триста расстановок, которые никто не хочет делать руками, проход, где фонари встают каждые 25 м по обеим сторонам улицы. Что не заменяется — суждение о том, зачем это место: куда должен упасть взгляд, какая улица должна ощущаться уже, чем нужно, чего здесь не должно быть вовсе. Дизайнер с агентом добирается до версии, которую есть смысл критиковать, за час, а не за неделю. Тот, у кого дизайнера нет, получает технически корректную деревню, которой нечего сказать.

Это и есть честный итог переноса. Claude Code приносит терпение, готовность принять четыреста маленьких правильных решений и привычку проверять себя. Мнения он не приносит. Эта часть по-прежнему ваша работа.