Article · 15 Sept 2026 · 3 min read
How we built the body: from 2,197 OBJ parts to a game-ready model
Inside the BODYVERSE anatomy pipeline: grouping BodyParts3D parts into organs, keeping every structure tappable, simplifying meshes and exporting the same body for the web.
A scientific anatomy dataset has to be precise. A game body also has to load on a phone, stay smooth while you spin it and tell you exactly what you tapped. This is how we turned one into the other.
The source: BodyParts3D
Our anatomy comes from BodyParts3D 4.0, an open database of 3D anatomical models by The Database Center for Life Science (DBCLS) in Japan. Each structure is a separate OBJ mesh with its own anatomical name.
Our import read 2,197 parts with 6.5 million triangles in total: excellent detail for research, and far more than a phone should be asked to draw every frame.
From 2,197 parts to 52 organs
A game needs fewer, larger objects: the heart, the liver, the muscles of the thigh. A mapping script assigns every part to one of 52 organ-level objects, and every object to one of six layers: skin, muscles, skeleton, internal organs, circulatory system and nervous system. Some objects are a single part, while the heart has 127 and the arteries 465.
Grouping keeps draw calls down without losing a single name: the model still knows 1,664 uniquely named structures.
Every triangle knows its name
When the parts of an organ are merged into one mesh, we record the range of triangles each part occupies. A tap hits a triangle, the triangle's index falls into one part's range, and the part's key leads to its name. That is how a tap on the chest can return "Right seventh costal cartilage" instead of just "rib cage".
On the web, the same ranges become a per-vertex attribute that lets the viewer highlight the single structure under the cursor.
Simplifying with QEM
To fit a mobile budget, we simplified the meshes with a quadric error metric (QEM) decimator. QEM repeatedly collapses the edge whose removal changes the surface least, measured as the squared distance to the planes of the neighbouring triangles. Flat areas lose triangles first; curves and fine detail survive the longest.
The result is two levels of detail: LOD0 with about 626,000 triangles for the whole body, under a tenth of the source, and LOD1 with about 255,000. Each part keeps its own triangle range at both levels, so a tap finds the same structure on either.
Filling the gaps
Some structures are missing from BodyParts3D, so we generated them schematically from the surrounding anatomy:
- lung tissue;
- the thyroid gland;
- the spinal cord;
- the major peripheral nerves: the brachial plexus and the median, ulnar, radial, femoral, sciatic, tibial, common fibular, intercostal, vagus and phrenic nerves.
They show where each structure sits and roughly how it runs; our medical disclaimer lists them.
A neutral body
The external genitalia, and the vessels and ducts that lead to them through the groin, are replaced by a neutral surface, and hair is not modelled. BODYVERSE is rated 16+ and is planned for classrooms; a neutral body keeps the attention on how the body works.
One model, two platforms
The processed meshes live in the app's Unity 6 project, rendered with the Universal Render Pipeline. For the 3D atlas we are preparing for this website, a build script reads the same meshes, organ ids and structure names and writes a single glTF file with meshopt compression: 1.33 MB for the LOD1 body of about 255,000 triangles. A content hash in the file name lets browsers cache it until the model changes. The organ and system texts come from the same project, so a fix made for the app reaches the web with the next build.
Credits
The 3D anatomy in BODYVERSE is based on BodyParts3D, © The Database Center for Life Science, licensed under CC BY 4.0. We modified the original models as described above: grouping, simplification, schematic additions and a neutral surface. Our thanks to DBCLS for making this work open.


