From Valve Developer Community
Revision as of 18:13, 2 December 2020 by Kidnation (talk | contribs) (Added SurfaceGGX.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

SurfaceGGX is a material shader available in the following Source engine games: Day of Infamy Day of Infamy, Insurgency Insurgency. It was first introduced in Day of Infamy and back ported to Insurgency. It supports PBR.

Bug.png Bug: This shader won't receive light properly from env_projectedtextures like the player's flashlight, instead making the material appear pure black. If the player is allowed to use a flashlight, the best case scenario is to only use this shader on props in lit up areas. This shader applied to weapon view models is safe from this however.

Supported Parameters

Diffuse texture.
Normal mapping.
Bug.png Bug: Animated bump maps aren't possible as the shader lacks the $bumpframe parameter.
Color tinting.
Detail texturing.
Specular reflections.
Alpha testing.

Metalness Parameters

$metal <boolean>
Enables use of the green channel of $phongexponenttexture.
$phongexponenttexture <texture>
Despite the name, this is a mask that defines the metalness of the material.

Specular/Gloss Parameters

$pbr <boolean>
Enables PBR reflections.
$masks <texture>
A mask for specular and glossiness. $pbr must be enabled to work.

Misc. Parameters

$fuzz <boolean>
Enables a asperity/fuzz scattering pass on the material.
$fuzzmultiplier <float>
Multiplier for the fuzz effect, default is 1.0.
$roughnessmultiplier <float>
Multiplier for roughness. To do: More detail, what is roughness?
$subsurfacescattering <boolean>
Enables subsurface scattering on the material. To do: More detail.
$disableenvmap <boolean>
Enabling disables $envmap reflections. The shader will use $envmap by default even if it isn't specified, unless this is enabled.

Configuring the masks


The RGB channels of $phongexponenttexture is configured as follows:

Channel Data
Red Glossiness (roughness inverted)
Green Metalness inverted
Blue Sub-surface scattering mask

$metal must be set to 1 in order to use the green channel.

Note.png Note: $fuzz and $detailnormal use the inverse of the blue channel.


The RGB and alpha channels of $masks is configured as follows:

Channel Data
RGB Specular tint
Alpha Glossiness

$pbr must be enabled to make use of $masks.

See Also

  • WorldGGX, similar shader used for brushes and displacements.