Note: In this post, I will not be covering how to unpack the game content as I have already covered this before in a previous post. You must unpack the game files before starting here, so for instructions on how to do that please follow the other guide I created, and then come back to this post which is purely focusing on textures and models.
Exporting textures to .png using DEMDDatabase
- Run DEMDDatabase.exe and open the unpacked database from the DXMDExtract extraction
- In the file tree, search for the texture(s) you want, for example for character textures, they are usually found under characters > {character you want} > {character you want}_material, etc.
- Select the .tex file and go to File > Export as... > and then you can save the individual texture
Exporting meshes using DEMDDatabase
- Similar to the above, character models can be exported following the same method, just instead of going into the character materials, go back one step and find the character model file. This can be exported as an .obj file
- You can also export all the textures and meshes for a specific character by going to their parent node in the tree > File > Mass fast export.Note: This will not work unless you set your fast export savepath. To do this, go to File > Settings > Fast export tab > select the folder you wish to save to, and you can also change the automatic Image format and Models format from here too
This provides the basis of extracting meshes; it is possible to load and combine the different mesh parts and material textures into Blender (or preferred 3D software):
GUIDE UPDATE: NOV 2025
Extracting Model and Rig with DXMDmodel
- Open NameMap.txt and search for the weightedprim (.prim) and bonerig (.borg) corresponding to a specific model (usually suffixed with .wl2). Alternatively, browse the filetree view in DEMD Database to find what you're looking for if the text file is confusing.
- Locate the .bin file for both of these. The .bin file will be the second string of numbers on the same line in the NameMap and also at the top of the texture/model viewer panel in DEMDdb. I've outlined the .bin search process in more detail in my other guide about extracting audio & video from Mankind Divided, check that guide out if you need more help.
- Drag and from them onto DXMDmodel.exe; it should generate an .ascii mesh (geometry + weights) file and an .smd file (skeleton + rig)
Importing into Blender using Blender Source Tools
- In order to import these into Blender, you need to install the Blender add-on "Blender Source Tools" from Steam Review, it works here even though Mankind Divided’s engine is not the Source engine. To install add-ons in Blender, you usually just need to go into Edit > Preferences > Add-ons > Install from File > browse to the Blender Source Tools .zip you downloaded > tick the checkbox to enable
- Usually, to import with this add-on you need a .qc file which helps Blender locate the different parts, however I was able to import just the .smd. Go to File > Import > Source Engine (.smd, .vta, .dmx, .qc) and browse for the .smd file of the mesh you want to import; the .ascii mesh should automatically load with it.
- In Blender you should see a mesh, with different parts coloured various shades, the armature/posing rig. Sometimes this is all that is needed to proceed, but some characters/meshes are divided up into multiple parts, probably due to these items requiring different rendering/physics in-game, i.e. the body, the cloth, the hair. In this case, keep reading.
Extracting and Importing Clothes with XNALara i/o Tools
- Go back to the NameMap (or DEMDdb file tree) and search for the corresponding .pc_apex file for the model you've already converted, i.e. for Pritchard his model was missing his jacket, so I found pritchard_jacket.pc_apex
- Locate the .bin file and drag and drop it onto DXMDmodel.exe
- It should generate an .ascii mesh (geometry + weights) file
- In order to import/append the .ascii files into your previous Blender project with the other mesh parts, you need to install the Blender add-on "XNALara-io-Tools" from Valerie-Bosco. After install, go to File > Import > XNA Lara / XPS > XNA Lara/XPS Model (.ascii/.mesh/.xps) and browse for the .ascii file for the clothes mesh.
Extracting and Importing Hair with XNALara i/o Tools
- Go back to the NameMap (or DEMDdb file tree) and search for the corresponding .pc_hair file for the model you've already converted, i.e. for Pritchard his model was missing his jacket, so I found pritchard_hair.pc_hair
- Locate the .bin file and drag and drop it onto PureHair.exe
- It should generate an .ascii mesh (weights) file and an .obj (geometry) file
- In order to import/append the .ascii files into your previous Blender project with the other mesh parts, you need to install the Blender add-on "XNALara-io-Tools" from Valerie-Bosco. After install, go to File > Import > XNA Lara / XPS > XNA Lara/XPS Model (.ascii/.mesh/.xps) and browse for the .ascii file for the hair mesh and the .obj file should automatically load with it
- In the case of duplicate armatures/posing rigs imported into Blender, choose main armature, clear parent of appended objects, set their parent to main armature, combine collections, ensure the armature modifier on each meshport is the main armature
- The texture coordinates are sometimes flipped on the Y-axis, manually fix the UVs by selecting all the UV islands, S (scale), Y (vertically), -1 (flip vertically down)
- The textures can be batch-exported with DEMD Database after setting the Mass Export settings
Preparing an extracted mesh for XNA Lara Posing Studio
General tips
- Version: Make sure the version of Blender is compatible with the XPS import/export tool you are using. The very latest version of Blender may not be compatible with the old tools. The oldest version of Blender which can open 4.x files and newer is 3.6. Some tools only work with version of Blender below 2.80 as well - it is not possible to open files created with 3.6 and above in a version this old, so you will need to change the Format
- Format: If you get crashes due to versioning (i.e. the Blend file you’ve been working with is too new), export into an intermediate format such as .fbx (which retains the bones, armature, materials) and import that into a previous version of Blender. Doing this will reset the Shader back to Principled BSDF for all the materials though, so you will need to change it back to XPS Shader and add the textures again manually
Bones, Armatures and Posing
- Armatures: Ensure all the mesh parts are linked to the same Armature via the modifier, are parented to the same Armature with Empty Groups via the Object settings in Object Mode, and they have the same Vertex Groups in the data panel
- Posing: To pose, click on the Armature in the Scene collection and change to Posing Mode. Select the bone nodes and move/rotate and it should move the mesh parts with the associated Vertex Groups
- Bones: You may find it difficult to see the mesh under the bone nodes, to change this you need to go into the Armature modifier option and change the Viewport Display to sticks and make sure there isn’t a custom mesh shape applied to the nodes
Missing textures or “missing.png” error when importing .xps
- Textures: Ensure all used textures are saved in the same folder as the one you export the .xps file to, if you want a portable .xps file you need to always bring the textures with it
- Materials: Ensure that the materials are renamed so both the image texture and the material both have the same name - leave out file type identifier suffixes like _diff or _norm
- UV Map: Ensure all the materials have only one UV map assigned, and rename it UVMap
- Shader: Ensure the textures are using XPS Shader and not Principled BSDF - if the shader is not available you need to import a pre-existing .xps model to have the option
- Vertex Colors: Remove any vertex colors - any being present causes the exporter to replace the materials texture with plain black
- Vertex Groups: Ensure that every mesh part has the same Vertex Groups - you can apply a Data Transfer modifier or run this Python script in the scripting panel:
import bpy
source = bpy.data.objects['goodmesh'] # replace with your mesh names
targets = ['badmesh1','badmesh2'] # replace with your mesh names
for target_name in targets:
target = bpy.data.objects[target_name]
for vg in source.vertex_groups:
if vg.name not in target.vertex_groups:
target.vertex_groups.new(name=vg.name)
Tools
- Blender:
https://www.blender.org/download - DXMDmodel & PureHair:
https://drive.google.com/file/d/1Ifqkcfbg2r8NdGSLgWkBlunfrv6Ob1Ox/view?usp=drive_link - Blender Source Tools (Steam Review):
http://steamreview.org/BlenderSourceTools - XNALara-io-Tools (Valerie-Bosco):
https://github.com/Valerie-Bosco/XNALara-io-Tools









If anyone is reading this after December 2023, unfortunately a lot of the information I had for these steps were sourced from XeNTaX forums which have since been shut down. There has been a community attempt to unofficially recreate the forum over the past months, so perhaps there will be updates soon.
ReplyDelete