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
|