$alphatest: Difference between revisions
Jump to navigation
Jump to search
SirYodaJedi (talk | contribs) |
ShiroDkxtro2 (talk | contribs) m (Some adiditonal Information for $AllowAlphaToCoverage, $alphatestreference can only be set in a shaders snapshot state. Not a bug!) |
||
Line 16: | Line 16: | ||
==Additional parameters== | ==Additional parameters== | ||
{{MatParam|$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.<br>Default "0.5". | {{MatParam|$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.<br>Default "0.5". | ||
: {{ | : {{note|<code>$alphatestreference</code> cannot be updated in real time with [[Material_proxies|proxies]].}} | ||
: {{Tip|This limitation can be circumvented by using $alphatestreference 1, and modifying the <code>[[$alpha]]</code> value instead. (requires $alpha to be raised above 1, its normal threshold, this may cause sorting issues)}} | : {{Tip|This limitation can be circumvented by using $alphatestreference 1, and modifying the <code>[[$alpha]]</code> value instead. (requires $alpha to be raised above 1, its normal threshold, this may cause sorting issues)}} | ||
: {{Tip|For [[VertexLitGeneric|VertexLitGeneric]] on models you can use <code>[[$detail]]</code> with <code>$detailblendmode 3</code> and modifying the <code>$detailblendfactor</code> value. Detail texture must be a copy of <code>[[$basetexture]]</code> with a different alpha channel.}}}} | : {{Tip|For [[VertexLitGeneric|VertexLitGeneric]] on models you can use <code>[[$detail]]</code> with <code>$detailblendmode 3</code> and modifying the <code>$detailblendfactor</code> value. Detail texture must be a copy of <code>[[$basetexture]]</code> with a different alpha channel.}}}} | ||
{{MatParam|$allowalphatocoverage|bool|Creates translucent steps based on alpha values. Can be used for softer edges. This parameter is incompatible with <code>$alphatestreference</code>. | {{MatParam|$allowalphatocoverage|bool|Creates translucent steps based on alpha values. Can be used for softer edges. This parameter is incompatible with <code>$alphatestreference</code>. | ||
{{warning|MSAA must be enabled in order for this to have an effect.<br>The granularity of the steps is dependent on chosen amount of MSAA; 2x MSAA will have fewer translucent steps than 8x MSAA.}} | |||
{{modernImportant|Alpha to Coverage works best with when the alpha channels of mipmaps are sharpened in a specific way; {{vtex|4}} does this by default, {{VTFEdit|4}} does not.}} | |||
{{modernNote| At maximum MSAA Level (Tested in {{src13|2}}) there are 7 transparency steps. ( 9 if you include fully Opaque and fully Transparent )<br> | |||
The levels should roughly be arranged as such:<br> | |||
<code>Linear : fully transparent - 0.06 - 0.18 - 0.31 - 0.43 - 0.56 - 0.68 - 0.81 - 0.93 - fully opaque</code><br> | |||
<code>RGB : fully transparent - 15 - 46 - 80 - 110 - 143 - 174 - 207 - 238 - fully opaque</code><br> | |||
( 0-255 values are rounded to the next highest. Formula used is <code>LinearValue * 255)</code>}} | |||
{{todo|Make a table for this. One that considers other MSAA Levels}} | |||
}} | |||
==Comparison== | ==Comparison== |
Revision as of 04:06, 26 December 2023
$alphatest
is a material shader parameter avaliable 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. This effect is similar to $translucent
, except that it can not be semi-opaque, is much faster to render, and the engine can sort it properly when layered.
Syntax
VMT example
Additional parameters
Comparison
$translucent |
$alphatest
|
---|---|
Notice how the $alphatest
right circle hardly changes.