RpGeometry
{{{NAME}}} | |
---|---|
RenderWare Stream Section | |
Vendor | {{{VENDORNAME}}} |
Module | {{{MODULENAME}}} |
Module ID | 0x{{{MODULEID}}}
|
Identifier | 0x{{{IDENTIFIER}}}
|
Chunk ID | 0x{{{MODULEID}}}{{{IDENTIFIER}}}
|
Versions | All |
Hierarchy | |
Parents: None | |
Children: None | |
Extensions: None | |
File Format |
Geometry is a container section used in DFF files as child of a Geometry List section. The section itself does not store any data at all. All additional information get stored inside a struct section which directly follows this one as a child. Geometry is one of the most important sections inside a .dff
model file. It stores geometry information for models (like the mesh and the texture maps).
Contents
Structure
The structure differs for most files, but it always gets introduced by the following set of values:
2b - WORD - Flags (See below) 2b - WORD - Number of UV coordinates used (GTA default is 1) 2b - WORD - Unknown 4b - DWORD - Triangle count 4b - DWORD - Vertex count 4b - DWORD - Morph target count
For some versions also some lightning color values are stored.
0x0C02FFFF
(3.3.0.2 – used by Vice City)0x0800FFFF
(3.?.?.? – used by GTA III)0x00000310
(3.1.0.0 – used by GTA III)0x00000304
0x00000C02
0x00000800
4b - DWORD - Ambient color (Represents an DirectXD3DCOLOR
value [1]) 4b - DWORD - Diffuse color (Represents an DirectXD3DCOLOR
value) 4b - DWORD - Specular color (Represents an DirectXD3DCOLOR
value)
Flags
The following flags descripe the behaviour of the mesh during the rendering progress. Some of the flags indicate the existance of data inside the following file format.
Flag | Binary | Description |
---|---|---|
0000 0000 0000 0001 |
Is triangle strip (If disabled it appears to be an indexed line list, but this is never used ingame). | |
0000 0000 0000 0010 |
Vertex translation (D3DFVF_XYZ )
| |
0000 0000 0000 0100 |
Texture coordinates 1 (D3DFVF_TEX1 )
| |
0000 0000 0000 1000 |
Vertex colors (D3DFVF_DIFFUSE )
| |
0000 0000 0001 0000 |
Store normals (D3DFVF_NORMAL )
| |
0000 0000 0010 0000 |
Dynamic vertex lightning (?) | |
0000 0000 0010 0000 |
Modulate | |
0000 0000 1000 0000 |
Texture coordinates 2 (D3DFVF_TEX2 )
|
All of those flags (except the first) are used to build up the flexible vertex format (FVF) [2].
Prelightning/Vertex colors
If flag 8 is enabled vertex color information for each vertex get stored up next:
4b - DWORD - Vertex color (D3DCOLOR)
The default value is 0x00FFFFFF (representing non-transparent white).
With San Andreas Rockstar's engine is able to change the vertex colors for ingame nights. Therefor there is an custom section called Night Vertex Colors. This prevents the game from loading new models at different times and increments the performance of the engine. Previous games stored copies of the model with different prelightning information and defined it inside the TOBJ IDE section.
Texture/UV coordinates
If flag 4 or 128 is set texture coordinates are following next. If both are set then the texture coordinates for the first texture of all vertices are listed before the texture coordinates for the second chanel of all vertices (By default no GTA game ever uses more than 1 UV coordinate at one time).
4b - FLOAT - Texture coordinate U 4b - FLOAT - Texture coordinate V
Indices/Attributes
The following array holds indices and attributes for each triangle (or line, depending on flag 1). The number of indices is represented by the third multiple of the triangle count value (or if the flags define a line list just multiply this value with 2). So for each 'line' the following format gets used:
4b - DWORD - Index of first vertex 4b - DWORD - Index of second vertex 2b - WORD - Attribute for line/triangle
If flag 1 defines a triangle strip a 3rd index simply gets appended.
4b - DWORD - Index of third vertex
Bounding information
The bounding information are used to check weather the mesh is visible for the camera, or not. It only exists once per geometry section.
4b - FLOAT - Center X 4b - FLOAT - Center Y 4b - FLOAT - Center Z 4b - FLOAT - Radius of bounding sphere 4b - DWORD - Has position 4b - DWORD - Has normals
The central vector (D3DXVECTOR3
) describes the center of the bounding sphere as an offset from the placement of the object inside the real world.
Vertex translation info
The number of vertices gets defined inside the geometry structure. If flag 2 is set the translation information gets stored for each vertex as a D3DXVECTOR3
:
4b - FLOAT - Position X 4b - FLOAT - Position Y 4b - FLOAT - Position Z
The position values are an offset relative to the mesh pivot.
Normals
In case flag 16 is set the normal vectors are the last part of the geometry data structure. They are also stored as a D3DXVECTOR3
for each vertex:
4b - FLOAT - Direction X 4b - FLOAT - Direction Y 4b - FLOAT - Direction Z
Child sections
Extension
The extension of an geometry usually holds the following sections in the order they are listed in here:
- Bin Mesh PLG
- Native Data PLG – (Only for consoles)
- Skin PLG
- Mesh Extension
- Night Vertex Colors
- Morph PLG
- 2dfx
See also
References
^ * http://msdn.microsoft.com/en-us/library/bb172518%28VS.85%29.aspx
^ * http://msdn.microsoft.com/en-us/library/bb172559%28VS.85%29.aspx