FleetFeet / Volumental BMF file formatWritten by Paul BourkeOriginal: December 2020. Updated: July 2022
The following defines the BMF format as used to represent foot scans by either, or both, FleetFeet and Volumental. The format specification is, as far as the author is aware, not made available publicly and what follows is a determination of the format using standard investigative methods. With the information presented here it is possible to use the feet models for purposes other than the limited capabilities of the companies products. As with all such investigations the format may be able to deal with other situations than are described here, but the information provided here deals with all the files currently examined.
The files are required to define a 3D mesh which typically includes a list of the vertices and triangular faces. The faces are defined, as in other efficient formats, in reference to the vertex indices. This has the benefit of supporting shared vertices, similar to the OBJ format but unlike the STL format. This is exactly what the BMF format does, and it additionally defines a normal at each face vertex. The high level layout of the file is as follows:
While not explicitly defined in the format, the units for the vertices are meters. More detail of the file format is shown in the figure below.
Notes
Sample file decomposed into sections, is shown below.
Magic number header: "BMF0"
22064 ("V" "0" = 86 48)
21359 ("S" "o" = 83 111) Start of vertices
2550
0
Read 2550 vertices
22064 ("V" "0" = 86 48)
17775 ("E" "o" = 69 111) End of vertices
18224 ("G" "0" = 71 48)
21359 ("S" "o" = 83 111) Start of group
17968 ("F" "0" = 70 48)
21359 ("S" "o" = 83 111) Start of faces
5096
Read 5096 faces
0
17968 ("F" "0" = 70 48)
17775 ("E" "o" = 69 111) End of faces?
20016 ("N" "0" = 78 48)
21359 ("S" "o" = 83 111) Start of Normals
15288
0
Read 15288 vertices
20016 ("N" "0" = 78 48)
17775 ("E" "o" = 69 111) End of Normals
18224 ("G" "0" = 71 48)
17775 ("E" "o" = 69 111) End of group
Magic number EOF: "FMB0"
Addendum - Based on further insights by Maarten de Vries
It seems the above discussion can be simplified if one realises that all integers are most likely 4 bytes instead of 2 bytes previously imagined. This makes sense since it eliminates the need for padding in the description above. That is, the number of vertices, number of faces, number of normals, and the vertex indices for the faces. Simplified and updated file structure shown below.
Further notes
|