$envmapmask: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m ($EnvMapMask CAN! be used to tint the envmap per-pixel - Removed the (confirm))
m (clean up, replaced: {{ModernWarning| → {{warning| (4), See Also → See also, {{ModernNote| → {{note|)
Line 4: Line 4:
{{Shaderparam|$envmapmask}} It defines a '''specular mask''' which affects how strongly each pixel of a material reflects light from the {{ent|$envmap}}. The mask should be a grayscale image in which entirely reflective areas are white and entirely matte areas are black. For diffuse type specularity which does not rely on <code>$envmap</code>, see {{ent|$phong}}.
{{Shaderparam|$envmapmask}} It defines a '''specular mask''' which affects how strongly each pixel of a material reflects light from the {{ent|$envmap}}. The mask should be a grayscale image in which entirely reflective areas are white and entirely matte areas are black. For diffuse type specularity which does not rely on <code>$envmap</code>, see {{ent|$phong}}.
{{ModernBug|In {{src07|2}} games, using an <code>$envmapmask</code> which is not stored in a subfolder will cause the texture to fail loading in-game.}}
{{ModernBug|In {{src07|2}} games, using an <code>$envmapmask</code> which is not stored in a subfolder will cause the texture to fail loading in-game.}}
{{ModernWarning|<code>$envmapmask</code> will not work with materials using {{ent|$bumpmap}}. Except on {{ent|VertexLitGeneric}}{{mapbase|only}} and {{ent|LightmappedGeneric}}{{csgo|only}}. See [[#Alternative_methods]].}}
{{warning|<code>$envmapmask</code> will not work with materials using {{ent|$bumpmap}}. Except on {{ent|VertexLitGeneric}}{{mapbase|only}} and {{ent|LightmappedGeneric}}{{csgo|only}}. See [[#Alternative_methods]].}}
{{ModernWarning|<code>$envmapmask</code> will not work with materials using {{ent|$phong}}, at all. By default it will use the $basetexture's alpha channel for masking the envmap.}}
{{warning|<code>$envmapmask</code> will not work with materials using {{ent|$phong}}, at all. By default it will use the $basetexture's alpha channel for masking the envmap.}}
{{note|While specular masks are traditionally greyscale, they can be colored. In such an instance, the color data will act as a per-texel $envmaptint.}}
{{note|While specular masks are traditionally greyscale, they can be colored. In such an instance, the color data will act as a per-texel $envmaptint.}}


Line 39: Line 39:


{{MatParam|$basealphaenvmapmask|bool|Use the alpha channel of the {{code|$basetexture}} as the specular mask.}}
{{MatParam|$basealphaenvmapmask|bool|Use the alpha channel of the {{code|$basetexture}} as the specular mask.}}
{{ModernNote|
{{note|
* Alpha channels embedded in {{code|$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 texture file simply to invert the alpha mask, you can use this material parameter instead.
* Alpha channels embedded in {{code|$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 texture file simply to invert the alpha mask, you can use this material parameter instead.
* The alpha channel '''''is not''''' inverted in the Source 2007 engine ''and'' {{csgo|2}} for models, but the alpha channel '''''is''''' inverted for brushes!
* The alpha channel '''''is not''''' inverted in the Source 2007 engine ''and'' {{csgo|2}} for models, but the alpha channel '''''is''''' inverted for brushes!
Line 52: Line 52:


<br>{{MatParam|$normalmapalphaenvmapmask|bool|Use the alpha channel of the {{code|$bumpmap}} or {{code|$normalmap}} as the specular mask.
<br>{{MatParam|$normalmapalphaenvmapmask|bool|Use the alpha channel of the {{code|$bumpmap}} or {{code|$normalmap}} as the specular mask.
{{ModernWarning|Using this in combination with {{code|[[$phong|$basemapalphaphongmask]]}} or {{code|[[$phong|$basemapluminancephongmask]]}} will set the mask used for the {{ent|$envmap}} to be those instead. <br>
{{warning|Using this in combination with {{code|[[$phong|$basemapalphaphongmask]]}} or {{code|[[$phong|$basemapluminancephongmask]]}} will set the mask used for the {{ent|$envmap}} to be those instead. <br>
'''There are additional caveats''' when using {{ent|$phong}}. See its entry for more information about possible issues.}}
'''There are additional caveats''' when using {{ent|$phong}}. See its entry for more information about possible issues.}}
}}
}}
Line 61: Line 61:
<br>{{MatParam|$selfillum_envmapmask_alpha|float|Use the alpha channel of the {{code|$envmapmask}} as the {{ent|$selfillum}} mask instead of {{code|$basetexture}}'s alpha.<br>
<br>{{MatParam|$selfillum_envmapmask_alpha|float|Use the alpha channel of the {{code|$envmapmask}} as the {{ent|$selfillum}} mask instead of {{code|$basetexture}}'s alpha.<br>
: {{ModernBug|This Parameter replaces {{code|$selfillum}}. If both are used it will result in an error. The material will not render.}}
: {{ModernBug|This Parameter replaces {{code|$selfillum}}. If both are used it will result in an error. The material will not render.}}
: {{ModernWarning|Only on {{ent|VertexLitGeneric}} - Note that <code>$envmapmask</code> does not work '''with''' {{ent|$bumpmap}} or {{ent|$phong}} on VertexLitGeneric.}}
: {{warning|Only on {{ent|VertexLitGeneric}} - Note that <code>$envmapmask</code> does not work '''with''' {{ent|$bumpmap}} or {{ent|$phong}} on VertexLitGeneric.}}
{{todo|This is not an alternative method to <code>$envmapmask</code> and in fact that parameter is required to use this. <code>Move it to Additional Parameters</code> and pray links on other pages don't break.}}}}
{{todo|This is not an alternative method to <code>$envmapmask</code> and in fact that parameter is required to use this. <code>Move it to Additional Parameters</code> and pray links on other pages don't break.}}}}
<br>{{MatParam|$envmapmaskintintmasktexture|bool|Use the red channel of the {{ent|$tintmasktexture}} as the specular mask.|only={{csgo}}|shaders=VertexLitGeneric}}
<br>{{MatParam|$envmapmaskintintmasktexture|bool|Use the red channel of the {{ent|$tintmasktexture}} as the specular mask.|only={{csgo}}|shaders=VertexLitGeneric}}
Line 71: Line 71:
These steps are automated in the [http://dev.wallworm.com/topic/34/alpha_spec.html Alpha Spec] tool in Wall Worm 2.72+.
These steps are automated in the [http://dev.wallworm.com/topic/34/alpha_spec.html Alpha Spec] tool in Wall Worm 2.72+.


==See Also==
==See also==
* [[$basetexture]]
* [[$basetexture]]
* [[$envmap]] (environment map)  
* [[$envmap]] (environment map)  
* [[$phong]] (diffuse reflection)
* [[$phong]] (diffuse reflection)
* [[$selfillum ]]
* [[$selfillum ]]

Revision as of 00:40, 4 January 2024

English (en)Français (fr)Русский (ru)中文 (zh)Translate (Translate)

Template:Shaderparam It defines a specular mask which affects how strongly each pixel of a material reflects light from the $envmap. The mask should be a grayscale 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. Template:ModernBug

Warning.pngWarning:$envmapmask will not work with materials using $bumpmap. Except on VertexLitGeneric(only in Mapbase) and LightmappedGeneric(only in Counter-Strike: Global Offensive). See #Alternative_methods.
Warning.pngWarning:$envmapmask will not work with materials using $phong, at all. By default it will use the $basetexture's alpha channel for masking the envmap.
Note.pngNote:While specular masks are traditionally greyscale, they can be colored. In such an instance, the color data will act as a per-texel $envmaptint.

VMT syntax example

$envmapmask <texture>
VertexLitGeneric
{
	$envmap			env_cubemap
	$envmapmask		"props/tvscreen_test"
}

Additional parameters

npc_cscanner's mask.

$envmapmasktransform $envmapmaskscale $envmapmaskframe

CS:GO WorldVertexTransition Parameters

$envmapmask2 $envmapmasktransform2 $envmapframe2

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

Note.pngNote:
  • 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 texture file simply to invert the alpha mask, you can use this material parameter instead.
  • The alpha channel is not inverted in the Source 2007 engine and Counter-Strike: Global Offensive Counter-Strike: Global Offensive for models, but the alpha channel is inverted for brushes!
  • Left 4 Dead 2 auto enables if $envmap is present. Opaque areas are reflective while transparent are matte. Set as true to invert $basetexture alpha channel behaviour. This allow $bumpmap have a dedicated $phong mask, when material transparency is not needed.

Template:ModernBug


$normalmapalphaenvmapmask Template:ModernBug

$selfillum_envmapmask_alpha
$envmapmaskintintmasktexture

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