Эта статья документации для всего, что использует платформу Source. Нажмите для получения дополнительной информации.

$envmap

From Valve Developer Community
< Ru
Jump to: navigation, search
English (en)Русский (ru)中文 (zh)Translate (Translate)
For the set of material parameters used to mask specular reflections via textures, see $envmapmask.

$envmap - это материальный(en) параметр шейдера(en), доступно для всех игр на движке Source Source.

link =
This translated page needs to be updated.

You can help by updating the translation.

Also, please make sure the article tries to comply with the alternate languages guide.
Зеркальные отражения в полную яркость.

It most commonly used to approximate the specular reflections seen on smooth surfaces, such as metals and plastics. This is achieved by mapping the vertex normals(en) of a model(en) to positions on a cubemap - specified by $envmap - and adding the sampled color from the cubemap to the model's surface. Typically, the cubemap is a simple, static "environment map" which has been pre-rendered (although a custom cubemap can be animated).

When $envmap is set to env_cubemap and buildcubemaps has been run on the map, the engine will automatically select the environment map contained in the BSP(en) which is nearest to the model as it moves through the world, providing a very rough approximation of dynamic reflections.

The other form of specularity supported by Source is the Phong(en) type, which provides simpler reflections on both static and dynamic models.

Доступность

$envmap был представлен в Source Source в Half-Life 2 и Counter-Strike: Source. Также доступен во всех поздних играх.

Icon-Bug.pngБаг:Half-Life: Source The latest Source engine version (v24) of Half-Life: Source does support $envmap if it uses an env_cubemap, but the buildcubemaps command does not work properly. If the cubemaps are built in another game and then the BSP is added into HL:S, they will work fine. Is not clear if in older versions there were more issues; but, due such problems, Valve used static reflective images for every reflective texture in the game.  [todo tested in?]

Синтаксис

$envmap env_cubemap

"env_cubemap" is typically used, which tells VBSP(en) 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.

Note.pngПримечание:If $envmap is used without specifying $basetexture, the specular reflections will be force drawn regardless of anything.
Note.pngПримечание:Most Cubemap textures will have no reflectivity when used as overlays or decals. It is unclear why this is so[Уточнить].
Note.pngПримечание:Cubemap transparency is affected by the $basetexture alpha/transparency map even when using $envmapmask. This causes conflicting problems.

Создание пользовательской статичной cubemap текстуры

Creating a custom cubemap texture might be required for some circumstances and is used occasionally in some Valve models.

Icon-Bug.pngБаг: Cubemaps flagged as sRGB will only properly load as sRGB when HDR(en) is disabled. Either include an HDR .hdr.vtf equivalent for an sRGB-encoded SDR .vtf cubemap, or encode the SDR cubemap in regular RGB.
Подтвердить:What games can actually load SDR cubemaps in HDR mode? Counter-Strike: Source handles such fine (printing warnings about missing a proper HDR cubemap in the console), but Day of Defeat: Source seems not be able to load SDR cubemaps in HDR mode (regardless of sRGB-ness), resulting in the surface glowing white.
  [todo tested in?]

В VTFEdit(en)

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.

Note.pngПримечание:Pre-Alien Swarm Alien Swarm games require 7 faces for the cubemap to work. The seventh in this case is a round texture, used as a sphere map for the (broken) $envmapsphere parameter. VTFEdit can generate this face automatically, via the "Advanced" tab when importing.

To the right hand side of this page you will find two guide images to aid in properly rotating each side of your environment render.
Save one or both of those guides on your computer and then import your environment render onto it or recreate it in a smaller scale, then rotate your sides as instructed by the images.
Save every side as a separate image file, their names should be the number found on that specific square. This will ensure that the environment texture will be built correctly, as the numbers also represent the import order in VTFEdit(en).

Orientation guide for T-assembled environments. Click to enlarge
Orientation guide for Blender render results. Click to enlarge

Once you have all the image sides ready you can just import them all into VTFEdit and select "Environment Map". Texture format is up to you, generally DXT1 will do.

Cubemap tut1 cra0.png

Enable the "Clamp S" and "Clamp T" texture flags.

Then just save it all as a .vtf file and use it in your VMT like so:

"$Envmap" "effects/my_cubemap"

"effects" is the usual folder for environments/cubemaps You may put yours anywhere you like

