Jump to content

Static Prop Combine in CS:GO



Static Prop Combine in Counter-Strike: Global Offensive

A step by step guide
thanks to @untor

What is Static Prop Combine?

Static prop combine, or informally speaking "autocombine", is a new feature in CS:GO's VBSP.
It allows VBSP to merge together multiple static props into a single static prop, either automatically or with user-defined rules.



What is static prop combine good for?
Static prop combine is another feature to optimize your maps. Most people might think that "the less geometry rendered the better". So if you use small props, it's easier to hide what is not visible.
That's not wrong. But there is a problem:
In Source, there is one draw call per model per material. And these draw calls are very performance-hungry.
That's where static prop combine comes into play:
By combining models sharing the same materials, less draw calls are performed, which greatly helps optimization.
Valve has stated that Nuke runs 40% faster after they implemented static prop combine.


How do I use static prop combine?
The static prop combine feature was added in 2016 with the release of the reworked de_nuke. But since then it was not (?) used by community mappers, there are no (?) guides on the Internet except this documentation.
@untor helped me to make static prop combine feature do its job. So we decided that it's time to publish a step by step guide how to use static prop combine.

  • We presuppose that you are already familiar with the creation of props


0. Backup your CS:GO folder (optional)
We do not take responsibility for any damage done to your files. So it's time to backup your game files now if you have not already. In general we recommend to duplicate your "Counter-Strike Global Offensive" folder, so you can use a separate installation of CS:GO for mapping while keeping the other one clean for playing.

1. Source files
You must have the source files of the models you want to be combined. Usually 3 files for each prop:

  • *.qc
  • reference mesh (supported formats are *.smd, *.dmx and *.fbx)
  • physics mesh

So if you want to combine props made by you, you should already have these files.
If you want to combine props made by Valve, you will need to decompile them first. And then change the names - otherwise, the version of the prop that is packed in the VPK would overwrite your version.
In this guide we will use two different pipe props:


You can download the example files here (contains the *.qc and *.smd files) :



Browse to "...\Steam\steamapps\common\content\csgo\"
Create a folder "models". In our example we have another subfolder "example". Save the model source files there:



These are our QCs:



$modelname         "props\example\pipe_straight.mdl"
$body "pipe_straight"    "pipe_straight_reference.smd"
$surfaceprop         "metal"
$cdmaterials         "models\props\de_nuke\hr_nuke\metal_pipe_001"
$collisionmodel     "pipe_straight_physics.smd" { $concave }
$sequence "idle"    "pipe_straight_reference.smd"



$modelname         "props\example\pipe_curved.mdl"
$body "pipe_curved"    "pipe_curved_reference.smd"
$surfaceprop         "metal"
$cdmaterials         "models\props\de_nuke\hr_nuke\metal_pipe_001"
$collisionmodel     "pipe_curved_physics.smd" { $concave }    
$sequence "idle"    "pipe_curved_reference.smd"

Restrictions for the *.qc:

  • Only the first $body is recognized.
  • $model is not recognized.
  • $appendsource and $addconvexsrc are not recognized.
  • You can only use $upaxis Z or Y.


2. Compile your props
Your models have to be compiled from this directory now:
Open your model compile tool (I use Crowbar)
Then browse to "...\Steam\steamapps\common\content\csgo\models\example\" and compile the QCs.
The compiled model files should be in "...\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\models\props\example\" now.


3. spcombinerules.txt
Browse to "...\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\scripts\hammer\spcombinerules\"


There you will find "spcombinerules.txt". In this file the combine rules for Valves props are defined. It is a standard KeyValues-formatted text file. Each entry follows the format below.
Rename it to "spcombinerules_valve.txt" (or whatever you want) and create a new text file "spcombinerules.txt".

Then copy and paste the following into "spcombinerules.txt" and save it.


"combine rules"
        // this is a stub qc that will be used to generate combined models
        "qc_template_path"    "scripts/hammer/spcombinerules/qc_templates/example/pipe_combine.qc"
        // max models per cluster using these peers
        "cluster_limit" 24
        // don't cluster models greater than this far apart
        "distance_limit" 500

        // these are models that can combine with each other
            "models/props/example/pipe_straight.mdl" ""
            "models/props/example/pipe_curved.mdl" ""


4. Stub QCs
Stub QCs are QCs which contain a base template for the QCs which static prop combine generates. Generally, they should only include:

  • $staticprop
  • $surfaceprop
  • $cdmaterials
  • Any $texturegroups used by the models.

Browse to "...\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\scripts\hammer\spcombinerules\qc_templates\".
In our example we create a new subfolder "example", open it and then create a text file and rename it to "pipe_combine.qc":


Copy and paste the following into "pipe_combine.qc" and save it:


$surfaceprop     "metal"

$cdmaterials    "models\props\de_nuke\hr_nuke\metal_pipe_001\"
$texturegroup     metal_pipe
        { "metal_pipe_001" }


5. Compile your map
Add some of our example props to your map in Hammer and compile the map.
In our example we use the following compile parameters for VBSP


-staticpropcombine -staticpropcombine_mininstances 3 -keepsources -game $gamedir $path\$file

Compile parameters (full list here) :

