рендеринг какой лучше в игре
Красота рендеринга игровых кадров: Краткий обзор инструментов + Интересное видео
Пытливость ума и желание знать как все работает изнутри выделяет технаря из массы пользователей. В этом небольшом посте я бы хотел поделиться с любознательным сообществом небольшими роликами и кратким рецептом использования профилирующего софта для 3D приложений.
Посмотреть видео, а потом почитаем
Итак, если мы хотим оценить как происходит подготовка игрового кадра. Какая геометрия, текстуры, сколько вызовов на отрисовку, где возникает просадка в производительности? Можно воспользоваться специализированным софтом для отладки этих процессов.
Я перечислю основные из них:
RenderDoc — графический отладчик от Crytek.
(На скриншоте бюст Лары Крофт из последней части: Rise of the Tomb Rider)
Поддержка 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. Так что никаких заговоров и палок в колеса…
UPD В комментариях подсказали еще один инструмент с открытым исходным кодом.
apitrace
Мультиплатформенный и поддерживающий различные API. Я его еще не щупал, но по словам lieff полезный и простой инструмент.
Какой инструмент лучше из них я сказать не могу. У каждого есть некоторые свои мини фичи, таблицы, графики, в которых может содержаться очень нужная в конкретной задаче информация. С пользовательской стороны, человека любопытного, мне как-то больше «сложилось» с RenderDoc. Но иногда не все процессы получается в нем запустить.
И кстати о запуске процессов. Все очень легко и просто когда у вас есть приложение А и инструмент Б. Тогда инструмент Б запускает приложение А и все довольны. Но если в этой схеме есть посредники: лаунчеры, античит софт и прочие обертки, то тут приходится немного «потанцевать».
Рассмотрим пример запуска игры из Steam или Origin и прочих сервисов.
В этом случае нужно придерживаться определенного порядка действий в любом инструментарии:
На закуску обещаные видеоролики. Я записываю этакие таймлапс ролики процесса отрисовки кадра игры. Нахожу это весьма занимательным, познавательным и красивым. На видео отображаются не все все события, т.к. в таком случае было бы слишком дергано.
PUBG