DFF

Материал из GTAModding.ru

Перейти к: навигация, поиск

DFF – формат, использующийся RockStar Games для хранения трёхмерных игровых моделей в таких играх как GTA 3, Vice City, San Andreas, Manhunt. Является кросс платформенным форматом.

Содержание

Основные данные

Все трёхмерные модели в GTA третьей серии закодированы в виде бинарных потоков - RenderWare binary stream file, специализированных для движка RenderWare, используемого в игре. Все бинарные потоки с моделями имеют расширение DFF (для коллекции разнообразных моделей - генерика, персонажей, оружия, автомобилей и т.д.) или BSP (для хранения одного игрового уровня). Для просмотра и редактирования иерархии потоков DFF и BSP существует программа RW Analyze от Steve M. Для импорта/экспорта DFF в 3D Studio MAX пользуются GTA Tools (скрипты КАМа) или SA Tools (скрипты Дениски). Импорт/экспорт DFF в Zanoza Modeler присутствует в версиях начиная с 1.06.

Структура

В узлах иерархии бинарных потоков DFF расположены секции, в которых закодированы различные данные трёхмерных объектов - основные и дополнительные. В DFF можно найти секции, специфичные для RenderWare и не специфичные, написанные программистами RockStar Games специально под определённую игру и расширяющие её возможности по сравнению со стандартным RenderWare ( Pipeline Set, Specular Material, 2dfx, Night Vertex Colors, Collision Model, Reflection Material, Mesh Extension, Frame ).

Каждая секция имеет заголовок, по которой можно её идентифицировать:

   * (Заголовок секции)
       4 bytes - int - Идентификатор секции
       4 bytes - int - Размер секции
       2 bytes - int - Размер дочерней секции
       2 bytes - int - Версия секции
   * (Данные секции)
       [Размер секции] bytes - data - данные внутри секции

Идентификатор секции определяет, как данные должны быть обработаны. Например если идентификатор секции = rwDATA, rwSTRING, rwFRAME или rwMATERIALSPLIT, то для анализа секции нужно спуститься на один уровень вниз по иерархии - в данные, где расположены другие секции, как например здесь:

   *(Заголовок секции)
       4 bytes - int - rwCLUMP
       4 bytes - int - 48
       2 bytes - int - Unknown
       2 bytes - int - 4099
   *(Данные секции)
       (Заголовок секции)
           4 bytes - int - rwDATA
           4 bytes - int - 8
           2 bytes - int - Unknown
           2 bytes - int - 4099
       (Данные секции)
           4 bytes - int - Some Number
           4 bytes - int - Some Number
       (Заголовок секции)
           4 bytes - int - rwSTRING
           4 bytes - int - 16
           2 bytes - int - Unknown
           2 bytes - int - 4099
       (Данные секции)
           16 bytes - string - Data

Список таких идентификаторов, определяющих иерархию компонентов DFF:

   1 = rwDATA
   2 = rwSTRING
   3 = rwEXTENSION
   6 = rwTEXTURE
   7 = rwMATERIAL
   8 = rwMATERIALLIST
   14 = rwFRAMELIST
   15 = rwGEOMETRY
   16 = rwCLUMP
   20 = rwATOMIC
   26 = rwGEOMETRYLIST
   1294 = rwMATERIALSPLIT
   39056126 = rwFRAME

Полный список идентификаторов можно найти в отдельной статье: list of RW section IDs

По имени секции можно догадаться, что в ней хранится (например rwGEOMETRY -> rwDATA содержит все вершины, нормали трёхмерных объектов, в то время как rwGEOMETRYLIST -> rwDATA содержит число и имена геометрических объектов).

Версии DFF

В заголовке секции можно найти закодированные номера версий RenderWare, под которую скомпелирован DFF:

3.0.0.3 - 0x0003FFFF
3.?.?.? - 0x0800FFFF (GTA III)
3.1.0.0 - 0x00000310 (GTA III)
3.3.0.2 - 0x0C02FFFF (GTA VC)
3.4.0.3 - 0x1003FFFF (GTA VC)
3.6.0.3 - 0x1803FFFF (GTA SA)

Содержимое DFF

* Эти разделы (и их дочерние разделы) могут повторятся несколько раз.

Секция: Clump

Clump - Data

|SECTION START|

   4 bytes - int - Object Count

|SECTION END|


Секция: Frame List

Frame List - Data

|SECTION START|

   4 bytes - int - Frame Count
   (Frame Information)
   {ARRAY OF SIZE: [Frame Count]}
       36 bytes - float matrix (3 x 3) - Rotational Matrix
       12 bytes - float - Coordinates Offset
       4 bytes - int - Parent Frame
       4 bytes - int - Unknown
   {END ARRAY}

|SECTION END|

Frame List - Frame

|SECTION START|

   [Section Size] bytes - string - Frame Name

|SECTION END|

Секция: Geometry List

Geometry List - Data

|SECTION START|

   4 bytes - int - Geometry Count

|SECTION END|

Geometry List - Material Split

