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

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

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

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

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

9 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Разбор форматов, Тема для обсуждения различных форматов игровых файлов
Pavel_Blend
сообщение 09.06.2018, 11:49
Сообщение #1


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

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




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


Предлагаю в этой теме писать вопросы/ответы по поводу устройства различных форматов игровых файлов сталкера. Начиная от форматов 3д моделей и заканчивая спавном.

И мой первый вопрос о формате level.geom:

этот формат хранит вершинные буферы (чанк 0x9). Каждый буфер имеет вершины. Каждая вершина имеет нормали, которые хранятся в четырёх числах длиной в один байт каждая. Вопрос: как преобразовать эти четыре числа в привычные 3 числа типа float?


--------------------
Перейти в начало страницы
 
Молния в вакууме
сообщение 09.06.2018, 13:29
Сообщение #2


Почти Игроман
*********

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




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


Всё уже давно разобрано. Достаточно посмотреть исходники xray-engine-toolset или самой игры, и всё станет ясно.
Каждый компонент нормаля рассчитывается как X * 0.0078431372549019607843137254901961 - 1.0. Где X - прочитанное однобайстное число. Четвёртое не используеся.
Перейти в начало страницы
 
atanda
сообщение 09.06.2018, 13:37
Сообщение #3
Pro gamer

Почти Игроман
*********

Репутация:   72  
Группа: Участник
Сообщений: 622
Регистрация: 05.11.2017




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


Кое-какая информация.
Перейти в начало страницы
 
Pavel_Blend
сообщение 09.06.2018, 13:46
Сообщение #4


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

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




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


Цитата(СамСебеСекретарша @ 09.06.2018, 14:29) *
0.0078431372549019607843137254901961

а что это за число такое? Откуда оно берётся? И в каком файле исходников xray engine toolset находятся данные вычисления?

Кстати, мне это нужно для того, чтобы написать импорт и экспорт уровней в блендере. Как считаете бредовая идея или нет? Это нужно для того, чтобы можно было редактировать уже скомпилированные уровни. Делать косметические изменения (например, поправить юви развёртку) и экспортировать обратно без повторной компиляции. Ну и ещё просто интересно, как устроены форматы уровней. Хочется в блендере посмотреть на уровень со всеми данными (включая карты освещения и вертексное освещение).


--------------------
Перейти в начало страницы
 
Молния в вакууме
сообщение 09.06.2018, 14:31
Сообщение #5


Почти Игроман
*********

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




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


Цитата(Pavel_Blend @ 09.06.2018, 13:46) *
а что это за число такое? Откуда оно берётся? И в каком файле исходников xray engine toolset находятся данные вычисления?

Это число ничто иное как 1 - (-1) / 255.
Берётся оно вот в этой функции:
Код
float xr_reader::r_float_q8(float min, float max) { return r_u8()*((max - min)/255.f) + min; }

При вызове с min = -1 и max = 1.

Само чтение нормалей происходит в файле xr_geom_buf.cxx, функция:
Код
static inline void r_qnormal(xr_reader& r, fvector3& n)
{
    n.x = r.r_float_q8(-1.f, 1.f);
    n.y = r.r_float_q8(-1.f, 1.f);
    n.z = r.r_float_q8(-1.f, 1.f);
    r.advance(sizeof(uint8_t));    // пропускаем лишний байт
}


Цитата(Pavel_Blend @ 09.06.2018, 13:46) *
Как считаете бредовая идея или нет?

Да нет, идея хорошая. Глядишь так вообще весь функционал сталкерского СДК в блендере реализуешь.
Перейти в начало страницы
 
RedMagic
сообщение 09.06.2018, 17:30
Сообщение #6


Высший Игровой Бог
************************

Репутация:   1747  
Группа: Супермодератор
Сообщений: 12594
Награды: 15
Регистрация: 05.11.2009




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


Цитата(Pavel_Blend @ 09.06.2018, 13:46) *
Кстати, мне это нужно для того, чтобы написать импорт и экспорт уровней в блендере.

Пили уже сразу импорт сцены в Unity. Я недавно писал о такой идее: https://www.gameru.net/forum/index.php?act=...amp;pid=1637552
Настроить все ассеты сталкера (модели и материалы из сталкерского сдк), а потом просто импортнуть их положение в сцене.
С точки зрения моделирования профита мало (модельки все равно надо править в блендере), а вот поиграться в великого геймдизайнера в современном WYSIWYG редакторе - вполне интересно. Плюс можно получить все плюшки современного движка.


