Разбор форматов, Тема для обсуждения различных форматов игровых файлов |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов
Разбор форматов, Тема для обсуждения различных форматов игровых файлов |
27.06.2019, 20:54
Сообщение
#61
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Всё равно не получается. Может я не правильно указываю порядок компонент нормали или неправильно указываю их знаки.
Вот как всё выглядит в игре (спава) и в блендере (слева): Вот так выглядит меш, если указать другой порядок компонент нормалей: Меш стал темнее, но нет чётких границ. Сглаживание стало нормальным, а направление нормалей не правильное. -------------------- |
 
|
|
|
|
27.06.2019, 21:31
Сообщение
#62
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Так в итоге формула: 2.0 * x / 255 - 1.0 и порядок x,y,z,a?
Это правильная формула. Зачем тебе такое же освещение, как в сталкере? Особенно с точки зрения "темнее". Лучше включи показ нормалей в блендере и посмотри, куда они смотрят. |
 
|
|
27.06.2019, 21:45
Сообщение
#63
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Так в итоге формула: 2.0 * x / 255 - 1.0 и порядок x,y,z,a? я сделал такую формулу и порядок такой же и всё выглядит не так как в игре. Потому что в сталкере отличается система координат от блендера. В сталкере: X - вправо, Y - вверх, Z - вперёд. В блендере: X - вправо, Y - вперёд, Z - вверх. Я во всех импортёрах меняю позицию с XYZ на XZY. И вращение с XYZ на -X-Z-Y. Но я не знаю как менять нормаль. Если её не менять то получается не так как в игре. Зачем тебе такое же освещение, как в сталкере? Особенно с точки зрения "темнее". Мне не нужно, чтобы было темнее, и не нужны квадраты в сглаживании. Мне нужно, чтобы всё было так же как в игре. Я хочу сделать полный импорт level файлов, чтобы потом сделать полноценный экспортёр в level. Лучше включи показ нормалей в блендере и посмотри, куда они смотрят. Вот тут труднее объяснить. В общем в блендере есть два вида нормалей: стандартные и кастомные. Я использую кастомные, так как нету возможности указать стандартные нормали. Стандартные нормали расчитываются на лету, при каждом изменении меша. А кастомные не меняются. Но кастомные нормали нельзя просмотреть. Можно только стандартные. -------------------- |
 
|
|
27.06.2019, 22:29
Сообщение
#64
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Просмотреть кастомные нормали нельзя, но я добавил оранжевые перекрестия в точку, где куда должны указывать нормали:
Как видно, нормали почти совпадают с теми, которые нужно получить (синии линии). то есть значения нормалей правильные, а вот затенение не правильное: -------------------- |
 
|
|
27.06.2019, 23:23
Сообщение
#65
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Если её не менять то получается не так как в игре. Да, тогда нормаль надо менять как позицию. Цитата Как видно, нормали почти совпадают с теми, которые нужно получить (синии линии). Все-таки расхождение великовато. Странно. А в оригинальной модели кубика оранжевые крестики совпадали с синими линиями? Или там крестиков не было? В кубике у нормалей все компоненты равны, непонятно правильно или нет обрабатываются. Может шар попробовать? |
 
|
|
28.06.2019, 09:41
Сообщение
#66
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
В кубике у нормалей все компоненты равны, непонятно правильно или нет обрабатываются. Может шар попробовать? Вот шар: А вот я создал кастомные нормали в виде оранжевых линий, и в виде синих линий - это те нормали, которые должны быть: Как видно, нормали совпадают, но сглаживание не такое как в игре. Я сделал позицию так: XZY, а нормаль так: ZXY, так как во всех других случаях получалась билиберда. В общем я правильно проинтерпретировал значения нормалей, но не понятно, почему сглаживание такое. Кстати на лод объектах сглаживание нормальное, но на террейне - нет. Хотя код импорта нормалей одинаков в обоих случаях. Вот код: Может кто знает питон и найдёт ошибку. -------------------- |
 
