В статье подробно описан процесс "рипа" моделей, текстур и шейдеров из игр использующих в качестве API directx версий 6, 7, 8, 9, 10, 11 (как 32 так и 64 битных версий) и импортирования "рипнутых" моделей/текстур в 3ds max, Noesis или Blender.
Примечание: Статья рассчитана на пользователей знакомых с работой в 3ds Max и не описывает такие моменты как, например, текстурирование объектов, настройка материалов и т.п.
Для конвертирования потребуются следующие инструменты:
- 3ds Max (я использую 2009 х86) должно работать на версиях: 2009-2015
- Ninja Ripper v1.5.0 (рипер) Автор: blackninja [страница]
- ninja_importer v2.1 (3ds max import script) Author: 3Doomer [page]
- [не обязательно] ninja_importer v1.3 (скрипт для импорта в 3ds max) Автор: blackninja [скачать]
- [не обязательно] Noesis v4.172 (3d model viewer/converter) Author: Rich W. [page]
- [не обязательно] Blender v2.49b (3d modeling software) Author: Blender Foundation [page]
1. Настройка рипера. Распаковываем содержимое архива в любую папку. Запускаем программу.
Извлекается ВСЯ доступная информация о вершинах модели (позиция, все текстурные координаты, нормали, веса, BLENDWEIGHT, BLENDINDICES, BINORMAL, TANGENT), индексы, текстуры, шейдеры. Теоретически, можно импортировать и эту доп. информацию в 3д редактор!
Поддержка Direct3D[11/10/9/8/7/6] (обрабатываются не все методы/техники, но должно работать в 95% игр).
- Target (DX11, DX9, DX8, DX7, DX6, DDRAW 32/64 bit application) (выбор приложения/игры для рипа):
- Exe - поле для ввода прямого пути для исполняемого файла приложения/игры;
- Arg - поле для ввода дополнительных параметров запуска для исполняемого файла;
- Dir - поле для ввода прямого пути к папке содержащего исполняемый файл (подставляется автоматически после выбора .exe, не нужно изменять);
- Intruder Inject - режим, при котором рипер будет пытаться запустить exe приложения/игры напрямую, используя для рипинга только intruder.dll, если этот режим не сработает (ничего не рипается) то нужно выбрать один из режимов "Врапера";
- Режимы "Врапера", при которых рипер скопирует d3dX.dll рипера в папку содержащую исполняемый файл приложения/игры, после этого окно рипера можно уже закрыть (не для рипа из firefox — его нужно постоянно запускать через рипер), далее можно запускать игру из любого места, скопированная рипером d3dX.dll будет автоматически "цеплятся" в игру при запуске любым способом, позволяя рипать модели. Таким образом более не нужно запускать сам рипер для этой игры. Доступны следующие режимы "Врапера":
- D3D8 Wrapper - для игр на directx8;
- D3D9 Wrapper - для игр на directx9;
- D3D11 Wrapper - для игр на directx11;
- DDRAW Wrapper - для игр на directx 6/7;
Примечание: удалять .dll из папки с игрой надо вручную (если потребуется рипать через Intruder Inject, например), настройки рипера хранятся в реестре!
- RUN - кнопка для запуска приложения/игры;
- Output Directory (директория для сохранения рипнутых моделей):
- Dir - поле для ввода исходящей папки (автоматически подставляется), эту папку можно выбрать вручную, не забудьте поставить галку в Don't change the path;
- Browse - кнопка для открытия папки выбранного исполняемого файла;
- Don't change the path - при активировании этой функции выбор исполняемого файла не будет переписывать исходящую папку;
- Settings (настройки):
- Rip Hotkeys - в этом разделе можно поменять кнопки для рипа разных ресурсов:
- All - рипает все модели и текстуры;
- Textures - рипает только текстуры;
- Forced - рипает модели и тексстуры пока не истечёт таймер (по умолчанию 3 секунды);
- Save Shaders (for experts) - отметьте для рипа шейдоров (в некоторых случаях игра может запускаться очень долго или не запускаться вообще);
- Forсed Rip Interval [X] second - таймер для функции Forced;
- Save DirectDraw Surfaces - рипать текстуры или спрайты из игр 95-99 лет;
- About/Donate - если вам нравится эта программа и вы бы хотели дальнейшего развития пожалуйста поддержите разработчиков!
- Exit - закрывает рипер.
Выбираем игру которую хотим "рипать". В окне рипера жмём кнопку '...' для выбора .exe игры.

