$envmapmask: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(+image)
No edit summary
Line 1: Line 1:
{{toc-right}}
{{toc-right}}


The ''specular mask'' or '''envmapmask''' affects how strongly the surface reflects light from the [[$envmap]]. It is a greyscale image in which entirely reflective areas are black and entirely matte areas are white.
'''<code>$envmapmask</code>''' defines a specular mask, which affects how strongly a surface reflects light an [[$envmap]]. The mask should be a greyscale image in which entirely reflective areas are black and entirely matte areas are white.
 
{{note|<code>$envmapmask</code> will not work in materials using <code>[[$bumpmap]]</code>. See [[#Alternative_methods]].}}


==VMT syntax example==
==VMT syntax example==
Line 17: Line 19:
  }
  }


==Additional Parameters==
==Additional parameters==


[[Image:Scanner mask.jpg|thumb|[[npc_cscanner]]'s mask.]]
[[Image:Scanner mask.jpg|thumb|[[npc_cscanner]]'s mask.]]


; <code>$envmapmasktransform <matrix></code>
; <code>$envmapmasktransform <matrix></code>
: Adjusts [[UV map]]ping of <code>$envmapmask</code>.
: Adjusts [[UV map]]ping of the specular mask.
: DirectX 8 and below use <code>$envmapmaskscale</code> instead.
: DirectX 8 and below use <code>$envmapmaskscale</code> instead.


Line 28: Line 30:


; <code>$envmapmaskscale <[[float]]></code>
; <code>$envmapmaskscale <[[float]]></code>
: Scales the <code>$envmapmask</code> by the given value.
: Scales the specular mask by the given value.
: See also <code>$envmapmasktransform</code>, above.
: See also <code>$envmapmasktransform</code>, above.
: Requires DirectX 8.
: Requires DirectX 8.
Line 36: Line 38:


; <code>$selfillum_envmapmask_alpha <[[bool]]></code>
; <code>$selfillum_envmapmask_alpha <[[bool]]></code>
: Derives [[self-illumination]] values from the [[alpha channel]] of <code>$envmapmask</code>.
: Derives [[self-illumination]] values from the [[alpha channel]] of the specular mask.
: Requires DirectX 9.
: Requires DirectX 9.
: See also <code>[[$selfillum]]</code>.
: See also <code>[[$selfillum]]</code>.


==Alternative Methods==
==Alternative methods==


Rather than creating a whole new VTF just for a specular mask, you can use the alpha channel of either the [[$basetexture]] or [[$bumpmap]].
Rather than creating a whole new texture just for a specular mask, you can use the alpha channel of either the <code>[[$basetexture]]</code> or <code>[[$bumpmap]]</code>. Note that this unfortunately ''won't'' reduce the amount of data on-disc or in-memory.


{{note|If you do this, transformations and other such parameters applied to the base texture/normal map will also apply to the specular mask.}}
{{warning|If you do this, transformations and other such parameters applied to the base texture/normal map will also apply to the specular mask.}}


; <code>$basealphaenvmapmask <bool></code>
; <code>$basealphaenvmapmask <bool></code>
: Use the alpha channel of [[$basetexture]] as the specular mask.  
: Use the alpha channel of <code>$basetexture</code> as the specular mask.  
 
; <code>$normalmapalphaenvmapmask <bool></code>
; <code>$normalmapalphaenvmapmask <bool></code>
: Use the alpha channel of [[$bumpmap]] as the specular mask.  
: Use the alpha channel of <code>$bumpmap</code> as the specular mask. '''This must be used if the material has a bump map.'''


==See Also==
==See Also==

Revision as of 07:48, 10 July 2008

$envmapmask defines a specular mask, which affects how strongly a surface reflects light an $envmap. The mask should be a greyscale image in which entirely reflective areas are black and entirely matte areas are white.

Note.pngNote:$envmapmask will not work in materials using $bumpmap. See #Alternative_methods.

VMT syntax example

$envmapmask <texture>
VertexLitGeneric
{
	$envmap			env_cubemap
	$envmapmask		"props/tvscreen_test"
	$envmapmasktransform	"center .5 .5 scale .25 .25 rotate 0 translate 0 0"	//dx9 only
	$envmapmaskscale	.25	// dx8 only
	$envmapmaskframe	1
	$selfillum_envmapmask_alpha	1	//dx9 only
}

Additional parameters

npc_cscanner's mask.
$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.
  1. center defines the point of rotation. Only useful if rotate is being used.
  2. 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.
  3. rotate rotates the texture counter-clockwise in degrees. Accepts any number, including negatives.
  4. 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.pngNote:All values must be included!
Icon-Bug.pngBug: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 ?]
Icon-Bug.pngBug: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 of an animated texture to use as the mask.
$selfillum_envmapmask_alpha <bool>
Derives self-illumination values from the alpha channel of the specular mask.
Requires DirectX 9.
See also $selfillum.

Alternative methods

Rather than creating a whole new texture just for a specular mask, you can use the alpha channel of either the $basetexture or $bumpmap. Note that this unfortunately won't reduce the amount of data on-disc or in-memory.

Warning.pngWarning:If you do this, transformations and other such parameters applied to the base texture/normal map will also apply to the specular mask.
$basealphaenvmapmask <bool>
Use the alpha channel of $basetexture as the specular mask.
$normalmapalphaenvmapmask <bool>
Use the alpha channel of $bumpmap as the specular mask. This must be used if the material has a bump map.

See Also