--------------------
Перейти в начало страницы
 
Pavel_Blend
сообщение 19.06.2018, 08:51
Сообщение #7


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

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




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


А для чего нужны файлы level.geomx? Насколько я знаю, они используются только на динамическом освещении. Но для чего именно, не знаю.


--------------------
Перейти в начало страницы
 
Neo][
сообщение 19.06.2018, 10:42
Сообщение #8


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




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


Цитата(Pavel_Blend @ 19.06.2018, 10:51) *
А для чего нужны файлы level.geomx

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


--------------------
Перейти в начало страницы
 
Yara
сообщение 19.06.2018, 15:25
Сообщение #9


Опытный Геймер
*******

Репутация:   50  
Группа: Участник
Сообщений: 157
Награды: 2
Регистрация: 20.03.2014




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


Видел где-то правленый xrCompressor, там была заметка, что отключено сжатие для level.geomx, недавно глянул описание пакера Oxygen, там отключено для .ogm(ролики). Мне интересно, какие ещё файлы не стоит сжимать? Или может для быстродействия, вообще их держать в распакованной геймдате.
Перейти в начало страницы
 
Pavel_Blend
сообщение 21.06.2018, 20:29
Сообщение #10


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

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




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


Помогите решить проблему:
делал импорт ogf в blender и не могу преобразовать нормали вершин в острые рёбра. Точнее у меня получилось, но не совсем правильно. В общем мне нужно сделать так же, как это сделано в конвертере от Бардака (когда идёт конвертация ogf в object). Кто нибудь может помочь, исправить код на питоне? Вот ссылка:
https://github.com/PavelBlend/blender_stalk...e/smooth_groups
Или если не знаете питон, то можете объяснить, как в конвертере Бардака это сделано? Я просто C++ вообще не знаю.


--------------------
Перейти в начало страницы
 
macron
сообщение 21.06.2018, 20:35
Сообщение #11


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

Репутация:   1690  
Группа: Участник
Сообщений: 7021
Награды: 11
Регистрация: 22.02.2006




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


Цитата(Yara @ 19.06.2018, 15:25) *
что отключено сжатие для level.geomx

level.geom/level.geomx нельзя сжимать при компресии в xdb (преимущественно мультиплеер). Для db сжимать можно всё.

Цитата(Yara @ 19.06.2018, 15:25) *
Или может для быстродействия, вообще их держать в распакованной геймдате.

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

Сообщение отредактировал macron - 21.06.2018, 20:40
Перейти в начало страницы
 
Neo][
сообщение 22.06.2018, 07:42
Сообщение #12


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




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


Цитата(macron @ 21.06.2018, 22:35) *
А из архива как бы в память посылается сразу, не тратя время на чтение с диска каждого по отдельности

macron, как бы в память посылается, читаясь с диска biggrin.gif Нет там особого выигрыша для крупных файлов(мелкие - да, в теории должны обрабатываться быстрее, но там столько нюансов, что выигрыш может быть равен статистической погрешности). А вот распаковка может занимать больше времени в процентном соотношении.

Цитата(Pavel_Blend @ 21.06.2018, 22:29) *
делал импорт ogf в blender и не могу преобразовать нормали вершин в острые рёбра

Pavel_Blend, а что такое острые рёбра?


--------------------
Перейти в начало страницы
 
Pavel_Blend
сообщение 22.06.2018, 09:18
Сообщение #13


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

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




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


Цитата(Neo][ @ 22.06.2018, 08:42) *
Pavel_Blend, а что такое острые рёбра?

Острые рёбра в blender (или Sharp Edges) - это аналог групп сглаживания в 3ds max. За счёт этих рёбер блендер понимает, что нужно сглаживать, а что нет. Вот пример:

Зелёные рёбра - это острые рёбра.


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


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

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




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


Получилось всё таки разобраться со сглаживанием в ogf. Убил на это около 3 дней. Правда теперь импорт очень медленный, но терпимо. Вот импортёр, если кому интересно: https://github.com/PavelBlend/blender_stalker_tools_addon

В этом плагине кроме импорта ogf есть так же импорт level/level.geom, но в нём пока не реализовано сглаживание.

Сообщение отредактировал Pavel_Blend - 22.06.2018, 12:07


--------------------
Перейти в начало страницы
 
Pavel_Blend
сообщение 27.06.2018, 16:21
Сообщение #15


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

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




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


Ещё возник вопрос по поводу ogf:

в ogf есть чанк 0x3, который хранит вершины. Вершины могут иметь разный формат. Например, 0x12071980. Этот формат может хранить по одному весу кости на вершину. Т. е. с помощью этого формата одну вершину можно привязать только к одной кости. А есть ещё формат 0x240e3300. С помощью этого формата одну вершину можно привязать к двум костям.

Вершины формата 0x240e3300 имеют вид:

индекс первой кости 2 байта
индекс второй кости 2 байта
позиция (x, y, z) 12 байт
нормаль 12 байт
тангенс 12 байт
бинормаль 12 байт
влияние кости 4 байта
текстурные координаты 8 байт

Влияние кости - это дробное число

Теперь сам вопрос:
Почему кости две, а влияние одно? Как из этого одного дробного числа получить два дробных числа (по одному влиянию на каждую кость)?


--------------------
Перейти в начало страницы
 
Молния в вакууме
сообщение 27.06.2018, 16:40
Сообщение #16


Почти Игроман
*********

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




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


Цитата
Почему кости две, а влияние одно? Как из этого одного дробного числа получить два дробных числа (по одному влиянию на каждую кость)?

Потому что влияние всех костей в сумме должно быть ровно единице. Следовательно чтобы узнать неизвестное число нужно из единицы вычесть сумму влияния всех остальных костей.

Сообщение отредактировал СамСебеСекретарша - 27.06.2018, 16:41
Перейти в начало страницы
 
Pavel_Blend
сообщение 27.06.2018, 17:14
Сообщение #17


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

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




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


СамСебеСекретарша, спасибо, получилось. Я правда ещё добавил одно условие: если индекс первой кости равен индекс второй кости, то вес для второй кости не считывать. А то без этого условия у меня были неправильные веса.


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


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

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




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


Опять у меня не получается одна вещь, связанная с форматом ogf.

Если в СДК в object файле установить флаг "2 sided" у материала, то при экспорте в ogf будет сохраняться куча одинаковых полигонов, но имеющие разные нормали. К примеру, один полигон 10, 12, 17 из object файла, при экспорте в ogf сохраниться в виде двух полигонов 10, 12, 17 и 10, 17, 12.

Вопрос: как отфильтровать полигоны, полученные с помощью флага "2 sided"? Если первый попавшийся полигон импортировать, а второй попавшийся не импортировать, то получится так:

Тёмные полигоны на моделе справа - это те полигоны, которые обращены в противоположную сторону. Т. е. не получается определить главную сторону two-sided полигонов. Как это реализовано в конвертере бардака? В каком файле исходников xray_re_tools код, который фильтрует двойные полигоны?


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


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

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




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


Pavel_Blend, какие то острые рёбра? Там разное сглаживание. Сглаживание основной поверхности шара 80ед., например, а внутри квадратного сегмента например 40 (это будет смертельно для шара), ну например - 70 или 60.
А что если заморочится, через Макс с экспортом-импортом. Для Макса есть все инструменты, а уже из Макса гони в Блендер, через FBX, DAE (не шарю в Блендере к сожалению).

На сколько я помню, то уже кто то делал плагины для Блендера под ogf или object (запамятовал).
https://yadi.sk/d/cbXldS603YYM2b Вот там глянь, может даже свое-твоё творение встретиться.

Сообщение отредактировал andreyholkin - 28.06.2018, 18:16
Перейти в начало страницы
 
Supple Hope
сообщение 28.06.2018, 19:24
Сообщение #20


Босс
********************

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




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


Цитата(andreyholkin @ 28.06.2018, 17:03) *
Pavel_Blend, какие то острые рёбра? Там разное сглаживание. Сглаживание основной поверхности шара 80ед., например, а внутри квадратного сегмента например 40 (это будет смертельно для шара), ну например - 70 или 60.
То острые ребра. В 3д-пакетах есть 2 вида шейдинга - плоский и сглаженный. В сглаженном нормаль каждой точки повехности интерполируется от нормалей вершин между котороми она лежит. В плоском шейдинге нормаль поверхности одна на весь полигон и не интерполируется от вершины к вершине. Реализуется это под капотом так, что вершина сплитится для каждой плоской грани и ее нормаль имеет вектор параллельный нормали полигона, то есть для рендера существует две вершины с разными нормалями, а для редактирования это все еще одна вершина, благодаря чему не руинится топология модели.

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

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

 



Текстовая версия Сейчас: 28.03.2024, 21:28