Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!

> Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

9 страниц V  « < 5 6 7 8 9 >  
Ответить в данную темуНачать новую тему
> Разбор форматов, Тема для обсуждения различных форматов игровых файлов
RayTwitty
сообщение 12.06.2020, 00:46
Сообщение #121


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Pavel_Blend @ 11.06.2020, 23:56) *
И такой вопрос: если взять оригинальную анимацию omf (от gsc) и сконвертировать её в skls с помощью конвертера, а потом с помощью actor editor экспортировать обратно в omf, то будет ли потеря качества анимаций? Станут ли кости сильнее дёргаться. Просто я сейчас сравнил и не заметил разницы. Что там что там есть незначительное дрожание.

У меня как-то было что добавлялось 0.03 сек в конец после конвертера
https://xray-engine.org/index.php?title=Баги_анимаций


--------------------
Перейти в начало страницы
 
mortan
сообщение 12.06.2020, 17:17
Сообщение #122


Продвинутый геймер
********

Репутация:   16  
Группа: Участник
Сообщений: 222
Награды: 3
Регистрация: 28.06.2016




Вставить ник Цитировать выделенное в форуму быстрого ответа


Pavel_Blend, вот пример того как анимации могут сломаться. Происходит это рандомно. https://youtu.be/rAxRyRDHOPc
Перейти в начало страницы
 
Pavel_Blend
сообщение 12.06.2020, 20:52
Сообщение #123


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


mortan, так это скорее всего из-за бардаковского плагина экспорта из milkshape 3d. Ты ведь из милки экспортировал анимации? Я такой баг именно после милки встречал. После СДК такого нет.

ПС: кстати бардак столько всего написал: и конвертер ogf2object, и декомпилятор уровней, и плагины к maya, max, milshape... Столько всего сделал для моддинга. Если бы не он, то не известно, что было бы с моддингом сейчас.


--------------------
Перейти в начало страницы
 
mortan
сообщение 12.06.2020, 22:08
Сообщение #124


Продвинутый геймер
********

Репутация:   16  
Группа: Участник
Сообщений: 222
Награды: 3
Регистрация: 28.06.2016




Вставить ник Цитировать выделенное в форуму быстрого ответа


Pavel_Blend, никогда милкой не пользовался, это происходит при экспорте анимации из 3д макса в sdk

Сообщение отредактировал mortan - 12.06.2020, 22:08
Перейти в начало страницы
 
Pavel_Blend
сообщение 13.06.2020, 18:42
Сообщение #125


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


mortan, то есть ты из 3д макса экспортируешь анимации в skls, потом открываешь в AE и они выглядят нормально. А после экспорта в omf из AE в игре такие баги?


--------------------
Перейти в начало страницы
 
mortan
сообщение 13.06.2020, 21:52
Сообщение #126


Продвинутый геймер
********

Репутация:   16  
Группа: Участник
Сообщений: 222
Награды: 3
Регистрация: 28.06.2016




Вставить ник Цитировать выделенное в форуму быстрого ответа


Pavel_Blend, Да, верно, анимация обычная idle_aim, без перемещения костей. Эта трабла вообще появилась когда пришлось анимацию прицеливания по новой экспортировать, потому что новая анимка в версии с подствольником сбивает прицеливание, хотя они полностью идентичны во всём кроме положения левой руки,причем последняя такой проблемы как на видео не имеет. То есть берём оригинальный idle_aim - с подствольником сбивается прицеливание, заменяем idle_aim - прицеливание не сбивается но без подствольника появляется баг как на видосе.
Перейти в начало страницы
 
Pavel_Blend
сообщение 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 (так как они являются не мировыми, а тангенсальными).

В общем вопрос такой: относительно чего идёт просчёт нормалей в сталкере?


--------------------
Перейти в начало страницы
 
abramcumner
сообщение 01.07.2020, 16:18
Сообщение #128


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Pavel_Blend @ 30.06.2020, 09:39) *
не получается правильно импортировать нормали (а именно сглаживание).

Закажь, как не получается.

Цитата(Pavel_Blend @ 30.06.2020, 09:39) *
В общем вопрос такой: относительно чего идёт просчёт нормалей в сталкере?

Да тоже в глобальном пространстве.

Запили локацию в виде кубика, прогони через СДК/хрлц. Какие будут нормалив игре и в блендере после импорта? Потом какой-нибудь цилиндр.
Перейти в начало страницы
 
Pavel_Blend
сообщение 01.07.2020, 18:13
Сообщение #129


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


abramcumner, вот коммит, в котором я пытаюсь сделать импорт нормалей:
github
Преобразование нормалей находится в функции 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


--------------------
Перейти в начало страницы
 
abramcumner
сообщение 02.07.2020, 11:17
Сообщение #130


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Pavel_Blend, не скачи так быстро.
А почему на скрине вообще от одной вершины идет 3 нормали? И по три нормали у тебя у каждой вершины. Как то странно...
В level.geom уже должно быть 1 вершина - 1 нормаль.

Цитата(Pavel_Blend @ 01.07.2020, 18:13) *
Я не знаю, как правильно сделать преобразование нормалей. Вот система координат сталкера:

Ось X - смотрит вправо
Ось Y - смотрит вверх
Ось Z - смотрит вперёд

Их нужно преобразовать в блендеровскую систему:

Ось X - смотрит вправо
Ось Y - смотрит вперёд
Ось Z - смотрит вверх

Что для этого нужно сделать? Менять местами компоненты нормали? Или ещё нужно менять знак нормали?

У тебя же уже есть разбивка по компонентам. Собираешь из них блендеровскую нормаль. Если бы ось соотвествующего компонента смотрела в другую сторону, то у этой компоненты поменял бы знак. В данном случае этого не требуется.
У меня получилось так:
Пусть Nсталкера = (x,y,z), тогда Nблендера=(x,z,y).
Перейти в начало страницы
 
