Две недели руководил ИИ в Unity 6. Вот что получилось
Что это. Ранний прототип локации, вдохновлённой Юконом. Сделан на Unity 6 с URP. Я начал 15 октября, кадры сняты на 15-й день.
Как делилась работа
Я:
- Направление: сеттинг, визуальный стиль, гейм-дизайн и референсы.
- Архитектура: я её спроектировал и направлял ИИ в её сторону (подробнее в конце).
ИИ:
- ~100 тыс. строк C#.
- 23 кастомных шейдера, 11 compute-шейдеров и 7 renderer features, всего ~9 тыс. строк HLSL. Через них рендерится ландшафт, вода, небо, объёмные облака, деревья, трава, снег и осадки, а также HBAO, солнечные лучи и авто-экспозиция. На URP остались сам конвейер кадра (куллинг, depth prepass, каскадные карты теней, которые наши шейдеры фильтруют сами, и дополнительные источники света), его стек постобработки (блум, тонмап, виньетка, цветокоррекция) и STP.
ИИ управляет редактором Unity через CLI и проверяет свои изменения по скриншотам из движка. Пока что он сделал их около тысячи.
Мир: полностью процедурный и запечённый, зависит от сида и конфигурации
Карта: 8×8 км, карта высот с разрешением 1м и эрозией, просчитанной на GPU. Генератор идёт от геологии к горам, затем к гранитному щиту с ледниковыми формами рельефа. Дальше идут реки, озёра и болота, потом почвы и 16 материалов поверхности. Полное запекание занимает ~30 с. Хребет в центре добавил я сам, для красоты.
Леса: 11 ниш. Среди них белая ель, берёза, осина на южных склонах, сосна на песчаных валах и на голом граните, чёрная ель на вечной мерзлоте, тополёвые поймы и граница леса (не все ассеты присутствуют). Всего ~314 тыс. деревьев, все рисуются на GPU и видны на расстоянии до 5 км.
Подлесок: ~457 тыс. кустарников шести юконских видов, 8 видов разнотравья и 4 вида злаков.
Сезоны: 6 фаз, которые смешиваются в зависимости от даты. Каждая берёза желтеет в свой день, а опавшие листья остаются лежать подстилкой. Каждое озеро и каждая река замерзают и тают по своему графику, бывает иней. Снег процедурный: это слой поверх ландшафта, глубина которого зависит от погоды, с колеями и следами. Снег на деревьях остался от довольно старой итерации, его ещё нужно доработать.
Небо и погода: физическое небо с солнцем и луной, туман в долинах в безветренные утра, объёмные облака, авто-экспозиция и 13 типов погоды.
Для работы со всем этим ИИ не нужен. У каждой системы есть инструменты, которые человек может настраивать вручную:
- окно World Generator с 2D-картами, 3D-превью и кнопками запекания;
- style-ассеты со слотом под каждую нишу леса, кустарников и трав;
- окна для сезонов, календаря, снега, настроек графики и т. д.
Их довольно много, и с ними придётся разобраться: параметров ОЧЕНЬ много.
Производительность
Замерял релизную сборку на RTX 5070 с Ryzen 7 7800X3D.
Настройки: максимальные графические настройки и дальности прорисовки из тех, что я сделал. Это 1080p в нативном разрешении (STP только как сглаживание), карты теней 4096 с 4 каскадами и деревья до 5 км. Камера от третьего лица, в лесу.
Результат: 242–256 FPS в зависимости от сезона. Медианный кадр занимает 3,9–4,1мс, 99-й перцентиль держится ниже 4,8мс. Это ~950 draw calls при ~96 тыс. деревьев в кадре.
Упор в GPU. Солнечные тени стоят ~1,0мс, деревья ~0,8мс (в основном их тени). Ландшафт занимает ~0,7мс, HBAO ~0,65мс, постобработка ~0,45мс, трава и разнотравье ~0,15мс.
Апскейлинг: STP с коэффициентом 1,5× даёт ~330 FPS.
Это замер в одной точке, камера развернута в самую нагруженную часть карты. Слабые видеокарты не тестировал. Кое-что ещё можно оптимизировать, в том числе тени деревьев и рендер ландшафта, так что этот FPS не предел.
Вывод
Может ли кто угодно сделать такое с ИИ? Как мне кажется - пока нет. Такой результат не получить, просто набирая промпты. Я в разработке 7 лет, у меня опыт в рендеринге и хорошее понимание того, как устроены игры. Я так же достаточно хорошо понимаю как устроены игровые движки, чтобы оценивать то, что делает ИИ. Это позволяло мне отбрасывать некоторые его решения или просить переделать.
Это было всегда важно. Если оставить ИИ без присмотра, он старается выполнить промпт любой ценой, даже если для этого приходится гнуть архитектуру или ООП-структуру. Следить за этим было большой частью работы. Постоянные анализы решений, рефакторинг и доработки
Поэтому это не просто красивая статичная сцена. Архитектура позволяет менять мир процедурно прямо в игре: удалять отдельные деревья, растения или целые участки растительности и давать природе восстанавливаться самой в рамках конфига популяции. Сохранение и загрузка мира так же прекрасно работают.
И всё же скорость меня удивила. Если вы знаете, что делаете, и понимаете, что делает ИИ, можно получить хороший результат за короткий срок.
Впрочем, до готовности ещё далеко. В проект вложено много времени, и, по-моему, нужно еще столько же времени, чтобы локация дошла до уровня, которым я буду доволен. Нужны детализация вблизи, исправление некоторых проблем с отрисовкой деталей вдали, ассеты, животные, звуки и так далее. Но результат уже впечатляет.
ИИ в моём случае — множитель производительности труда. Без него на подобный проект ушли бы месяцы, если учесть, что все там написано с нуля. А без моего опыта и навыков, результат был бы далеко не таким хорошим, ведь так?