Примечание: Добавить желаемую игру в окно рипера можно так же простым перетаскиванием .exe игры из окна "эксплорера" в окно рипера.
Выбираем режим, в котором будет производится "рип" игры. Режим зависит от того, на каком directx работает игра. Описание режимов:
- No Wrapper - режим, при котором рипер будет пытаться запустить exe приложения/игры напрямую, используя для "рипинга" только intruder.dll, если этот режим не сработает (ничего не рипается) то нужно выбрать один из режимов "Врапера"!
- Intruder Inject - режим, при котором рипер будет пытаться запустить exe приложения/игры напрямую, используя для рипинга только intruder.dll, если этот режим не сработает (ничего не рипается) то нужно выбрать один из режимов "Врапера";
- Режимы "Врапера", при которых рипер скопирует d3dX.dll рипера в папку содержащую исполняемый файл приложения/игры, после этого окно рипера можно уже закрыть (не для рипа из firefox — его нужно постоянно запускать через рипер), далее можно запускать игру из любого места, скопированная рипером d3dX.dll будет автоматически "цеплятся" в игру при запуске любым способом, позволяя рипать модели. Таким образом более не нужно запускать сам рипер для этой игры. Доступны следующие режимы "Врапера":
- D3D8 Wrapper - для игр на directx8;
- D3D9 Wrapper - для игр на directx9;
- D3D11 Wrapper - для игр на directx11;
- DDRAW Wrapper - для игр на directx 6/7;
Примечание: Удалять .dll-ки из папки с игрой надо вручную (если потребуется рипать через Intruder Inject, например), настройки рипера хранятся в реестре.
Запускаем игру нажатием на кнопку Run:
2. Процесс "рипа" игры.
После того как игра запущена папка _NinjaRipper будет создана рядом с запущенным .exe. В игре выбираем место, которое хотим рипнуть и нажимаем на кнопку "рипа", по умолчанию это клавиша F10. После нажатия F10 игра "подвиснет" на секунду, далее игра чуть "дёрнется" и снова зависнет на какое-то время (около 5-25 секунд). Продолжительность "рипа" зависит от "качества" игры и мощности компьютера. Во время процесса рипа игры в папке с игрой где расположен её .exe все модели в формате .rip и текстуры в формате .dds сохраняются в папку _NinjaRipper.

