$alphatest
$alphatest is a material shader parameter available in all
Source games. It specifies a mask to use to determine binary opacity. White represents fully opaque, while black represents fully transparent. Any values in-between are rounded to either 0 or 1, unless $allowalphatocoverage is also used. This effect is similar to $translucent, except that it can not be semi-opaque (without
banding), is much faster to render, and the engine can always sort it properly when layered (instead of only on non-detail worldspawn).
Syntax
VMT example
Additional parameters
- $alphatestreference <float>
- Specifies the threshold alpha channel value at which the surface should be transparent instead of opaque. A value of ".3" will create a thicker shape while a value of ".7" will create a thinner shape.
Notes and Caveats
Important: Unintuitively, this parameter does not default to "0.5". LightmappedGeneric, UnlitGeneric, and VertexLitGeneric all default to "0.7" instead. To avoid unexpected results, this parameter should always be set.
Bug:Updating $alphatestreferencein real time with proxies only affects projected shadows (like the flashlight).
Tip: This limitation can be circumvented by using $alphatestreference 1, and modifying the $alphavalue instead. (requires $alpha to be raised above 1, its normal threshold, this may cause sorting issues)[todo tested in ?]
Tip: For VertexLitGeneric on models you can use $detailwith$detailblendmode 3and modify the$detailblendfactorvalue. Detail texture must be a copy of$basetexturewith a different alpha channel.
- $allowalphatocoverage <boolean>
- Creates translucent steps based on alpha values. Can be used for softer edges, as well as greatly reducing shimmering when viewed at a distance.
While it may not immediately appear to be the case,$alphatestreferenceis still used when this command is used, for controlling projected shadow masking, for if the client has MSAA disabled, and in vanilla Hammer (where antialiasing is unavailable).Notes and Caveats
Warning: MSAA must be enabled in order for this to have an effect.
The granularity of the steps is dependent on chosen amount of MSAA; 2x MSAA will have fewer translucent steps than 8x MSAA.
Note: At 8x MSAA (Tested in
Source 2013) there are 7 translucency steps. ( 9 if you include fully Opaque and fully Transparent )
The levels should roughly be arranged as such:
Linear : fully transparent - 0.06 - 0.18 - 0.31 - 0.43 - 0.56 - 0.68 - 0.81 - 0.93 - fully opaque
RGB : fully transparent - 15 - 46 - 80 - 110 - 143 - 174 - 207 - 238 - fully opaque
( 0-255 values are rounded to the next highest. Formula used isLinearValue * 255)Todo: Make a table for this. One that considers other MSAA Levels. There are always 1 fewer translucency steps than the number of MSAA samples (or one additional, if including fully transparent and fully opaque).
Tip: Alpha to coverage works best with sharp, high-resolution alpha channels, as this mitigates the inherent banding artefacts caused by the stock shaders' lack of sharpening when magnifying alpha to coverage textures.
Comparison
$translucent |
$alphatest
|
|---|---|
Notice how the right circle, which has a sharp alpha channel, hardly changes.