-StaticPropCombine: Merges static props together according to the rules defined in scripts/hammer/spcombinerules/spcombinerules.txt. This lowers the number of draw calls, increasing performance. It can also be used to lower the number of static props present in a map.
-StaticPropCombine_AutoCombine: Automatically generate static prop combine rules for props that VBSP deems should be combined.
Note: This does not write to spcombinerules.txt.
-StaticPropCombine_ConsiderVis: Instead of using the distance limit, combine all props in the group that share visclusters.
-StaticPropCombine_SuggestRules: Lists models sharing the same material that should be added to spcombinerules.txt.
-StaticPropCombine_MinInstances <int>: Set the minimum number of props in a combine group required to create a combined prop. Tip:Valve had this set to 3 for the new Dust 2.
-StaticPropCombine_PrintCombineRules: Confirm: Prints the combine rules?
-StaticPropCombine_ColorInstances: Instances of combined props get colored.
-KeepSources: Don't delete the autogenerated QCs and unpacked model files after finishing.
-CombineIgnore_FastReflection: Combine props, even if they have differing Render in Fast Reflections settings.
-CombineIgnore_Normals: Combine props, even if they have differing Ignore Normals settings.
-CombineIgnore_NoShadow: Combine props, even if they have differing Disable Shadows settings.
-CombineIgnore_NoVertexLighting: Combine props, even if they have differing Disable Vertex lighting settings.
-CombineIgnore_NoFlashlight: Combine props, even if they have differing Disable flashlight settings.
-CombineIgnore_NoSelfShadowing: Combine props, even if they have differing Disable Self-Shadowing settings.
-CombineIgnore_DisableShadowDepth: Combine props, even if they have differing Disable ShadowDepth settings.


6. Success?
The combined props look exactly like the single props. So how can you be sure that the static prop combine process was successful?
- Once the map is compiled, the combined props will be packed into your *.bsp automatically.
- If you add -keepsources to the compile parameters, you can also find the combined props in "...\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\models\props\autocombine\*name of your map*\"
and their QCs in "...\Steam\steamapps\common\content\csgo\models\props\autocombine\*name of your map*\".
- If you add
-StaticPropCombine_ColorInstances to the compile parameters, instances of combined props are colored in CS:GO.


7. Additional notes


- You can manually disable static prop combine for individual props with the "Disable Prop Combine" keyvalue.
- Prop scaling (Uniform Scale Override) is not supported yet (?)
- If the original props don't have a collision model, you will have to set collisions to "Not Solid" in the properties. Otherwise the combined prop will be solid (automatically generated collision mesh; causes problems).
- If the props differ in specific keyvalues, in most cases the default (e.g. Alpha) or the higher value will be used (e.g. fade distances)
- Props that differ in the below keyvalues will NOT be combined, unless manually overridden with the appropriate VBSP option:

  • Render in Fast Reflections (-combineignore_fastreflection)
  • Ignore Normals (-combineignore_normals)
  • Disable Shadows (-combineignore_noshadows)
  • Disable Vertex lighting (-combineignore_novertexlighting)
  • Disable Flashlight (-combineignore_noflashlight)
  • Disable Self-Shadowing (-combineignore_noselfshadowing)
  • Disable ShadowDepth (-combineignore_disableshadowdepth)

- Props that differ in the below keyvalues will NOT be combined:

  • Skin
  • Color
  • Disable Flashlight



  • some fps tests with an actual map!
  • which gives better results: " -StaticPropCombine_ConsiderVis" or prop combining based on distances?
  • Is there a console command to display the number of performed draw calls/props?
  • ...




User Feedback

Recommended Comments

I've read a lot of information about CS:GO and I often play it. I know everything about roles in this game and other things described here  https://www.godisageek.com/2019/05/supports-clutches-flash-assists-watching-matches-betting-csgo/.  But I could not even imagine that it can be interesting to ake maps for CS:GO and I'll probably try to do this. Thank you for your tutorial. 

Link to comment
Share on other sites

Thanks a lot for this awesome guide guys!

Just wanted to add something, if you get this to work, you'll probably get strange lighting results. That's because vrad recently started doing something with lighting origins. When props are combined, the center of the newly combined prop will be used as the lighting origin. This can sometimes be inside brushes etc. 

You can fix this by adding -StaticPropLightingOld to vrad's params.


Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Mapcore Discord

  • Mapcore Supporters

    Our incredible Patreon supporters keep Mapcore's lights on. If you'd like to donate, check out our Patreon announcement.

    Note: This is brand new! The format will be tweaked and rolled out to more pages soon.

  • Our picks

    • [CS:GO] Shore
      One of the projects I worked on after I made de_austria.

      Yeah, I know the timing is really bad (CS2!), but can't change it... 🙁

      In general a lot went wrong during this project. Had a lot of problems with the layout, but I think I found a good compromise in the end. Also learned many new things. Maybe I would even be ready to create a really good map now after all, but I think that it's gonna be the final one. I really like making maps, but it has become too time consuming over the years for just being a hobby. Unfortunately I never managed to get a job in the games industry. So that's it. I hope it's a worthy ending of 20 years of making maps for me. 🙂

      Shore is a bomb defusal map for CS:GO that takes place on Lofoten Islands, Norway. (Also have a Hostage version of this that works well imo)

      Workshop link: https://steamcommunity.com/sharedfiles/filedetails/?id=2955084102

      I took some inspiration from this place in Norway:


      Some pictures:
      • 18 replies
  • Create New...