|
|
28.06.2019, 11:28
Сообщение
#67
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
А для чего нужно hemi? То есть у вершины хранятся сами нормали X, Y, Z, а вот в конце идёт один байт hemi. Зачем это hemi, если есть карты освещения, в которых уже просчитано hemi? То есть некоторые визуалы имеют два значения hemi: первое - вертексное hemi, второе - из карт освещения. Вот ниже вертексное hemi:
В игре в шейдерах оно видимо не используется. Или как? -------------------- |
 
|
|
28.06.2019, 12:59
Сообщение
#68
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
|
 
|
|
28.06.2019, 22:44
Сообщение
#69
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
У меня опять вопросы возникли по поводу формата level.geom.
В чанке fsL_VB хранятся вершинные буферы. Для деревьев хранятся данные SHORT4, которые содержат текстурные координаты (4 байта) и данные для шейдера (2 байта) + неиспользуемые данные (2 байта). Данные для шейдера - это коэффициент влияния ветра на вершину. Как лучше преобразовать это значение во float? Если просто разделить коэффициент на 0xFFFF, то получится очень маленькое число, меньше 0.05. Мне нужно, чтобы эти значения были до 1.0. Я сделал так: коэффициент влияния ветра / 0xFFFF * 25. Число 25 взято с потолка. И получилось следующее: Это группы вершин. То есть привязка. Такая же, как при привязывании модели к скелету. Чем краснее цвет, тем больше вес, синий - отсутствие веса, красные - вес 1.0 Полутона - промежуточные значения. Зачем я умножил на 25 значение коэффициента? Просто если этого не сделать, то все веса будут практически равны 0.0 и невозможно будет отличить их друг от друга. Меш будет синим. Мне нужно знать, на что нужно умножить коэффициент, чтобы значения не превышали 1.0. Что можно поставить, вместо 25? Какое значение коэффициента влияния ветра является максимально возможным? 0xFFFF? Или всё же меньше 0xFFFF? -------------------- |
 