В 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.

Нужно сделать: What axis does each direction relate to?

Cubemap axis reference 1.jpg

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 // read .pfm file instead of .tga
pfmscale 1 // higher values will result in a brighter sky
nocompress 1 // disable compression (HDR compression is only supported by skyboxes)

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.

Параметры и Эффекты

Смотреть $envmapmask. Текстура, которая по-тексельно(en) определяет яркость зеркального отражения.

Контролирует яркость отражения красного, зелёного и синего(en) канала. Использоваться может любое положительное число. По умолчанию: "[1 1 1]", что означает 100% яркость.
Icon-Important.pngВажно: На VertexLitGeneric этот параметр конвертируется из гамма в линейное пространство. Вводимые значения преобразуются в X^2.2f. Например, 0.25 равно не 25% отражения, а ~5%!
Note.pngПримечание:Вы обязаны использовать кавычки, так как внутри значения есть пробелы.
Note.pngПримечание:Можно указать значение одиночным числом с плавающей запятой. В таком случае это значение будет применено ко всем трём каналам одинаково (Например $envmaptint 0.5 будет равен $envmaptint "[0.5 0.5 0.5]"). Однако, судя по всему, этот метод не является полностью надёжным.[подтвердить]
Tip.pngСовет:Этот параметр часто используется для того, чтобы приглушить яркость зеркального отражения без использования выше описанной $envmapmask.

Контролирует контраст отражения. 0 - натуральный контраст, а 1 возводит цвет в квадратную степень (т.е. цвет*цвет).
Note.pngПримечание:Не работает при включённом $phong(en).
Tip.pngСовет:Use higher contrasts to diminish relatively darker areas and increase "hot spots".

Контролирует цветовую насыщенность отражения. 0 - серые тона, а 1 - натуральный цвет. Красный, Зелёный и Синий цвета можно изменять используя "[к з с]" соответственно.
Note.pngПримечание:In the Shadercode for Source 2013 Source 2013 and Alien Swarm Alien Swarm the parameter is defined as a float parameter. However it will be used as a vec3 and the Shader expects and uses it as such.
Note.pngПримечание:Не работает при включённом на моделях $phong(en).
Icon-Bug.pngБаг:Counter-Strike: Source Работает только на моделях.
Подтвердить:Эта ошибка существует в других Source 2013 Multiplayer играх использующие обычные затенения? (кроме: Half-Life 2: Deathmatch Half-Life Deathmatch: Source Day of Defeat: Source Team Fortress 2)
  [todo tested in?]

The frame to start an animated cubemap on.

Depreciated MATERIAL_VAR_ENVMAPMODE = (1 << 25), // OBSOLETE

$basetexturenoenvmap(en) and $basetexture2noenvmap(en) <boolean(en)> (DX9+) (удалено начиная с Counter-Strike: Global Offensive)
Shader(s): WorldVertexTransition
Used for materials with two albedo(en)s, to make one or the other matte. See also $basetexture and $basetexture2.
Note.pngПримечание:Superseded in Counter-Strike: Global Offensive by $envmapmask2.

