Нейросети генерируют игровую карту. Часть 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:
|
Внутренние рассуждения
Да, я использовал DeepSeek, и его внутренние рассуждения просто приводят меня в восторг!
Это просто восхитительно!
Результат второй сети (непосредственно генерирующей JSON по чёткому описанию)
Вторая сеть выдала мне результат, я загрузил его в редактор.
И на удивление там оказался внятный дом, с входной дверью и четырьмя стенами.
Да... дверь заставленная мебелью, две дырки в стене спальни, и холодильник стоящий посреди комнаты - это не так красиво.
Но не забывайте - это была всего лишь первая попытка! Дальше промпт можно улучшать.
Да, где-то должен быть предел: я скептически к этому отношусь, и если честно, то не верю, что нейросеть может создать нормальный полноценный интерьер дома, как бы его сделал живой человек занимающияся дизайном уровней.
Но очень интересно пощупать где предел её возможностей и как это зависит от различных моделей.
На этом данная статья заканчивается.
У меня уже есть более удачные картинки после доработки исходного запроса. Но я их выложу в отдельной статье, чтобы показать эволюцию результата, и как при доработке запроса результат становится всё лучше и лучше.
Также я надеюсь, будет третья часть статьи, в которой я буду давать один и тот же запрос разным моделям нейронных сетей, смотреть какая сеть генерирует дома лучше всего и сильно ли различаются результаты.