Difference between revisions of "$envmap"
m |
Deprecated (talk | contribs) ($envmaplightscale and $envmapanisotropy changes, start of documentation of $envmaplightscaleminmax) |
||
Line 111: | Line 111: | ||
: Adds a Fresnel effect to the reflection. The value controls the Fresnel ranges {{todo| How?}}. 1.0 = mirror, 0.0 = water | : Adds a Fresnel effect to the reflection. The value controls the Fresnel ranges {{todo| How?}}. 1.0 = mirror, 0.0 = water | ||
{{todo|Confirm engine branches using fresnelreflection.}} | {{todo|Confirm engine branches using fresnelreflection.}} | ||
+ | ; <code>$envmaplightscale <float></code> {{P2 add}} | ||
+ | : Allows the surface's lightmap to tint the reflections. A value between 0 and 1 determines how much the reflection is tinted; values above 1 are permitted but seem to actually start inverting the effect. | ||
+ | : {{note|LightmappedGeneric only in {{portal2}}}} | ||
+ | ; <code>$envmaplightscaleminmax <min float max float></code> {{CSGO add}} | ||
+ | :How strong the reflection should be. {{todo|Needs testing and a better description.}} | ||
; <code>$envmapanisotropy <bool></code> {{CSGO add}} | ; <code>$envmapanisotropy <bool></code> {{CSGO add}} | ||
− | + | : Enables warping of the reflection, "pushing" the top downward. | |
− | : | + | ; <code>$envmapanisotropyscale <normal></code> {{CSGO add}} |
− | ; | + | : The amount the reflection should be warped by. |
− | : | ||
== Console commands == | == Console commands == |
Revision as of 21:24, 23 April 2019
The $envmap
VMT parameter creates specular reflections, which are seen on smooth surfaces. It does this by defining an "environment map" (specifically a cubemap) to draw as a reflection; normally that of the nearest env_cubemap entity. The reflection is not dynamic.

$envmap
parameter doesn't work in the latest Source engine version (v24) of Half-Life Source if it uses an env_cubemap. This is probably the reason Valve used the same static reflective image for every reflective texture in the game.The other form of reflection supported by Source is the diffuse phong type.
Contents
Syntax
$envmap env_cubemap
"env_cubemap" is normally used, as it tells VBSP to swap in the name of the nearest env_cubemap when the map compiles. However it is also possible to use a static cubemap image that has been manually created.

Creating a custom static cubemap texture
Creating a custom cubemap texture might be required for some circumstances and is used occasionally in some Valve models.
In VTFLib
For this to work you will need to have the 6 sides of the cubemap saved as individual textures in the correct orientation for it to appear correctly in the Source Engine. So some faces might need to be rotated either clockwise or counter clockwise. Each face will need to be mirrored horizontally before orientation.



Here is a map of the orientation required
Explained
- FT=Front
- BK=Back
- RT=Right
- LF-Left
- UP=UP
- DN=Down
- CW = Clockwise
- CCW = Counter Clockwise
- 00_00_00 eg. (customcubemap_00_00_00.tga)
- 00_01_00 eg. (customcubemap_00_01_00.tga)
- 00_02_00 eg. (customcubemap_00_02_00.tga)
Once you have all the image sides ready you can just import them all into VTFEdit and select "Environmental Map"
Then just save it all as a .vtf file and use it in your VMT like so
"$Envmap" "models/cra0kalo/ct_swat/eyeglint_cubemap" // Reflection environment map static
In VTEX
VTEX will automatically mirror and orient your faces, you need only to provide correctly named textures. Name each file something like envmap001a*.tga, where * is put BK, FT, LF, RT, UP, or DN. If you took a cubemap screenshot in-game, this step will already by done, but to make them work properly with Vtex.exe you must use HDRShop (but before you need to change textures format to BMP, because HDRShop can only work with that kind of format) and then covert them to PFM files format.
To do: What axis does each direction relate to?
Create a text file the same name as your textures (e.g. envmap001a.txt). If building for HDR write in the following, otherwise leave it blank:
pfm 1
pfmscale 1
nocompress 1
Put these files into materialsrc and then just drag-n-drop .txt file into vtex.exe and you should end up with a working cubemap! HDR envmaps will be named like envmap001a.hdr.vtf, and only need to exist to work.
Parameters and Effects
$envmapmask <texture>
- See
$envmapmask
. A VTF file that determines per-texel reflection intensity. $envmaptint "[<red float> <green float> <blue float>]"
- Controls the intensity of the reflection's red, green and blue color channels. Any positive number can be used. Default is
"[1 1 1]"
, which means 100% intensity.Note: You must use quotemarks, as there are space characters within the value.
Tip: This command is often used to dim the brightness of a specular reflection without the overhead of an
$envmapmask
. $envmapcontrast <normal>
- Controls the contrast of the reflection. 0 is natural contrast, while 1 is the full squaring of the color (i.e. color*color).
Note: Will not work when Phong is enabled.
Tip: Use higher contrasts to diminish relatively darker areas and increase "hot spots".
$envmapsaturation <normal>
- Controls the colour saturation of the reflection. 0 is greyscale, while 1 is natural saturation.
Note: Will not work when Phong is enabled.
To do: Bug is present inBug: Works only on models.
, confirm if that is true for all games
$envmapframe <int>
- The frame to start an animated cubemap on.
$envmapmode <int?>
- Depreciated MATERIAL_VAR_ENVMAPMODE = (1 << 25), // OBSOLETE
$basetexturenoenvmap <bool>
$basetexture2noenvmap <bool>
- Used for materials with two albedos, to make one or the other matte. Require DirectX 9; see also
$basetexture
and$basetexture2
. $envmapoptional <choices>
- Sets the oldest DirectX version that should draw the reflection. Choose from:
80
(DirectX 8)81
(DirectX 8.1)90
(DirectX 9)95
(DirectX 9 with Shader Model 3)
$envmapsphere <bool>
- Determines whether the material's envmap should be a spheremap (deprecated) instead of a cubemap. Set this to 1 to use a spheremap.
$envmapfresnel <float>
(in all games since)
- Adds a Fresnel effect to the reflection. Effect becomes multiplied with values higher than 1.0. Only works on the VertexlitGeneric shader.
$envmapfresnelminmaxexp <vector>
(in all games since)
- Sets the ranges for the Fresnel effect. By default
"[0 1 2]"
, making surfaces facing the viewer less reflective than surfaces facing sideways. See Phong for usage.

$fresnelreflection <float>
- Adds a Fresnel effect to the reflection. The value controls the Fresnel ranges To do: How?. 1.0 = mirror, 0.0 = water
To do: Confirm engine branches using fresnelreflection.
$envmaplightscale <float>
(in all games since)
- Allows the surface's lightmap to tint the reflections. A value between 0 and 1 determines how much the reflection is tinted; values above 1 are permitted but seem to actually start inverting the effect.
$envmaplightscaleminmax <min float max float>
(in all games since)
- How strong the reflection should be. To do: Needs testing and a better description.
$envmapanisotropy <bool>
(in all games since)
- Enables warping of the reflection, "pushing" the top downward.
$envmapanisotropyscale <normal>
(in all games since)
- The amount the reflection should be warped by.
Console commands
buildcubemaps
- Generates cubemaps for use in materials. If this isn't run, objects will reflect the skybox (OB) or have an invalid reflection, white in Ep1 and pink checkerboards in MP.
r_showenvcubemap <bool>
- Debug command to display cubemaps on all dynamic objects at full intensity. It was used to create the image at the start of this article.
See Also
- $envmapmask (specular mask)
- $phong (for diffuse reflection)
- Cubemap