Будущее геймдева
Автор: Неуловимый ДжоНейросетки всё ещё впечатляют, но есть и новые вызовы.
Да, реклама и шотсы уже в полный рост делает Stable diffusion, и ему подобные бредогенераторы. Но в реалтайме нейросетки пока что с трудом фильтра приклеивают к лицам, а действительно качественное видео предполагает титанический труд по дрессировке перцептронных тараканов.
Над видео длинной в 30 секунд, хороший специалист должен работать несколько рабочих дней, и результат не гарантирован. Да, это быстрее чем моделить и дешеве чем снимать в натуре, но всё же для того чтобы снять кино или хотябы клип - этого мало.
Но что если заглянуть в ближайшее будущее? Что если вместо отрисовки полигонов, заранее заготовленных персонажей окружения и предметов, кадр будет отрисовывать нейросеть прямо с нуля? Только представьте, вы нажимаете клавишу, а компьютер в ответ рисует гиперреалистичные кадры игрового процесса? Фантастика? Тот, кто плохо разбирается в современном ии скажет - реальность, тот кто разбирается лучше - скажет невозможно.
А я скажу:
Начнём с того, почему это невозможно.
На генерацию одного кадра нужны специфические процессы, перемножение огромного массива матричных данных и уйма энергии. Только представьте, на генерацию одного кадра у самых продвинутых нейронных болванчиков уходят секунды, а энергии они поглощают как бодипозитивная феминистка жаренные ножки. Когда вы просите чат нарисовать вам что-нибудь, сервер тратит энергию, которой хватит для того чтобы вскипятить несколько полных чайников.
Нейросетки - штука гибкая и многообразная. Попадая в руки полноценных специалистов, а не браузерных юзверей они могут и быстрее работать, и оптимизировать, и пропускать кадры, интерполируя, и ещё много чего могут. Но скорость, даже при всех современных нанометровых арихмометрах, это для них пока тяжелая задача. Да, лет 8 назад, кто-то пропустил через нейросетку видеопоток игры ГТА, и результат впечатлил качеством, но реальным времинем там и не пахнет. До сих пор.
Так что да. Для того чтобы нейросетка выдала интерактивный геймплей ей на вход нужно подать данные с классического игрового движка.
Кратко про игровые движки.
Игровой движок - это программа, у которой всего две задачи генерация видеопотока и генерация аудиопотока, зависимости от нажатых клавиш. Всё.
А вот как она, эта программа, решает эту задачу... Вот это настоящее искусство, не то что наша с вами писанина)))
Классический игровой движок представляет собой интерактивный каталог, который можно себе представить как таблицу эксель. В каждой строке этой таблицы хранятся данные об объектах окружения, и циклически обновляются. Некоторые обновляются раз в секунду, некоторые каждый кадр, а некоторые только при необходимости.
Так же как и эксель может выдавать обработанные данные из ячеек таблицы, так и игровой движок можеть брать "страницы уровней" и в зависимости от нажатия клавиш отправлять данные, которые воспроизводятся на экране в виде картинки.
движок движется по списку действий, (своего рода список дел) выполняет каждое из них по порядку, и в результате заполнения неоднократно переписывает значения цветов пикселей. А когда список дел заканчивается, компьютер отправляет результат на экран и в динамики, обновляет список дел, и приступает к генерации нового кадра.
Допусти м игрок удерживает клавишу вперёд, и компьютер обрисовывает окружение, описанное данными в таблице, во смещением в зависимости от скорости движения персонажа. Но в один прекрасный момент, ккординаты опорной точки персонажа совпадают или пересекают определённый участок пространства, в описании которого есть инструкция вызова события. Открывает компьютер инструкции к событию, и видит:
"
остановить персонажа;
добавить в инвентарь объект "меч_35";
удалить объект №такой-то из игровой сцены;
проиграть звук: "подбор_предмета.WAW";
переписать конфигурацию модели персонажа;
выйти из функции ( событие.Взять)
"
И продолжает отрисовывать следующий кадр.
Понятно, что это всё утрированная схема. Там есть ещё кучи моментов: состояние уровней, состояние объектов, проверка состояния динамических объектов, проверка столкновения объемов персонажей и статических объектов, динамическая подгрузка, вызовы отрисовки, конвейер рендеринга, конвейер постпродакшна, всевозможные постобработки, и даже интерфейс пользователя. Но самая продвинутая видеоигра, это всё ещё программа для интерактивной генерации видео и аудиосигнала.
Так вот. возвращаемся к нейросетям. отложим пока в сторону реальные современные возможности их тормознутость неуправляемость и прожерливость, и сконцентрируемся на том, что нам просто нужен видеопоток, в зависимости от контекста.
Тот видосик, брал в обработку готовый результат, нейросеть даже на знала что делает реалистичной не видео с регистратора, а виртуальный мир, и потому ей приходилось тратить очень много времени на угадывание и дорисовку недостающих данных, которые она была просто не обучена даже использовать. о в дыижке этих данных просто завались!
А если не хавтит, то можно написать функцию которая их сгенерирует и упакует:
Таким образом у нас есть плюсы и минусы.
С одной стороны, генерация реалистичного изображения это тяжелый и энергозатратный процесс.
С другой стороны, нейросеткам не нужны гиперреалистичные тикстуры, не нужны подробные, высокодетализированные модели, подробная анимация. Достаточно нарисовать три кубика и залить эти кубики промптами. И всё.
Так же можно управлять и разрушениями, дымом, огнём, искрами, волосками на свитере, мехом, травой, листвой и прочим. Красите замлю не в цвет, а в промпт, и получаете фотореалистичную картинку.
А если здание разрушилось, то просто добавляете несколько простых кубиков и красите их в тег <обломки>, а генерация уже выкрасит их так, как у художника за месяц не получится.
Вывод: нейросетки - зло, комплюктер зрение садит и вообще 42. Ложись спать, кинескоп посадишь.