Пытливость ума и желание знать как все работает изнутри выделяет техноря из массы пользователей. В этом небольшом посте я бы хотел поделиться с любознательным сообществом небольшими роликами и кратким рецептом использования профилирующего софта для 3D приложений.
Сразу прошу прощения, если я запостил эту статью не в тот хаб. Скорее всего я так и сделал.
Но по-моему такой материал не достаточно мощный, что бы попасть в раздел «Разработка» или «Отладка»
Итак, если мы хотим оценить как происходит подготовка игрового кадра. Какая геометрия, текстуры, сколько вызовов на отрисовку, где возникает просадка в производительности? Можно воспользоваться специализированным софтом для отладки этих процессов.
Я перечислю основные из них:
- RenderDoc
- Nvidia Nsight
- 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 и прочих сервисов.
В этом случае нужно придерживаться определенного порядка действий в любом инструментарии:
- Отключаем всевозможные оверлеи In-Game фичи в Steam, Origin, Uplay и тд.
- Перед запуском эти приложения должны быть выключены.
- Запускать необходимо не файл игры, а обертку (Steam, Origin, Uplay и тд.)
- После этого можно запускать игру прямо из запущеной «обертки»
- Зачастую необходимы дополнительные параметры запуска. Например для Watch Dogs 2 параметр -eac_launcher, что бы отключить античит. Тут нужно читать ридми, конфиги на предмет подсказки. Плюс дополнительные параметры помогают ускорить процесс запуска приложения. Пример для Steam: -applaunch 99999 (id приложения)
- Всегда проверяйте версию API в приложении. Возможно в настройках включен DX12, а он у вас не поддерживается и тд. Делайте преднастройки, закрывайте игру, а уже потом запускаем отладку.
- Некоторые приложения не стабильны на мультиграфических системах (например: встроенное видео + дискретная карта). Отключайте лишнее в диспетчере устройств. Плюс в таком случае лучше дебажить снимок кадра, а не запущеную игру. Т.к. замучаетесь перезапускать при обвалах.
На закуску обещаные видеоролики. Я записываю этакие таймлапс ролики процесса отрисовки кадра игры. Нахожу это весьма занимательным, познавательным и красивым. На видео отображаются не все все события, т.к. в таком случае было бы слишком дергано.
GTA V
Rise of Tomb Rider
Witcher 3
Watch Dogs 2
А на этом все. Надеюсь этот материал впечатлит, подскажет, поможет или еще каким-либо положительным образом скажется на читающем его. Правки, советы, благодарности и пинки присылайте в ЛС или комментарии.
Автор: igentuman