Нажатием на кнопку рипа текстур (по умолчанию F9) "рипаются" только текстуры и сохраняются так же в папку _NinjaRipper, в директории игры туда где расположен .exe. О завершении процесса рипа можно узнать по "отвиснувшей" игре.
Стоит так же учитывать, что в некоторых играх процесс рипа "вешает" всю игру, т.е. после завершения рипа и "отвисания" игры можно продолжить с того же места, с которого игра "зависла". Однако есть и такие игры, которые продолжают выполняться даже во время рипа и после окончания процесса "вы можете въехать в бок какому-нибудь внедорожнику, а соперники будут далеко впереди".
Браузер, на котором тестировался процесс рипа - Firefox. На всех остальных браузерах работа не гарантируется. Crome не поддерживает в виду сложности архитектуры. Характеристики ПК, на котором тестировалось: windows 7 x64, geforce GTX 660.
1. запустить
Ninja Ripper;
2. установить кнопку Forced в Settings (настройках) как F4 (или любую другую кнопку, которую не использует браузер);
- установить Forced Rip Interval (sec) на 5-10 секунд (по умолчанию 3 сек.);
3. запустить firefox.exe с помощью
ninja ripper (в режиме D3D9 Wrapper);
4. откройте сайт, который будете рипать в firefox:
пример:
https://sketchfab.com/models/68f2c2374a9f432b9672eb2e44d2cebd5. подождите пока страница полностью загрузится;
6. кликните на окошко с 3д сценой и затем на кнопку Forced (F4) чтобы начать процесс рипа:
- модели с текстурами будут сохранены (так как рип происходит по времени 3д сцена может рипнуться несколько раз, из-за этого модели в папке могут дублироваться и иметь разное имя, но одно и тоже содержание):
7. загружать модели в 3ds max с uv парой: 3-4 (в старом импортере, новый загружает все возможные uv в разные uv-каналы):
- [ДАЛЬНЕЙШИЕ СВОЙСТВА МОГУТ ОТЛИЧАТЬСЯ ОТ САЙТА К САЙТУ, ОТ МОДЕЛИ К МОДЕЛИ]
8 .каждый объект состоит из 2-ух мешей [sketchfab]: главный (содержит большее число полигонов и они всегда вывернуты) и второй (случайные треугольники):
- полигоны на главном меше нужно инвертировать;
- иногда UV нужно развернуть/отразить;
- почти всегда каждый меш располагается в цене случайным образом после импорта в 3ds max;
9. чтобы рипать другую модель нужно сначала очистить папку Frame0000, потому, что рипер не создаёт папку Frame0001 и будет опять рипать в Frame0000 тем самым перепутываясь с предыдущим рипом.
10. финальная модель:
11. список сайтов с 3д моделями:
- http://p3d.in (масштаб: 1, uv: 6-7)
- https://sketchfab.com/ (масштаб: ?, uv: 3-4)
Ниже настройки для рипа из
Dolphin (эмулятор игр Gamecube/Wii). Характеристики ПК, на котором тестировалось: windows 7 x64, geforce GTX 660:
1. настройки Dolphin (ver. 4.0, sep 23):
- video: Direct3D9 (работает так же с Direct3D11, но рипнутые меши могут импортироваться неправильно);
- все другие настройки не важны;
2. запустить
Ninja Ripper в режиме D3D9 Wrapper;
3. запустить игру в Dolphin и нажать кнопку рипа (F10 по умолчанию);
4. чтобы импрортировать в 3ds max настройте импортер:
- Scale: 0.5 (на всякий случай используйте небольшой масштаб);
- RotateX: 0;
- иногда все рипнутые меши не могут быть импортированы группой.
Рии моделей из pcsx2 (эмулятор ps2) всегда получается очень сплющенным и без видимых при рипе полигонов. UV координаты не рипаются правильно. Придётся проделать огромную работу чтобы восстановить модели после рипа. Поэтому я советую использовать встроенную в pcxs2 возможность рипа сцены:
- запустить pcsx версии 0.9.8. Это последняя доступная версия, которая имеет функцию рипа сцены;
- установить видео плагин (video plugin) (GS) как GSdx;
- использовать Direct3D9 (Software) как рендерер pcsx2;
- запустить игры, найти место, которое вы хотите рипнуть и нажать Shist+F8. Это сохранит скриншот и 3д сцену как .obj файл в директории pcsx2 в папке "snaps".
Рип из
JPCSP (psp эмулятор) невозможен потому что он работает на Java. Однако вы можете рипнуть сцену с помощью встроенной в JPCSP функции.:
- запустить JPCSP;
- запустить игру и выбрать место, которое хотите рипнуть;
- далее в File -> Export 3D Scene (Wavefront .obj/.mtl) выбрать либо Only Visible elements либо All elements will be ripped.
3.
Импортирование модели в 3ds max.
Для того чтобы импортировать модель выберете модель и нажмите кнопку Import. Все доступные UV координаты будут распределены по uv-каналам. Для установки скрипты скопируйте содержимое архива ninja_ripper_EvoGIMS_manualinstall.7z в папку где установлен 3ds Max. Чтобы запустить импортер откройте панель Utilities, внизу будет чёрная панелька управления скриптом. Нажмите сначала установить (стрелка вниз), а затем запустить (стрелка вправо).

