User Tools

Site Tools


file_formats:bbm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

file_formats:bbm [2007/03/12 00:49]
file_formats:bbm [2007/03/12 00:49] (current)
Line 1: Line 1:
 +//Big Blue Box Mesh Format //
 +=====Tagged Model Format=====
 +====3DMF====
 +3D Mesh File
 +====3DRT====
 +(File Size of all Chunks)
 +===MTLS===
 +Material List (File Size of All MTRL Chunks)
 +==MTRL==
 +Material Description
 +==MTLE==
 +Extended Material Properties
 +==MMAP==
 +Mapping Info
 +====SUBM====
 +Sub-Mesh
 +===TRFM===
 +Transformation Matrix
 +===PRIM===
 +Primitive
 +==TRIS==
 +Triangle List
 +==SMTH==
 +Smoothing Groups
 +==VERT==
 +Vertex List
 +==UNIV==
 +Unique Vertex Information
 +==VGRP==
 +Vertex Group
 +===BONE===
 +Bone
 +===CLTH===
 +Cloth
 +====HLPR====
 +Helpers
 +===HPNT===
 +Helper Point
 +===HDMY===
 +Dummy Object
 +===HCVL===
 +Convex Volume
  
 +=====Compiled Model Format=====
 +
 +====Header====
 +<​code>​
 +//​char NullTerminatedString[x];​
 +byte SkeletonPresent;​
 +float floats[10];​ //Model Origin?? Listed in .big Sub-header...
 +word HPNT_Count;​
 +word HDMY_Count;​
 +dword HLPR_Index_Uncompressed;​
 +word padding;​
 +word HPNT_Compressed;​
 +</​code>​
 +[[BBM#​Helper Points|Helper Points]][HPNT_Count];​
 +<​code>​
 +word HDMY_Compressed;​
 +</​code>​
 +[[BBM#​Helper Dummies|Helper Dummies]][HDMY_Count];​
 +<​code>​
 +word HLPR_Index_Compressed;​
 +word HPNT_IndexSize;​
 +char HPNT_Index[HPNT_IndexSize-2];​ //Subtract the size
 +char HDMY_Index[HLPR_Index_Uncompressed-HPNT_IndexSize];​ //Rest of helper index deduced
 +dword NumberMaterials;​
 +dword NumberSurfaces;​
 +dword NumberBones;​
 +dword SizeOfBoneIndex;​
 +byte Unknown;​
 +word Unknown;​
 +word Unknown;​
 +word Compressed;​
 +word Bone_Index_Reference[NumberBones-1];​
 +word BoneIndexCompressed;​
 +char BoneIndex[SizeOfBoneIndex];​
 +word CompressedSize;​
 +</​code>​
 +[[BBM#SUB CHUNK 1|Bones SUB CHUNK 1]][NumberBones];​
 +<​code>​
 +word CompressedSize;​
 +</​code>​
 +[[BBM#SUB CHUNK 2|Bones SUB CHUNK 2]][NumberBones];​
 +<​code>​
 +word CompressedSize;​
 +</​code>​
 +[[BBM#SUB CHUNK 3|Bones SUB CHUNK 3]][NumberBones];​
 +<​code>​
 +float Matrix[12];​ //Transform Matrix
 +</​code>​
 +
 +====Helper Points====
 +<​code>​
 +float Matrix[4];​ //No Rotation
 +long hierarchy;​
 +</​code>​
 +
 +====Helper Dummies====
 +<​code>​
 +float Matrix[13];​
 +long hierarchy;​
 +</​code>​
 +
 +====Bones====
 +===SUB CHUNK 1===
 +<​code>​
 +long Index;​
 +long Parent;​
 +long nChild;​
 +float Matrix[12];​
 +</​code>​
 +===SUB CHUNK 2===
 +<​code>​
 +float Matrix[12];​
 +</​code>​
 +===SUB CHUNK 3===
 +<​code>​
 +float Matrix[16];​
 +</​code>​
 +
 +====Material List====
 +<​code>​
 +dword Material_Index;​
 +char NullTerminatedString[x];​
 +dword Padding;​
 +dword BASE_Texture_ID;​ //From Texture.big
 +dword BUMPMAP_Texture_ID;​ //From Texture.big
 +dword REFLECT_Texture_ID;​ //From Texture.big
 +dword Unknown;​
 +dword Max_Texture_Layers;​
 +dword Glow_Strength;​
 +byte Unknown;​
 +byte Alpha_Enabled;​
 +byte Unknown;​
 +word Ignored;​ //For degenerate Tri's
 +</​code>​
 +
 +====Sub-Mesh====
 +<​code>​
 +dword Hierarchy;​
 +dword DestroyableMeshLevels;​
 +float floats[5];​
 +dword nFaceVertexIndices;​
 +dword nFaceVertexIndices_BoneIndice;​
 +dword nVerts;​
 +dword nFaces;​
 +dword nSourceVerts;​
 +dword Unknown;​
 +dword Unknown;​
 +dword Unknown;​
 +struct structMTRLnFaceVertexIndices FaceIndices[nFaceVertexIndices];​
 +struct structMTRLnFaceVertexIndicesBoneIndice Face_BoneIndices[nFaceVertexIndices_BoneIndice];​
 +float floats[8];​
 +dword sVert;​
 +dword padding;​
 +//Start of Mesh
 +</​code>​
 +Quick notes on sVert "Size Vertice Blocks"​....
 +
 +20 - 28byte float coords, bones, packed normals, s11e4 tu tv \\
 +6 - 28byte packed coords, bones, packed normals, s11e4 tu, tv, dword[2] \\
 +4 - 36byte float coords, float normals, float tu tv, dword meshlevel \\
 +22 - 36byte float coords, bones, packed normals, s11e4 tu,tv, dword[2] \\
 +4 - 12byte packed coords, packed normals, s11e4 tu tv \\
 +4 - 20byte packed coords, bones, packed normals, s11e4 tu tv \\
 +20 - 20byte float coords, packed normals, s11e4 tu tv \\
 +
 +
 +
 +====Dynamic Clothing====
 +<​code>​
 + ​struct CLTH
 +{
 + //​DWORD SubMesh_ClothCount; ​
 + DWORD Cloth_ID;​
 + DWORD ??​_ID;​ //possibly material ID
 + DWORD sChunk;​ //Size of full clothing data
 + DWORD Unknown5;​
 + DWORD sDistanceIndice;​
 + CLTH_Distance* DistanceIndice;//​[sDistanceIndice/​28];​ //Distance between two particles
 + float Unknown8;​
 + float Unknown9;​
 + float Unknown10;​
 + DWORD sParticleIndice;​
 + CLTH_Particle* ParticleIndice;//​[sParticleIndice];​
 + float* ParticleAlphaIndice;//​[sParticleIndice];​ //How "​free"​ they are. 0.0 = Static and gets a duped entry in verts
 + DWORD Unknown11;​
 + float WindStrength;​ //strength
 + char EnableDragging;​ //enable
 + char RotationalDragging;​ //​rotational
 + float StrengthDragging;​ //strength
 + char EnableAcceleration;​ //enable
 + float AccelerationDampening;​ //damping
 + DWORD nTriIndice;​
 + CLTH_Tri* TriIndice;//​[nTriIndice] Particles+"​Unique"​ Verts
 + DWORD Unknown12;​ // looks like padding it
 + DWORD sTexIndice;​
 + CLTH_Tex* TexIndice;//​[sTexIndice];​ //v1 = Particle/"​unique"​ Vert, v2 = TexIndice
 + DWORD sVertexIndice;​
 + CLTH_Vertex* VertexIndice;//​[sVertexIndice];​
 + DWORD sTexCoordIndice;​
 + CLTH_TexCoord* TexCoordIndice;//​[sTexCoordIndice];​
 + DWORD sParticleMask;​
 + CLTH_PartMask* ParticleMask;//​[sParticleMask];​ //Unique Particles in TriIndice
 + DWORD sVertMask;​
 + CLTH_VertMask* Vertmask;//​[sVertMask];​ //Unique Verts in TriIndice
 + //9 bytes of padding
 + // 1 group for particles, 1 for verts
 + DWORD VGRPCount;​ // = Number of Bones
 + VGRP** VGRPs;​
 +};
 +</​code>​
file_formats/bbm.txt ยท Last modified: 2007/03/12 00:49 (external edit)