Difference between revisions of "Skin PLG (RW Section)"
								
								Jump to navigation
				Jump to search
				
				
		
					
								
							
		| m (Added detailed data types.) | m | ||
| Line 6: | Line 6: | ||
|   UINT8   numUsedBones |   UINT8   numUsedBones | ||
|   UINT8   maxWeightsPerVertex |   UINT8   maxWeightsPerVertex | ||
| − |   UINT8     | + |   UINT8   padding (unused) | 
|   UINT8   bonesUsed[numUsedBones] |   UINT8   bonesUsed[numUsedBones] | ||
|   UINT8   vertexBoneIndices[geometry->numVertices][4] |   UINT8   vertexBoneIndices[geometry->numVertices][4] | ||
|   FLOAT   vertexBoneWeights[geometry->numVertices][4] |   FLOAT   vertexBoneWeights[geometry->numVertices][4] | ||
| − |   FLOAT    | + |   #repeat for numMatrices | 
| + |      #if RwVer < 3.7.0.0 && maxWeightsPerVertex == 0 | ||
| + |      INT32   unused 4b value, possibly a leftover from old RW versions (0xDEADDEAD) | ||
| + |      #endif | ||
| + |      FLOAT   skinToBoneMatrice[4][4] | ||
| + |  #endrepeat | ||
|   // Split data |   // Split data | ||
|   UINT32  boneLimit |   UINT32  boneLimit | ||
|   UINT32  numMeshes |   UINT32  numMeshes | ||
|   UINT32  numRLE   |   UINT32  numRLE   | ||
| − | + |   #if numMeshes > 0 | |
|   UINT8   meshBoneRemapIndices[numBones] |   UINT8   meshBoneRemapIndices[numBones] | ||
|   UINT16  meshBoneRLECount[numMeshes] |   UINT16  meshBoneRLECount[numMeshes] | ||
|   UINT16  meshBoneRLE[numRLE] |   UINT16  meshBoneRLE[numRLE] | ||
| + |  #endif | ||
| ;numBones (numMatrices) | ;numBones (numMatrices) | ||
| :Number of bones attached to the skin, also the number of inverse matrices (see '''skinToBoneMatrices'''). | :Number of bones attached to the skin, also the number of inverse matrices (see '''skinToBoneMatrices'''). | ||
| ;numUsedBones | ;numUsedBones | ||
| − | :Number of bones which influence vertices, that is those bones which have at least a non-zero weight. | + | :Number of bones which influence vertices, that is those bones which have at least a non-zero weight. If this value is zero, RW will try to find "used" bones automatically. | 
| ;maxWeightsPerVertex | ;maxWeightsPerVertex | ||
| − | :Overall number of maximum non-zero weights per vertex. | + | :Overall number of maximum non-zero weights per vertex. If zero, RW will find this value automatically. | 
| ;bonesUsed | ;bonesUsed | ||
| Line 38: | Line 44: | ||
| ;skinToBoneMatrices | ;skinToBoneMatrices | ||
| − | :These are inverse matrices represented with ''RwMatrix'' structure. | + | :These are inverse matrices represented with ''RwMatrix'' structure. RW docs says it's necessary to keep the order within 4 weight values (from higher to lower), but even some example models have different ordering. | 
| ;boneLimit | ;boneLimit | ||
Revision as of 01:56, 18 July 2015
| {{{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 | |
Skin is an additional RenderWare plugin for geometry section. It is used to hold information about skinned model.
Structure
UINT8   numBones (numMatrices)
UINT8   numUsedBones
UINT8   maxWeightsPerVertex
UINT8   padding (unused)
UINT8   bonesUsed[numUsedBones]
UINT8   vertexBoneIndices[geometry->numVertices][4]
FLOAT   vertexBoneWeights[geometry->numVertices][4]
#repeat for numMatrices
    #if RwVer < 3.7.0.0 && maxWeightsPerVertex == 0
    INT32   unused 4b value, possibly a leftover from old RW versions (0xDEADDEAD)
    #endif
    FLOAT   skinToBoneMatrice[4][4]
#endrepeat
// Split data
UINT32  boneLimit
UINT32  numMeshes
UINT32  numRLE 
#if numMeshes > 0
UINT8   meshBoneRemapIndices[numBones]
UINT16  meshBoneRLECount[numMeshes]
UINT16  meshBoneRLE[numRLE]
#endif
- numBones (numMatrices)
- Number of bones attached to the skin, also the number of inverse matrices (see skinToBoneMatrices).
- numUsedBones
- Number of bones which influence vertices, that is those bones which have at least a non-zero weight. If this value is zero, RW will try to find "used" bones automatically.
- maxWeightsPerVertex
- Overall number of maximum non-zero weights per vertex. If zero, RW will find this value automatically.
- bonesUsed
- Indices list of the significant bones connected to the skin (see numUsedBones).
- vertexBoneIndices
- Vertex bone indices are represented with 4 bone indices per each vertex.
- vertexBoneWeights
- Vertex bone weights are represented with RwMatrixWeights structure per each vertex.
- skinToBoneMatrices
- These are inverse matrices represented with RwMatrix structure. RW docs says it's necessary to keep the order within 4 weight values (from higher to lower), but even some example models have different ordering.
- boneLimit
- numMeshes
- numRLE
- meshBoneRemapIndices
- meshBoneRLECount
- meshBoneRLE


