Разбор форматов, Тема для обсуждения различных форматов игровых файлов |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов
Разбор форматов, Тема для обсуждения различных форматов игровых файлов |
12.06.2020, 00:46
Сообщение
#121
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
И такой вопрос: если взять оригинальную анимацию omf (от gsc) и сконвертировать её в skls с помощью конвертера, а потом с помощью actor editor экспортировать обратно в omf, то будет ли потеря качества анимаций? Станут ли кости сильнее дёргаться. Просто я сейчас сравнил и не заметил разницы. Что там что там есть незначительное дрожание. У меня как-то было что добавлялось 0.03 сек в конец после конвертера -------------------- |
 
|
|
|
|
12.06.2020, 17:17
Сообщение
#122
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
Pavel_Blend, вот пример того как анимации могут сломаться. Происходит это рандомно.
|
 
|
|
12.06.2020, 20:52
Сообщение
#123
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
mortan, так это скорее всего из-за бардаковского плагина экспорта из milkshape 3d. Ты ведь из милки экспортировал анимации? Я такой баг именно после милки встречал. После СДК такого нет.
ПС: кстати бардак столько всего написал: и конвертер ogf2object, и декомпилятор уровней, и плагины к maya, max, milshape... Столько всего сделал для моддинга. Если бы не он, то не известно, что было бы с моддингом сейчас. -------------------- |
 
|
|
12.06.2020, 22:08
Сообщение
#124
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
Pavel_Blend, никогда милкой не пользовался, это происходит при экспорте анимации из 3д макса в sdk
Сообщение отредактировал mortan - 12.06.2020, 22:08 |
 
|
|
13.06.2020, 18:42
Сообщение
#125
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
mortan, то есть ты из 3д макса экспортируешь анимации в skls, потом открываешь в AE и они выглядят нормально. А после экспорта в omf из AE в игре такие баги?
-------------------- |
 
|
|
13.06.2020, 21:52
Сообщение
#126
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
Pavel_Blend, Да, верно, анимация обычная idle_aim, без перемещения костей. Эта трабла вообще появилась когда пришлось анимацию прицеливания по новой экспортировать, потому что новая анимка в версии с подствольником сбивает прицеливание, хотя они полностью идентичны во всём кроме положения левой руки,причем последняя такой проблемы как на видео не имеет. То есть берём оригинальный idle_aim - с подствольником сбивается прицеливание, заменяем idle_aim - прицеливание не сбивается но без подствольника появляется баг как на видосе.
|
 
|
|
30.06.2020, 09:39
Сообщение
#127
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Я уже много раз спрашивал, но так и не получилось побороть проблему:
при импорте level/level.geom в blender, не получается правильно импортировать нормали (а именно сглаживание). В вершинном буфере нормали хранятся в 3 байтах. Чтобы получить из uint8 значения float нужно сделать такие преобразования: Код 2.0 * normal_component / 255 - 1.0 Но теперь такой вопрос: какая это нормаль? Относительно чего она рассчитывается? В блендере нормали имеют глобальное пространство. А в сталкере нормали отсчитываются от нормали треугольника? То есть нормаль вершины отчитывается от пространства треугольника. И чтобы получить глобальную нормаль, нужно сделать такие преобразования?: Код triangle_normal + vertex_normal Или я чего-то не понимаю? Просто пока так и не получилось корректно импортировать нормали. Я думаю, что в блендере начальное направление нормали - это 0, 0, 0. А в сталкере начальное направление нормали - это нормаль треугольника. Так как если это будет не так, то на динамическом освещении не правильно будут работать карты нормалей bump (так как они являются не мировыми, а тангенсальными). В общем вопрос такой: относительно чего идёт просчёт нормалей в сталкере? -------------------- |
 
|
|
01.07.2020, 16:18
Сообщение
#128
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
не получается правильно импортировать нормали (а именно сглаживание). Закажь, как не получается. В общем вопрос такой: относительно чего идёт просчёт нормалей в сталкере? Да тоже в глобальном пространстве. Запили локацию в виде кубика, прогони через СДК/хрлц. Какие будут нормалив игре и в блендере после импорта? Потом какой-нибудь цилиндр. |
 
