$distancealpha: Difference between revisions
TomEdwards (talk | contribs) (→Material creation (class_spy_outline): corrections) |
TomEdwards (talk | contribs) (results so far...) |
||
Line 1: | Line 1: | ||
{{ | {{toc-right}} | ||
{{EP2 add|'''<code>$distancealpha</code>'''}} is a [[cheap]] edge filtering technique for raster images. It takes advantage of 3D hardware's well-established texture filtering methods by defining a series of [[alpha channel]] thresholds above, below, or between which effects can be applied. | |||
It's great for UI elements, foliage, chain link fences, grates... | |||
;Advantages | ;Advantages | ||
: | :Vector-like edges on raster images even during extreme zoom. | ||
:Far faster than adaptive AA. | |||
;Disadvantages | ;Disadvantages | ||
: | :Effects look extremely pixellated from grazing angles in some situations (might be related to [[brush]] application?). | ||
[http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf For (lots) more detail, see this SIGGRAPH paper.] | |||
{{bug|Distance alpha materials are not rendered correctly in Hammer's 3D view.}} | {{bug|Distance alpha materials are not rendered correctly in Hammer's 3D view.}} | ||
Line 13: | Line 17: | ||
== Texture creation == | == Texture creation == | ||
Distance alpha source textures are created at a very high resolution. Valve use 4096x4096 images, but the SDK's build of [[ | Distance alpha source textures are created at a very high resolution. Valve use 4096x4096 images, but the SDK's build of [[VTEX]] will crash if you pass it anything over 2048x2048. | ||
The image should otherwise be completely normal, except that the alpha channel should avoid gradients (you'll be able to re-construct them with the shader). | |||
To compile the texture you must use [[ | To compile the texture you must use [[VTEX]]; third party tools don't support distance alpha yet. Your .txt file should look something like this: | ||
''// Enable distance alpha compiling'' | ''// Enable distance alpha compiling'' | ||
Line 37: | Line 43: | ||
[[Image:Class spy outline ingame.jpg|thumb|256px|The material in-game (50% zoom).]] | [[Image:Class spy outline ingame.jpg|thumb|256px|The material in-game (50% zoom).]] | ||
This material is displayed by [[Team Fortress 2]] when a Spy player gains or loses a disguise. Despite the fact that it fills the entire screen at any resolution, its texture (right) is only 256 pixels square | This material is displayed by [[Team Fortress 2]] when a Spy player gains or loses a disguise. Despite the fact that it fills the entire screen at any resolution, its texture (seen right) is only 256 pixels square. | ||
[[UnlitGeneric]] | [[UnlitGeneric]] | ||
Line 68: | Line 72: | ||
The most interesting commands here are the 'start's and 'end's: their values determine the range of alpha values across which each effect is applied. | The most interesting commands here are the 'start's and 'end's: their values determine the range of alpha values across which each effect is applied. | ||
*<code>$softedges</code> is applied from 50% to 46% opacity | |||
*<code>$glow</code> is applied from 10% to 50% opacity | |||
By setting <code>$glowcolor</code> to black and <code>$glowalpha</code> to 40%, the glow effect is made to look like a shadow. | |||
{{todo|$outline}} | {{todo|$outline}} | ||
== Effects == | |||
=== $softedges === | |||
Fades out all colour channels from <code>$edgesoftnessstart</code> (opaque edge) to <code>$edgesoftnessend</code> (transparent edge). | |||
;<code>$scaleedgesoftnessbasedonscreenres <[[bool]]></code> | |||
:{{todo|Describe}} | |||
=== $glow === | |||
Creates a monotone gradient from <code>$glowstart</code> (opaque edge) to <code>$glowend</code> (transparent edge). | |||
; <code>$glowcolor <RGB></code> | |||
: Color of glow. | |||
; <code>$glowalpha <[[normal]]></code> | |||
: Opacity of glow. | |||
; <code>$glowx <normal></code> | |||
; <code>$glowy <normal></code> | |||
: Offsets glow; good for shadow effects. | |||
; <code>$glowstart <normal></code> | |||
; <code>$glowend <normal></code> | |||
: Alpha channel thresholds. <code>$glowstart</code> is full intensity, <code>$glowend</code> is where it becomes invisible. | |||
=== $outline === | |||
The same as glow, but with the added option of defining how sharp each edge appears. | |||
; <code>$outlinecolor <RGB></code> | |||
: Color of outline. | |||
; <code>$outlinealpha <[[normal]]></code> | |||
: Opacity of outline. | |||
; <code>$outlinestart0 <normal></code> | |||
; <code>$outlinestart1 <normal></code> | |||
: Defines the outer (i.e. low alpha) edge of the outline. Any gap between the two values will become a gradient. | |||
: 0 is 'outer outer', while 1 is 'inner outer'. | |||
; <code>$outlineend0 <normal></code> | |||
; <code>$outlineend1 <normal></code> | |||
: Defines the inner (i.e. high alpha) edge of the outline. | |||
: 0 is the 'outer inner', while 1 is the 'inner inner'. {{note|The two values must differ by at least 0.02 or the entire outline will disappear!}} | |||
; <code>$scaleoutlinesoftnessbasedonscreenres 1</code> | |||
:{{todo|Describe}} | |||
[[Category:List of Shader Parameters|D]] | [[Category:List of Shader Parameters|D]] |
Revision as of 10:28, 7 March 2009
Template:EP2 add is a cheap edge filtering technique for raster images. It takes advantage of 3D hardware's well-established texture filtering methods by defining a series of alpha channel thresholds above, below, or between which effects can be applied.
It's great for UI elements, foliage, chain link fences, grates...
- Advantages
- Vector-like edges on raster images even during extreme zoom.
- Far faster than adaptive AA.
- Disadvantages
- Effects look extremely pixellated from grazing angles in some situations (might be related to brush application?).
For (lots) more detail, see this SIGGRAPH paper.

Texture creation
Distance alpha source textures are created at a very high resolution. Valve use 4096x4096 images, but the SDK's build of VTEX will crash if you pass it anything over 2048x2048.
The image should otherwise be completely normal, except that the alpha channel should avoid gradients (you'll be able to re-construct them with the shader).
To compile the texture you must use VTEX; third party tools don't support distance alpha yet. Your .txt file should look something like this:
// Enable distance alpha compiling alphatodistance 1 // Scale the image down to 1/nth its original size. '8' takes 2048 down to 256 reduce 8 // Size of 'spread' zone between alpha values of 0 and 1. This is the area the shader works with. // Bear in mind that higher numbers exponentially increase texture compile time! distancespread 4 // To prevent artefacting: nomip 1 nolod 1 nocompress 1
Material creation (class_spy_outline)

This material is displayed by Team Fortress 2 when a Spy player gains or loses a disguise. Despite the fact that it fills the entire screen at any resolution, its texture (seen right) is only 256 pixels square.
UnlitGeneric { $basetexture hud\class_spy_outline $translucent 1 $distancealpha 1 $softedges 1 $edgesoftnessstart .5 $edgesoftnessend .46 $scaleedgesoftnessbasedonscreenres 1 $glow 1 $glowcolor "[0 0 0]" $glowalpha .4 $glowstart .1 $glowend .5 //$glowx .98 //$glowy .98 $vertexcolor 1 $vertexalpha 1 $no_fullbright 1 $ignorez 1 }
The most interesting commands here are the 'start's and 'end's: their values determine the range of alpha values across which each effect is applied.
$softedges
is applied from 50% to 46% opacity$glow
is applied from 10% to 50% opacity
By setting $glowcolor
to black and $glowalpha
to 40%, the glow effect is made to look like a shadow.
Effects
$softedges
Fades out all colour channels from $edgesoftnessstart
(opaque edge) to $edgesoftnessend
(transparent edge).
$scaleedgesoftnessbasedonscreenres <bool>
- Todo: Describe
$glow
Creates a monotone gradient from $glowstart
(opaque edge) to $glowend
(transparent edge).
$glowcolor <RGB>
- Color of glow.
$glowalpha <normal>
- Opacity of glow.
$glowx <normal>
$glowy <normal>
- Offsets glow; good for shadow effects.
$glowstart <normal>
$glowend <normal>
- Alpha channel thresholds.
$glowstart
is full intensity,$glowend
is where it becomes invisible.
$outline
The same as glow, but with the added option of defining how sharp each edge appears.
$outlinecolor <RGB>
- Color of outline.
$outlinealpha <normal>
- Opacity of outline.
$outlinestart0 <normal>
$outlinestart1 <normal>
- Defines the outer (i.e. low alpha) edge of the outline. Any gap between the two values will become a gradient.
- 0 is 'outer outer', while 1 is 'inner outer'.
$outlineend0 <normal>
$outlineend1 <normal>
- Defines the inner (i.e. high alpha) edge of the outline.
- 0 is the 'outer inner', while 1 is the 'inner inner'.
Note:The two values must differ by at least 0.02 or the entire outline will disappear!
$scaleoutlinesoftnessbasedonscreenres 1
- Todo: Describe