$envmapoptional(en) <choices> (удалено начиная с Left 4 Dead)
Sets the oldest DirectX version(en) 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(en) <boolean(en)> Obsolete (также в Garry's Mod) (удалено начиная с Alien Swarm)
Determines whether the material's envmap should be a spheremap (using matcap shading like GoldSrc "chrome"(en) textures) instead of a cubemap. Set this to 1 to use a spheremap.
Icon-Bug.pngБаг:In DirectX 9(en) mode, this will instead act like a regular cubemap with all 6 faces being identical.  [todo tested in?]

$noenvmapmip(en) <boolean(en)> (только в Counter-Strike: Global Offensive)
Shader(s): LightmappedGeneric
Only use the top-level mipmap of the cubemap.
Вентиляция без и с оттенком отражения. В нижней части изображения перечислены параметры использованные для создания этого эффекта.

$fresnelreflection(en) <float(en)> (Во всех играх начиная с Source 2006)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
Добавляет эффект Френеля отражению. 0 - нет эффекта, а 1 - накладывает полный эффект, схож с Water(en). Эффект умножается при значениях выше 1.
Icon-Bug.pngБаг:Значения инвертированы в Black Mesa, 0 - накладывает полный эффект, а 1 - нет эффекта.  [todo tested in?]

$envmapfresnel(en) <float(en)> (DX9+) (Во всех играх начиная с Source 2007)
Shader(s): VertexLitGeneric
Тоже самое что и $fresnelreflection, но для VertexLitGeneric. По умолчанию будет использовать диапазон установленный $phongfresnelranges.
Note.pngПримечание:Работает только если сначала был включён $phong(en) Left 4 Dead.
Пример анизотропных отражений в игре с включённым $envmapanisotropyscale.

$envmapfresnelminmaxexp(en) <vector(en)> (Во всех играх начиная с Left 4 Dead)
Shader(s): VertexLitGeneric
Устанавливает диапазон френеля для материалов, использующих $envmapfresnel без фонга. По умолчанию: "[0 1 2]".
Note.pngПримечание:Значения френеля для этого параметра отличаются от $phongfresnelranges(en). Первое значение - минимальное количество френеля, второе значение - максимальное количество френеля, а третье значение - экспонента.
Icon-Bug.pngБаг:Не может быть использован вместе с $bumpmap. Вместо этого используйте $phongfresnelranges.  [todo tested in?]

$envmaplightscale(en) <float(en)> (Во всех играх начиная с Alien Swarm) (также в Garry's Mod)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend Counter-Strike: Global Offensive, VertexLitGeneric Counter-Strike: Global Offensive, WorldVertexTransition Counter-Strike: Global Offensive
Tint the surface's specular reflection with its lightmap. This matches a surface's reflection with its diffuse lighting and acts as rudimentary reflection occlusion. With a value of 1, a surface will have no reflection if it isn't lit at all. For models in Counter-Strike: Global Offensive, vertex lighting is used for the tinting instead of a lightmap.
Note.pngПримечание:Values above 1 for this parameter are technically permitted, but start inverting the effect.

$envmaplightscaleminmax(en) <vector2(en)> (только в Counter-Strike: Global Offensive) (также в Garry's Mod)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, VertexLitGeneric, WorldVertexTransition
Thresholds for the lightmap reflection tinting effect. Setting the minimum value higher increases the minimum light amount at which the reflection gets nerfed to nothing.

$envmapanisotropy(en) <boolean(en)> (только в Counter-Strike: Global Offensive)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
Enables anisotropic reflection emulation by warping the reflection downwards.

For this it uses the alpha channel of the $bumpmap.
It linearly interpolates between a normal reflection vector and an anisotropic one.

This means that values of 0 in the alpha will result in normal reflections, and a value of 1 will result in anisotropic reflections.
Icon-Bug.pngБаг:Does not work with $normalmapalphaenvmapmask  [todo tested in?]
Icon-Bug.pngБаг:Does not work with $basealphaenvmapmask except Lightmapped_4WayBlend  [todo tested in?]
Note.pngПримечание:Requires a $bumpmap to be present.

$envmapanisotropyscale(en) <normal(en)> (только в Counter-Strike: Global Offensive)
Shader(s): LightmappedGeneric, Lightmapped_4WayBlend, WorldVertexTransition
Multiplier for how much the reflection should be warped.

Консольные команды

buildcubemaps(en)
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.
envmap
Generates an environment map at the player's position and dumps it in cubemap_screenshots/, in six separate PFM files (or, if running without HDR, TGA files).
Tip.pngСовет:Cubemaps created this way will capture dynamic entities and models in them, which are normally hidden when using buildcubemaps.
mat_envmaptgasize <integer(en)>
Устанавливает разрешение для файлов созданных с помощью envmap. Значение по умолчанию: 32
mat_fastspecular <boolean(en)>
Quickly disable or enable specular rendering without reloading materials. This does not affect performance, only appearance. mat_specular must be used for proper performance testing.
Icon-Bug.pngБаг:Не работает в некоторых играх.  [todo tested in?]
Note.pngПримечание:Despite common misconception, setting this to 0 does not enable a "fancy specular" mode, it simply disables specular rendering entirely.
mat_specular <boolean(en)>
Отключает или включает зеркальные отражения, выгружает или загружает зеркальные материалы из памяти. По умолчанию 1.
r_showenvcubemap <boolean(en)>
Команда для отображения всех cubemaps на всех динамических объектах в полную яркость. Использовалось для создания изображения в начале статьи.

Смотреть также