What Does “SFM Compile” Mean?
An SFM compile is the process of converting raw 3D geometry, textures, and scripts into proprietary engine formats:
- For Models: Converts source mesh files (
.smdor.dmx) and script files (.qc) into compiled model packages (.mdl,.vvd,.vtx, and.phy). - For Maps: Converts raw map geometry files (
.vmf) using Valve’s compilers (VBSP,VVIS, andVRAD) into a single compiled map file (.bsp).
MODEL PIPELINE: 3D App (Blender) -> Export (.smd / .dmx) + Script (.qc) -> StudioMDL / Crowbar -> Engine (.mdl)
MAP PIPELINE: Hammer Editor -> Map Source (.vmf) -> VBSP + VVIS + VRAD -> Engine Map (.bsp)
Part 1: How to Compile Custom 3D Models for SFM
Compiling a custom 3D model requires three primary components: the 3D Mesh, the QC Script File, and Engine-Formatted Textures (VTF/VMT).
Step 1: Export Intermediate Model Files
Using 3D modeling software like Blender, Maya, or 3ds Max:
- Ensure your armature (skeleton) and bone weights are correctly assigned.
- Export your base mesh, collision mesh (if applicable), and animation sequences as .smd or .dmx files using plugins such as Blender Source Tools.
Step 2: Convert Textures to VTF and Create VMTs
Source Filmmaker cannot read standard .png or .jpg image files.
- Open VTFEdit (or use the VTF plugin) to convert diffuse, normal, and bump maps into .vtf (Valve Texture Format) files.
- Create a corresponding .vmt (Valve Material Type) text file for each texture to define shaders and material parameters.
Code snippet
"VertexLitGeneric"
{
"$basetexture" "models/custom_character/diffuse"
"$bumpmap" "models/custom_character/normal"
"$phong" "1"
"$phongboost" "2"
}
Step 3: Write the Quality Control (.qc) Script
The .qc file acts as the blueprint that instructs the compiler how to build your model. Create a plain text file named model_setup.qc:
Code snippet
$modelname "custom_props/my_model.mdl"
$body my_mesh "my_model_mesh.smd"
$cdmaterials "models/custom_character/"
$surfaceprop "metal"
$sequence "idle" "anims/idle.smd" loop fps 30
$collisionmodel "my_model_phys.smd" {
$concave
$mass 10.0
}
Step 4: Compile Using Crowbar or StudioMDL
While you can run Valve’s studiomdl.exe directly via the command line, Crowbar is the industry-standard GUI tool for compiling Source assets.
- Open Crowbar and navigate to the Compile tab.
- Under QC File, select your
.qcfile. - Set the Game Definition to Source Filmmaker (pointing to your
SourceFilmmaker/game/usermodfolder). - Click Compile.
- Check the output window to ensure the generated
.mdl,.vvd, and.vtxfiles land inusermod/models/custom_props/.
Part 2: How to Compile Custom Maps (.vmf to .bsp) for SFM
If you are building custom environments or porting maps from games like Counter-Strike or Team Fortress 2 into SFM, you need to compile raw .vmf files into .bsp maps.
Step 1: Open the Map in Hammer Editor
- Launch SFM through Steam, select Launch SDK, and open the Hammer World Editor.
- Go to File > Open and load your
.vmfmap file.
Step 2: Clean Up Unnecessary Game Entities
Maps designed for multiplayer games like GMod or CS:GO often contain spawn entities, triggers, or logic points that can crash SFM.
- Delete gameplay triggers (
trigger_multiple,info_player_startclutter). - Keep key lighting setup entities (
light,light_environment,light_spot).
Step 3: Run the Map Compiler
- Go to File > Run Map (or press F9).
- Set BSP, VIS, and RAD options to Normal (or Expert > Full Compile for final lighting quality).
- Ensure HDR is enabled so SFM handles lighting and exposure values properly.
- Click OK to run the compile. Once finished, move the resulting
.bspfile intoSourceFilmmaker/game/usermod/maps/.
Common SFM Compile Errors and Solutions
+------------------------------------+-------------------------------------------+-----------------------------------------------------+
| Error / Issue | Cause | Solution |
+------------------------------------+-------------------------------------------+-----------------------------------------------------+
| Purple/Black Checkerboard Pattern | Missing VMT or VTF texture paths | Verify $cdmaterials path inside your .qc script |
| Model appears completely invisible | Broken scale or incorrect root bone | Check unit scale in Blender & root bone rigging |
| ERROR Model replacing asset | Target .mdl file not generated or corrupt | Inspect Crowbar compile log for line-number syntax |
| SFM crashes when loading map | Missing packed materials or bad entities | Decompile .bsp with BSPSource & clean unneeded node |
+------------------------------------+-------------------------------------------+-----------------------------------------------------+
Frequently Asked Questions (FAQs)
What is the best tool for compiling SFM models?
Crowbar is widely considered the best tool. It offers a graphical user interface for Valve’s native studiomdl.exe compiler, featuring automatic game path detection, batch compiling, and decompiler functionality.
Why is my compiled model showing up as a big red “ERROR” sign?
A red ERROR mesh indicates that SFM cannot locate the .mdl file at the exact path defined by $modelname in your .qc script. Verify that the output path matches your directory structure inside usermod/models/.
Can I compile FBX files directly for SFM?
No. Source Filmmaker cannot natively read .fbx or .obj files. You must first convert them to .smd or .dmx using a 3D modeling tool (like Blender with the Blender Source Tools extension) and compile them via a .qc file.