|SECTION START|

   (Header)
       4 bytes - int - Triangle Strip
       4 bytes - int - Split Count
       4 bytes - int - Face Count
   (Split Information)
   {ARRAY OF SIZE: [Header - Split Count]}
       4 bytes - int - Face Index
       4 bytes - int - Material Index
       (Vertex Information)
       {ARRAY OF SIZE: [Face Index]}
           4 bytes - int - Vertex 1
   {END ARRAY}

|SECTION END|

Секция: Geometry

Geometry - Data

|SECTION START|

   (Header)
       2 bytes - int - Flags
       2 bytes - int - Unknown
       4 bytes - int - Triangle Count
       4 bytes - int - Vertex Count
       4 bytes - int - Morph Target Count
   (Lighting Header)
   {IF Version Number = 4099 THEN}
       4 bytes - float - Ambient
       4 bytes - float - Diffuse
       4 bytes - float - Specular
   {END IF}
   (Colour Information)
   {IF rwOBJECT_VERTEX_COLOR in [Header - Flags] THEN}
       {ARRAY OF SIZE: [Header - Vertex Count]}
           1 byte - byte - Red
           1 byte - byte - Green
           1 byte - byte - Blue
           1 byte - byte - Alpha
       {END ARRAY}
   {END IF}
   (Texture Mapping Information)
   {IF rwOBJECT_VERTEX_UV in [Header - Flags] THEN}
       {ARRAY OF SIZE: [Header - Vertex Count]}
           4 bytes - float - U
           4 bytes - float - V
       {END ARRAY}
   {END IF}
   (Face Information)
   {ARRAY OF SIZE: [Header - Triangle Count]}
       2 bytes - int - Vertex 2
       2 bytes - int - Vertex 1
       2 bytes - int - Flags
       2 bytes - int - Vertex 3
   {END ARRAY}
   (Unknown)
       4 bytes - float - Bounding Sphere X
       4 bytes - float - Bounding Sphere Y
       4 bytes - float - Bounding Sphere Z
       4 bytes - float - Bounding Sphere Radius
       4 bytes - int - Has Position
       4 bytes - int - Has Normals
   (Vertex Information)
   {ARRAY OF SIZE: [Header - Vertex Count]}
       4 bytes - float - X
       4 bytes - float - Y
       4 bytes - float - Z
   {END ARRAY}
   (Normal Information)
   {IF rwOBJECT_VERTEX_NORMAL in [Header - Flags] THEN}
       {ARRAY OF SIZE: [Header - Vertex Count]}
           4 bytes - float - X
           4 bytes - float - Y
           4 bytes - float - Z
       {END ARRAY}
   {END IF}

|SECTION END|

Section: Material List

Material List - Data

|SECTION START|

   4 bytes - int - Material Count

|SECTION END|

Section: Material

Material - Data

|SECTION START|

   4 bytes - int - Unknown
   12 bytes - RGBA - Colour
   4 bytes - int - Unknown
   4 bytes - int - Texture Count
   4 bytes - float - Unknown
   4 bytes - float - Unknown
   4 bytes - float - Unknown

|SECTION END|

Section: Texture

Texture - Data

|SECTION START|

   2 bytes - int - Texture Filter Mode Flags
   2 bytes - int - Unknown

|SECTION END|

Section: Atomic

Atomic - Data

|SECTION START|

   4 bytes - int - Frame Number
   4 bytes - int - Geometry Number
   4 bytes - int - Unknown
   4 bytes - int - Unknown

|SECTION END|

Ссылки

п · о · р
GTA III Grand Theft Auto III
Форматы файлов.a3d.anm.col.cfg.cut.dff.dat.gxt.ide.ifp.img/.dir.ipl.raw/.sdt.rep.sc.scm.set.txd.xml.zon
Документацияcarcols.datCHASE.DATCULLZONE.DATcuts.imgdefault.datdefault.idefistfite.datflight.datgta3.exegta3.dat
gta3.imggta3.zonhandling.cfgmain.scmmap.zonobject.datparticle.cfgped.datpedgrp.datpedstats.dat
sfx.rawsurface.dattimecyc.dattracks.dattrain.datwater.datwaterpro.datweapon.dat
ИнструментыCLEOCollision File Editor IIDFF Viewerdffxbox2pcG-ToolsGTA Garage Mod ManagerGTA ToolsGTA3 Limit Adjuster
GTA3 PatcherIMG ToolMap EditorMod GeneratorMoo MaperPS2 TXD ModPS2 TXD ViewerRotation Calculator
RusGTX EditorRW AnalyzeWater EditorSanny BuilderTXD WorkshopYAIEZModeler
Туториалыраздел в разработке
Глобальные МодыReal GTA3Twenty TenSnow CityUltimateBeta modX-box modGTA3 HDUltra modOpenTunnelsGhost City
МультиплеерMulti Theft AutoLiberty Unleashed
Исходники4x48ballambulanceasukaasusbcameracar_gencatcopcardebugdemodiablofiretruckfrankgates
genstufhealthhjhoodimportintrojoeykenjiloveluigimayhemmeatpickupsrampagerayrcswitch
taxitoniusjwantedyard
Источник — «http://gtamodding.ru/wiki/DFF»