Gildor's Forums

Author Topic: Считывание UPK  (Read 4260 times)
Idol1111222
Newbie
*
Posts: 3


View Profile
Считывание UPK
« on: August 13, 2025, 20:00 »

Здравствуйте, я создаю собственный считыватель .upk файлов(конкретно для игры Dishonored, file ver. 801). Все что сделано на данный момент:
Считывание заголовка;
Считывание таблицы имён(Names Table), таблицы экспорта(Export Table) и таблицы импорта(Import Table).

Однако я мало понимаю структуру данных объектов(ObjectData).

Я создал простую карту с одиночным StaticMeshActor(данные которого мне более всего интересны) в совместимом с игрой UDK(2010-08 Beta) для чистоты эксперимента и сохранил её в .upk файл. Упомянутые выше данные считываются и на основе их извлекаются данные объектов в отдельную директорию. Содержание самих данных остаётся мне непонятным.

Собственно что я хочу понять: Как устроена структура данных объектов(прикрепил тестовый .upk и извлечённые данные объекта) и каким образом их оттуда извлечь?

* testlevel.upk (18.41 KB - downloaded 471 times.)
* staticmeshactor_46.txt (0.12 KB - downloaded 488 times.)
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7957



View Profile WWW
Re: Считывание UPK
« Reply #1 on: August 13, 2025, 20:37 »

Здравствуйте. "Структуры данных на диске" в Unreal нет и никогда не было, данные "плавают". Есть такая штука как сериализатор - кусок программы, который эти данные записывает или загружает. Его вам и надо понять. На уровне исходного кода движка, это UObject::Serialize, который переопределяется в наследниках класса. UModel использует такую же архитектуру, да и UE4/UE5 тоже.

Очень многие вещи в Unreal сохраняются как property, но дальше идут чисто бинарные данные. Может с Actor-ом как-то и повезёт, чтобы всё было через property.

Я сериализацией уровней не занимался, так что всё что у меня есть - это догадки. А так, вроде ME3 Explorer (с исходниками), он умеет читать уровни (я не уверен). Это уровни от Mass Effect, но это тоже UE3, и должно быть много общего с этой игрой. По крайней мере анализ исходников, если программа и правда читает уровни, поможет разобраться с вопросом.
Logged
Idol1111222
Newbie
*
Posts: 3


View Profile
Re: Считывание UPK
« Reply #2 on: August 14, 2025, 00:18 »

Здравствуйте. Под бинарными данными подразумевается скомпилированный код? Огромное спасибо за наводку.
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7957



View Profile WWW
Re: Считывание UPK
« Reply #3 on: August 14, 2025, 11:28 »

Нет. "Бинарный данные" - это я просто пользуюсь терминологией самих Epic. У них есть разделение - SerializeTaggedProperties для properties и SerializeBinary для всего остального.
Logged
Idol1111222
Newbie
*
Posts: 3


View Profile
Re: Считывание UPK
« Reply #4 on: February 01, 2026, 13:37 »

Здравствуйте снова. Информация оказалась крайне полезной, теперь данные считываются и выводятся в отдельный массив. Однако я не могу найти никакой информации о блоке в начале файла, сразу после заголовка, но перед таблицей имён. В источниках упоминается как неизвестная память с переменным размером.
Также в заголовке есть некая запись DependsOffset, которая ведёт на данные после таблицы экспорта.
Возможно эти данные не важны и UDK сможет прочитать .upk и без них, но всё же полезно знать.
Logged
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS