DFF — различия между версиями

Материал из GTAModding.ru
Перейти к: навигация, поиск
Строка 13: Строка 13:
 
         4 bytes - int - Идентификатор секции
 
         4 bytes - int - Идентификатор секции
 
         4 bytes - int - Размер секции
 
         4 bytes - int - Размер секции
         2 bytes - int - Размер дочерней секции
+
         4 bytes - hex - Версия DFF
        2 bytes - int - Версия секции
+
 
     * (Данные секции)
 
     * (Данные секции)
 
         [Размер секции] bytes - data - данные внутри секции
 
         [Размер секции] bytes - data - данные внутри секции
 +
  
 
Идентификатор секции определяет, как данные должны быть обработаны. Например если идентификатор секции = rwDATA, rwSTRING, rwFRAME или rwMATERIALSPLIT, то для анализа секции нужно спуститься на один уровень вниз по иерархии - в данные, где расположены другие секции, как например здесь:
 
Идентификатор секции определяет, как данные должны быть обработаны. Например если идентификатор секции = rwDATA, rwSTRING, rwFRAME или rwMATERIALSPLIT, то для анализа секции нужно спуститься на один уровень вниз по иерархии - в данные, где расположены другие секции, как например здесь:
Строка 66: Строка 66:
 
В заголовке секции можно найти закодированные номера версий RenderWare, под которую скомпелирован DFF:
 
В заголовке секции можно найти закодированные номера версий RenderWare, под которую скомпелирован DFF:
  
  3.0.0.3 - 0x0003FFFF
+
  3.0.0.0 - 0x00000310 - только для мульти-dff и генерика, остатки от ранних версий GTA III, которые DMA Designe переделывать не стали.
3.?.?.? - 0x0800FFFF (GTA III)
+
  3.2.0.0 - 0x0800FFFF - GTA III
  3.1.0.0 - 0x00000310 (GTA III)
+
  3.3.0.2 - 0x0C02FFFF - GTA VC
  3.3.0.2 - 0x0C02FFFF (GTA VC)
+
  3.4.0.3 - 0x1003FFFF - GTA VC
  3.4.0.3 - 0x1003FFFF (GTA VC)
+
  3.6.0.3 - 0x1803FFFF - GTA SA
  3.6.0.3 - 0x1803FFFF (GTA SA)
+
  
 
=== Содержимое DFF ===
 
=== Содержимое DFF ===
  
* [[Clump (RW Section)|Clump]]
+
* [[Clump (RW Section)|Clump]] (id16,size,RWver)
** [[Struct (RW Section)#Clump|Struct]]
+
** [[Struct (RW Section)#Clump|Struct]] (id1,size,RWver, ObjectCount)
** [[Frame List (RW Section)|Frame List]]
+
** [[Frame List (RW Section)|Frame List]] (id14,size,RWver)
*** [[Struct (RW Section)#Frame_List|Struct]]
+
*** [[Struct (RW Section)#Frame_List|Struct]] (id1,size,RWver, FrameCount, ...)
*** [[Extension (RW Section)|Extension]] *
+
*** [[Extension (RW Section)|Extension]] * (id3,size,RWver)
**** [[Frame (RW Section)|Frame]]
+
**** [[Frame (RW Section)|Frame]] (id39056126,size,RWver, string)
 
**** [[HAnim PLG (RW Section)|HAnim PLG]]
 
**** [[HAnim PLG (RW Section)|HAnim PLG]]
** [[Geometry List (RW Section)|Geometry List]]
+
** [[Geometry List (RW Section)|Geometry List]] (id26,size,RWver)
*** [[Struct (RW Section)#Geometry_List|Struct]]
+
*** [[Struct (RW Section)#Geometry_List|Struct]] (id1,size,RWver, ObjectCount)
*** [[Geometry (RW Section)|Geometry]] *
+
*** [[Geometry (RW Section)|Geometry]] * (id15,size,RWver)
**** [[Struct (RW Section)#Geometry|Struct]]
+
**** [[Struct (RW Section)#Geometry|Struct]] (id1,size,RWver, flags, FaceCount, VertexCount, FrameCount, ...)
**** [[Material List (RW Section)|Material List]]
+
**** [[Material List (RW Section)|Material List]] (id8,size,RWver)
***** [[Struct (RW Section)#Material_List|Struct]]
+
***** [[Struct (RW Section)#Material_List|Struct]] (id1,size,RWver, MaterialCount, -1, -1, -1)
***** [[Material (RW Section)|Material]] *
+
***** [[Material (RW Section)|Material]] * (id7,size,RWver)
****** [[Struct (RW Section)#Material|Struct]]
+
****** [[Struct (RW Section)#Material|Struct]] (id1,size,RWver, 0, RGBA, 0x094B5D54, TextureCount, ...)
****** [[Texture (RW Section)|Texture]] - optional
+
****** [[Texture (RW Section)|Texture]] - optional (id6,size,RWver)
******* [[Struct (RW Section)#Texture|Struct]]
+
******* [[Struct (RW Section)#Texture|Struct]] (id1,size,RWver, FilterFlag, 0)
******* [[String (RW Section)|String]] - diffuse texture name
+
******* [[String (RW Section)|String]] - diffuse texture name (id2,size,RWver, string)
******* [[String (RW Section)|String]] - alpha texture name
+
******* [[String (RW Section)|String]] - alpha texture name (id2,size,RWver, string)
******* [[Extension (RW Section)|Extension]]
+
******* [[Extension (RW Section)|Extension]]  
 
******** [[Sky Mipmap Val (RW Section)|Sky Mipmap Val]] **
 
******** [[Sky Mipmap Val (RW Section)|Sky Mipmap Val]] **
 
****** [[Extension (RW Section)|Extension]]
 
****** [[Extension (RW Section)|Extension]]
******* [[Material Effects PLG (RW Section)|Material Effects PLG]] - optional
+
******* [[Material Effects PLG (RW Section)|Material Effects PLG]] - optional (id288,size,RWver, 1, 1, 1, 1)
******** [[Texture (RW Section)|Texture]] - optional ''(See [[Material Effects PLG (RW Section)|Material Effects PLG]] for more information)''
+
******** [[Texture (RW Section)|Texture]] - optional ''(See [[Material Effects PLG (RW Section)|Material Effects PLG]] for more information)'' (id6,size,RWver)
********* [[Struct (RW Section)#Texture|Struct]]
+
********* [[Struct (RW Section)#Texture|Struct]] (id1,size,RWver, FilterFlag, 1)
********* [[String (RW Section)|String]] - environment map name
+
********* [[String (RW Section)|String]] - environment map name (id2,size,RWver, string)
********* [[String (RW Section)|String]] - alpha texture name
+
********* [[String (RW Section)|String]] - alpha texture name (id2,size,RWver, string)
********* [[Extension (RW Section)|Extension]]
+
********* [[Extension (RW Section)|Extension]] (id3,size,RWver)
 
********** [[Sky Mipmap Val (RW Section)|Sky Mipmap Val]] **
 
********** [[Sky Mipmap Val (RW Section)|Sky Mipmap Val]] **
 +
********* [[Texture (RW Section)|Texture]] - optional ''(See [[Material Effects PLG (RW Section)|Material Effects PLG]] for more information)'' (id6,size,RWver)
 +
********** [[Struct (RW Section)#Texture|Struct]] (id1,size,RWver, FilterFlag, 0)
 +
********** [[String (RW Section)|String]] - environment map name (id2,size,RWver, string)
 +
********** [[String (RW Section)|String]] - alpha texture name (id2,size,RWver, string)
 +
********** [[Extension (RW Section)|Extension]] (id3,size,RWver)
 +
*********** [[Sky Mipmap Val (RW Section)|Sky Mipmap Val]] **
 
******* [[Reflection Material (RW Section)|Reflection Material]] - optional
 
******* [[Reflection Material (RW Section)|Reflection Material]] - optional
 
******* [[Specular Material (RW Section)|Specular Material]] - optional
 
******* [[Specular Material (RW Section)|Specular Material]] - optional
Строка 194: Строка 199:
 
==== Секция: Geometry ====
 
==== Секция: Geometry ====
  
Geometry - Data
+
     ('''Header''')
 
+
|SECTION START|
+
 
+
     (Header)
+
 
         2 bytes - int - Flags
 
         2 bytes - int - Flags
 
         2 bytes - int - Unknown
 
         2 bytes - int - Unknown
         4 bytes - int - Triangle Count
+
         4 bytes - int - Face Count
 
         4 bytes - int - Vertex Count
 
         4 bytes - int - Vertex Count
         4 bytes - int - Morph Target Count
+
         4 bytes - int - Frame Count
     (Lighting Header)
+
 
     {IF Version Number = 4099 THEN}
+
     ('''Lighting Header''')
 +
     {IF RWver = 3.0.0.0 THEN}
 
         4 bytes - float - Ambient
 
         4 bytes - float - Ambient
 
         4 bytes - float - Diffuse
 
         4 bytes - float - Diffuse
 
         4 bytes - float - Specular
 
         4 bytes - float - Specular
 
     {END IF}
 
     {END IF}
     (Colour Information)
+
 
     {IF rwOBJECT_VERTEX_COLOR in [Header - Flags] THEN}
+
     ('''Vertex Colors''')
         {ARRAY OF SIZE: [Header - Vertex Count]}
+
     {IF Prelit=1 in flags THEN}
 +
         {ARRAY OF SIZE = Vertex Count*4 byte}
 
             1 byte - byte - Red
 
             1 byte - byte - Red
 
             1 byte - byte - Green
 
             1 byte - byte - Green
Строка 219: Строка 222:
 
         {END ARRAY}
 
         {END ARRAY}
 
     {END IF}
 
     {END IF}
     (Texture Mapping Information)
+
 
     {IF rwOBJECT_VERTEX_UV in [Header - Flags] THEN}
+
     ('''UV Mapping''')
         {ARRAY OF SIZE: [Header - Vertex Count]}
+
     {IF Textured=1 in flags THEN}
 +
         {ARRAY OF SIZE: Vertex Count*8 byte}
 
             4 bytes - float - U
 
             4 bytes - float - U
 
             4 bytes - float - V
 
             4 bytes - float - V
 
         {END ARRAY}
 
         {END ARRAY}
 
     {END IF}
 
     {END IF}
     (Face Information)
+
 
     {ARRAY OF SIZE: [Header - Triangle Count]}
+
     ('''Faces''')
 +
     {ARRAY OF SIZE: Face Count*8 byte}
 
         2 bytes - int - Vertex 2
 
         2 bytes - int - Vertex 2
 
         2 bytes - int - Vertex 1
 
         2 bytes - int - Vertex 1
         2 bytes - int - Flags
+
         2 bytes - int - Vertex Alpha
 
         2 bytes - int - Vertex 3
 
         2 bytes - int - Vertex 3
 
     {END ARRAY}
 
     {END ARRAY}
     (Unknown)
+
 
         4 bytes - float - Bounding Sphere X
+
     ('''Bounding Sphere''')
         4 bytes - float - Bounding Sphere Y
+
         4 bytes - float - Coordinate X
         4 bytes - float - Bounding Sphere Z
+
         4 bytes - float - Coordinate Y
         4 bytes - float - Bounding Sphere Radius
+
         4 bytes - float - Coordinate Z
 +
         4 bytes - float - Radius
 
         4 bytes - int - Has Position
 
         4 bytes - int - Has Position
 
         4 bytes - int - Has Normals
 
         4 bytes - int - Has Normals
     (Vertex Information)
+
 
     {ARRAY OF SIZE: [Header - Vertex Count]}
+
     ('''Verticles''')
         4 bytes - float - X
+
     {ARRAY OF SIZE: Vertex Count*12}
         4 bytes - float - Y
+
         4 bytes - float - Coordinate X
         4 bytes - float - Z
+
         4 bytes - float - Coordinate Y
 +
         4 bytes - float - Coordinate Z
 
     {END ARRAY}
 
     {END ARRAY}
     (Normal Information)
+
 
     {IF rwOBJECT_VERTEX_NORMAL in [Header - Flags] THEN}
+
     ('''Normals''')
         {ARRAY OF SIZE: [Header - Vertex Count]}
+
     {IF Normals=1 in Flags THEN}
             4 bytes - float - X
+
         {ARRAY OF SIZE: Vertex Count*12}
             4 bytes - float - Y
+
             4 bytes - float - Coordinate X
             4 bytes - float - Z
+
             4 bytes - float - Coordinate Y
 +
             4 bytes - float - Coordinate Z
 
         {END ARRAY}
 
         {END ARRAY}
 
     {END IF}
 
     {END IF}
  
|SECTION END|
+
'''Flags''' - значение, определяющее содержимое секции геометрии. Раскладывается на логические значения путём деления на 2 и проверки остатка (либо можно просто проверять каждый бит). Значения в итерациях:
 +
# Tristrips
 +
# Positions
 +
# Textured
 +
# Prelit
 +
# Normals
 +
# Light
 +
# Modulate Material Color
 +
# Textured 2
 +
 
  
 
==== Section: Material List ====
 
==== Section: Material List ====
Строка 274: Строка 291:
  
 
     4 bytes - int - Unknown
 
     4 bytes - int - Unknown
     12 bytes - RGBA - Colour
+
     4 bytes - RGBA - Colour
 
     4 bytes - int - Unknown
 
     4 bytes - int - Unknown
 
     4 bytes - int - Texture Count
 
     4 bytes - int - Texture Count

Версия 17:36, 9 июля 2012

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 - Размер секции
       4 bytes - hex - Версия DFF
   * (Данные секции)
       [Размер секции] 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.0 - 0x00000310 - только для мульти-dff и генерика, остатки от ранних версий GTA III, которые DMA Designe переделывать не стали.
3.2.0.0 - 0x0800FFFF - 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

   (Header)
       2 bytes - int - Flags
       2 bytes - int - Unknown
       4 bytes - int - Face Count
       4 bytes - int - Vertex Count
       4 bytes - int - Frame Count
   (Lighting Header)
   {IF RWver = 3.0.0.0 THEN}
       4 bytes - float - Ambient
       4 bytes - float - Diffuse
       4 bytes - float - Specular
   {END IF}
   (Vertex Colors)
   {IF Prelit=1 in flags THEN}
       {ARRAY OF SIZE = Vertex Count*4 byte}
           1 byte - byte - Red
           1 byte - byte - Green
           1 byte - byte - Blue
           1 byte - byte - Alpha
       {END ARRAY}
   {END IF}
   (UV Mapping)
   {IF Textured=1 in flags THEN}
       {ARRAY OF SIZE: Vertex Count*8 byte}
           4 bytes - float - U
           4 bytes - float - V
       {END ARRAY}
   {END IF}
   (Faces)
   {ARRAY OF SIZE: Face Count*8 byte}
       2 bytes - int - Vertex 2
       2 bytes - int - Vertex 1
       2 bytes - int - Vertex Alpha
       2 bytes - int - Vertex 3
   {END ARRAY}
   (Bounding Sphere)
       4 bytes - float - Coordinate X
       4 bytes - float - Coordinate Y
       4 bytes - float - Coordinate Z
       4 bytes - float - Radius
       4 bytes - int - Has Position
       4 bytes - int - Has Normals
   (Verticles)
   {ARRAY OF SIZE: Vertex Count*12}
       4 bytes - float - Coordinate X
       4 bytes - float - Coordinate Y
       4 bytes - float - Coordinate Z
   {END ARRAY}
   (Normals)
   {IF Normals=1 in Flags THEN}
       {ARRAY OF SIZE: Vertex Count*12}
           4 bytes - float - Coordinate X
           4 bytes - float - Coordinate Y
           4 bytes - float - Coordinate Z
       {END ARRAY}
   {END IF}

Flags - значение, определяющее содержимое секции геометрии. Раскладывается на логические значения путём деления на 2 и проверки остатка (либо можно просто проверять каждый бит). Значения в итерациях:

  1. Tristrips
  2. Positions
  3. Textured
  4. Prelit
  5. Normals
  6. Light
  7. Modulate Material Color
  8. Textured 2


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
   4 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
Форматы файлов.b.a3d.anm.col.cfg.dff.dat.gxt.ide.ifp.img/.dir.ipl.raw/.sdt.rep.sc.scm.set.txd.zon
Документацияcarcols.datCHASE.DATCULLZONE.DATcuts.imgdefault.datfistfite.datflight.datgta3.exegta3.dat
gta3.imggta3.zonhandling.cfgmain.scmmap.datmap.zonobject.datparticle.cfgped.datpedgrp.dat
pedstats.datsfx.rawsurface.datTimeCyc.DATtracks.dattrain.datwater.datwaterpro.datweapon.dat
ИнструментыCLEOClump ViewerCol-IO‎Collision File Editor IIData toolDFF Viewerdffxbox2pcG-ToolsGTA Garage Mod Manager
GXT EditorGTA3 Limit AdjusterGTA3 Mission BuilderGTA3 PatcherIMG ToolKam's Max ScriptsMap Editor
Mod GeneratorMod InstallerMoo MapperPS2 TXD ModPS2 TXD ViewerResourse HackerRotation Calculator
RW AnalyzeViceTXDWater EditorSanny BuilderTXD ToolTXD WorkshopYAIEZModeler
Туториалыраздел в разработке
Классические МодыGPS RadarBye-Bye BikiniUltimate Stunt ParkThe SphereMiss LibertyIllandoIntercity HighwayShoreside Bridge
Rockstar HeightsLighthouse BridgeBlade FunparkOrbital CityLakeside IslandLiberty PenitentiaryJEM Island
Illando HelixCliff Climbing Mountain
Глобальные МодыReal GTA3Twenty TenSnow CityFrosted WinterUltimateBeta modX-box modBad BusinessGTA3 HDUltra mod
OpenTunnelsBack to the Future
МультиплеерMulti Theft AutoLiberty Unleashed
Исходники4x48ballambulanceasukaasusbcameracar_gencatcopcardebugdemodiablofiretruckfrankgates
genstufhealthhjhoodimportintrojoeykenjiloveluigimayhemmeatpickupsrampagerayrcswitch
taxitoniusjwantedyard