Перейти к содержимому


Фотография
- - - - -

WDR


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 41

#21 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 14 August 2009 - 13:11

C wbn не все так просто. В нем нежит один из сабклассов phBound. Какой именно - определяется вторым полем (m_nbType). Проблема в том, что сабклассов у phBound - четрынадцать штук и есть довольно сложные (phBoundBox - ~600 байт; phBoundBVH содержит дерево баундов). Поэтому, сначала надо определить, в каком из сабклассов находятся эти самые _f8C и _f92. Впадая в оффтопик, прикинем, что у нас получается в итоге: wtd, wdr и wdd есть практически полностью (осталось несколько полей, которые есть не в каждом ресурсе) whm, wbn и wbd - есть в базе, нужно писать шаблоны. wpfl - не хватает нескольких классов, ничего сложного там не предвидится wft - rmcDrawable готов; это примерно половина, но повозиться придется wad, wbs - пока никакой информации.
You think your day was surreal? Try mine.

#22 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 14 August 2009 - 14:25

wpfl - а это вообще что за формат? я что-то не встречал..

#23 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 14 August 2009 - 14:35

"GTA IV\pc\data\effects\"
You think your day was surreal? Try mine.

#24 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 07 September 2009 - 11:30

Я тут решил немножко покопаться в wft... Как же все относительно: когда-то, разобранный xtd/wtd разался чем-то крутым. Потом, внезапно оказалось, что он входит в большинство ресурсов. Следующий шаг: внутри wft лежит два fragDrawable (очень сильно дополненный wdr), в каждый из которых входит phBound (т.е. содержимое wbn). Если там еще найдется и анимация - это будет полный ... набор ресурсов. В итоге - новый набор шаблонов: wtd (обновленный), whm (практически полный) и wft (в каком-то промежуточном виде). Общие определения вынесены в include (внимание! 010 ищет include, начиная от своего каталога). Шаблон для wtd, с этим include будет содержать одну строку. Прикрепленный файл  iv_types_20090907.rar   8.28К   14 загрузок

Сообщение отредактировал listener: 07 September 2009 - 11:30

You think your day was surreal? Try mine.

#25 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 07 September 2009 - 12:56

Шаблоны 010 - отлично, крайне полезная информация. Ввиду структурного описания форматов и анализа файлов самое то. Теперь самое интересное как из всего этого сделать структуры под C++ чтобы с помощью шаблонов и оператора new загрузить (перезаписать) ресурсы.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#26 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 07 September 2009 - 13:58

Про загрузку ресурсов будет отдельный большой рассказ с примерами. Какие-то наброски были в pgBase.rar. Сейчас они дополнены и ожидают финальной чистки. Если совсем кратко, там используются шаблоны и placement new (оператор new, которому передается указатель на уже выделенный блок памяти). Ресурс состоит из страниц. При загрузке, для каждой страницы создается структура BlockInfo, в которой содержится смещение страницы в ресурсе, размер страницы и указатель на выделенную область памяти. Все BlockInfo для ресурса - собраны в массив в структуре BlockMap. Для работы с загруженным ресурсом, используется объект rage::pgStreamable (он используется при загрузке ресурса, дефрагментации памяти и обновлении ссылок после дефрагментации). Объект очень простой - в нем всего четыре поля (самое главное из них - указатель на BlockMap). Есть глобальный указатель на текущий pgStreamable (В игре он находится в TLS, по смещению 4). Для указателей внутри ресурсов используется специальный класс (я назвал его pgPtr; в оригинале, он, возможно, назывался иначе). В конструкторе pgPtr проверяется, есть ли у нас текущий pgStreamable и валидно ли значение смещения. Если оба условия выполняются - смещение преобразуется в указатель по BlockMap. А теперь - самое вкусное. Поскольку это все делается в конструкторе по умолчанию, то, как только мы объявляем pgPtr<DWORD> вместо DWORD *, весь код по преобразованию указателей генерируется компиляторм автоматически, без единой написанной строчки. Для больших объектов, в целях оптимизации, стоит сделать два конструктора: один с pgStreamable в качестве параметра, другой - по умолчанию, для традиционного создания объекта. Впрочем - это уже косметика. Вкратце - вот так. Там есть ряд тонкостей (например, связанных с pgPtr/pgObjectPtr и pgArray/pgObjectArray (это в новых исходниках, в старых это называлось CSimpleCollection и CPtrCollection)), но это уже детали. Я потихоньку перетаскиваю описания в C++, но до 20-го сентября это получается урывками и по чуть-чуть. PS. Насчет crAnimation в wft - накаркал. Он там, действительно есть.
You think your day was surreal? Try mine.

#27 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 07 September 2009 - 15:03

Про загрузку ресурсов будет отдельный большой рассказ с примерами.