|
|
01.07.2020, 18:13
Сообщение
#129
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
abramcumner, вот коммит, в котором я пытаюсь сделать импорт нормалей:
Преобразование нормалей находится в функции convert_normal. Я уже много раз делал простые локации, состоящие из 5 треугольников. Вроде бы на простых локациях всё нормально, но когда импортирую обычную локацию, то получаю это: Я не знаю, как правильно сделать преобразование нормалей. Вот система координат сталкера: Ось X - смотрит вправо Ось Y - смотрит вверх Ось Z - смотрит вперёд Их нужно преобразовать в блендеровскую систему: Ось X - смотрит вправо Ось Y - смотрит вперёд Ось Z - смотрит вверх Что для этого нужно сделать? Менять местами компоненты нормали? Или ещё нужно менять знак нормали? Если придётся менять местами и менять знак компонент, то я насчитал столько возможных вариаций: Список Код +x+y+z +x+z+y +y+x+z +y+z+x +z+x+y +z+y+x -x+y+z -x+z+y +y-x+z +y+z-x +z-x+y +z+y-x +x-y+z +x+z-y -y+x+z -y+z+x +z+x-y +z-y+x +x+y-z +x-z+y +y+x-z +y-z+x -z+x+y -z+y+x -x-y+z -x+z-y -y-x+z -y+z-x +z-x-y +z-y-x -x+y-z -x-z+y +y-x-z +y-z-x -z-x+y -z+y-x +x-y-z +x-z-y -y+x-z -y-z+x -z+x-y -z-y+x Какая из них верная? Сообщение отредактировал Pavel_Blend - 01.07.2020, 18:24 -------------------- |
 
|
|
02.07.2020, 11:17
Сообщение
#130
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Pavel_Blend, не скачи так быстро.
А почему на скрине вообще от одной вершины идет 3 нормали? И по три нормали у тебя у каждой вершины. Как то странно... В level.geom уже должно быть 1 вершина - 1 нормаль. Я не знаю, как правильно сделать преобразование нормалей. Вот система координат сталкера: Ось X - смотрит вправо Ось Y - смотрит вверх Ось Z - смотрит вперёд Их нужно преобразовать в блендеровскую систему: Ось X - смотрит вправо Ось Y - смотрит вперёд Ось Z - смотрит вверх Что для этого нужно сделать? Менять местами компоненты нормали? Или ещё нужно менять знак нормали? У тебя же уже есть разбивка по компонентам. Собираешь из них блендеровскую нормаль. Если бы ось соотвествующего компонента смотрела в другую сторону, то у этой компоненты поменял бы знак. В данном случае этого не требуется. У меня получилось так: Пусть Nсталкера = (x,y,z), тогда Nблендера=(x,z,y). |
 
|
|
02.07.2020, 11:46
Сообщение
#131
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
А почему на скрине вообще от одной вершины идет 3 нормали? И по три нормали у тебя у каждой вершины. Как то странно... В level.geom уже должно быть 1 вершина - 1 нормаль. Да, в level.geom у одной вершины одна нормаль. Но и у каждой вершины в level.geom только одна uv координата. Это значит, что в местах uv швов будут не склеенные вершины. Так же это значит, что в тех местах, где нормали имеют разное направление, тоже будут не склеенные вершины. В блендере не удобно редактировать меш, у которого куча не склеенных вершин. При импорте я их склеиваю. И ещё в блендере юви координаты и нормали для сглаживания задаются не для вершины, а для loop'а. Loop - это ребро полигона, которое выходит из вершины (то есть loop - это элемент, который объединяет в себе вершину и ребро полигона), в данном случае ребро треугольника. Поэтому импортируется 3 нормали (для каждого loop'а треугольника). Нормали и юви реализованы с помощью loop'ов из-за того, чтобы можно было создавать швы на юви развёртке. Если юви развёртка имеет швы/разрезы, то будут вершины, которые имеют более 1 юви координаты. Я вершины правильно склеиваю, потому что юви карта правильная. У каждой вершины по 3 нормали из-за того, что одна вершина хранится в 3 loop'ах. Но почему-то нормали не склеиваются, видимо имеют разные значения. Если бы нормали имели одинаковые значения, то 3 нормали склеелись бы в одну нормаль. Я пока не знаю, почему нормали разные в определённых вершинах. -------------------- |
 