|
|
04.10.2019, 00:28
Сообщение
#70
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Делаю экспорт в level/level.geom из блендера. Чтобы можно было бы править уже скомпилированные уровни без повторной компиляции. Но застрял на моменте. Кто хорошо знает, как устроена статическая геометрия уровня? Просто я сделал экспорт в level, запускаю этот уровень, а игра вылетает на стадии "Загрузка базы пространств". Вот лог из 1.0007 патча от КД:
Код [10/04/19 00:06:25] Загрузка базы пространств... [10/04/19 00:06:25] stack trace: [10/04/19 00:06:25] [10/04/19 00:06:25] 0023:61DEFFBD xrRender_R1.dll, CRender::getVisual(), j:\xray_sources\trunk\xray\xr_3da\xrrender_r1\fstaticrender.cpp, 181 [10/04/19 00:06:25] 0023:0149BAFF XR_3DA.exe, FHierrarhyVisual::Load(), j:\xray_sources\trunk\xray\xr_3da\fhierrarhyvisual.cpp, 53 [10/04/19 00:06:25] 0023:61DFD88F xrRender_R1.dll, CRender::LoadVisuals(), j:\xray_sources\trunk\xray\xr_3da\xrrender_r1\fstaticrender_loader.cpp, 250 [10/04/19 00:06:25] 0023:61DFDD57 xrRender_R1.dll, CRender::level_Load(), j:\xray_sources\trunk\xray\xr_3da\xrrender_r1\fstaticrender_loader.cpp, 72 [10/04/19 00:06:25] 0023:01486E21 XR_3DA.exe, IGame_Level::Load(), j:\xray_sources\trunk\xray\xr_3da\igame_level.cpp, 92 [10/04/19 00:06:25] 0023:61AA2BE1 xrGame.dll, CLevel::net_start_client3(), j:\xray_sources\trunk\xray\xr_3da\xrgame\level_network_start_client.cpp, 76 [10/04/19 00:06:25] 0023:014632AA XR_3DA.exe, CRenderDevice::Run(), j:\xray_sources\trunk\xray\xr_3da\device.cpp, 217 [10/04/19 00:06:25] 0023:0148CB35 XR_3DA.exe, Startup(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 268 [10/04/19 00:06:25] 0023:0148D127 XR_3DA.exe, WinMain_impl(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 685 [10/04/19 00:06:25] 0023:0148D2A7 XR_3DA.exe, WinMain(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 745 [10/04/19 00:06:25] 0023:0143B9CD XR_3DA.exe, __tmainCRTStartup(), f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c, 547 [10/04/19 00:06:25] 0023:776833CA kernel32.dll, BaseThreadInitThunk() [10/04/19 00:06:25] 0023:77E59ED2 ntdll.dll, RtlInitializeExceptionChain() [10/04/19 00:06:25] 0023:77E59EA5 ntdll.dll, RtlInitializeExceptionChain() [10/04/19 00:06:25] [10/04/19 00:06:25] [error][ 259] : Дополнительные данные отсутствуют. [10/04/19 00:06:25] Движок какие-то требования накладывает на иерархию визуалов уровня? Чтобы иерархические модели были в определённом порядке расположены? Этот уровень не запускается в игре, зато если его импортировать обратно в блендер, то всё корректно импортируется. Если нужны level и level.geom файлы для выяснения причины вылета, то могу попозже скинуть. -------------------- |
 
|
|
04.10.2019, 00:45
Сообщение
#71
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Pavel_Blend, геом финализируется в level - файле.
И еще нафига то обновляет build.cform - это для травы и аи-сетки однако. |
 
|
|
04.10.2019, 00:54
Сообщение
#72
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
Скорее всего неправильно записал айди в чанк 0x0000000A (OGF_CHILDREN_L).
Всё модели разных типов из чанка fsL_VISUALS после загрузки харянтся в одном большом массиве, в таком же порядке как в файле level. Иерархические визуалы хранят список тех кто ниже в иерархии в виде индексов в этот массив. |
 
|
|
04.10.2019, 01:09
Сообщение
#73
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Pavel_Blend, ничего у тебя не выйдет. Скорее всего.
Последовательность: build.lights level.cform level.geomx level.geom level build.cform А три файла должны быть из одного компиля: level.geomx level.geom level Иначе у тебя будет ёжик из вертексов. Сообщение отредактировал Дизель - 04.10.2019, 01:09 |
 
|
|
04.10.2019, 20:33
Сообщение
#74
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Вроде поборол этот вылет. Изменил значения индексов визуалов в чанке CHILDREN_L.
Но появился второй вылет на этапе "Клиент: Синхронизация". Код [10/04/19 20:27:41] stack trace: [10/04/19 20:27:41] [10/04/19 20:27:41] 0023:68A14586 d3d9.dll, Direct3DCreate9Ex() [10/04/19 20:27:41] 0023:68A14562 d3d9.dll, Direct3DCreate9Ex() [10/04/19 20:27:41] 0023:68A1BA0C d3d9.dll, Direct3DCreate9Ex() [10/04/19 20:27:41] 0023:63A440AA xrRender_R1.dll, Fvisual::Render(), j:\xray_sources\trunk\xray\xr_3da\xrrender\fvisual.cpp, 187 [10/04/19 20:27:41] 0023:63A5BFB7 xrRender_R1.dll, mapNormal_Render(), j:\xray_sources\trunk\xray\xr_3da\xrrender\r__dsgraph_render.cpp, 32 [10/04/19 20:27:41] 0023:63A5D575 xrRender_R1.dll, R_dsgraph_structure::r_dsgraph_render_graph(), j:\xray_sources\trunk\xray\xr_3da\xrrender\r__dsgraph_render.cpp, 276 [10/04/19 20:27:41] 0023:63A6173D xrRender_R1.dll, CRender::Render(), j:\xray_sources\trunk\xray\xr_3da\xrrender_r1\fstaticrender.cpp, 521 [10/04/19 20:27:41] 0023:636F66B9 xrGame.dll, CLevel::OnRender(), j:\xray_sources\trunk\xray\xr_3da\xrgame\level.cpp, 610 [10/04/19 20:27:41] 0023:0012205E XR_3DA.exe, CRegistrator<pureRender>::Process(), j:\xray_sources\trunk\xray\xr_3da\pure.h, 77 [10/04/19 20:27:41] 0023:001638F4 XR_3DA.exe, CRenderDevice::Run(), j:\xray_sources\trunk\xray\xr_3da\device.cpp, 257 [10/04/19 20:27:41] 0023:0018CB35 XR_3DA.exe, Startup(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 268 [10/04/19 20:27:41] 0023:0018D127 XR_3DA.exe, WinMain_impl(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 685 [10/04/19 20:27:41] 0023:0018D2A7 XR_3DA.exe, WinMain(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 745 [10/04/19 20:27:41] 0023:0013B9CD XR_3DA.exe, __tmainCRTStartup(), f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c, 547 [10/04/19 20:27:41] 0023:76B133CA kernel32.dll, BaseThreadInitThunk() [10/04/19 20:27:41] 0023:77859ED2 ntdll.dll, RtlInitializeExceptionChain() [10/04/19 20:27:41] 0023:77859EA5 ntdll.dll, RtlInitializeExceptionChain() [10/04/19 20:27:41] [10/04/19 20:27:41] [error][ 8] : Недостаточно памяти для обработки команды. Это из-за того, что размер вертекс буферов и индекс буферов больше чем 2048 кб? Просто на данный момент времени экспортёр создаёт один вертекс буфер и один индексный буфер, сколько бы ни было вершин и треугольников. -------------------- |
 
|
|
04.10.2019, 20:57
Сообщение
#75
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Сделал экспорт маленького уровня, у которого один вершинный буфер не более 2048 кб. В итоге игра запустилась, но вылетает когда пытаюсь посмотреть на визуалы уровня:
Код [10/04/19 20:50:30] * MEMORY USAGE: 110203 K [10/04/19 20:50:32] stack trace: [10/04/19 20:50:32] [10/04/19 20:50:32] 0023:704C4586 d3d9.dll, Direct3DCreate9Ex() [10/04/19 20:50:32] 0023:704C4562 d3d9.dll, Direct3DCreate9Ex() [10/04/19 20:50:32] 0023:704CBA0C d3d9.dll, Direct3DCreate9Ex() [10/04/19 20:50:32] 0023:6E2640AA xrRender_R1.dll, Fvisual::Render(), j:\xray_sources\trunk\xray\xr_3da\xrrender\fvisual.cpp, 187 [10/04/19 20:50:32] 0023:6E27C740 xrRender_R1.dll, R_dsgraph_structure::r_dsgraph_render_R1_box(), j:\xray_sources\trunk\xray\xr_3da\xrrender\r__dsgraph_render.cpp, 645 [10/04/19 20:50:32] 0023:6E25949D xrRender_R1.dll, CLightProjector::calculate(), j:\xray_sources\trunk\xray\xr_3da\xrrender_r1\lightprojector.cpp, 242 [10/04/19 20:50:32] 0023:6E28142C xrRender_R1.dll, CRender::Calculate(), j:\xray_sources\trunk\xray\xr_3da\xrrender_r1\fstaticrender.cpp, 474 [10/04/19 20:50:32] 0023:009F66F9 XR_3DA.exe, IGame_Level::OnRender(), j:\xray_sources\trunk\xray\xr_3da\igame_level.cpp, 123 [10/04/19 20:50:32] 0023:6AA266B9 xrGame.dll, CLevel::OnRender(), j:\xray_sources\trunk\xray\xr_3da\xrgame\level.cpp, 610 [10/04/19 20:50:32] 0023:0099205E XR_3DA.exe, CRegistrator<pureRender>::Process(), j:\xray_sources\trunk\xray\xr_3da\pure.h, 77 [10/04/19 20:50:32] 0023:009D38F4 XR_3DA.exe, CRenderDevice::Run(), j:\xray_sources\trunk\xray\xr_3da\device.cpp, 257 [10/04/19 20:50:32] 0023:009FCB35 XR_3DA.exe, Startup(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 268 [10/04/19 20:50:32] 0023:009FD127 XR_3DA.exe, WinMain_impl(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 685 [10/04/19 20:50:32] 0023:009FD2A7 XR_3DA.exe, WinMain(), j:\xray_sources\trunk\xray\xr_3da\x_ray.cpp, 745 [10/04/19 20:50:32] 0023:009AB9CD XR_3DA.exe, __tmainCRTStartup(), f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c, 547 [10/04/19 20:50:32] 0023:76B133CA kernel32.dll, BaseThreadInitThunk() [10/04/19 20:50:32] 0023:77859ED2 ntdll.dll, RtlInitializeExceptionChain() [10/04/19 20:50:32] 0023:77859EA5 ntdll.dll, RtlInitializeExceptionChain() [10/04/19 20:50:32] [10/04/19 20:50:32] [error][ 259] : Дополнительные данные отсутствуют. Что это может значить? -------------------- |
 
|
|
04.10.2019, 21:01
Сообщение
#76
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
Это из-за того, что размер вертекс буферов и индекс буферов больше чем 2048 кб? Просто на данный момент времени экспортёр создаёт один вертекс буфер и один индексный буфер, сколько бы ни было вершин и треугольников. Что-то не припомню такого ограничения. Для динамической геометрии которая считается каждый кадр есть. Для статической только если в самом Direct3D или драйверах какие ограничения. Лучше перепроверить чанк OGF_GCONTAINER, может неправильно ссылается на буферы. Если уверен что там всё в порядке попробуй экспортировать маленький уровень, например МП бассейн. Сообщение отредактировал Modera - 04.10.2019, 21:04 |
 
|
|
04.10.2019, 21:08
Сообщение
#77
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
Это из-за того, что размер вертекс буферов и индекс буферов больше чем 2048 кб? Просто на данный момент времени экспортёр создаёт один вертекс буфер и один индексный буфер, сколько бы ни было вершин и треугольников. Что-то не припомню такого ограничения. я просто запустил кордон и в консоли заметил, что все IB и VB не превышают 2048kb. Вот и решил, что это нужно делать так для всех уровней. В GCONTAINER'е я уверен, потому-что мои уровни (которые я экспортировал из блендера) без ошибок импортируются обратно в блендер. Проверял на маленьком уровне (2x2 метра). Игра всё равно вылетает, лог я написал выше. -------------------- |
 
|
|
04.10.2019, 21:14
Сообщение
#78
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
А OGF_SWICONTAINER?
Хотя нет. Тогда бы в другом месте вылетало. Сообщение отредактировал Modera - 04.10.2019, 21:16 |
 
|
|
04.10.2019, 21:16
Сообщение
#79
|
|
Продвинутый геймер Репутация: 51 Группа: Участник Сообщений: 489 Награды: 3 Регистрация: 12.11.2012 |
А OGF_SWICONTAINER я не экспортирую. И в level.geom у меня чанк SWIS пустой, так как он не обязательный. У меня в уровне нет PROGRESSIVE визуалов. Точнее есть, но я их сохраняю как NORMAL.
-------------------- |
 
|
|
04.10.2019, 21:23
Сообщение
#80
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
А ну ещё может быть неправильно записан формат вершин в начале чанка вертексного буфера в level.geom.
Больше вроде и нечему ломаться. |
 
|
|
Текстовая версия | Сейчас: 20.04.2024, 19:23 |