Как извлекать контент из игр с помощью RenderDoc

Как извлекать контент из игр с помощью RenderDoc

Leon Balbery

Известно, что для оптимизации графики используют так называемые профайлеры. Эти инструменты дают разработчику информацию о рендеринге каждого кадра, об операциях графических API, о ресурсах, которые задействованы в процессах, и о том, как в совокупности все эти действия влияют на работу приложения.

Одним из самых популярных инструментов в этом сегменте считается RenderDoc. В рамках материала мы не будем углубляться в основы оптимизации, а продемонстрируем, как с помощью этой программы исследовать игры и извлекать из них контент в виде 3D-моделей и текстур.

Важно. Данная статья не пропагандирует пиратство и нацелена исключительно на помощь начинающим пользователям в моддинге, создании основы для фан-артов и более углублённом исследовании внутриигрового контента.  

Скачиваем программу по ссылке и устанавливаем в нужную нам директорию. Запускаем инструмент от имени администратора и заходим в настройки Tools — Settings. Указываем расположение папок, в которые будут сохранены данные захвата сцен. 

Объём данных будет достаточно большим: файл захвата, разобранный в этом материале, занял более 800 Мб. Учитывайте это при выборе папки.

Далее нам нужно определиться с игрой, «внутренности» которой нам предстоит проанализировать. Это может быть приложение в Steam или просто билд, который запускается напрямую с жёсткого диска. Главное, чтобы игра поддерживала один из графических API: Vulkan, D3D11, OpenGL, OpenGL ES или D3D12.

Примечание. Обращаем ваше внимание, что RenderDoc может не работать с некоторыми играми. Иногда это связано с внутренними процессами, например приложениями EGS и Steam, или со спецификой графических API (например, программа не очень охотно работает с приложениями D3D12). На тематических форумах можно часто встретить сообщения о том, как запустить через RenderDoc ту или иную игру. Чем современней игра, тем больше сложностей может возникнуть при подключении. Каких-то универсальных решений здесь нет. Единственный вариант, который можно порекомендовать, — найти человека, который исследовал нужную вам игру с помощью RenderDoc или имеет большой опыт в работе с этой программой, и проконсультироваться с ним.

В качестве тестирования и демонстраций функций программы мы взяли Steam-версию Daymare: 1998. 

В основном окне RenderDoc находим вкладку Launch Application и вводим информацию для запуска игры через клиент.

Executable Path — через проводник находим и выбираем .EXE-файл интересующей нас игры. 

Working Directory — заполняется автоматически после выбора .EXE-файла.

Command-line Arguments — ситуативная опция. Чтобы проверить, стоит ли заполнять это поле, нужно запустить игру и проверить параметры запуска файла. Для этого подойдёт программа Process Explorer. Находим клиент игры в процессах, нажимаем ПКМ и заходим в Properties.

Окно свойств клиента игры в Process Explorer

Если в командной строке есть дополнительные данные (за пределами кавычек), как на скриншоте выше, их можно внести в Command-Line Arguments. Спойлер: конкретно эта игра запустится и без них, но в случаях с другими приложениями данные Command-Line Arguments могут помочь избежать вылетов при запуске.

Environment Variables — тоже ситуативная опция, в которую можно вписать переменные. Например, для отладки API Vulkan используется следующая переменная:  ENABLE_VULKAN_RENDERDOC_CAPTURE=1. Конкретно в данном случае ничего заполнять не нужно.

В Capture Options отмечаем Allow Fullscreen, Allow VSync, Capture Child Processes (важно для игр, которые запускаются в Steam/EGS) и нажимаем Launch.

Заполнение Launch Application для Daymare: 1998

Начнётся запуск игры. Если RenderDoc её распознала, в левом верхнем углу появится технический UI, который отобразит название API, нумерацию фактических кадров, счётчик частоты кадров в секунду, а также количество сделанных захватов.

Далее в самой игре заходим в локацию, которую нужно исследовать программой, и нажимаем клавишу F12 или PrintScreen. RenderDoc захватит всё содержимое сцены в поле зрения игрока. Как только технический UI сообщит о том, что захват произведён, сам клиент игры можно закрыть. Возвращаемся в RenderDoc, открываем меню File — Open Capture и загружаем .RDC-файл , который находится в папке, настроенной нами ранее (Directory for temprorary capture files). 

Загруженный файл захвата сцены в RenderDoc

В загруженном захвате можно провести анализ отрисовки картинки, прокрутив таймлайн в самом верху, просмотреть содержимое сцены (список слева) и задействованные процессы во время рендеринга. Разберём активные вкладки по очереди.

В Texture Viewer можно отследить отрисовку сцены, а также рассмотреть сопутствующие текстуры окружения и сохранить их в любом удобном формате.

Описание процесса сохранения текстуры для фото в рамке (на столе в сцене)

В разделе Pipeline State можно отследить все стадии рендеринга различных объектов. 

Далее идёт один из самых интересных для нас разделов — Mesh Viewer, в котором можно рассмотреть всю геометрию, задействованную в сцене. 

RenderDoc захватывает исключительно статические меши без скелетных ригов. Сложные модели представлены по частям, например модель героя состоит из мешей головы и шеи, глазных яблок, причёски и бороды, рубашки и так далее. 

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

К счастью, есть более доступное решение в виде расширения renderdoc2fbx. Скачиваем архив с Github, запускаем файл install.bat, после чего заходим в Tools — Manage Extensions и отмечаем новое расширение.

Далее, находясь в Mesh Viewer, нажимаем на значок расширения (мозаика жёлтого цвета) и сохраняем выбранную модель в FBX. В опциях можно сразу выбрать установки для движка Unity или Unreal и остальные характеристики.

После этого файл можно открыть в стандартном софте для просмотра 3D-объектов в Windows. Если вы планируете импортировать извлечённую модель в программу для 3D-моделирования, например в Blender, скорее всего, программа выдаст ошибку "ASCII FBX files are not supported". Это легко исправить, скачав утилиту Autodesk Fbx Converter, — сконвертировать исходный файл и работать в программах уже с новой версией модели. Обращаем ваше внимание, что модели из сцены экспортируются в том положении, в котором они находились во время захвата, поэтому после экспорта потребуется изменить их центральную точку опоры и расположение.

Импортированный меш револьвера из Daymare: 1998 в Blender с перенесённойк 3D-курсору геометрией
Важно. Так как RenderDoc — это в первую очередь программа для отладки приложений, а не для извлечения контента, геометрия экспортируется без сопутствующих текстур. Их можно извлечь либо отдельно (если их захватит программа), либо создать самим.

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

В настоящий момент RenderDoc считается хоть и бесплатным, но довольно устаревшим методом извлечения данных, уступившим дорогу многофункциональному Ninja Ripper, который мы рассмотрим в одном из наших следующих материалов.

Report Page