$envmapmask: Difference between revisions
(Clarity - testing shows that $envmapmask doesn't work in ANY material using $bumpmap, not only model materials.) |
JorisCeoen (talk | contribs) (Removed the notice I put a long time ago, since $basealphaenvmapmask now works in CS:GO, as is evident from vmt's that Valve used in the new Nuke map.) |
||
Line 42: | Line 42: | ||
; <code>$basealphaenvmapmask <[[bool]]></code> | ; <code>$basealphaenvmapmask <[[bool]]></code> | ||
: Use the alpha channel of <code>[[$basetexture]]</code> as the specular mask. {{note|Alpha channels embedded in $basetexture work in reverse. Transparent areas are reflective, opaque areas are matte. This is because, say, a window texture's alpha mask would be mostly black to allow for transparency -- yet that black part of the mask would also be the most reflective part. To avoid having to duplicate a .VTF file simply to invert the alpha mask, you can use this VMT parameter instead.}} {{note|The alpha channel '''''isn't''''' inverted in the Source 2007 engine, at least for models | : Use the alpha channel of <code>[[$basetexture]]</code> as the specular mask. {{note|Alpha channels embedded in $basetexture work in reverse. Transparent areas are reflective, opaque areas are matte. This is because, say, a window texture's alpha mask would be mostly black to allow for transparency -- yet that black part of the mask would also be the most reflective part. To avoid having to duplicate a .VTF file simply to invert the alpha mask, you can use this VMT parameter instead.}} {{note|The alpha channel '''''isn't''''' inverted in the Source 2007 engine, at least for models.}} | ||
{{todo|Check if this is true for Source 2007 world materials not used on models.}} | {{todo|Check if this is true for Source 2007 world materials not used on models.}} |
Revision as of 10:21, 23 April 2017
$envmapmask
defines a specular mask which affects how strongly each pixel of a material reflects light from the $envmap. The mask should be a greyscale image in which entirely reflective areas are white and entirely matte areas are black. For diffuse type specularity which does not rely on $envmap, see $phong.

$envmapmask
will not work in materials using $bumpmap
. See #Alternative_methods.VMT syntax example
$envmapmask <texture>
VertexLitGeneric { $envmap env_cubemap $envmapmask "props/tvscreen_test" }
Additional parameters

$envmapmasktransform <matrix>
- Adjusts UV mapping of the specular mask.
- DirectX 8 and below use
$envmapmaskscale
instead.
- The default position is center .5 .5 scale 1 1 rotate 0 translate 0 0.
- center defines the point of rotation. Only useful if rotate is being used.
- scale fits the texture into the material the given number of times. 2 1 is a 50% scale in the horizontal X axis while the vertical Y axis is still at original scale.
- rotate rotates the texture counter-clockwise in degrees. Accepts any number, including negatives.
- translate shifts the texture by the given numbers. .5 will shift it half-way. 1 will shift it once completely over, which is the same as not moving it at all.
Note:All values must be included!
Bug:Scaling the texture may cause odd issues where the Texture Lock tool in Hammer will not actually lock the texture in place. [todo tested in ?]
Bug:Rotating textures applied on brushes will rotate around the map origin (confirm: Orangebox engine only?). A fix for this is to change the center position in the VMT to the brush's origin. [todo tested in ?]
$envmapmaskscale <float>
- Scales the specular mask by the given value.
- See also
$envmapmasktransform
, above. - Requires DirectX 8.
$envmapmaskframe <integer>
- The frame to start an animated specular mask on.
Alternative methods
Rather than creating a whole new texture for a specular mask, you can embed one into the alpha channel of the $basetexture
or $bumpmap
. Model materials with $bumpmap
must do this. Unfortunately, it won't reduce memory usage.
If you do use these commands, transformations and other such parameters applied to $basetexture / $bumpmap will also apply to the specular mask.
$basealphaenvmapmask <bool>
- Use the alpha channel of
$basetexture
as the specular mask.Note:Alpha channels embedded in $basetexture work in reverse. Transparent areas are reflective, opaque areas are matte. This is because, say, a window texture's alpha mask would be mostly black to allow for transparency -- yet that black part of the mask would also be the most reflective part. To avoid having to duplicate a .VTF file simply to invert the alpha mask, you can use this VMT parameter instead.
Note:The alpha channel isn't inverted in the Source 2007 engine, at least for models.
$normalmapalphaenvmapmask <bool>
- Use the alpha channel of
$bumpmap
as the specular mask.

$selfillum_envmapmask_alpha <float>
- Use alpha channel as the $selfillum mask instead of
$basetexture
's alpha. In this event this command replaces $selfillum - do not use both.
Merging Specular Level into Normal Alpha in 3ds Max
To merge a Specular Level map into the Normal Map alpha, you can create a Composite Map node with the normal map in Layer 1 and the specular map in Mask 1. Then right-click the composite map, click Render Map and save this new image to file (remembering to keep the Gamma at 1.0 and using 32 bits per pixel in the save options).
These steps are automated in the Alpha Spec tool in Wall Worm 2.72+.
See Also
- $basetexture
- $envmap (environment map)
- $phong (diffuse reflection)
- $selfillum