|
|
02.07.2020, 12:17
Сообщение
#132
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Я написал краткий пример импорта данных из level.geom без слияния вершин:
python Код import bpy, mathutils pos = ( (0.5974636673927307, 0.16775597631931305, -0.4687247574329376), (-0.04301837086677551, 0.9211700558662415, 0.7121291756629944), (0.44232267141342163, -0.14945532381534576, 0.4682541489601135), (0.44232267141342163, -0.14945532381534576, 0.4682541489601135), (-0.04301837086677551, 0.9211700558662415, 0.7121291756629944), (-0.7242938280105591, -0.010675385594367981, 0.51418137550354), (-0.7174085974693298, 0.1281045526266098, -0.48137417435646057), (-0.04301837086677551, 0.9211700558662415, 0.7121291756629944), (0.5974636673927307, 0.16775597631931305, -0.4687247574329376), (-0.7242938280105591, -0.010675385594367981, 0.51418137550354), (-0.04301837086677551, 0.9211700558662415, 0.7121291756629944), (-0.7174085974693298, 0.1281045526266098, -0.48137417435646057) ) norm = ( (103, 228, 202), (184, 241, 133), (229, 138, 202), (229, 138, 202), (184, 241, 133), (225, 161, 53), (92, 233, 65), (184, 241, 133), (103, 228, 202), (225, 161, 53), (184, 241, 133), (92, 233, 65) ) indices = ( (0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11) ) def convert_normal(norm_in): norm_out_x = 2.0 * norm_in[0] / 255 - 1.0 norm_out_y = 2.0 * norm_in[1] / 255 - 1.0 norm_out_z = 2.0 * norm_in[2] / 255 - 1.0 return mathutils.Vector((norm_out_x, norm_out_y, norm_out_z)) blender_normals = [] for n in norm: blender_normals.append(convert_normal(n)) mesh = bpy.data.meshes.new('test') obj = bpy.data.objects.new('test', mesh) bpy.context.scene.collection.objects.link(obj) mesh.from_pydata(pos, (), indices) mesh.normals_split_custom_set(blender_normals) Я не меняю компоненты местами вообще, чтобы не усложнять ситуацию. Если запустить в блендере этот скрипт, то будет такой результат: Все данные о позиции, нормалях, треугольников взяты из реального level.geom файла. Сообщение отредактировал Pavel_Blend - 02.07.2020, 12:21 -------------------- |
 
|
|
02.07.2020, 12:44
Сообщение
#133
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
После экспериментов заметил такую вещь: если поставить всех loop'ам одинаковые нормали, то они всё равно будут смотреть в разные стороны. Не понимаю, почему в блендере это происходит.
-------------------- |
 