Детальное описание функций импортера:
Scene
• Bones - выбрать создавать или нет кости вместе с модификатором Skin и просчитывать ли веса на импортированную модель:
- Don't create - кости и веса не будут импортированы;
- Create at zero - кости будут созданы в центре объекта, так же Skin модификатор и веса будут добавлены на импортируемую модель;
- Create at calculated position - кости будут созданы в области своего влияния на объект, так же Skin модификатор и веса будут добавлены на импортируемую модель;
- Reuse scene bones - уже имеющиеся в сцене кости будут использовать при импортировании объектов;
- Split the mesh by skinning when possible - импортируемый объект может быть разрезан в зависимости от установленных в rip-файле весов;
• Flip Faces - инвертировать полигоны;
• Scale - масштаб объекта;
• Position - поменять XYZ позицию объекта в сцене;
• Rotation - поменять XYZ поворот объекта в сцене;
• Miror - отразить объект по XYZ;
UV coordinate
• Flip U - инвертировать UV координаты по U;
• Flip V - инвертировать UV координаты по V;
• Offset U/V - установить сдвиг UV координат по U или V;
• Scale U/V - установить масштаб UV координат по U или V;
Texture Indices. Взгляните на индексы текстур, которые относятся (по ID) к импортируемым объектам. Например Tex_0001_0.dds имеет цифру 0 перед ".dds", что обычно определяет эту текстуру как диффузную (цветную/основную).
• Diffuse - какая текстура будет использовать в качестве диффузной карты по индексу;
• Bump - dкакая текстура будет использовать в качестве карты объёма по индексу;
• Specular - какая текстура будет использовать в качестве карты отражений по индексу;
Import. Этот раздел для настроек непосредственно импорта моделей..
• Mode - импортировать группу или один меш;
• Engine - выбрать настройки для импорта из особого движка. Для большинства случаев лучше всего работает Other engine. Однако вы можете выбрать из следующих движков: Frostbite 2, Frostbite 3, Frostbite 3.5, YETI engine. На каком движке сделана игра часто можно узнать с её страницы на оф. сайте или на Википедии;
• Path - путь к rip файлам. Нажмите папку чтобы выбрать;
• File IDs - номер/номера меша для импорта. Формат может быть таким: "0-15, 589, 67" или просто "1" (без кавычек);
• Import - нажмите чтобы начать импорт;
Открываем 3ds max. В меню MAXScript > Run Script... выбираем скрипт ninja_importer.ms, откроется окно:
Описание функций импортера:
- Source select (выбор источника и режима импорта):
- Group - режим для импорта группы файлов
- Single - режим для импорта файлов по-одному
- List File - режим для импорта файлов через файл-список .lst, который содержит список всех моделей одного рипа
- Input Dir/File - источник импорта, файл или папка (в зависимости от выбранного режима)
- RIP File Nums - поле для ввода номеров файлов для импорта (для режима Group), формат ввода: 0-15, 589, 67
- Vertex Format (выбор режима построения модели):
- Auto - режим для автоматического определения групп данных (вершины, нормали, uv-координаты), подходит для большинства игр
- Manual - режим для ручного определения групп данных, необходим для импорта моделей из новых игр (преимущественно directx11)
- Position (x,y,z) - поля для ввода группы данных определяющих положение вершин модели, даже в ручном режиме эти параметры в 99% игр остаются неизменными
- Normal (x,y,z) - поля для ввода группы данных определяющих направление нормалей каждой вершины модели (находятся в доработке)
- TexCoord (u,v) - поля для ввода группы данных определяющих текстурные координаты модели, один из важнейших параметров импорта. Для игр, импорт которых не позволяет получить правильные uv-координаты, пара uv всегда подбирается перебором. На данный момент выявлено, что пары не могут превышать цифру 50, т.е. могут быть 6-7 или 18-19 или 24-25 или 39-40. В очень редких случаях пары uv могут быть 3-4 или 4-5 или 5-6, что входит в пределы "поля определения нормалей", а так же 8-6 или 12-11, что идёт в разрез со здравым смыслом, но тем не менее может быть.
- Transformations (трансформации):
- Scale - масштаб импортируемой модели
- Rotate X - поворот по оси импортируемой модели
- Tex.0 File Level - выбор номера текстуры, которая будет присвоена модели после импорта
- Flip UV Vertical - инвертировать расположение uv по вертикали
- IMPORT - кнопка для начала процесса импорта
Для импорта модели жмём кнопку "Обзор":
Выбираем .rip файл, и жмём "Открыть". Модель загрузится в 3ds max. Если результат вас не устроил измените режим Vertex Layout импорта с Auto на Manual, откроются дополнительные настройки для импорта:
Приложу так же картинку для наглядного понимания что за цифры и за что они отвечают (цвета/зоны на картинке ниже соответствуют цветам на картинке выше):
На этой картинке показан шаблон данных .rip файла. Из шаблона следует: зелёная зона (модель), синяя зона (нормали), оранжевая зона (uv, текстурные координаты), подробнее:
- данные вершин (сама модель) строится по первым трём значениям (00=x, 01=y, 02=z), так же эти цифры соответствуют тому, что есть в импортере, т.о. 00=0=x, 01=1=y, 02=2=z. Значения эти в импортере можно изменить на какие угодно цифры, но в 99,99% игр эти значения остаются неизменными, и лучше их вообще не трогать
- данные нормалей (для групп сглаживания моделей, соответствует цифрам 03, 04, 05) - в текущей версии не закончено, изменение значений не даст результатов
- uv, текстурные координаты - представляются двумя цифрами (06, 07 или 07, 08 или 24, 25), а не тремя как в случае с вершинами или нормалями - в 80% игр остаются неизменными, но бывают игры (например: Battlefield: Bad Company 2 или NFS: Run) где необходимо изменять эти значения, а иногда значения даже заходят в зону "нормалей" (т.е. могут быть 03, 04), но никогда не заходят в зону "вершин". Значения эти нужно менять простым перебором/подставлением. На картинке ниже — пример.

