PaintBlob

From Valve Developer Community
Revision as of 01:09, 5 February 2023 by J3wdice (talk | contribs)
Jump to navigation Jump to search
An ice surface using the PaintBlob shader

Stub

This article or section is a stub. You can help by expanding it.

PaintBlob is a material shader available in Counter-Strike: Global Offensive. Despite the odd name, its purpose is to create realistic hollow ice surfaces by piercing light through it using normal mapping, and calculating light reflection from its inner layer(backface) onto the outer layer (front face). The final output color of the surface is computed by combining various lighting terms. Also supports fresnel translucency when viewing the surface through itself, creating the illusion of a hollow ice material. Furthermore, a bounding box min and max value can be set to define how "hollow" or "thick" the material surface should be.

Note.pngNote:$nocull is not needed for this shader to function properly, however, can be used to visualize the $interior effects on the backface.
Todo: Report anomalies and bugs
Todo: Is this shader Counter-Strike: Global Offensive exclusive?

Ice Interior Shading Algorithm

The code implements an ice interior shading algorithm to simulate the appearance of ice as a translucent material. The algorithm takes inputs such as the world normal, eye direction, and screen position and uses them to create the illusion of light passing through the surface. The final result is a composite of the blurred enviroment map, the interior color and ambient lighting.

Todo: Add images displaying fresnel opacity reflections.

Supported Parameters

Textures & Masks

$basetexture
Diffuse texture.
$normalmap
Normal map.
$envmap
Specular reflection.
$lightwarptexture
1D ramp texture for tinting scalar diffuse term.


$backsurface
Specify that this is the back surface of the ice.
Icon-Bug.pngBug:Results in a pixel shader crash if true.  [todo tested in ?]
$specmasktexture
Mask texture for specular reflection.
$fresnelwarptexture
1D ramp texture for controlling fresnel falloff
$opacitytexture
Typically, a grayscale texture that defines the opaque and translucent parts of the texture.
Tip.pngTip:Extremely useful in creating realistic scratches on an ice surface.

Outer Layer Parameters

$diffusescale
Scales the output color.
Tip.pngTip:Can be used to brighten the textures.
$phongexponent
Specular exponent values.
$phongboost
Specular boost values.
$rimlightexponent
Rim light exponent.
$rimlightboost
Rim light boost.
$basecolortint
Base texture tint.
Todo: Figure out why this doesn't work.

Interior Volume Parameters

$interior
Enable interior layer.
$interiorfogstrength
Fog strength (scales with thickness of the interior volume).
$interiorbackgroundboost
Boosts the brightness of bright background pixels.
$interiorambientscale
Scales the ambient light in the interior volume.
$interiorbacklightscale
Scales backlighting in the interior volume.
$interiorrefractstrength
Strength of bumped refract of the background seen through the interior.

Additional Parameters

$uvscale
UV projection scale. Default: 0.02.
$bumpstrength
Bump map strength.
$fresnelbumpstrength
Bump map strength for the fresnel term.
$translucentfresnelminmaxexp
Fresnel range parameters for the opacity texture.
$uvprojoffset
Center for UV projection.
$bbmin
Todo: Functional?
$contactshadows
Darkens the shading of the ice region in areas where it is in contact with a surface.
$bumpframe
Bump frame.
$alphatest
$surfaceprop
$nocull
$translucent