![Развернуть](http://movie-club.ru/images/icon_plus_1.gif)
Scene capturing:
For a start, launch game without ripper, get updates if any, setup gfx.
Options marked with green frame is better to maximise, orange marked can be lowered, but there's a possibility to disable something useful, like PBR-textures.
![Изображение](http://i.imgur.com/YGjaCKDm.png)
(i hope these options located in the same places for english version, in overall we maximize detail and textures and can disable effects and shadows)
After setup, close game and open it's folder in Steam library:
![Изображение](http://i.imgur.com/vnOlYlf.png)
In explorer window we can copy a path to game folder:
![Изображение](http://i.imgur.com/iidCl7pm.png)
Launch ripper, open executable selection dialogue using [...], paste game path into filename input, press Open:
![Изображение](http://i.imgur.com/OUVH6gFm.png)
Folder changed to game folder, where you can select Neverwinter.exe.
Set up capture hotkeys, for me it's Ctrl+Alt+RMB and Ctrl+Alt+Shift+RMB for forced rip:
![Изображение](http://i.imgur.com/lDdrC2Wm.png)
(from version 2.0.3 forced capture works as trigger - one use starting ripping everything over and over, second use stops ripping)
Launch game from ripper window. In game launcher we don't see any ripper presence, but in game should be overlay in upper-left corner with hotkeys tip.
In game movind character to some nice location and press rip hotkey - game should pause for a while, for me it's take about 3 minutes to capture scene of this complexity (not using SSD):
![Изображение](http://i.imgur.com/skOJOiel.png)
It tooks about 800 megabytes on HDD for this capture and another 100Mb for log and shaders.
You can download this rip example from here: https://www5.zippyshare.com/v/gomO0nwL/file.html
Blender setup:
For first time, we need to set up Blender - delete default cube, light and camera, set clipping to some beter range (depends on your hardware):
![Изображение](http://i.imgur.com/NpZdDK8l.png)
(you can hide this menu by dragging it's edge back)
В настройках сцены не повредит выставить единицы измерения:
Set units in scene properties if need:
![Изображение](http://i.imgur.com/MHgrbUam.png)
Lower window is better to switch to Shader Editor:
![Изображение](http://i.imgur.com/uuwDHgIm.png)
Because for animations there is a full layout here:
![Изображение](http://i.imgur.com/0jDFV0dm.png)
But you'll need to change material nodes very often when work with game rips.
Also is good to have UV Editor ready, so we split lower window to two by dragging a corner (marked greeen):
![Изображение](http://i.imgur.com/3pZtJhAm.png)
(If you want to get rid of that window - just drag this corner backward.)
I'm using "Industry compatible" hotkey set, instead of Blender's native, probably it's better to switch to this too, if you just begun to use Blender (but youtube guru's uses native and this can be confusing):
![Изображение](http://i.imgur.com/ZLwQtPOm.png)
But i get used for Ctrl+A to selects all and Ctrl+I to invert selection...
After setup everything, save it as default starting scene:
![Изображение](http://i.imgur.com/M0fOwK8m.png)
It's better to leave viewport shading as orange marked, because loading with textures enabled can fail with weak hardware.
Import into Blender:
How to setup import script you can see in this video: https://youtu.be/MMkLdWBn5Ew?t=57
Fro better usability you can change default screen size settings to ones matching your display, to achieve this you have to edit import scripts gui0.py and gui1.py (first for Blender 2.7x, second for 2.80+), after installing they located in folder: c:\Users\[user_name]\AppData\Roaming\Blender Foundation\Blender\2.92\scripts\addons\io_import_nr\
(user name and/or Blender version will be different for you)
Scripts nearly identical, in both cases you'll need to edit strings 46 and 47:
![Изображение](http://i.imgur.com/ZEMhTb4l.png)
After you edit and save changes you have to restart Blender to take effect.
Open .nr import dialogue, set FOV=55 (you can see it value used in game in my first screenshot with gfx settings), you can use filter button in upper-right corner (marked green) to keep only .nr files visible, move mouse cursor to filelist window and press Ctrl+A to select all (if nothing selected importer also loads a whole folder), then press Import:
![Изображение](http://i.imgur.com/KVI0PhRl.png)
У меня процесс импорта занял около минуты, после чего на экране появляется полигональная каша, отдаляем её колесиком мыши, потом выделяем примерно как на скрине (главное не область в центре) и удаляем выделенное:
![Изображение](http://i.imgur.com/7b3h8Swl.png)
Аналогично можно удалить часть справа от центра.
Оставшуюся часть уже можно нормально вращать, видно, что она состоит из нескольких пересекающихся копий местности, с разной степенью искажения:
![Изображение](http://i.imgur.com/d2SXYIhl.png)
Удалять такое рамками можно, если нужна только модель персонажа, но лучше почистить другими методами.
Импортер группирует меши в коллекции, соответствующие первой цифре в имени меша, которая меняется для разных типов мешей по мнению игрового рендерера (в имени меша "mesh_14_2227.nr" первая цифра (14) это render target (группы по ней создаются), вторая (2227) draw call), нам это даёт возможность выделять группами:
![Изображение](http://i.imgur.com/M2JzRm9m.png)
(ПКМ на группе и "выбрать объекты" в появившемся меню)
После выделения группы 2, перводим курсор мыши на 3D-окно и жмём "f" - это центрирует обзор на выделенных объектах, крутим сцену, видим что это какая-то плоская фигня:
![Изображение](http://i.imgur.com/fpE2wq2m.png)
Удаляем.
В группе 2 у нас большая часть искаженной копии местности:
![Изображение](http://i.imgur.com/a6CPW9Nm.png)
Торжественно удаляем![Профи :glasses:.ex](./images/smilies/04.png)
Группа 6 явно содержит полезные меши, ее просто сворачиваем и выделяем следующую.
Группа 7 на вид относится к персонажам - оставляем.
В группе 8 всего один меш, который без нажатия "f" и не найти - удаляем.
Группа 14 подозрительно похожа на группу 6, содержит копии тех же мешей, какие из них лучше так просто не определить, пока оставляем обе.
Группы 15, 19 и 20 в мусорку.
А вот группа 21 издалека похожа на мусор:
![Изображение](http://i.imgur.com/kqz3CWkm.png)
Но при ближайшем рассмотрении явно содержит полезные элементы, судя по всему меши с прозрачностью:
![Изображение](http://i.imgur.com/NzGtRNTm.png)
Такое лучше чистить вручную, удаляя явно ненужные меши, типа дыма и пыли.
Группа 22 содержит значки над головами персонажей, удаляем.
Как и мусорные 23, 24, 28, 31, 40, 41.
Итого, из полезных групп у нас остались 6, 7, 14, 21.
При желании можно удалить меши других групп из папки рипа, они явно нигде не пригодятся.
(это освободит около 80 мегабайт в данном случае, т.к. основной объём рипа это текстуры, зато не будут мешаться при импорте всех)
В принципе, сцена уже чистая и похожа на игровую, правда в зеркальном виде:
![Изображение](http://i.imgur.com/zMzOCvbl.png)
Это можно легко исправить, выделив всё (Ctrl+A) и отзеркалив по оси X:
![Изображение](http://i.imgur.com/JbapMBtl.png)
Заметных искажений сцена не имеет, FOV 55 совпал хорошо, но матрицы дают более точный результат, поэтому всегда имеет смысл проверить их наличие в логе риппера и попытаться импортировать с их использованием.
Лог находится в основной папке рипа, которая содержит подпапки рипов за сеанс (frame_0, frame_1 и т.д.).
Для его прочтения риппер нужно закрыть.
Копия моего лога тут: https://www5.zippyshare.com/v/u1r7ZhhH/file.html
Для поиска матрицы нужно узнать имя одного из нужных мешей, например часть щита моего персонажа это mesh_6_1733.nr:
![Изображение](http://i.imgur.com/Znkc0Fg.png)
Открываем лог в текстовом редакторе и ищем по имени меша (Ctrl+F):
![Изображение](http://i.imgur.com/soyoMGOl.png)
(если у вас несколько рипов за сессию, то надежней искать с именем подпапки рипа - "frame_0\mesh_6_1733.nr")
Видим сообщение что меш записан и следующее, что на этом с ним закончено, поэтому нам нужно прокрутить вверх, до финиша предыдущего меша (у него второй номер всегда будет на 1 меньше, даже если номер группы другой), т.к. матрицы обычно находятся в начале процедуры рипа меша:
![Изображение](http://i.imgur.com/cahp3CLl.png)
Вверху мы видим сообщение о финише предыдущего меша, а внизу подходящие матрицы.
В этой игре они корректно подписаны, в других случаях бывают менее понятные имена, тогда приходится больше проверять, загружая сцену и смотря на наличие искажений.
Для импортера подходят матрицы типа float4x4, лучше с projection или proj в названии.
Копировать нужно только содержимое с квадратными скобками:
[[1.08055, 0, 0, 0], [0, 1.92098, 0, 0], [0, 0, -1.00002, -0.730018], [0, 0, -1, 0]]
То есть 4 набора по 4 числа, каждый набор в квадратных скобках и все они взяты в квадратные скобки.
При импорте с подставленной матрицей нас ждут искажения, в данном случае её необходимо транспонировать, установив галку:
![Изображение](http://i.imgur.com/pwWR6bY.png)
(это выясняется методом проб и ошибок)
После импорта с правильной матрицей, сцена без искажений и не требует зеркалирования:
![Изображение](http://i.imgur.com/snYXiJ0l.png)
Но перевернута чёрти-как:
![Изображение](http://i.imgur.com/KzWDoXyl.png)
Для исправления ситуации нам нужен горизонтальный квадрат в сцене, например пол какого-нибудь здания, в данном случае под ногами персонажа есть годный на вид постамент:
![Изображение](http://i.imgur.com/2O0gn2nm.png)
Выделяем его, переходим в режим редактирования, нажав 1 или выбрав из меню:
![Изображение](http://i.imgur.com/ZXu9Blem.png)
Прицельными щелчками выделяем 2 верхних полигона, предварительно включив режим выделения фейсов (обведён):
![Изображение](http://i.imgur.com/rZcPmcYm.png)
Переключаемся на обзор выделенного ровно сверху или снизу (в данном случае второе лучше выглядит):
![Изображение](http://i.imgur.com/kAwEZjPl.png)
Теперь переносим 3D-курсор Блендера в центр выделенной плоскости, для этого вызываем "Pie Menu" по Shift+X и выбираем нижний пункт "Cursor to Selected":
![Изображение](http://i.imgur.com/DTGsY8Lm.png)
Выключаем Edit Mode нажатием 4 или через меню, сцену не вращаем, снимаем выделение с объектов, выбрав Scene Collection в списке объектов:
![Изображение](http://i.imgur.com/yrj4SBol.png)
Создаем новый объект "Plane" и в его свойствах, появившихся в нижнем левом углу, переключаем ориентацию на соответствующую текущему виду:
![Изображение](http://i.imgur.com/FmNbLgGl.png)
Это развернет его перпендикулярно камере, но он будет помнить свою правильную ориентацию в мире, чем мы и воспользуемся далее.
Не снимая выделения со свежесозданной плоскости жмём Ctrl+A, чтобы выделить все объекты, затем "P" > "Object" или через меню:
![Изображение](http://i.imgur.com/qT4EEUFl.png)
Блендер покряхтит пару сек и привяжет все объекты к этой плоскости, в списке объектов сцены должны остаться только группы и она, нужно там клацнуть на какую-нибудь группу и снова на Plane, чтобы снять общее выделение и выделить только её:
![Изображение](http://i.imgur.com/IEztQ36m.png)
Теперь сбрасываем вращение и позицию для этой плоскости, а остальная сцена повернется вместе с ней:
![Изображение](http://i.imgur.com/8RHtsDSm.png)
![Изображение](http://i.imgur.com/wXlGzmRl.png)
Осталось закрепить успех, снова выделив всё (Ctrl+A) и применив все трансформации, что перенесет центр координат объектов сцены из точки обзора игровой камеры в нынешний центр сцены, в центре плоскости:
![Изображение](http://i.imgur.com/1LIGKibl.png)
Теперь можно удалить плоскость, отвязав тем самым от нее объекты (ПКМ в списке и Delete или Unlink):
![Изображение](http://i.imgur.com/9D1HIgv.png)
На виде сверху (F3) теперь всё ровно и красиво:
![Изображение](http://i.imgur.com/6YdDkdRl.png)
Настал торжественный момент включения текстур:
![Изображение](http://i.imgur.com/AfNwYBZ.png)
И тут нас ждёт фиаско - их нет!![Непонимает :what:.ex](./images/smilies/17.png)
Вообще ни одной:
![Изображение](http://i.imgur.com/1tpYDCll.png)
Выделяем объект, смотрим что у него в шейдере, там явно есть текстуры:
![Изображение](http://i.imgur.com/zvMDmsxl.png)
Значит проблема в координатах, переходим в Edit Mode (1) и смотрим в редактор координат, а там пусто:
![Изображение](http://i.imgur.com/9zbfsmil.png)
В месте обведенным красным должен быть список UV, если есть хоть одна, но их нет, не импортировались.
В общем эту сцену в мусорку. Повторение - мать учения!![Святой :saint:.ex](./images/smilies/10.png)
В версии импортера 2.0.3 появились опции для импорта нужной UV, но для их использования нужно понимать, что происходит и как это работает.
Это потребует как умственных усилий, так и установки Python 3, чтобы использовать мой скрипт для дампа информации о мешах рипа в наглядном виде.
Python 3 скачиваем с официального сайта и устанавливаем с настройками по-умолчанию.
Скрипт прицеплен:
При запуске с использованием BAT-файла идущего в комплекте, он ищет .nr файлы в папке где запущен, читает информацию о каждом и сохраняет в текстовый файл !_dump_log.txt
То есть для использования оба файла .bat и .py нужно скопировать в папку рипа (frame_0) и запустить .bat
Вылезет черное окно, а через некоторое время сообщение "Для продолжения нажмите любую клавишу" - это означает что процесс завершен и после нажатия чего-нибудь окно исчезнет.
Для рипа из этой темы создание дампа занимает около двух минут.
При желании можно скопировать в папку к распакованному скрипту пару-тройку интересующих мешей, тогда процесс создания дампа будет моментальный.
Образец дампа загрузил сюда: https://www5.zippyshare.com/v/vNtkRhrq/file.html
Поиском по тому же имени от меша щита (mesh_6_1733.nr) находим его данные:
![Изображение](http://i.imgur.com/b8IqjmBl.png)
Имеются адекватно названные атрибуты вертекса: SV_POSITION, TEXCOORDS, POSITION_VIEW, INSTANCE_ID, TIME, COLOR
Из которых пригодились бы трое, то есть позиция, текстурные координаты и вертекс колор, но последний пока не поддерживается импортером.
Ниже видим какие текстуры и шейдеры используются, а так же некоторые строки с данными вертекса (сохраняю только кратные 100, чтобы размер дампа не улетел в космос).
На скрине я обвёл рамками одного цвета как атрибуты вертекса, так и соответствующие им группы данных.
Как видим, текстурные координаты имеют 4 числа, вместо стандартных двух, это и помешало импортеру правильно их прочитать.
Первые 2 числа вполне соответствуют стандартам для текстурных координат, находятся между числами 0 и 1, не имеют отрицательных значений. Будем пробовать с ними.
(вторая пара чисел скорее всего зарезервирована для координат текстуры в атласе текстур)
Применить полученную информацию для импорта мы можем двумя способами:
Дописать "S" к слову "TEXCOORD", которое предлагает импортер по-умолчанию в первом режиме:
![Изображение](http://i.imgur.com/A8OrUUo.png)
Индекс компонент менять не нужно, нам и нужен 0 и 1 из 0, 1, 2, 3.
Или указать индекс атрибута вертекса + индекс компоненты для каждой координаты:
![Изображение](http://i.imgur.com/Azmofw7l.png)
Второй способ более точный, т.к. во многих играх атрибутов с именем TEXCOORD целое стадо, вдобавок координаты могут быть разбиты между двумя атрибутами (одна в конце второго, другая в начале третьего например).
Этим методом импорта можно пользоваться и для исключения кучи найденных UV, чтобы оставить только одну нужную.
После импорта с новыми настройками сцена выглядит так:
![Изображение](http://i.imgur.com/41WTCnnl.png)
For a start, launch game without ripper, get updates if any, setup gfx.
Options marked with green frame is better to maximise, orange marked can be lowered, but there's a possibility to disable something useful, like PBR-textures.
![Изображение](http://i.imgur.com/NfGUNz0m.png)
![Изображение](http://i.imgur.com/TFL07iFm.png)
![Изображение](http://i.imgur.com/YGjaCKDm.png)
(i hope these options located in the same places for english version, in overall we maximize detail and textures and can disable effects and shadows)
After setup, close game and open it's folder in Steam library:
![Изображение](http://i.imgur.com/vnOlYlf.png)
In explorer window we can copy a path to game folder:
![Изображение](http://i.imgur.com/iidCl7pm.png)
Launch ripper, open executable selection dialogue using [...], paste game path into filename input, press Open:
![Изображение](http://i.imgur.com/OUVH6gFm.png)
Folder changed to game folder, where you can select Neverwinter.exe.
Set up capture hotkeys, for me it's Ctrl+Alt+RMB and Ctrl+Alt+Shift+RMB for forced rip:
![Изображение](http://i.imgur.com/lDdrC2Wm.png)
(from version 2.0.3 forced capture works as trigger - one use starting ripping everything over and over, second use stops ripping)
Launch game from ripper window. In game launcher we don't see any ripper presence, but in game should be overlay in upper-left corner with hotkeys tip.
In game movind character to some nice location and press rip hotkey - game should pause for a while, for me it's take about 3 minutes to capture scene of this complexity (not using SSD):
![Изображение](http://i.imgur.com/skOJOiel.png)
It tooks about 800 megabytes on HDD for this capture and another 100Mb for log and shaders.
You can download this rip example from here: https://www5.zippyshare.com/v/gomO0nwL/file.html
Blender setup:
For first time, we need to set up Blender - delete default cube, light and camera, set clipping to some beter range (depends on your hardware):
![Изображение](http://i.imgur.com/NpZdDK8l.png)
(you can hide this menu by dragging it's edge back)
В настройках сцены не повредит выставить единицы измерения:
Set units in scene properties if need:
![Изображение](http://i.imgur.com/MHgrbUam.png)
Lower window is better to switch to Shader Editor:
![Изображение](http://i.imgur.com/uuwDHgIm.png)
Because for animations there is a full layout here:
![Изображение](http://i.imgur.com/0jDFV0dm.png)
But you'll need to change material nodes very often when work with game rips.
Also is good to have UV Editor ready, so we split lower window to two by dragging a corner (marked greeen):
![Изображение](http://i.imgur.com/3pZtJhAm.png)
(If you want to get rid of that window - just drag this corner backward.)
I'm using "Industry compatible" hotkey set, instead of Blender's native, probably it's better to switch to this too, if you just begun to use Blender (but youtube guru's uses native and this can be confusing):
![Изображение](http://i.imgur.com/ZLwQtPOm.png)
But i get used for Ctrl+A to selects all and Ctrl+I to invert selection...
After setup everything, save it as default starting scene:
![Изображение](http://i.imgur.com/M0fOwK8m.png)
It's better to leave viewport shading as orange marked, because loading with textures enabled can fail with weak hardware.
Import into Blender:
How to setup import script you can see in this video: https://youtu.be/MMkLdWBn5Ew?t=57
Fro better usability you can change default screen size settings to ones matching your display, to achieve this you have to edit import scripts gui0.py and gui1.py (first for Blender 2.7x, second for 2.80+), after installing they located in folder: c:\Users\[user_name]\AppData\Roaming\Blender Foundation\Blender\2.92\scripts\addons\io_import_nr\
(user name and/or Blender version will be different for you)
Scripts nearly identical, in both cases you'll need to edit strings 46 and 47:
![Изображение](http://i.imgur.com/ZEMhTb4l.png)
After you edit and save changes you have to restart Blender to take effect.
Open .nr import dialogue, set FOV=55 (you can see it value used in game in my first screenshot with gfx settings), you can use filter button in upper-right corner (marked green) to keep only .nr files visible, move mouse cursor to filelist window and press Ctrl+A to select all (if nothing selected importer also loads a whole folder), then press Import:
![Изображение](http://i.imgur.com/KVI0PhRl.png)
У меня процесс импорта занял около минуты, после чего на экране появляется полигональная каша, отдаляем её колесиком мыши, потом выделяем примерно как на скрине (главное не область в центре) и удаляем выделенное:
![Изображение](http://i.imgur.com/7b3h8Swl.png)
Аналогично можно удалить часть справа от центра.
Оставшуюся часть уже можно нормально вращать, видно, что она состоит из нескольких пересекающихся копий местности, с разной степенью искажения:
![Изображение](http://i.imgur.com/d2SXYIhl.png)
Удалять такое рамками можно, если нужна только модель персонажа, но лучше почистить другими методами.
Импортер группирует меши в коллекции, соответствующие первой цифре в имени меша, которая меняется для разных типов мешей по мнению игрового рендерера (в имени меша "mesh_14_2227.nr" первая цифра (14) это render target (группы по ней создаются), вторая (2227) draw call), нам это даёт возможность выделять группами:
![Изображение](http://i.imgur.com/M2JzRm9m.png)
(ПКМ на группе и "выбрать объекты" в появившемся меню)
После выделения группы 2, перводим курсор мыши на 3D-окно и жмём "f" - это центрирует обзор на выделенных объектах, крутим сцену, видим что это какая-то плоская фигня:
![Изображение](http://i.imgur.com/fpE2wq2m.png)
Удаляем.
В группе 2 у нас большая часть искаженной копии местности:
![Изображение](http://i.imgur.com/a6CPW9Nm.png)
Торжественно удаляем
![Профи :glasses:.ex](./images/smilies/04.png)
Группа 6 явно содержит полезные меши, ее просто сворачиваем и выделяем следующую.
Группа 7 на вид относится к персонажам - оставляем.
В группе 8 всего один меш, который без нажатия "f" и не найти - удаляем.
Группа 14 подозрительно похожа на группу 6, содержит копии тех же мешей, какие из них лучше так просто не определить, пока оставляем обе.
Группы 15, 19 и 20 в мусорку.
А вот группа 21 издалека похожа на мусор:
![Изображение](http://i.imgur.com/kqz3CWkm.png)
Но при ближайшем рассмотрении явно содержит полезные элементы, судя по всему меши с прозрачностью:
![Изображение](http://i.imgur.com/NzGtRNTm.png)
Такое лучше чистить вручную, удаляя явно ненужные меши, типа дыма и пыли.
Группа 22 содержит значки над головами персонажей, удаляем.
Как и мусорные 23, 24, 28, 31, 40, 41.
Итого, из полезных групп у нас остались 6, 7, 14, 21.
При желании можно удалить меши других групп из папки рипа, они явно нигде не пригодятся.
(это освободит около 80 мегабайт в данном случае, т.к. основной объём рипа это текстуры, зато не будут мешаться при импорте всех)
В принципе, сцена уже чистая и похожа на игровую, правда в зеркальном виде:
![Изображение](http://i.imgur.com/zMzOCvbl.png)
Это можно легко исправить, выделив всё (Ctrl+A) и отзеркалив по оси X:
![Изображение](http://i.imgur.com/JbapMBtl.png)
Заметных искажений сцена не имеет, FOV 55 совпал хорошо, но матрицы дают более точный результат, поэтому всегда имеет смысл проверить их наличие в логе риппера и попытаться импортировать с их использованием.
Лог находится в основной папке рипа, которая содержит подпапки рипов за сеанс (frame_0, frame_1 и т.д.).
Для его прочтения риппер нужно закрыть.
Копия моего лога тут: https://www5.zippyshare.com/v/u1r7ZhhH/file.html
Для поиска матрицы нужно узнать имя одного из нужных мешей, например часть щита моего персонажа это mesh_6_1733.nr:
![Изображение](http://i.imgur.com/Znkc0Fg.png)
Открываем лог в текстовом редакторе и ищем по имени меша (Ctrl+F):
![Изображение](http://i.imgur.com/soyoMGOl.png)
(если у вас несколько рипов за сессию, то надежней искать с именем подпапки рипа - "frame_0\mesh_6_1733.nr")
Видим сообщение что меш записан и следующее, что на этом с ним закончено, поэтому нам нужно прокрутить вверх, до финиша предыдущего меша (у него второй номер всегда будет на 1 меньше, даже если номер группы другой), т.к. матрицы обычно находятся в начале процедуры рипа меша:
![Изображение](http://i.imgur.com/cahp3CLl.png)
Вверху мы видим сообщение о финише предыдущего меша, а внизу подходящие матрицы.
В этой игре они корректно подписаны, в других случаях бывают менее понятные имена, тогда приходится больше проверять, загружая сцену и смотря на наличие искажений.
Для импортера подходят матрицы типа float4x4, лучше с projection или proj в названии.
Копировать нужно только содержимое с квадратными скобками:
[[1.08055, 0, 0, 0], [0, 1.92098, 0, 0], [0, 0, -1.00002, -0.730018], [0, 0, -1, 0]]
То есть 4 набора по 4 числа, каждый набор в квадратных скобках и все они взяты в квадратные скобки.
При импорте с подставленной матрицей нас ждут искажения, в данном случае её необходимо транспонировать, установив галку:
![Изображение](http://i.imgur.com/pwWR6bY.png)
(это выясняется методом проб и ошибок)
После импорта с правильной матрицей, сцена без искажений и не требует зеркалирования:
![Изображение](http://i.imgur.com/snYXiJ0l.png)
Но перевернута чёрти-как:
![Изображение](http://i.imgur.com/KzWDoXyl.png)
Для исправления ситуации нам нужен горизонтальный квадрат в сцене, например пол какого-нибудь здания, в данном случае под ногами персонажа есть годный на вид постамент:
![Изображение](http://i.imgur.com/2O0gn2nm.png)
Выделяем его, переходим в режим редактирования, нажав 1 или выбрав из меню:
![Изображение](http://i.imgur.com/ZXu9Blem.png)
Прицельными щелчками выделяем 2 верхних полигона, предварительно включив режим выделения фейсов (обведён):
![Изображение](http://i.imgur.com/rZcPmcYm.png)
Переключаемся на обзор выделенного ровно сверху или снизу (в данном случае второе лучше выглядит):
![Изображение](http://i.imgur.com/kAwEZjPl.png)
Теперь переносим 3D-курсор Блендера в центр выделенной плоскости, для этого вызываем "Pie Menu" по Shift+X и выбираем нижний пункт "Cursor to Selected":
![Изображение](http://i.imgur.com/DTGsY8Lm.png)
Выключаем Edit Mode нажатием 4 или через меню, сцену не вращаем, снимаем выделение с объектов, выбрав Scene Collection в списке объектов:
![Изображение](http://i.imgur.com/yrj4SBol.png)
Создаем новый объект "Plane" и в его свойствах, появившихся в нижнем левом углу, переключаем ориентацию на соответствующую текущему виду:
![Изображение](http://i.imgur.com/FmNbLgGl.png)
Это развернет его перпендикулярно камере, но он будет помнить свою правильную ориентацию в мире, чем мы и воспользуемся далее.
Не снимая выделения со свежесозданной плоскости жмём Ctrl+A, чтобы выделить все объекты, затем "P" > "Object" или через меню:
![Изображение](http://i.imgur.com/qT4EEUFl.png)
Блендер покряхтит пару сек и привяжет все объекты к этой плоскости, в списке объектов сцены должны остаться только группы и она, нужно там клацнуть на какую-нибудь группу и снова на Plane, чтобы снять общее выделение и выделить только её:
![Изображение](http://i.imgur.com/IEztQ36m.png)
Теперь сбрасываем вращение и позицию для этой плоскости, а остальная сцена повернется вместе с ней:
![Изображение](http://i.imgur.com/8RHtsDSm.png)
![Изображение](http://i.imgur.com/wXlGzmRl.png)
Осталось закрепить успех, снова выделив всё (Ctrl+A) и применив все трансформации, что перенесет центр координат объектов сцены из точки обзора игровой камеры в нынешний центр сцены, в центре плоскости:
![Изображение](http://i.imgur.com/1LIGKibl.png)
Теперь можно удалить плоскость, отвязав тем самым от нее объекты (ПКМ в списке и Delete или Unlink):
![Изображение](http://i.imgur.com/9D1HIgv.png)
На виде сверху (F3) теперь всё ровно и красиво:
![Изображение](http://i.imgur.com/6YdDkdRl.png)
Настал торжественный момент включения текстур:
![Изображение](http://i.imgur.com/AfNwYBZ.png)
И тут нас ждёт фиаско - их нет!
![Непонимает :what:.ex](./images/smilies/17.png)
Вообще ни одной:
![Изображение](http://i.imgur.com/1tpYDCll.png)
Выделяем объект, смотрим что у него в шейдере, там явно есть текстуры:
![Изображение](http://i.imgur.com/zvMDmsxl.png)
Значит проблема в координатах, переходим в Edit Mode (1) и смотрим в редактор координат, а там пусто:
![Изображение](http://i.imgur.com/9zbfsmil.png)
В месте обведенным красным должен быть список UV, если есть хоть одна, но их нет, не импортировались.
В общем эту сцену в мусорку. Повторение - мать учения!
![Святой :saint:.ex](./images/smilies/10.png)
В версии импортера 2.0.3 появились опции для импорта нужной UV, но для их использования нужно понимать, что происходит и как это работает.
Это потребует как умственных усилий, так и установки Python 3, чтобы использовать мой скрипт для дампа информации о мешах рипа в наглядном виде.
Python 3 скачиваем с официального сайта и устанавливаем с настройками по-умолчанию.
Скрипт прицеплен:
- !NR2_Dumper.7z
- (1.41 КБ) 270 скачиваний
То есть для использования оба файла .bat и .py нужно скопировать в папку рипа (frame_0) и запустить .bat
Вылезет черное окно, а через некоторое время сообщение "Для продолжения нажмите любую клавишу" - это означает что процесс завершен и после нажатия чего-нибудь окно исчезнет.
Для рипа из этой темы создание дампа занимает около двух минут.
При желании можно скопировать в папку к распакованному скрипту пару-тройку интересующих мешей, тогда процесс создания дампа будет моментальный.
Образец дампа загрузил сюда: https://www5.zippyshare.com/v/vNtkRhrq/file.html
Поиском по тому же имени от меша щита (mesh_6_1733.nr) находим его данные:
![Изображение](http://i.imgur.com/b8IqjmBl.png)
Имеются адекватно названные атрибуты вертекса: SV_POSITION, TEXCOORDS, POSITION_VIEW, INSTANCE_ID, TIME, COLOR
Из которых пригодились бы трое, то есть позиция, текстурные координаты и вертекс колор, но последний пока не поддерживается импортером.
Ниже видим какие текстуры и шейдеры используются, а так же некоторые строки с данными вертекса (сохраняю только кратные 100, чтобы размер дампа не улетел в космос).
На скрине я обвёл рамками одного цвета как атрибуты вертекса, так и соответствующие им группы данных.
Как видим, текстурные координаты имеют 4 числа, вместо стандартных двух, это и помешало импортеру правильно их прочитать.
Первые 2 числа вполне соответствуют стандартам для текстурных координат, находятся между числами 0 и 1, не имеют отрицательных значений. Будем пробовать с ними.
(вторая пара чисел скорее всего зарезервирована для координат текстуры в атласе текстур)
Применить полученную информацию для импорта мы можем двумя способами:
Дописать "S" к слову "TEXCOORD", которое предлагает импортер по-умолчанию в первом режиме:
![Изображение](http://i.imgur.com/A8OrUUo.png)
Индекс компонент менять не нужно, нам и нужен 0 и 1 из 0, 1, 2, 3.
Или указать индекс атрибута вертекса + индекс компоненты для каждой координаты:
![Изображение](http://i.imgur.com/Azmofw7l.png)
Второй способ более точный, т.к. во многих играх атрибутов с именем TEXCOORD целое стадо, вдобавок координаты могут быть разбиты между двумя атрибутами (одна в конце второго, другая в начале третьего например).
Этим методом импорта можно пользоваться и для исключения кучи найденных UV, чтобы оставить только одну нужную.
После импорта с новыми настройками сцена выглядит так:
![Изображение](http://i.imgur.com/41WTCnnl.png)
![Изображение](http://i.imgur.com/6mzHHWal.png)
![Развернуть](http://movie-club.ru/images/icon_plus_1.gif)
Захват сцены:
Для начала просто запускаем игру, обновляемся если нужно, настраиваем графику.
Зеленым обведены полезные опции, которые желательно выставить на максимум, оранжевые можно убавлять, главное не переборщить, чтобы не отключить PBR-материалы например![Подмигивает ;).ex](./images/smilies/28.png)
![Изображение](http://i.imgur.com/YGjaCKDm.png)
После настройки игру выключаем, в библиотеке Стима переходим в папку игры:
![Изображение](http://i.imgur.com/vnOlYlf.png)
В открывшемся окне копируем путь к папке из верхней строки:
![Изображение](http://i.imgur.com/iidCl7pm.png)
Запускаем риппер, жмем выбор программы для запуска [...], вставляем в нижнее поле скопированный путь к игре, жмем открыть:
![Изображение](http://i.imgur.com/OUVH6gFm.png)
Открывается папка игры, где остается лишь выбрать Neverwinter.exe
Настраиваем кнопки для захвата, у меня это Ctrl+Alt+ПКМ и Ctrl+Alt+Shift+ПКМ для принудительного захвата:
![Изображение](http://i.imgur.com/lDdrC2Wm.png)
(в последней версии (2.0.3), принудительный захват работает как переключатель, при первом нажатии начинается рип всего что возможно по кругу (с дублями), при втором нажатии прекращается)
Стартуем игру из риппера. В окне лаунчера никаких признаков риппера не будет, а в игре должна быть плашка с подсказкой какие кнопки назначены.
Добегаем в игре до интересующего места и жмем сочетание кнопок для обычного рипа - игра должна замереть на некоторое время, например для этой сцены рип у меня занял около 3-х минут (не на SSD диск):
![Изображение](http://i.imgur.com/skOJOiel.png)
На диске это заняло около 800 мегабайт, 900 вместе с шейдерами и логом.
Сцену можно скачать отсюда: https://www5.zippyshare.com/v/gomO0nwL/file.html
Настройки Blender:
Для начала настроим Блендер - удаляем куб, камеру и светильник, выставляем дальность прорисовки поприличней (если видеокарта не блещет, сильно не разгоняйтесь):
![Изображение](http://i.imgur.com/NpZdDK8l.png)
(эту менюшку потом можно задвинуть назад, потянув за край)
В настройках сцены не повредит выставить единицы измерения:
![Изображение](http://i.imgur.com/MHgrbUam.png)
Нижнее окно лучше заранее переключить на редактор шейдера:
![Изображение](http://i.imgur.com/uuwDHgIm.png)
Ибо для анимаций там есть отдельная закладка с настройками:
![Изображение](http://i.imgur.com/0jDFV0dm.png)
А лазить в материалы приходится часто в рипах.
Также не повредит добавить окно с редактором UV, для этого нижнее окно делим на два, потянув за уголок, выделенный квадратиком:
![Изображение](http://i.imgur.com/3pZtJhAm.png)
(Чтобы от него избавиться, тянем за этот же уголок в другую сторону.)
Я использую сочетания клавиш "индустриально совместимые", вместо своеобразных Блендеровских, если вы только начинаете использовать Блендер, лучше сразу переключиться (правда на ютубе большинство гуру используют оригинальные, что иногда мешает восприятию):
![Изображение](http://i.imgur.com/ZLwQtPOm.png)
Тем не менее мне больше мешает когда Ctrl+A не выделяет всё, а Ctrl+I не инвертирует...
После того, как всё настроено, сохраняем текущие настройки интерфейса как стартовую сцену:
![Изображение](http://i.imgur.com/M0fOwK8m.png)
Лучше режим отображения, выделенный оранжевым, оставить в таком же виде, т.к. импорт сразу с текстурами не для каждой видеокарты по силам.
Импорт в Blender:
Процесс установки скрипта наглядно показан в видео: https://youtu.be/MMkLdWBn5Ew?t=57
Для удобства, можно настроить размеры экрана по-умолчанию в соответствии с разрешением вашего монитора, для этого нужно отредактировать скрипты gui0.py и gui1.py (один для новых версий Блендера, второй для старых), которые после установки плагина находятся в папке: c:\Users\[user_name]\AppData\Roaming\Blender Foundation\Blender\2.92\scripts\addons\io_import_nr\
(имя пользователя и версия Блендера будут ваши)
Файлы почти одинаковые, в обеих случаях нам нужны строки 46 и 47:
![Изображение](http://i.imgur.com/ZEMhTb4l.png)
После редактирования и сохранения изменений в скрипте Блендер надо перезапустить.
Открываем диалог импорта, ставим FOV=55 (его можно видеть на первом скрине настроек игры), жмём кнопку фильтра в верхнем правом углу, чтобы убрать из списка лишние файлы (текстуры), переводим курсор мыши на окно со списком и жмём Ctrl+A, чтобы выделить все файлы (если ничего не выделено, импортер также грузит всю папку), импортируем:
![Изображение](http://i.imgur.com/KVI0PhRl.png)
У меня процесс импорта занял около минуты, после чего на экране появляется полигональная каша, отдаляем её колесиком мыши, потом выделяем примерно как на скрине (главное не область в центре) и удаляем выделенное:
![Изображение](http://i.imgur.com/7b3h8Swl.png)
Аналогично можно удалить часть справа от центра.
Оставшуюся часть уже можно нормально вращать, видно, что она состоит из нескольких пересекающихся копий местности, с разной степенью искажения:
![Изображение](http://i.imgur.com/d2SXYIhl.png)
Удалять такое рамками можно, если нужна только модель персонажа, но лучше почистить другими методами.
Импортер группирует меши в коллекции, соответствующие первой цифре в имени меша, которая меняется для разных типов мешей по мнению игрового рендерера (в имени меша "mesh_14_2227.nr" первая цифра (14) это render target (группы по ней создаются), вторая (2227) draw call), нам это даёт возможность выделять группами:
![Изображение](http://i.imgur.com/M2JzRm9m.png)
(ПКМ на группе и "выбрать объекты" в появившемся меню)
После выделения группы 2, перводим курсор мыши на 3D-окно и жмём "f" - это центрирует обзор на выделенных объектах, крутим сцену, видим что это какая-то плоская фигня:
![Изображение](http://i.imgur.com/fpE2wq2m.png)
Удаляем.
В группе 2 у нас большая часть искаженной копии местности:
![Изображение](http://i.imgur.com/a6CPW9Nm.png)
Торжественно удаляем![Профи :glasses:.ex](./images/smilies/04.png)
Группа 6 явно содержит полезные меши, ее просто сворачиваем и выделяем следующую.
Группа 7 на вид относится к персонажам - оставляем.
В группе 8 всего один меш, который без нажатия "f" и не найти - удаляем.
Группа 14 подозрительно похожа на группу 6, содержит копии тех же мешей, какие из них лучше так просто не определить, пока оставляем обе.
Группы 15, 19 и 20 в мусорку.
А вот группа 21 издалека похожа на мусор:
![Изображение](http://i.imgur.com/kqz3CWkm.png)
Но при ближайшем рассмотрении явно содержит полезные элементы, судя по всему меши с прозрачностью:
![Изображение](http://i.imgur.com/NzGtRNTm.png)
Такое лучше чистить вручную, удаляя явно ненужные меши, типа дыма и пыли.
Группа 22 содержит значки над головами персонажей, удаляем.
Как и мусорные 23, 24, 28, 31, 40, 41.
Итого, из полезных групп у нас остались 6, 7, 14, 21.
При желании можно удалить меши других групп из папки рипа, они явно нигде не пригодятся.
(это освободит около 80 мегабайт в данном случае, т.к. основной объём рипа это текстуры, зато не будут мешаться при импорте всех)
В принципе, сцена уже чистая и похожа на игровую, правда в зеркальном виде:
![Изображение](http://i.imgur.com/zMzOCvbl.png)
Это можно легко исправить, выделив всё (Ctrl+A) и отзеркалив по оси X:
![Изображение](http://i.imgur.com/JbapMBtl.png)
Заметных искажений сцена не имеет, FOV 55 совпал хорошо, но матрицы дают более точный результат, поэтому всегда имеет смысл проверить их наличие в логе риппера и попытаться импортировать с их использованием.
Лог находится в основной папке рипа, которая содержит подпапки рипов за сеанс (frame_0, frame_1 и т.д.).
Для его прочтения риппер нужно закрыть.
Копия моего лога тут: https://www5.zippyshare.com/v/u1r7ZhhH/file.html
Для поиска матрицы нужно узнать имя одного из нужных мешей, например часть щита моего персонажа это mesh_6_1733.nr:
![Изображение](http://i.imgur.com/Znkc0Fg.png)
Открываем лог в текстовом редакторе и ищем по имени меша (Ctrl+F):
![Изображение](http://i.imgur.com/soyoMGOl.png)
(если у вас несколько рипов за сессию, то надежней искать с именем подпапки рипа - "frame_0\mesh_6_1733.nr")
Видим сообщение что меш записан и следующее, что на этом с ним закончено, поэтому нам нужно прокрутить вверх, до финиша предыдущего меша (у него второй номер всегда будет на 1 меньше, даже если номер группы другой), т.к. матрицы обычно находятся в начале процедуры рипа меша:
![Изображение](http://i.imgur.com/cahp3CLl.png)
Вверху мы видим сообщение о финише предыдущего меша, а внизу подходящие матрицы.
В этой игре они корректно подписаны, в других случаях бывают менее понятные имена, тогда приходится больше проверять, загружая сцену и смотря на наличие искажений.
Для импортера подходят матрицы типа float4x4, лучше с projection или proj в названии.
Копировать нужно только содержимое с квадратными скобками:
[[1.08055, 0, 0, 0], [0, 1.92098, 0, 0], [0, 0, -1.00002, -0.730018], [0, 0, -1, 0]]
То есть 4 набора по 4 числа, каждый набор в квадратных скобках и все они взяты в квадратные скобки.
При импорте с подставленной матрицей нас ждут искажения, в данном случае её необходимо транспонировать, установив галку:
![Изображение](http://i.imgur.com/pwWR6bY.png)
(это выясняется методом проб и ошибок)
После импорта с правильной матрицей, сцена без искажений и не требует зеркалирования:
![Изображение](http://i.imgur.com/snYXiJ0l.png)
Но перевернута чёрти-как:
![Изображение](http://i.imgur.com/KzWDoXyl.png)
Для исправления ситуации нам нужен горизонтальный квадрат в сцене, например пол какого-нибудь здания, в данном случае под ногами персонажа есть годный на вид постамент:
![Изображение](http://i.imgur.com/2O0gn2nm.png)
Выделяем его, переходим в режим редактирования, нажав 1 или выбрав из меню:
![Изображение](http://i.imgur.com/ZXu9Blem.png)
Прицельными щелчками выделяем 2 верхних полигона, предварительно включив режим выделения фейсов (обведён):
![Изображение](http://i.imgur.com/rZcPmcYm.png)
Переключаемся на обзор выделенного ровно сверху или снизу (в данном случае второе лучше выглядит):
![Изображение](http://i.imgur.com/kAwEZjPl.png)
Теперь переносим 3D-курсор Блендера в центр выделенной плоскости, для этого вызываем "Pie Menu" по Shift+X и выбираем нижний пункт "Cursor to Selected":
![Изображение](http://i.imgur.com/DTGsY8Lm.png)
Выключаем Edit Mode нажатием 4 или через меню, сцену не вращаем, снимаем выделение с объектов, выбрав Scene Collection в списке объектов:
![Изображение](http://i.imgur.com/yrj4SBol.png)
Создаем новый объект "Plane" и в его свойствах, появившихся в нижнем левом углу, переключаем ориентацию на соответствующую текущему виду:
![Изображение](http://i.imgur.com/FmNbLgGl.png)
Это развернет его перпендикулярно камере, но он будет помнить свою правильную ориентацию в мире, чем мы и воспользуемся далее.
Не снимая выделения со свежесозданной плоскости жмём Ctrl+A, чтобы выделить все объекты, затем "P" > "Object" или через меню:
![Изображение](http://i.imgur.com/qT4EEUFl.png)
Блендер покряхтит пару сек и привяжет все объекты к этой плоскости, в списке объектов сцены должны остаться только группы и она, нужно там клацнуть на какую-нибудь группу и снова на Plane, чтобы снять общее выделение и выделить только её:
![Изображение](http://i.imgur.com/IEztQ36m.png)
Теперь сбрасываем вращение и позицию для этой плоскости, а остальная сцена повернется вместе с ней:
![Изображение](http://i.imgur.com/8RHtsDSm.png)
![Изображение](http://i.imgur.com/wXlGzmRl.png)
Осталось закрепить успех, снова выделив всё (Ctrl+A) и применив все трансформации, что перенесет центр координат объектов сцены из точки обзора игровой камеры в нынешний центр сцены, в центре плоскости:
![Изображение](http://i.imgur.com/1LIGKibl.png)
Теперь можно удалить плоскость, отвязав тем самым от нее объекты (ПКМ в списке и Delete или Unlink):
![Изображение](http://i.imgur.com/9D1HIgv.png)
На виде сверху (F3) теперь всё ровно и красиво:
![Изображение](http://i.imgur.com/6YdDkdRl.png)
Настал торжественный момент включения текстур:
![Изображение](http://i.imgur.com/AfNwYBZ.png)
И тут нас ждёт фиаско - их нет!![Непонимает :what:.ex](./images/smilies/17.png)
Вообще ни одной:
![Изображение](http://i.imgur.com/1tpYDCll.png)
Выделяем объект, смотрим что у него в шейдере, там явно есть текстуры:
![Изображение](http://i.imgur.com/zvMDmsxl.png)
Значит проблема в координатах, переходим в Edit Mode (1) и смотрим в редактор координат, а там пусто:
![Изображение](http://i.imgur.com/9zbfsmil.png)
В месте обведенным красным должен быть список UV, если есть хоть одна, но их нет, не импортировались.
В общем эту сцену в мусорку. Повторение - мать учения!![Святой :saint:.ex](./images/smilies/10.png)
В версии импортера 2.0.3 появились опции для импорта нужной UV, но для их использования нужно понимать, что происходит и как это работает.
Это потребует как умственных усилий, так и установки Python 3, чтобы использовать мой скрипт для дампа информации о мешах рипа в наглядном виде.
Python 3 скачиваем с официального сайта и устанавливаем с настройками по-умолчанию.
Скрипт прицеплен:
При запуске с использованием BAT-файла идущего в комплекте, он ищет .nr файлы в папке где запущен, читает информацию о каждом и сохраняет в текстовый файл !_dump_log.txt
То есть для использования оба файла .bat и .py нужно скопировать в папку рипа (frame_0) и запустить .bat
Вылезет черное окно, а через некоторое время сообщение "Для продолжения нажмите любую клавишу" - это означает что процесс завершен и после нажатия чего-нибудь окно исчезнет.
Для рипа из этой темы создание дампа занимает около двух минут.
При желании можно скопировать в папку к распакованному скрипту пару-тройку интересующих мешей, тогда процесс создания дампа будет моментальный.
Образец дампа загрузил сюда: https://www5.zippyshare.com/v/vNtkRhrq/file.html
Поиском по тому же имени от меша щита (mesh_6_1733.nr) находим его данные:
![Изображение](http://i.imgur.com/b8IqjmBl.png)
Имеются адекватно названные атрибуты вертекса: SV_POSITION, TEXCOORDS, POSITION_VIEW, INSTANCE_ID, TIME, COLOR
Из которых пригодились бы трое, то есть позиция, текстурные координаты и вертекс колор, но последний пока не поддерживается импортером.
Ниже видим какие текстуры и шейдеры используются, а так же некоторые строки с данными вертекса (сохраняю только кратные 100, чтобы размер дампа не улетел в космос).
На скрине я обвёл рамками одного цвета как атрибуты вертекса, так и соответствующие им группы данных.
Как видим, текстурные координаты имеют 4 числа, вместо стандартных двух, это и помешало импортеру правильно их прочитать.
Первые 2 числа вполне соответствуют стандартам для текстурных координат, находятся между числами 0 и 1, не имеют отрицательных значений. Будем пробовать с ними.
(вторая пара чисел скорее всего зарезервирована для координат текстуры в атласе текстур)
Применить полученную информацию для импорта мы можем двумя способами:
Дописать "S" к слову "TEXCOORD", которое предлагает импортер по-умолчанию в первом режиме:
![Изображение](http://i.imgur.com/A8OrUUo.png)
Индекс компонент менять не нужно, нам и нужен 0 и 1 из 0, 1, 2, 3.
Или указать индекс атрибута вертекса + индекс компоненты для каждой координаты:
![Изображение](http://i.imgur.com/Azmofw7l.png)
Второй способ более точный, т.к. во многих играх атрибутов с именем TEXCOORD целое стадо, вдобавок координаты могут быть разбиты между двумя атрибутами (одна в конце второго, другая в начале третьего например).
Этим методом импорта можно пользоваться и для исключения кучи найденных UV, чтобы оставить только одну нужную.
После импорта с новыми настройками сцена выглядит так:
![Изображение](http://i.imgur.com/41WTCnnl.png)
Для начала просто запускаем игру, обновляемся если нужно, настраиваем графику.
Зеленым обведены полезные опции, которые желательно выставить на максимум, оранжевые можно убавлять, главное не переборщить, чтобы не отключить PBR-материалы например
![Подмигивает ;).ex](./images/smilies/28.png)
![Изображение](http://i.imgur.com/NfGUNz0m.png)
![Изображение](http://i.imgur.com/TFL07iFm.png)
![Изображение](http://i.imgur.com/YGjaCKDm.png)
После настройки игру выключаем, в библиотеке Стима переходим в папку игры:
![Изображение](http://i.imgur.com/vnOlYlf.png)
В открывшемся окне копируем путь к папке из верхней строки:
![Изображение](http://i.imgur.com/iidCl7pm.png)
Запускаем риппер, жмем выбор программы для запуска [...], вставляем в нижнее поле скопированный путь к игре, жмем открыть:
![Изображение](http://i.imgur.com/OUVH6gFm.png)
Открывается папка игры, где остается лишь выбрать Neverwinter.exe
Настраиваем кнопки для захвата, у меня это Ctrl+Alt+ПКМ и Ctrl+Alt+Shift+ПКМ для принудительного захвата:
![Изображение](http://i.imgur.com/lDdrC2Wm.png)
(в последней версии (2.0.3), принудительный захват работает как переключатель, при первом нажатии начинается рип всего что возможно по кругу (с дублями), при втором нажатии прекращается)
Стартуем игру из риппера. В окне лаунчера никаких признаков риппера не будет, а в игре должна быть плашка с подсказкой какие кнопки назначены.
Добегаем в игре до интересующего места и жмем сочетание кнопок для обычного рипа - игра должна замереть на некоторое время, например для этой сцены рип у меня занял около 3-х минут (не на SSD диск):
![Изображение](http://i.imgur.com/skOJOiel.png)
На диске это заняло около 800 мегабайт, 900 вместе с шейдерами и логом.
Сцену можно скачать отсюда: https://www5.zippyshare.com/v/gomO0nwL/file.html
Настройки Blender:
Для начала настроим Блендер - удаляем куб, камеру и светильник, выставляем дальность прорисовки поприличней (если видеокарта не блещет, сильно не разгоняйтесь):
![Изображение](http://i.imgur.com/NpZdDK8l.png)
(эту менюшку потом можно задвинуть назад, потянув за край)
В настройках сцены не повредит выставить единицы измерения:
![Изображение](http://i.imgur.com/MHgrbUam.png)
Нижнее окно лучше заранее переключить на редактор шейдера:
![Изображение](http://i.imgur.com/uuwDHgIm.png)
Ибо для анимаций там есть отдельная закладка с настройками:
![Изображение](http://i.imgur.com/0jDFV0dm.png)
А лазить в материалы приходится часто в рипах.
Также не повредит добавить окно с редактором UV, для этого нижнее окно делим на два, потянув за уголок, выделенный квадратиком:
![Изображение](http://i.imgur.com/3pZtJhAm.png)
(Чтобы от него избавиться, тянем за этот же уголок в другую сторону.)
Я использую сочетания клавиш "индустриально совместимые", вместо своеобразных Блендеровских, если вы только начинаете использовать Блендер, лучше сразу переключиться (правда на ютубе большинство гуру используют оригинальные, что иногда мешает восприятию):
![Изображение](http://i.imgur.com/ZLwQtPOm.png)
Тем не менее мне больше мешает когда Ctrl+A не выделяет всё, а Ctrl+I не инвертирует...
После того, как всё настроено, сохраняем текущие настройки интерфейса как стартовую сцену:
![Изображение](http://i.imgur.com/M0fOwK8m.png)
Лучше режим отображения, выделенный оранжевым, оставить в таком же виде, т.к. импорт сразу с текстурами не для каждой видеокарты по силам.
Импорт в Blender:
Процесс установки скрипта наглядно показан в видео: https://youtu.be/MMkLdWBn5Ew?t=57
Для удобства, можно настроить размеры экрана по-умолчанию в соответствии с разрешением вашего монитора, для этого нужно отредактировать скрипты gui0.py и gui1.py (один для новых версий Блендера, второй для старых), которые после установки плагина находятся в папке: c:\Users\[user_name]\AppData\Roaming\Blender Foundation\Blender\2.92\scripts\addons\io_import_nr\
(имя пользователя и версия Блендера будут ваши)
Файлы почти одинаковые, в обеих случаях нам нужны строки 46 и 47:
![Изображение](http://i.imgur.com/ZEMhTb4l.png)
После редактирования и сохранения изменений в скрипте Блендер надо перезапустить.
Открываем диалог импорта, ставим FOV=55 (его можно видеть на первом скрине настроек игры), жмём кнопку фильтра в верхнем правом углу, чтобы убрать из списка лишние файлы (текстуры), переводим курсор мыши на окно со списком и жмём Ctrl+A, чтобы выделить все файлы (если ничего не выделено, импортер также грузит всю папку), импортируем:
![Изображение](http://i.imgur.com/KVI0PhRl.png)
У меня процесс импорта занял около минуты, после чего на экране появляется полигональная каша, отдаляем её колесиком мыши, потом выделяем примерно как на скрине (главное не область в центре) и удаляем выделенное:
![Изображение](http://i.imgur.com/7b3h8Swl.png)
Аналогично можно удалить часть справа от центра.
Оставшуюся часть уже можно нормально вращать, видно, что она состоит из нескольких пересекающихся копий местности, с разной степенью искажения:
![Изображение](http://i.imgur.com/d2SXYIhl.png)
Удалять такое рамками можно, если нужна только модель персонажа, но лучше почистить другими методами.
Импортер группирует меши в коллекции, соответствующие первой цифре в имени меша, которая меняется для разных типов мешей по мнению игрового рендерера (в имени меша "mesh_14_2227.nr" первая цифра (14) это render target (группы по ней создаются), вторая (2227) draw call), нам это даёт возможность выделять группами:
![Изображение](http://i.imgur.com/M2JzRm9m.png)
(ПКМ на группе и "выбрать объекты" в появившемся меню)
После выделения группы 2, перводим курсор мыши на 3D-окно и жмём "f" - это центрирует обзор на выделенных объектах, крутим сцену, видим что это какая-то плоская фигня:
![Изображение](http://i.imgur.com/fpE2wq2m.png)
Удаляем.
В группе 2 у нас большая часть искаженной копии местности:
![Изображение](http://i.imgur.com/a6CPW9Nm.png)
Торжественно удаляем
![Профи :glasses:.ex](./images/smilies/04.png)
Группа 6 явно содержит полезные меши, ее просто сворачиваем и выделяем следующую.
Группа 7 на вид относится к персонажам - оставляем.
В группе 8 всего один меш, который без нажатия "f" и не найти - удаляем.
Группа 14 подозрительно похожа на группу 6, содержит копии тех же мешей, какие из них лучше так просто не определить, пока оставляем обе.
Группы 15, 19 и 20 в мусорку.
А вот группа 21 издалека похожа на мусор:
![Изображение](http://i.imgur.com/kqz3CWkm.png)
Но при ближайшем рассмотрении явно содержит полезные элементы, судя по всему меши с прозрачностью:
![Изображение](http://i.imgur.com/NzGtRNTm.png)
Такое лучше чистить вручную, удаляя явно ненужные меши, типа дыма и пыли.
Группа 22 содержит значки над головами персонажей, удаляем.
Как и мусорные 23, 24, 28, 31, 40, 41.
Итого, из полезных групп у нас остались 6, 7, 14, 21.
При желании можно удалить меши других групп из папки рипа, они явно нигде не пригодятся.
(это освободит около 80 мегабайт в данном случае, т.к. основной объём рипа это текстуры, зато не будут мешаться при импорте всех)
В принципе, сцена уже чистая и похожа на игровую, правда в зеркальном виде:
![Изображение](http://i.imgur.com/zMzOCvbl.png)
Это можно легко исправить, выделив всё (Ctrl+A) и отзеркалив по оси X:
![Изображение](http://i.imgur.com/JbapMBtl.png)
Заметных искажений сцена не имеет, FOV 55 совпал хорошо, но матрицы дают более точный результат, поэтому всегда имеет смысл проверить их наличие в логе риппера и попытаться импортировать с их использованием.
Лог находится в основной папке рипа, которая содержит подпапки рипов за сеанс (frame_0, frame_1 и т.д.).
Для его прочтения риппер нужно закрыть.
Копия моего лога тут: https://www5.zippyshare.com/v/u1r7ZhhH/file.html
Для поиска матрицы нужно узнать имя одного из нужных мешей, например часть щита моего персонажа это mesh_6_1733.nr:
![Изображение](http://i.imgur.com/Znkc0Fg.png)
Открываем лог в текстовом редакторе и ищем по имени меша (Ctrl+F):
![Изображение](http://i.imgur.com/soyoMGOl.png)
(если у вас несколько рипов за сессию, то надежней искать с именем подпапки рипа - "frame_0\mesh_6_1733.nr")
Видим сообщение что меш записан и следующее, что на этом с ним закончено, поэтому нам нужно прокрутить вверх, до финиша предыдущего меша (у него второй номер всегда будет на 1 меньше, даже если номер группы другой), т.к. матрицы обычно находятся в начале процедуры рипа меша:
![Изображение](http://i.imgur.com/cahp3CLl.png)
Вверху мы видим сообщение о финише предыдущего меша, а внизу подходящие матрицы.
В этой игре они корректно подписаны, в других случаях бывают менее понятные имена, тогда приходится больше проверять, загружая сцену и смотря на наличие искажений.
Для импортера подходят матрицы типа float4x4, лучше с projection или proj в названии.
Копировать нужно только содержимое с квадратными скобками:
[[1.08055, 0, 0, 0], [0, 1.92098, 0, 0], [0, 0, -1.00002, -0.730018], [0, 0, -1, 0]]
То есть 4 набора по 4 числа, каждый набор в квадратных скобках и все они взяты в квадратные скобки.
При импорте с подставленной матрицей нас ждут искажения, в данном случае её необходимо транспонировать, установив галку:
![Изображение](http://i.imgur.com/pwWR6bY.png)
(это выясняется методом проб и ошибок)
После импорта с правильной матрицей, сцена без искажений и не требует зеркалирования:
![Изображение](http://i.imgur.com/snYXiJ0l.png)
Но перевернута чёрти-как:
![Изображение](http://i.imgur.com/KzWDoXyl.png)
Для исправления ситуации нам нужен горизонтальный квадрат в сцене, например пол какого-нибудь здания, в данном случае под ногами персонажа есть годный на вид постамент:
![Изображение](http://i.imgur.com/2O0gn2nm.png)
Выделяем его, переходим в режим редактирования, нажав 1 или выбрав из меню:
![Изображение](http://i.imgur.com/ZXu9Blem.png)
Прицельными щелчками выделяем 2 верхних полигона, предварительно включив режим выделения фейсов (обведён):
![Изображение](http://i.imgur.com/rZcPmcYm.png)
Переключаемся на обзор выделенного ровно сверху или снизу (в данном случае второе лучше выглядит):
![Изображение](http://i.imgur.com/kAwEZjPl.png)
Теперь переносим 3D-курсор Блендера в центр выделенной плоскости, для этого вызываем "Pie Menu" по Shift+X и выбираем нижний пункт "Cursor to Selected":
![Изображение](http://i.imgur.com/DTGsY8Lm.png)
Выключаем Edit Mode нажатием 4 или через меню, сцену не вращаем, снимаем выделение с объектов, выбрав Scene Collection в списке объектов:
![Изображение](http://i.imgur.com/yrj4SBol.png)
Создаем новый объект "Plane" и в его свойствах, появившихся в нижнем левом углу, переключаем ориентацию на соответствующую текущему виду:
![Изображение](http://i.imgur.com/FmNbLgGl.png)
Это развернет его перпендикулярно камере, но он будет помнить свою правильную ориентацию в мире, чем мы и воспользуемся далее.
Не снимая выделения со свежесозданной плоскости жмём Ctrl+A, чтобы выделить все объекты, затем "P" > "Object" или через меню:
![Изображение](http://i.imgur.com/qT4EEUFl.png)
Блендер покряхтит пару сек и привяжет все объекты к этой плоскости, в списке объектов сцены должны остаться только группы и она, нужно там клацнуть на какую-нибудь группу и снова на Plane, чтобы снять общее выделение и выделить только её:
![Изображение](http://i.imgur.com/IEztQ36m.png)
Теперь сбрасываем вращение и позицию для этой плоскости, а остальная сцена повернется вместе с ней:
![Изображение](http://i.imgur.com/8RHtsDSm.png)
![Изображение](http://i.imgur.com/wXlGzmRl.png)
Осталось закрепить успех, снова выделив всё (Ctrl+A) и применив все трансформации, что перенесет центр координат объектов сцены из точки обзора игровой камеры в нынешний центр сцены, в центре плоскости:
![Изображение](http://i.imgur.com/1LIGKibl.png)
Теперь можно удалить плоскость, отвязав тем самым от нее объекты (ПКМ в списке и Delete или Unlink):
![Изображение](http://i.imgur.com/9D1HIgv.png)
На виде сверху (F3) теперь всё ровно и красиво:
![Изображение](http://i.imgur.com/6YdDkdRl.png)
Настал торжественный момент включения текстур:
![Изображение](http://i.imgur.com/AfNwYBZ.png)
И тут нас ждёт фиаско - их нет!
![Непонимает :what:.ex](./images/smilies/17.png)
Вообще ни одной:
![Изображение](http://i.imgur.com/1tpYDCll.png)
Выделяем объект, смотрим что у него в шейдере, там явно есть текстуры:
![Изображение](http://i.imgur.com/zvMDmsxl.png)
Значит проблема в координатах, переходим в Edit Mode (1) и смотрим в редактор координат, а там пусто:
![Изображение](http://i.imgur.com/9zbfsmil.png)
В месте обведенным красным должен быть список UV, если есть хоть одна, но их нет, не импортировались.
В общем эту сцену в мусорку. Повторение - мать учения!
![Святой :saint:.ex](./images/smilies/10.png)
В версии импортера 2.0.3 появились опции для импорта нужной UV, но для их использования нужно понимать, что происходит и как это работает.
Это потребует как умственных усилий, так и установки Python 3, чтобы использовать мой скрипт для дампа информации о мешах рипа в наглядном виде.
Python 3 скачиваем с официального сайта и устанавливаем с настройками по-умолчанию.
Скрипт прицеплен:
- !NR2_Dumper.7z
- (1.41 КБ) 270 скачиваний
То есть для использования оба файла .bat и .py нужно скопировать в папку рипа (frame_0) и запустить .bat
Вылезет черное окно, а через некоторое время сообщение "Для продолжения нажмите любую клавишу" - это означает что процесс завершен и после нажатия чего-нибудь окно исчезнет.
Для рипа из этой темы создание дампа занимает около двух минут.
При желании можно скопировать в папку к распакованному скрипту пару-тройку интересующих мешей, тогда процесс создания дампа будет моментальный.
Образец дампа загрузил сюда: https://www5.zippyshare.com/v/vNtkRhrq/file.html
Поиском по тому же имени от меша щита (mesh_6_1733.nr) находим его данные:
![Изображение](http://i.imgur.com/b8IqjmBl.png)
Имеются адекватно названные атрибуты вертекса: SV_POSITION, TEXCOORDS, POSITION_VIEW, INSTANCE_ID, TIME, COLOR
Из которых пригодились бы трое, то есть позиция, текстурные координаты и вертекс колор, но последний пока не поддерживается импортером.
Ниже видим какие текстуры и шейдеры используются, а так же некоторые строки с данными вертекса (сохраняю только кратные 100, чтобы размер дампа не улетел в космос).
На скрине я обвёл рамками одного цвета как атрибуты вертекса, так и соответствующие им группы данных.
Как видим, текстурные координаты имеют 4 числа, вместо стандартных двух, это и помешало импортеру правильно их прочитать.
Первые 2 числа вполне соответствуют стандартам для текстурных координат, находятся между числами 0 и 1, не имеют отрицательных значений. Будем пробовать с ними.
(вторая пара чисел скорее всего зарезервирована для координат текстуры в атласе текстур)
Применить полученную информацию для импорта мы можем двумя способами:
Дописать "S" к слову "TEXCOORD", которое предлагает импортер по-умолчанию в первом режиме:
![Изображение](http://i.imgur.com/A8OrUUo.png)
Индекс компонент менять не нужно, нам и нужен 0 и 1 из 0, 1, 2, 3.
Или указать индекс атрибута вертекса + индекс компоненты для каждой координаты:
![Изображение](http://i.imgur.com/Azmofw7l.png)
Второй способ более точный, т.к. во многих играх атрибутов с именем TEXCOORD целое стадо, вдобавок координаты могут быть разбиты между двумя атрибутами (одна в конце второго, другая в начале третьего например).
Этим методом импорта можно пользоваться и для исключения кучи найденных UV, чтобы оставить только одну нужную.
После импорта с новыми настройками сцена выглядит так:
![Изображение](http://i.imgur.com/41WTCnnl.png)
![Изображение](http://i.imgur.com/6mzHHWal.png)