Таким образом выбрав модель, настроив процесс импорта (uv, масштаб, поворот и т.д.) нажимаем кнопку IMPORT. Модель загружена в 3ds max.
Так же можно импортировать модели массово. Для этого нужно вместо Single в Source Select выбрать Group, а в RIP File Nums написать цифры соответствующие имени модели .rip в таком виде: 15,489,0, 50-85
После этого настроив процесс импорта жмём IMPORT, все файлы соответствующие написанным цифрам импортируются в 3ds max.
Примечание: Следите за тем чтобы файлов не было очень много, или перенесите текстуры в отдельную папку: бывает такое, что огромное количество текстур, которые ложатся на импортированные объекты перегружают 3ds max и он "падает/закрывается" с ошибкой.
Модели (иногда и текстуры) могут быть так же загружены в Blender или Noesis.
- для импорта моделей в Blender используйте этот python-скрипт (написанный Akaito);
- скрипт для импортирования в Noesis находится в архиве с NinjaRipper;
4. О текстурах.
Текстурами всегда являются .dds файлы. Они автоматически загружаются в 3ds max. Стоит учесть, что каждой модели соответствует несколько текстур: например есть модель Mesh_0000.rip, ей могу соответствовать несколько текстур с именами Tex_0000_1.dds, Tex_0000_2.dds, Tex_0000_3.dds и т.д. В 3ds max можно загрузить только одну из эти текстур. Какая текстура будет загружена выбирается в имортере функцией Texture Indices изменением цифры.
Примечание: Если вы используете программы генераторы "превью" для .dds файлов в Windows (я использую Mystic Thumbs) то при рипе игр на dx11 такие .dds не будут показывать мини-превью, всё потому-что они имеют неправильный заголовок файла, данная проблема пока не решена.