|
|
02.07.2020, 17:51
Сообщение
#134
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Я написал краткий пример импорта данных из level.geom без слияния вершин: Вроде норм - вершины слил, ребра жесткие - нормали и должны в разные стороны смотреть. Поменяй y и z - будут нормали перпендикулярно граням смотреть? Цитата norm = ( (103, 228, 202), (184, 241, 133), (229, 138, 202), (229, 138, 202), (184, 241, 133), (225, 161, 53), (92, 233, 65), (184, 241, 133), (103, 228, 202), (225, 161, 53), (184, 241, 133), (92, 233, 65) ) Почему у тебя на скрине 12 нормалей, хотя их всего 5 разных (1-9, 2-5-8-11, 3-4, 6-10, 7-12)(нумерация с 1). Как склеиваешь нормали? Может их склеивать, до преобразования во флоат? Может действительно у loop`а нормали задаются не в глобальном пространстве? Сообщение отредактировал abramcumner - 02.07.2020, 18:07 |
 
|
|
02.07.2020, 18:10
Сообщение
#135
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
abramcumner, поменял. Что-то результат не корректный:
Я сейчас попробую нарисовать эти нормали вручную, а не использовать блендеровский режим отображения кастомных нормалей. Может блендер что-то добавляет/умножает к нормалям. Хочу посмотреть, будут ли отличаться мои созданные нормали от блендеровских. -------------------- |
 
|
|
02.07.2020, 19:01
Сообщение
#136
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Нормали блендера не отличаются от моих созданных нормалей. Значит блендер не делает преобразований.
При импорте геометрии в блендер я поменял местами координаты вершин так: XYZ на XZY А нормали вершин поменял так: XYZ на ZXY Это самый верный результат, но есть недочёты. На простых моделях результат вроде бы верный, но почему-то нормали с одинаковым направлением импортируются так, что у них немного разное направление, из-за чего получается такой результат: Почему нормали не одинаково направлены (хотя их исходные данные в level.geom идентичны) я не знаю. Из одной вершины может выходить более одной нормали, а должна быть одна нормаль, так как шарик полностью сглажен. Почему у тебя на скрине 12 нормалей, хотя их всего 5 разных (1-9, 2-5-8-11, 3-4, 6-10, 7-12)(нумерация с 1). Как склеиваешь нормали? Может их склеивать, до преобразования во флоат? Может действительно у loop`а нормали задаются не в глобальном пространстве? Я сам нормали не скливаю, а "скармливаю" блендеру список нормалей. Он сам ищет одинаковые и склеивает их. Но почему-то некоторые нормали не склеиваются и получается из одной вершины выходит целый пучок почти одинаковых нормалей. Я сейчас могу предоставить список нормалей, которые я передаю блендеру и будет видно, что в этом списке все нормали повторяются, как и в level.geom. Я проверил и нормали задаются в глобальном пространстве. Мои созданные нормали совпали с блендеровскими. Только в блендеровских вместо одной нормали целый пучок (они отличаются не много друг от друга). Вот список: Код (0.584313725490196, -0.19215686274509802, 0.7882352941176471)
(0.584313725490196, 0.7960784313725491, 0.08235294117647052) (0.04313725490196085, 0.44313725490196076, 0.8901960784313725) (0.584313725490196, 0.7960784313725491, 0.08235294117647052) (-0.584313725490196, 0.7647058823529411, 0.26274509803921564) (0.04313725490196085, 0.44313725490196076, 0.8901960784313725) (-0.4901960784313726, -0.2784313725490196, 0.8274509803921568) (0.584313725490196, -0.19215686274509802, 0.7882352941176471) (0.04313725490196085, 0.44313725490196076, 0.8901960784313725) (-0.584313725490196, 0.7647058823529411, 0.26274509803921564) (-0.4901960784313726, -0.2784313725490196, 0.8274509803921568) (0.04313725490196085, 0.44313725490196076, 0.8901960784313725) Сообщение отредактировал Pavel_Blend - 02.07.2020, 19:04 -------------------- |
 
|
|
02.07.2020, 19:35
Сообщение
#137
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Pavel_Blend, если фейсы не сшиты, то будет больше одной нормали, из якобы одной точки.
Level.geom не является идеалом геометрии. Там багов выше крыши из-за оптимизации геометрии. Сообщение отредактировал Diesel - 02.07.2020, 19:39 |
 
|
|
02.07.2020, 19:37
Сообщение
#138
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
Pavel_Blend, а чего числа такие большие? Может, стоит их перед этим хотя бы до 4-6 знака опустить? Я сталкивался с проблемой когда Marmoset неправильно отображал модель в которой были числа с большим количеством знаков после запятой.
|
 
|
|
02.07.2020, 20:12
Сообщение
#139
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
mortan, не помогло округление до 5 знаков. Не знаю, что уже делать. Может разработчикам блендера написать, что создаётся куча нормалей, даже если они одинаковы. Может подскажут, что делать, а может это вообще баг.
-------------------- |
 
|
|
02.07.2020, 20:41
Сообщение
#140
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
mortan, не помогло округление до 5 знаков. Не знаю, что уже делать. Может разработчикам блендера написать, что создаётся куча нормалей, даже если они одинаковы. Может подскажут, что делать, а может это вообще баг. А loop`ы ты создаешь? Может блендер специально показывает пучок для твоего удобства, а так они одинаковые? Так-то даже в твоем списке с кучей цифр есть полностью одинаковые нормали. А ты уверен, что стоит для сталкерской геометрии можно использовать edge(?)-loop`ы? Сообщение отредактировал abramcumner - 02.07.2020, 20:52 |
 
|
|
Текстовая версия | Сейчас: 29.03.2024, 15:27 |