Нейросети генерируют игровую карту. Часть 1

Я помогаю другую делать зомби-апокалипсис игру TrappedTogether, и попутно совершенствую свои навыки в C# и python.

Создание 3D локаций очень трудоёмкая процедура, поэтому в своё время я сделал 2д редактор, позволяющий расставлять по клеточкам 3д объекты. Но даже с редактором это большой труд.

Я подумал, почему бы не использовать для этого AI? Даже если ничего и не получится, это будет интересным экспериментом. Раз LLM находят новые лекарства от рака, неужели так сложно им сгенерировать мне внутреннее пространство дома?

Предыдущий опыт. Ещё год назад всё было ужасно!

Как-то я уже пробовал сгенерировать планировку дома. Мой редактор уровней, который генерируют JSON файл с набором объектов: стены, крыша, мебель, интерьер... и их координаты. А потом Unity их загружает и расставляет.

Так вот, примерно год назад, когда ещё только-только появилась флагманская модель от OpenAI - gpt4o, я скормил ей пару созданных мной домов и попросил сделать что-то похожее. Результат был плачевным: случайные объекты с неправильной ориентацией.

Новая модель и новые знания

Прежде чем рассказать про генерацию домиков, мне совершенно необходимо сказать какие я модели использую и почему. Это важно, и от этого зависит результат.

Лирическое отступление как у меня не сложилось с новой флагманской думающей моделью от OpenAI

С тех пор появились думающие модели. Почему бы их не попробовать!
В новой модели o1 я разочаровался.

У меня есть сторонний проект LetTheTinCanDoIt (страница проекта, GitHub), который помогает мне программировать. Он использует платное API от OpenAI, позволяя прикреплять к запросу несколько файлов отмеченных галочками. А исправления пришедшие в качестве ответа он парсит обновляет исходные файлы. Для программирования очень удобно!
Я долго пользовался моделью gpt-4o, и в целом она мне позволяла экономить время.

Когда вышла o1 я предвкушал что теперь можно будет не так подробно описывать что я хочу, а модель будет выдавать проверенный результат без глупых ошибок.
Но нет... сильной разницы я не заметил: о1 часто выдавала такой же бредовый код, что и gpt4o. Но при этом делала это безумно дорого! Моя программа LetTheTinCanDoIt отправляет туда целые файлы, и если файлы большие их много, то это очень много токенов!
В общем... очень большой шанс за 2-3 запроса высадить больше 10 евро!
И ладно бы за эти 10 евро модель выдала бы очень хороших код, который решил бы мою проблему - нет, за эти 10 евро она выдала полную ерунду.
(но повторюсь, что gpt4o я периодически пользуюсь и это экономит мне много времени)!

Справедливости ради замечу, что сейчас вышли модели gpt4.5, o1-mini и o3-mini, и я их ещё не сравнивал (но планирую).

Нашумевший DeepSeek

Недавно появился DeepSeek, и многие принялись тут же его тестировать. Не прошёл стороной и я.
Я добавил поддержку API в своей программе LetTheTinCanDoIt и периодически прошу его написать мне какой-то код.
Не думающая модель deepseek-chat гораздо хуже своего конкурента gpt4o, а вот думающая deepseek-reasoner - очень хорошо, притом по цене она примерно как gpt4o - можно спокойно пользоваться, и она не обнулит ваш баланс за 10 минут.

Генерация домиков. Новый подход

В прошлый раз я в лоб попросил сгенерировать что-то похожее, по приложенному JSON. И был не прав: модель не очень то понимает что такое "похожее" и что именно мне нужно.
Поэтому я в этот раз решил сделать это за два этапа:
1) Попросить модель написать промпт для второй модели, в который словами описать что нужно сделать. Основываясь на JSON домика, который я ей предоставил.
2) Подать второй модели на вход только промпт, без исходного JSON, чтобы она основываясь только на внятном человеческом описании сделала домик по этому описанию.

Я подсмотрел этот подход в исследовательских задачах - где есть несколько агентов, и каждый хорошо делает какую-то одну задачу.

Результаты

Первая сеть выдаёт промпт.
Вот такой промпт выдала мне первая модель

Generate a Unity-compatible house JSON structure adhering to these rules:
Exterior Structure:
Perimeter walls form a closed 6x6 grid. Use Corner models at (0,0), (5,0), (0,5), (5,5) with rotations (0, 90, 270, 180) respectively.
Fill remaining perimeter edges with Wall models. Use Window models on exterior walls (avoid corners) with rotations matching wall direction.
Doors:
At least 1 exterior Door (rotation 270 or 90) on the perimeter.
Use DoorInternal and WallInternal to divide rooms (e.g., at y=2 or x=3).
Floors:
Every (x,y) coordinate under walkable areas (non-wall) must have a Floor model at z=0.
Furniture:
Place Bed2p against walls in bedrooms.
Group kitchen items (SinkOven, Fridge, Counter) in one area.
Add Sofa, TableChairs, and Light models in living areas.
Ensure no overlap: Each (x,y,z) must have only one object.
Roof:
Add PitchedRoofHalf/FlatRoofHalf at z=2 above walls. Match rotations to wall directions (e.g., PitchedRoofHalf rotated 0 above a north-facing wall).

Lighting:
Place Light models near furniture (e.g., above tables, in room centers).
Validation:
All tiles must be filled (use Empty for unused z=0 spaces outside the house).
Ensure JSON includes width and height as 6.

Output only the JSON, no explanations.

Example Output Structure (truncated for brevity):
{
"version": 1,
"squares": [
{
"rotation": "0",
"model": "Corner",
"x": 0,
"y": 0,
"z": 0,
"w": 1,
"h": 1,
"id": "..."
},
// Additional objects...
],
"width": 6,
"height": 6
}


Внутренние рассуждения

Да, я использовал DeepSeek, и его внутренние рассуждения просто приводят меня в восторг!

внутренние рассуждения DeepSeek когда она генерирует игровую карту


Это просто восхитительно!

Результат второй сети (непосредственно генерирующей JSON по чёткому описанию)

Вторая сеть выдала мне результат, я загрузил его в редактор.

LLM генерирует интерьер дома. Первая попытка

И на удивление там оказался внятный дом, с входной дверью и четырьмя стенами.
Да... дверь заставленная мебелью, две дырки в стене спальни, и холодильник стоящий посреди комнаты - это не так красиво.

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

На этом данная статья заканчивается.

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

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

Поиск