AI² - Сага продолжается…

Только в этот раз будет еще скучнее, чем моя предыдущая статья.

Начнем с «AI²». Я решил написать серию своих работ, связанных с нейронной сетью Active Foreground. Тем из вас, кто читал мою предыдущую статью, я хотел бы, чтобы вы подумали о виртуальном золотом медальоне, который я дарю всем вам. Для тех, кто этого не сделал, это очень плохо. Никаких золотых медальонов! (Прочтите статью, затем наградите себя)

Так что же на этот раз такого скучного, о чем я подумал написать? Что ж, частично это связано с AFNN (опять же, это знают только заядлые читатели), а частично с проектом, который я сделал во время стажировки в PlayStation / Sony Interactive Entertainment.

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

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

Моя роль в качестве графического инженера в команде игрового движка (в рамках NDA) заключалась в работе над модулем тесселяции. В апреле, когда я начал стажировку, мне дали задание попробовать реализовать фотореализм в непроцедурной игре с закрытым миром на PlayStation 4 без значительного увеличения TDP.

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

Фотореализм - это одна из отраслей игровой индустрии, которую обычно называют черной дырой; Что бы вы ни пытались сделать, всегда будет какое-то аппаратное ограничение.

Прежде чем начать свой ужасный рассказ, я хотел бы сказать, что моя работа все еще продолжается, но, похоже, она работает по большей части. Большинство людей на тот момент уже знали, что NVIDIA только что выпустила новую серию графических процессоров под названием RTX (RT означает R ay T Racing. ). NVIDIA пытается выполнить трассировку лучей на обычных настольных компьютерах, что стоит лишь доли того состояния, которое в настоящее время использует PIXAR. Однако такой технологии для консолей нигде не видно.

К счастью, у меня появился этот проект, и я начал свою работу. Я начал с живого обучения AFNN, чтобы отсканировать и получить счет тесселяции для отдельных объектов в каждой сцене, которую нужно было визуализировать. Сцена, которая работала вместе с нейронной сетью, должна была быть оптимизирована для PS4, поэтому мое первое знакомство с devkit для PS4 было связано с проблемой компоновщика в одном из моих dll-файлов C ++. После удаления ошибки компоновщика весь проект пришлось преобразовать с CUDA в OpenCL, поскольку используемый графический процессор принадлежит AMD и может обрабатывать OpenCL.

Предварительные проверки завершены, и началось обучение НС. Игра работала со скоростью 10 кадров в секунду, но была доведена до максимальных визуальных настроек. А с нейронной сетью, работающей в фоновом режиме, графики TDP были зашкаливающими. Тем не менее я был твердо уверен, что этот метод сработает. Однако GPU был недостаточно силен, чтобы иметь возможность рендерить игру и одновременно обучать и запускать NN.

После примерно 1000 циклов, проходящих через одну и ту же сцену, я каким-то образом столкнулся с узким местом в 2 эпохи, и мои графики производительности также были не очень хорошими. На GTX 1080ti AFNN может выполнять распознавание изображений в 500 вычислениях с периодичностью 1,5 и производительностью до 90%. Но так как у меня было мало времени, я не мог оптимизировать ИИ для использования с OpenCL.

Итак, вывод…

Игра работала со скоростью 10 кадров в секунду с лучшим визуальным масштабированием, с очень высоким TDP и саундтреком, который могли бы понравиться только инопланетянам (я говорю о фанатах, потому что, как вы знаете, в космосе нет ветра).

Or is it?

Примерно через 2 месяца я снова попробовал решить эту проблему. Теперь один из лучших способов добиться фотореализма - увеличить количество ресурсов мозаики и выполнить трассировку лучей для получения наиболее естественных световых эффектов. Обработка High Dynamic Range (или, для моих менее технических друзей, HDR) в настоящее время возможна только для очень мощных графических процессоров, таких как NVIDIA Quadro.

Решение, которое я нашел, заключалось в том, чтобы обучить AFNN таким образом, чтобы запущенная игра была предварительно оптимизирована для консолей, на которых она должна была запускаться. Поскольку эта технология не предназначалась для ПК, я мог контролировать по крайней мере один параметр, и заключалось в том, что конечным оборудованием является либо PS4, либо PS4 Pro. На этот раз меня не волновал TDP или FPS, с которыми игра работала. Я сделал игру так, чтобы она запускалась только с максимально возможными настройками. И, используя характерную особенность AFNN, начал обрабатывать счетчик тесселяции для каждого объекта, который в данный момент находился в фокусе, обучая его текущим данным в фоновом режиме и используя эти значения, чтобы просто получить счет тесселяции. На этот раз я не отправлял данные прямо в движок, чтобы увеличить или уменьшить количество тесселяции. Одна из многих замечательных особенностей непроцедурных игр заключается в том, что дизайнеры могут контролировать требуемый уровень детализации. И со всем настроенным на максимум я запустил сцену примерно 10 000 раз (чтобы увеличить вычислительный цикл и уменьшить расстояние Хэмминга). Моя эпоха внезапно упала до ~ 1,5 эпох, а производительность была от 80-х до середины 90-х (в процентах).

Конечным результатом запуска нейронной сети стал файл CSV, содержащий наилучшие и наихудшие возможные значения тесселяции для каждого объекта, просматриваемого в окне просмотра. Чтобы добавить веселья, я добавил отбраковку задней поверхности почти для каждого объекта, который можно было загрузить позже, в зависимости от его местоположения в сцене. Я использовал CSV-файл как плагин и модифицировал движок, чтобы использовать значения счетчика тесселяции во время выполнения.

На этот раз проблем не было. Игра работала со скоростью 30 кадров в секунду с почти фотореалистичной графикой при рендеринге с использованием HBAO. Чтобы управлять TDP, я создал шейдер, который применил поддельное размытие по Гауссу для поддельного эффекта глубины резкости и уменьшил количество тесселяции объектов, скрытых за размытием. Что касается тех объектов, которые использовали вычисления для рендеринга, даже если они не были видны в области просмотра, они были полностью скрыты с использованием другого экземпляра AFNN.

Короче, вот второй и окончательный вывод…

Игра работала со скоростью 30 кадров в секунду (заблокировано), с отбраковкой задней поверхности и усеченной области. NN больше не требовался, а счетчик TDP все еще находился в установленных пределах. Фотореализм был достигнут без необходимости работать с трассировкой лучей.

Это можно легко реализовать с помощью AFNN, который в настоящее время разрабатывается для всего игрового движка. Что касается трассировки лучей, мы можем только надеяться, что Sony выпустит консоли следующего поколения.

Спасибо за прочтение.

P.S .: Следите за новыми статьями из этой серии.