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


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


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

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

  1. RenderDoc
  2. Nvidia Nsight
  3. GPUperfStudio

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

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

Это opensource проект. Регулярно подкрепляется свежими коммитами.

Ссылка на репозиторий и документацию[2]

Интерфейс достаточно гибкий и интуитивно прост. Пытливой душе не составит труда за 5 минут разобраться как запустить какую-нибудь игру или приложение и пройтись по всему процессу отрисовки. Сторонних приложений для старта не нужно.

Указываем путь к exe, дополнительные параметры и запускаем. Далее в приложении в нужный момент нажимаем F12 или PrintScrn, RenderDoc сохраняет кадр, который можно сохранить, и возвращаться к нему даже без запускания игры или поделиться им с напарником.

Еще, например, можно экспортировать геометрию и текстуры.

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

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

Бесплатно регистрируемся[3] в 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)

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

Ссылка на скачивание и докумнетацию[4]

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

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

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

UPD В комментариях подсказали еще один инструмент с открытым исходным кодом.
apitrace
Мультиплатформенный и поддерживающий различные API. Я его еще не щупал, но по словам lieff полезный и простой отладчик.
[5][6]

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

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

Использованны источники

  1. ^ RenderDoc (habrahabr.ru)
  2. ^ Ссылка на репозиторий и документацию (github.com)
  3. ^ Бесплатно регистрируемся (developer.nvidia.com)
  4. ^ Ссылка на скачивание и докумнетацию (developer.amd.com)
  5. ^ apitrace (apitrace.github.io)
  6. ^ lieff (geektimes.ru)
По теме: ( из рубрики )

    Оставить отзыв

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    *
    *

    три × четыре =

    Top