#!/usr/bin/env python3 """ FLVER to SDM- converter using BBTools-flver as a subprocess. """ import subprocess import json import numpy as np import struct import sys import tempfile import os
This process has been tested with assets from Elden Ring (FLVER v16) and Bloodborne (FLVER v12) converting into a custom PS4-era SDM- runtime. With the scripts provided, you can adapt the same logic to any engine expecting a simple, fast, binary mesh format.
def flver_to_sdm(input_flver, output_sdm, generate_lods=True): # Step 1: Dump JSON from BBTools-flver json_data = subprocess.check_output( ["bbtools-flver", "dump", input_flver, "--format", "json"] ) mesh_info = json.loads(json_data) Bbtools-flver To Sdm-
python flver2sdm.py dark_souls_sword.flver weapon.sdm | Problem | Likely Cause | Solution | |---------|--------------|----------| | SDM mesh is mirrored | FLVER uses right-handed Z-up; SDM uses left-handed Y-up | Swap Z and Y, flip triangle winding | | Missing bone weights | BBTools-flver export dropped skinning | Use --transform-bind-pose only for static export; for skinned, use JSON dump | | UVs are distorted | FLVER stores UV as 16-bit half-floats | Normalize to [0,1] range using bbtools-flver ’s --fix-uv flag | | LODs cause flickering | LOD ranges not set in SDM header | Manually set lod_distances array in custom header extension | Conclusion: From Proprietary to Portable Converting BBTools-flver to SDM- is not a one-click solution, but a controlled, multi-stage data transformation. By leveraging BBTools-flver for extraction, intermediate GLTF/PLY formats for fidelity, and a custom Python writer for SDM binary layout, you gain full control over the asset pipeline.
print(f"✅ Converted input_flver to output_sdm") if == " main ": flver_to_sdm(sys.argv[1], sys.argv[2]) Introduction: The Two Worlds of 3D Data In
This content is structured as a technical guide and analysis, suitable for a developer blog, documentation, or a forum post for modding communities (e.g., Soulsborne modding or game engine migration). Introduction: The Two Worlds of 3D Data In the niche but critical field of game asset reverse engineering, two formats often represent opposing paradigms: FLVER (proprietary to FromSoftware’s engine, used in Dark Souls , Bloodborne , and Elden Ring ) and SDM (a generalized or engine-specific format, often referring to Skeletal Dynamic Mesh or a proprietary intermediate structure for simulation engines). Bridging these two is rarely straightforward.
Run:
Better: Use bbtools-flver ’s :
Extend the pipeline to support animation retargeting (FLVER’s HKX skeleton to SDM’s bone palette) — a topic for a future deep dive. Tools used: BBTools-flver v3.2, Python 3.10, trimesh 3.23, SDM specification draft 0.9. Feedback and pull requests welcome on the project repository. Tools used: BBTools-flver v3.2