From Valve Developer Community
Revision as of 21:25, 9 March 2011 by Mattshu (talk | contribs) (otherlang2'd)
Jump to: navigation, search

The $surfaceprop command links the surface of either a material or model to a set of physical properties, including:

  • What sounds are emitted during collisions
  • What effects are emitted when the surface is shot
  • Mass, buoyancy, bounciness...
  • The effect of the surface on nearby sounds (reverberation, echo, absorption...)


Syntax is the same for both models and materials:

$surfaceprop <name>

Names are defined in <game>\scripts\surfaceproperties_manifest.txt (and the files it references). For a list of Valve's stock props, see Material surface properties.

NOTE: In Left 4 Dead, it appears there is a quirky problem with the brick material surface property relating to bullet decals. Specifically, Func_breakable brushes using ANY of the brick textures (those supplied in L4D) do not show bullet decals correctly. In addition, bullet decals on all brick textures, save for urban_brickwall03a, will virtually disappear when they are in light, for example, when you shine the player flashlight on them. This problem also exists in the Valve-created, survival map Last Stand (on the breakable brick wall housing the room where the event is started.) It is unknown whether this issue will be fixed, or if there are any workarounds using settings currently available. If you're OK with the bullet decals not looking quite right, and various audio and visual effects being inappropriate, you can duplicate and rename the brick texture's vtf and vmt. Then, open up the vmt and change the material type for its $suface_prop to something like sheetrock or dirt.

In materials

  • $surfaceprop is not linked to any particular shader, so can be used at any time.

In models

  • A model's surface prop will override its material's
  • It is unclear whether a model's mass is calculated from $surfaceprop or prop_data
  • Surface props can be defined for individual bones with $jointsurfaceprop