ты даже не представляешь как будет круто если ты про это расскажешь да еще и с примерами! просто мегакруто, даже гигантскикруто!!

#28 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 08 September 2009 - 15:28

Новая версия. Дополнен wft, добавлен wbn. (Кто там хотел col-ы ?) Прикрепленный файл  iv_types_20090908.rar   10.44К   10 загрузок UPD: Обновление от девятого сентября. wbn готов - на паре просмотренных wbn, неразобранных полей нету. Теперь бы понять назначение всего этого. Большинство чисел хрянтся в каких-то диких форматах, например на вертекс в bound-ах отводится 6 байт - по два байта на координату. Полигон - 32 байта, 12 полей; предположительно, там должны быть индексы вертексов, материал и положение полигона в иерархии (потому что больше ему храниться негде) Прикрепленный файл  iv_types_20090909.rar   11.04К   20 загрузок

Сообщение отредактировал listener: 09 September 2009 - 16:32

You think your day was surreal? Try mine.

#29 RussianCJ

RussianCJ

    Активный участник

  • Пользователи
  • PipPipPip
  • 54 сообщений

Отправлено 11 September 2009 - 18:21

О-о-очень радуют успехи с коллизией. Хм...если на координату вертекса отводится два байта, то и может быть ограничения на размеры коллизии намного меньше, чем в третьих частях? P.S.: сори, не сообразил вовремя...там же дробное число

Сообщение отредактировал RussianCJ: 11 September 2009 - 18:25


#30 GooD-NTS

GooD-NTS

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 494 сообщений
  • Пол:Мужчина
  • Город:Нижний Новгород


Отправлено 19 July 2010 - 19:20

Значительно обновил статью более подробной информации об этом формате моделей.
Это так сказать прелюдия перед OpenFormats, ведь для редактирования чего-то надо это полностью понять и описать.

Изображение

RAGE research project, public side: OpenIV (Журнал изменений План развития) | openFormats


#31 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 20 July 2010 - 13:31

Очень хорошо, молодец, что грамотно объяснил основные термины. Мой старый шаблон 010 предлагаю убрать, все равно это очень устаревший вариант описания, особенно ввиду подробных структур в iv-types. Да и как показала практика, людям, интересующимся форматами файлов, шаблоны не слишком понятны.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#32 DK22

DK22

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений
  • Пол:Мужчина
  • Интересы:Рисование


Отправлено 31 March 2014 - 17:46

Пытаюсь понять, как геометрия "прикрепляется" к кости. В grmGeometry есть указатель BoneMapping, но опен показывает, что он пустой. Подскажите, пожалуйста.

Malcom.gif

Скрытый текст

#33 GooD-NTS

GooD-NTS

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 494 сообщений
  • Пол:Мужчина
  • Город:Нижний Новгород


Отправлено 01 April 2014 - 17:06

DK22, а что за модель ты смотришь? BoneMapping есть только если геометрия скинненая.


Изображение

RAGE research project, public side: OpenIV (Журнал изменений План развития) | openFormats


#34 DK22

DK22

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений
  • Пол:Мужчина
  • Интересы:Рисование


Отправлено 01 April 2014 - 17:42

GooD-NTS, смотрел модели оружия. В иерархии там несколько костей (тот же магазин), а BoneMapping пустой.

Malcom.gif

Скрытый текст

#35 GooD-NTS

GooD-NTS

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 494 сообщений
  • Пол:Мужчина
  • Город:Нижний Новгород


Отправлено 01 April 2014 - 17:52

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


Изображение

RAGE research project, public side: OpenIV (Журнал изменений План развития) | openFormats


#36 DK22

DK22

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений
  • Пол:Мужчина
  • Интересы:Рисование


Отправлено 01 April 2014 - 18:09

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

Malcom.gif

Скрытый текст

#37 DK22

DK22

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений
  • Пол:Мужчина
  • Интересы:Рисование


Отправлено 03 April 2014 - 22:26

Есть ли смысл "вынимать" размер элемента из grcVertexBufferD3D > Declarations.ulTypes, или типы всегда имеют одинаковый размер (позиция, нормаль - FLOAT3, тангент - FLOAT4)?

Malcom.gif

Скрытый текст

#38 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 05 April 2014 - 17:02

типы одни и те же (в контексте платформы)



#39 DK22

DK22

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений
  • Пол:Мужчина
  • Интересы:Рисование


Отправлено 05 April 2014 - 17:30

А "формат" хранения индексов - статично trilist (3 индекса на треугольник), или tristrip тоже может встретиться?

Malcom.gif

Скрытый текст

#40 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 05 April 2014 - 21:12

ну конкретно в 4ке везде trilist, в боксовской версии рдр есть геометрии, где используются квады (бокс нативно умеет их рендерить)






Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных