March 29, 2024, 00:18
bigger smaller reset     1020px Wide width Full width Reset   * *

Gildor's Forums

  Homepage Facebook Read news on Twitter Youtube channel Github page
Welcome, Guest. Please login or register.
Did you miss your activation email?

« previous next »
Print
Author Topic: Texture2D  (Read 15348 times)
pamidur
Newbie
*
Posts: 13


View Profile
« on: March 02, 2012, 00:32 »

Доброго времени суток.

Подскажите пожалуйста, какая структура у сериализованого класса Texture2D на xbox. В частности, интересно где указывается алгоритм сжатия.

Спасибо за помощь!
« Last Edit: March 02, 2012, 00:36 by pamidur » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #1 on: March 02, 2012, 08:05 »

Добрый день.
Алгоритм сжатия указывается в поле Format (enum EPixelFormat) - смотрите Engine/Classes/Texture2D.uc
На XBox360 текстуры дополнительно обрабатываются - оптимизация под видеокарту.
Logged
pamidur
Newbie
*
Posts: 13


View Profile
« Reply #2 on: March 02, 2012, 13:45 »

Спасибо, не подскажите где почитать об этой дополнительной обработке?
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #3 on: March 02, 2012, 14:25 »

Некоторая информация есть в документации к XDK. Если наплевать на copyright-ы и т.п. то можно импользовать функции (имена точно не помню) TileTexture/UntileTexture из XDK.
Logged
pamidur
Newbie
*
Posts: 13


View Profile
« Reply #4 on: March 02, 2012, 14:26 »

Спасибо, будем копаться)
Logged
pamidur
Newbie
*
Posts: 13


View Profile
« Reply #5 on: March 02, 2012, 15:25 »

Как-то не сходится инфа в исходнике с сериализованными данными

Вот что я нарыл:
Шапка:


1. Черный блок - номер структуры по порядку в upk/xxx.
2. Красный - размер текстуры по вертикали
3. Оранжевый1 и Оранжевый2 - какие-то размеры отличаются всегда на 0х14
4. Размер блока данных от первого tag'a до конца (без последних 16 байт - о них ниже)
5. 2хЗеленый - 2 тага подряд (?)
6. Желтый1 и Желтый2 - размер сжатой текстуры
7. Голубой1 и Голубой2 - рамер несжатой тектуры
8. Розовый - Данные

Футер:


8. Розовый - Данные
9. Синий - Размер текстуры по горизонтали
10. Зеленый - Снова размер текстуры по вертикали


Не могли бы вы пояснить остальные блоки?
Хотя бы важные для подмены текстуры, особенно то где указывается тип сжатия.

Заранее спасибо!
« Last Edit: March 02, 2012, 15:27 by pamidur » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #6 on: March 02, 2012, 17:56 »

Здесь нет "блоков" и фиксированного формата. Все данные в "заголовке" идут с декодированием через таблицы имён, импорта и экспорта.
Logged
pamidur
Newbie
*
Posts: 13


View Profile
« Reply #7 on: March 02, 2012, 20:35 »

но должен же быть какой-то порядок или последовательность данных?
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #8 on: March 02, 2012, 20:59 »

Порядок - имя поля, тип, значение, причём для разных типов структура варьируется. Для более детальной информации советую посмотреть на разные package viewer-ы (я где-то на форуме выкладывал ссылку на viewer написанный на C#)
Logged
pamidur
Newbie
*
Posts: 13


View Profile
« Reply #9 on: March 02, 2012, 21:31 »

Видел upkinfo, но он открывает только upk. А вот структура извлеченных texture2d не ясна :-(

Вы не подумайте :-) я пол инэта перекопал, перед тем как сюда написать.
Ситуация у меня такая:
Я распаковал xxx файл и достал из него texture2d файл.
В этом файле нормальная бошка и запакованое тело.
Ваш umodel как то понимает что тело в lzx.
Дело в том что мне нужно закинуть распакованую текстуру вместо этого тела. А для этого нужно подправить бошку. Самое главное то где указывается какая применяется компрессия, так как оригинальное тело в lzx, а новое raw. Я этого места найти не могу, а ваш umodel может.
Logged
pamidur
Newbie
*
Posts: 13


View Profile
« Reply #10 on: March 03, 2012, 16:08 »

Для наглядности:
  • WarfareFonts.xxx
    • Header
    • NamesTable
    • ImporsTable
    • ExportsTable
    • Content
      • ...
      • Texture2D stream
        • Header - вот тут я не могу найти байта отвечающего за сжатие
        • Body - вот это тело запаковано lzx
        • Footer - 16байт
      • ...
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #11 on: March 03, 2012, 16:21 »

Для чего это всё вообще? Чтобы заменить одну текстуру?
Logged
pamidur
Newbie
*
Posts: 13


View Profile
« Reply #12 on: March 03, 2012, 17:06 »

Да, пока всего одну текстуру, но я и с этим, как видите, справиться пока не могу(
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #13 on: March 03, 2012, 17:15 »

Извлекаете текстуру с ключиком "-dds", получаете .dds-файл (если текстура в формате DXTn). Распаковываете (decompress) пакет. Ищете паттерн этой текстуры в файле - для PC текстура извлекается без изменений. Редактируете текстуру, сохраняете её в том же формате и разрешении (размер файла не должен измениться). Потом заменяете найдённый блок в файле.
При поиске текстуры и замене блока надо убирать DDS-заголовок, в пакетах хранятся только сами данные.
Должно сработать.
Logged
pamidur
Newbie
*
Posts: 13


View Profile
« Reply #14 on: March 03, 2012, 18:50 »

Ххх после decompress остался таким же, не изменился ни на байт. Извлеченные текстуры в dds больше по размеру (без dds заголовка) чем тела в texture2d стримах.
Понятно что паттерн текстуры не найти в ххх файле.
Logged
Print 
« previous next »
Jump to:  

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