Difference between revisions of "Sims 3:0x01D0E723"
m (→Element Formats) |
(→Element Formats) |
||
Line 68: | Line 68: | ||
Here and subsequently: "multiply by 1/xxx" - why not just "divide by xxx"? | Here and subsequently: "multiply by 1/xxx" - why not just "divide by xxx"? | ||
[[User:Pljones|Pljones]] 23:07, 17 January 2011 (UTC) | [[User:Pljones|Pljones]] 23:07, 17 January 2011 (UTC) | ||
+ | |||
+ | OK, here's my explanation (this generates values that match Wes Howe's tool): | ||
+ | :There are two methods, a general one and one for BlendWeight only, that are slightly different. | ||
+ | :*The order of the three floats is the reverse order of the first three bytes, with the fourth byte being a scaling factor. | ||
+ | :*Generate the scaling factor by subtracting the fourth byte from 255; if the result is zero, use 128 (or, for BlendWeight 256) instead. | ||
+ | :*Each float is generated by taking each byte, subtracting 128 (except if BlendWeight) and then dividing by the scaling factor. | ||
+ | [[User:Pljones|Pljones]] 22:08, 18 January 2011 (UTC) | ||
|- | |- | ||
|0x06 || Short2 || 2 floats in two words. Multiply the signed values by 1/32767 | |0x06 || Short2 || 2 floats in two words. Multiply the signed values by 1/32767 |
Revision as of 23:08, 18 January 2011
Modding Reference by Category | |
---|---|
Sims 3 :DBPF | File Types | RCOL(Scene) | Catalog Resource | String Table | Key Table | TS3 Programmer's Reference |
Vertex Format - VRTF | ||
---|---|---|
TypeID: | 0x01D0E723 | |
Game Version: | The Sims 3 |
Format
This is a Sims 3:RCOL chunk found embedded in MODL and MLOD resources.
DWORD Tag // 'VRTF' DWORD Version // 00000002 DWORD Stride // Vertex data length (Bytes per vertex) DWORD Count DWORD IsExtendedFormat// boolean, always false but were it true the byte fields ahead would be DWORDs --repetition Count packed D3DVERTEXELEMENT: BYTE Usage BYTE UsageIndex //some elements can appear more than once, each time the index increases BYTE Format BYTE Offset // Offset into the vertex declaration for the data
Element Usages
Usages, and the formats they are usually paired with.
Id | Type | Element Formats |
---|---|---|
0x00 | Position | Short4, Float3 |
0x01 | Normal | ColorUByte4 |
0x02 | UV | Short2, Short4, Float2, Float4 |
0x03 | BlendIndex | UByte4 |
0x04 | BlendWeight | ColorUByte4 |
0x05 | Tangent | ColorUByte4 |
0x06 | Color | ColorUByte4 |
Element Formats
List of formats, and how to read them
Id | Type | |
---|---|---|
0x00 | Float | uncompressed float |
0x01 | Float2 | 2 uncompressed floats |
0x02 | Float3 | 3 uncompressed floats |
0x03 | Float4 | 4 uncompressed floats |
0x04 | UByte4 | 4 uncompressed bytes |
0x05 | ColorUByte4 | 3 floats in 4 bytes. Order is little-endian, use the low order byte (4th) as an unsigned scaler value. For each remaining signed byte, if negative, add it, if positive, subtract it, then multiple the result by 1/scaler, or by 1/127 if scaler is 0
This entry needs explaining more clearly. In Little-endian, the low order byte is first, not fourth. The statements "add it" and "subtract it" do not explain what "it" is. Here and subsequently: "multiply by 1/xxx" - why not just "divide by xxx"? Pljones 23:07, 17 January 2011 (UTC) OK, here's my explanation (this generates values that match Wes Howe's tool):
Pljones 22:08, 18 January 2011 (UTC) |
0x06 | Short2 | 2 floats in two words. Multiply the signed values by 1/32767 |
0x07 | Short4 | 3 floats in 4 words. The fourth word is an unsigned scaler, multiply each signed word by 1/scaler (or use 65535 if zero) |
0x08 | UByte4N | |
0x09 | Short2N | |
0x0A | Short4N | |
0x0B | UShort2N | |
0x0C | UShort4N | |
0x0D | Dec3N | |
0x0E | UDec3N | |
0x0F | Float16_2 | |
0x10 | Float16_4 |
Based on contributions from delphy, karybdis and atavera
Modding Reference by Category | |
---|---|
Sims 3 :DBPF | File Types | RCOL(Scene) | Catalog Resource | String Table | Key Table | TS3 Programmer's Reference |