Pavel_Blend
сообщение 02.07.2020, 11:46
Сообщение #131


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 02.07.2020, 11:17) *
А почему на скрине вообще от одной вершины идет 3 нормали? И по три нормали у тебя у каждой вершины. Как то странно...
В level.geom уже должно быть 1 вершина - 1 нормаль.


Да, в level.geom у одной вершины одна нормаль. Но и у каждой вершины в level.geom только одна uv координата. Это значит, что в местах uv швов будут не склеенные вершины. Так же это значит, что в тех местах, где нормали имеют разное направление, тоже будут не склеенные вершины.

В блендере не удобно редактировать меш, у которого куча не склеенных вершин. При импорте я их склеиваю. И ещё в блендере юви координаты и нормали для сглаживания задаются не для вершины, а для loop'а. Loop - это ребро полигона, которое выходит из вершины (то есть loop - это элемент, который объединяет в себе вершину и ребро полигона), в данном случае ребро треугольника. Поэтому импортируется 3 нормали (для каждого loop'а треугольника). Нормали и юви реализованы с помощью loop'ов из-за того, чтобы можно было создавать швы на юви развёртке. Если юви развёртка имеет швы/разрезы, то будут вершины, которые имеют более 1 юви координаты.



Я вершины правильно склеиваю, потому что юви карта правильная.

У каждой вершины по 3 нормали из-за того, что одна вершина хранится в 3 loop'ах. Но почему-то нормали не склеиваются, видимо имеют разные значения. Если бы нормали имели одинаковые значения, то 3 нормали склеелись бы в одну нормаль. Я пока не знаю, почему нормали разные в определённых вершинах.


--------------------
Перейти в начало страницы
 
Pavel_Blend
сообщение 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


--------------------
Перейти в начало страницы
 
Pavel_Blend
сообщение 02.07.2020, 12:44
Сообщение #133


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


После экспериментов заметил такую вещь: если поставить всех loop'ам одинаковые нормали, то они всё равно будут смотреть в разные стороны. Не понимаю, почему в блендере это происходит.


--------------------
Перейти в начало страницы
 
abramcumner
сообщение 02.07.2020, 17:51
Сообщение #134


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Pavel_Blend @ 02.07.2020, 12:17) *
Я написал краткий пример импорта данных из 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
Перейти в начало страницы
 
Pavel_Blend
сообщение 02.07.2020, 18:10
Сообщение #135


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


abramcumner, поменял. Что-то результат не корректный:


Я сейчас попробую нарисовать эти нормали вручную, а не использовать блендеровский режим отображения кастомных нормалей. Может блендер что-то добавляет/умножает к нормалям. Хочу посмотреть, будут ли отличаться мои созданные нормали от блендеровских.


--------------------
Перейти в начало страницы
 
Pavel_Blend
сообщение 02.07.2020, 19:01
Сообщение #136


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Нормали блендера не отличаются от моих созданных нормалей. Значит блендер не делает преобразований.

При импорте геометрии в блендер я поменял местами координаты вершин так: XYZ на XZY
А нормали вершин поменял так: XYZ на ZXY

Это самый верный результат, но есть недочёты. На простых моделях результат вроде бы верный, но почему-то нормали с одинаковым направлением импортируются так, что у них немного разное направление, из-за чего получается такой результат:




Почему нормали не одинаково направлены (хотя их исходные данные в level.geom идентичны) я не знаю. Из одной вершины может выходить более одной нормали, а должна быть одна нормаль, так как шарик полностью сглажен.

Цитата(abramcumner @ 02.07.2020, 17:51) *
Почему у тебя на скрине 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


--------------------
Перейти в начало страницы
 
Diesel
сообщение 02.07.2020, 19:35
Сообщение #137


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Pavel_Blend, если фейсы не сшиты, то будет больше одной нормали, из якобы одной точки.

Level.geom не является идеалом геометрии. Там багов выше крыши из-за оптимизации геометрии.


Сообщение отредактировал Diesel - 02.07.2020, 19:39
Перейти в начало страницы
 
mortan
сообщение 02.07.2020, 19:37
Сообщение #138


Продвинутый геймер
********

Репутация:   16  
Группа: Участник
Сообщений: 222
Награды: 3
Регистрация: 28.06.2016




Вставить ник Цитировать выделенное в форуму быстрого ответа


Pavel_Blend, а чего числа такие большие? Может, стоит их перед этим хотя бы до 4-6 знака опустить? Я сталкивался с проблемой когда Marmoset неправильно отображал модель в которой были числа с большим количеством знаков после запятой.
Перейти в начало страницы
 
Pavel_Blend
сообщение 02.07.2020, 20:12
Сообщение #139


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


mortan, не помогло округление до 5 знаков. Не знаю, что уже делать. Может разработчикам блендера написать, что создаётся куча нормалей, даже если они одинаковы. Может подскажут, что делать, а может это вообще баг.


--------------------
Перейти в начало страницы
 
abramcumner
сообщение 02.07.2020, 20:41
Сообщение #140


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Pavel_Blend @ 02.07.2020, 20:12) *
mortan, не помогло округление до 5 знаков. Не знаю, что уже делать. Может разработчикам блендера написать, что создаётся куча нормалей, даже если они одинаковы. Может подскажут, что делать, а может это вообще баг.

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

А ты уверен, что стоит для сталкерской геометрии можно использовать edge(?)-loop`ы?

Сообщение отредактировал abramcumner - 02.07.2020, 20:52
Перейти в начало страницы
 

9 страниц V  « < 5 6 7 8 9 >
Ответить в данную темуНачать новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29.03.2024, 15:27