Красота рендеринга игровых кадров: Краткий обзор инструментов + Занимательное видео

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

Дисклеймер

Я не 3D разработчик, не разрабатываю движки, игры и не моделирую. Это всего лишь хобби. Большой интерес к 3D у меня всегда был. И все познаю постепенно и самостоятельно. Если в тексте будут (а они будут) некоторые технические неточности — пишите в ЛС или комментарии. Я все поправлю и всегда не прочь хапануть фидбека для повышения опыта.
Сразу прошу прощения, если я запостил эту статью не в тот хаб. Скорее всего я так и сделал.
Но по-моему такой материал не достаточно мощный, что бы попасть в раздел «Разработка» или «Отладка»

Итак, если мы хотим оценить как происходит подготовка игрового кадра. Какая геометрия, текстуры, сколько вызовов на отрисовку, где возникает просадка в производительности? Можно воспользоваться специализированным софтом для отладки этих процессов.

Я перечислю основные из них:

  1. RenderDoc
  2. Nvidia Nsight
  3. GPUperfStudio

RenderDoc — графический отладчик от Crytek.

Поддержка DirectX 11/12, Vulkan, OpenGL 3.2+

Это opensource проект. Регулярно подкрепляется свежими коммитами.
Ссылка на репозиторий и документацию
Интерфейс достаточно гибкий и интуитивно прост. Пытливой душе не составит труда за 5 минут разобраться как запустить какую-нибудь игру или приложение и пройтись по всему процессу отрисовки. Сторонних приложений для старта не нужно.
Указываем путь к exe, дополнительные параметры и запускаем. Далее в приложении в нужный момент нажимаем F12 или PrintScrn, RenderDoc сохраняет кадр, который можно сохранить, и возвращаться к нему даже без запускания игры или поделиться им с напарником.
Еще, например, можно экспортировать геометрию и текстуры.

Nvidia Nsight — инструмент отладки от NVIDIA.

Большой и весьма мощный инструмент отладчика.
Это не единственный инструмент в арсенале Nvidia. Есть инструменты для мобильных приложений, Linux, Mac устройств и тд. Во всем их многообразии я не разбирался.
Nsight предполагает совместное использование с Visual Studio, но для быстрого старта можно попробовать без установленого IDE от Microsoft.

Бесплатно регистрируемся в Nvidia Developer Program и преспокойно скачиваем необоходимые инструменты. На сайте Nvidia есть документация и разъясняющие видео по использованию инструментов.
Для запуска, достаточно перетянуть ярлык приложения на ярлык Nvidia Nsight. И, если все верно, вы увидете HUD’ы и графики от Nsight.
Делается кадр просто: нажимаем CTRL+Z, после этого жмем пробел или кнопку со значком лупы. Процесс останавливается, и открывается окно Nsight Replay, внизу которого есть таймлайн с ползунком. В Nsight есть подсказки и интерфейс достаточно прост. Так же есть возможность сохранить всю отрисовку кадра в файл, но для его открытия придется таки установить Visual Studio.

Что бы поглубже залезть в процесс, необходимо все манипуляции производить из VS.
Либо запускать 3D приложение из VS, либо запускать сохраненный кадр (функция сохранения доступа и без установленой VS)

Создадим пустой проект:

Найдем такую кнопочку, в которой введем путь к приложению и некоторые необходимые настройки.

И после этого запускаем отладку. Открывается приложение. Если используется лоудер, то возможно придется просто выбрать в окошке нужный процесс.

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

Так же у Nsight есть полезная киллер-фича: можно запустить приложение с сервером на выделеной машине, а из VS подключаться к ней. Так каждому не требуется разворачивать одинаковое окружение с приложением, что упрощает жизнь разработчика или команды разработчиков.

Для работы с сохраненными кадрами достаточно открыть сохраненный проект под свою версию Visual Studio, скомпилировать релизный билд и включить Nsight отладку. Далее все как описано выше.

Кстати. Не разобрался можно ли в Nsight разглядывать всю геометрию прогона, как это сделано в RenderDoc? Очень удобно при отображении конкретного вызова отрисовки с сетками из предшествующих вызовов.
Плюс я не смог проверить работу софта на видеокарте от AMD, за неимением последней.
Но вроде бы у Nvidia в этом вопросе нету жестких требований.

GPU PerfStudio — разработка Advanced Micro Devices (AMD)

Прекрасный и мощный инструмент. Так же имеет вомзожность удаленной отладки.
Ссылка на скачивание и докумнетацию

В использовании прост. Имеется 2 версии сервера (64 и 32 бита) для запуска достаточно просто перетянуть необходимое приложение на сервер. О чем он и сам попросит, когда вы его попытаетесь запустить.

Далее просто включаем клиент. Подключаемся к серверу, в нужный момент делаем паузу и теперь можем заниматься всем тем, чем занимались до этого в RenderDoc или Nvidia Nsight.
Широкая поддержка различных API и устройств. Не смотря на происхождение, поддерживает мою видеокарту от Nvidia. Так что никаких заговоров и палок в колеса…

Какой инструмент лучше из них я сказать не могу. У каждого есть некоторые свои мини фичи, таблицы, графики, в которых может содержаться очень нужная в конкретной задаче информация. С пользовательской стороны, человека любопытного, мне как-то больше «сложилось» с RenderDoc. Но иногда не все процессы получается в нем запустить.

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

Рассмотрим пример запуска игры из Steam или Origin и прочих сервисов.

В этом случае нужно придерживаться определенного порядка действий в любом инструментарии:

  1. Отключаем всевозможные оверлеи In-Game фичи в Steam, Origin, Uplay и тд.
  2. Перед запуском эти приложения должны быть выключены.
  3. Запускать необходимо не файл игры, а обертку (Steam, Origin, Uplay и тд.)
  4. После этого можно запускать игру прямо из запущеной «обертки»
  5. Зачастую необходимы дополнительные параметры запуска. Например для Watch Dogs 2 параметр -eac_launcher, что бы отключить античит. Тут нужно читать ридми, конфиги на предмет подсказки. Плюс дополнительные параметры помогают ускорить процесс запуска приложения. Пример для Steam: -applaunch 99999 (id приложения)
  6. Всегда проверяйте версию API в приложении. Возможно в настройках включен DX12, а он у вас не поддерживается и тд. Делайте преднастройки, закрывайте игру, а уже потом запускаем отладку.
  7. Некоторые приложения не стабильны на мультиграфических системах (например: встроенное видео + дискретная карта). Отключайте лишнее в диспетчере устройств. Плюс в таком случае лучше дебажить снимок кадра, а не запущеную игру. Т.к. замучаетесь перезапускать при обвалах.

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

Все спрятано под спойлер

Battlefield 1

GTA V

Rise of Tomb Rider

Witcher 3

Watch Dogs 2

А на этом все. Надеюсь этот материал впечатлит, подскажет, поможет или еще каким-либо положительным образом скажется на читающем его. Правки, советы, благодарности и пинки присылайте в ЛС или комментарии.


Источник

draw calls, geek porn, вызовы на отрисовку, игровые ресурсы, отладка программ, отрисовка игровых кадров, рендеринг

Читайте также