Тестируем Gemini 3.8: реально ли написать 3D-шутер с нуля без игрового движка?

Прокомментировать Просмотры: 3

Второго сентября корпорация Google представила Gemini 3.8 Flash. В релизных материалах разработчики акцентировали внимание на автономных агентах и способности справляться со сложными инженерными вызовами в условиях огромного контекста. Маркетологи же, предсказуемо, пообещали настоящий прорыв в сфере автоматизированного программирования.

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

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

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

Я застал эпоху классических ПК-игр девяностых. Сегодня их принято называть ретро-шутерами, но для меня это ностальгическая классика: Doom, Heretic, Blood и мрачный фэнтезийный Hexen с его запутанными катакомбами и магическими артефактами. Передо мной стояла амбициозная задача — создать 3D-экшен в эстетике темного фэнтези, наполненный лабиринтами, поиском ключей, легионами нежити, отзывчивой динамикой боя и густой, давящей атмосферой.

Gemini заверила, что тяжеловесные движки вроде Unity или Godot нам не понадобятся. Мы обойдемся легковесной библиотекой Three.js, нативным WebGL и самописным локальным лаунчером на C#.

Эксперимент официально стартовал.

Первый блин и иллюзия легкости

Начальный этап вселял оптимизм. Модель оперативно набросала скелет приложения: сетку помещений, контроллер камеры с захватом курсора и базовую геометрию стен. Для воссоздания аутентичной атмосферы старой школы рендеринг пустили через виртуальный буфер низкого разрешения 426×240 пикселей со ступенчатым масштабированием. Картинка мгновенно приобрела нужную зернистость без неприятного мыла.

Однако стоило перейти к графическому наполнению, как система столкнулась с первыми серьезными испытаниями.

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

Пришлось корректировать задачу и внедрять механику альфа-масок. Модель написала вспомогательный Python-скрипт с попиксельным анализом и расширением контура. Визуал заметно преобразился и стал выглядеть гармоничнее.

В этот момент ИИ выдал забавный сбой.

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

Лишнего персонажа пришлось исключить, а кадр со вспышкой перегенерировать с третьей попытки.

Призрак в перчатке

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

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

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

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

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

Геометрия Сатанинского Храма и босс, упершийся в потолок

Проект постепенно обретал завершенный вид. Я сформировал четыре уникальных уровня с собственными биомами:

  • Забытый склеп из серого песчаника, украшенный алыми стягами.

  • Затопленные катакомбы с покрытыми мхом стенами и мутной зеленоватой водой под ногами.

  • Зал жертвоприношений из кроваво-красного камня с тяжелыми цепями и нишами для останков.

  • Финальный Храм с массивными колоннами из черного обсидиана и раскаленными трещинами магмы.

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

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

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

Загадка мажущих стрелков

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

Причина крылась в расчете вектора атаки: траектория строилась от точки появления снаряда до координат игрока. В трехмерном пространстве персонаж имел нулевую высоту по оси Y (уровень пола), тогда как стрела вылетала из арбалета на полутораметровой высоте. Враги методично палили себе под ноги под углом в 45 градусов.

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

Оживший огонь и винтажный интерфейс

Когда игровая механика стабилизировалась, потребовалось доработать атмосферу. Изумрудный огонек на посохе изначально представлял собой статичную текстуру. Я подготовил четырехкадровый паттерн анимации, и теперь в состоянии покоя пламя плавно колеблется, вытягивается и рассыпается искрами с частотой около восьми кадров в секунду.

Интерфейс также подвергся полной переработке. Гладкие современные элементы были удалены и заменены коваными металлическими рамками со стилизованными тенями. Шкалы здоровья и маны разбили на дискретные пиксельные сегменты в духе старых шутеров. В центральной части экрана расположили каменный медальон с горгульей, которая динамически реагирует на статус протагониста.

Для полного погружения я попросил ИИ сгенерировать 8-битное звуковое сопровождение, но результат оказался плачевным. Пришлось обратиться к SUNO, после чего в C#-лаунчер интегрировали стриминг MP3 без буферизации. А на титульном экране под готическим логотипом я разместил потрескавшуюся плитку с мерцающей кровавой надписью: «Навайбкожено Нейроскуфом». Самоирония превыше всего =)

Завершив проект, я решил записать короткий ролик с демонстрацией игрового процесса. Запустил Bandicam, активировал захват и бодро пробежался по уровням. Во время игры падений производительности не наблюдалось, однако на итоговой записи картинка дергалась, создавая ощущение работы на 20 кадрах в секунду.

Корень проблемы крылся во взаимодействии браузерных технологий и софта для захвата видео. По умолчанию холст WebGL создавался с задействованным альфа-каналом. В штатном режиме видеокарта этого не замечала, но программа захвата заставляла оконную систему Windows ежемоментно считывать буфер с расчетом прозрачности всего интерфейса.

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

Объективный вердикт возможностям модели

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

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

Чуда пока не произошло. Но если вы обладаете базовым пониманием сцены, альфа-каналов и принципов рендеринга и готовы методично указывать нейросети на визуальные артефакты, этот инструмент способен сэкономить недели монотонного труда.

Лично для меня этот эксперимент стал исключительно увлекательным опытом.

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов