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

Ru/$phong: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
No edit summary
No edit summary
Line 2: Line 2:
{{Update translation}}
{{Update translation}}
{{this is a|shader parameter|name=$phong|since=Source 2006|shader=VertexLitGeneric}}  
{{this is a|shader parameter|name=$phong|since=Source 2006|shader=VertexLitGeneric}}  
[[File:Alyx phong closeup.jpg|thumb|200px|Шейдер Фонг обеспечивает подсветку кожи, губ и головной повязки Аликс.]]
[[File:Alyx phong closeup.jpg|thumb|200px|Фонг наделяет кожу, губы и головную повязку Аликс бликами.]]
В большинстве версиях движка доступна только с шейдером <code>{{L|VertexLitGeneric}}</code>; {{csgo}} '''{{L|Counter-Strike: Global Offensive}}''' (начиная с 2015) позволяет использовать с шейдером <code>{{L|LightmappedGeneric}}</code> (с некоторыми ограничениями). Подробнее смотрите {{L|Phong materials|Фонг материалы}}.
It is also available on the {{code|[[LightmappedGeneric]]}} and {{code|[[WorldVertexTransition]]}} shaders in all games since {{csgo|4}}{{also|{{gmod}}{{xengine}}{{mapbase}}}}. It provides {{w|diffuse reflection|icon=hide}}s at low intensity and {{w|specular highlight|icon=hide}}s at apex intensity, masked by a texture which control per-texel its intensity. Для полного объяснения смотреть [[Phong materials|материалы Фонга]].
{{Note|Затенение Фонга для <code>LightmappedGeneric</code> и <code>WorldVertexTransition</code> доступен только в {{csgobranch}}{{strata}}. It requires the material to be lit by the sunlight from a {{ent|env_cascade_light}} entity to work properly and uses the dynamic shadows generated by it as a mask on top of the traditional phong masking. ({{Strata|since}} {{ent|env_projectedtexture}} также влияет на примитивы с включённым фонгом)
{{bug*|{{gmod|4}} reads lighting direction for brush phong from {{ent|env_sun}}; карты с нескольким количеством солнц могут иметь не совсем точные отражения фонга на примитивах.}}}}
{{Note|Затенение Фонга для <code>LightmappedGeneric</code> также доступно и в {{mapbase|4}}, но в нём оно реализовано по другому.}}


==VMT syntax==
==Синтаксис==


  $phong <{{L|bool}}>
  $phong <{{L|bool}}>


Шейдер Фонг ''должен'' использовать стандартные значения для любых параметров конфигурации, которые вы не включили в свой файл материала. Однако оказывается так, что это не происходит. Тем не менее, все перечисленные ниже параметры обязательны, даже если их стандартные значения не меняются.
{{note|Все параметры в примере ниже должны быть указаны в материале, иначе затенение Фонга не появится вовсе, исключением является {{insurgency|4}}.}}
 
:{{todo|Другие игры, которые не требуют присутствия всех параметров фонга в материале (Скорее всего Portal 2 и дальше)}}
<syntaxhighlight lang=php>
<syntaxhighlight lang=php>
VertexLitGeneric
VertexLitGeneric
Line 16: Line 19:
$phong 1
$phong 1


$bumpmap [texture]
$bumpmap [текстура]
$phongexponent 5 // либо это
$phongexponent 5 // либо это
$phongexponenttexture [texture] // либо это
$phongexponenttexture [текстура] // либо это
$phongboost 1.0
$phongboost 1.0
$phongfresnelranges "[0 0.5 1]"
$phongfresnelranges "[0 0.5 1]"
Line 25: Line 28:


== Параметры шейдера ==
== Параметры шейдера ==
=== Маски ===
{{warning|Имеются некоторые нюансы касаемо {{ent|$normalmapalphaenvmapmask}} и [[Glowing_Textures#.24selfillum|$selfillumfresnel]], когда используется {{ent|$phong}}!}}
* Используя [[Glowing_Textures#.24selfillum|$selfillumfresnel]] '''без''' {{ent|$normalmapalphaenvmapmask}} вынудит {{ent|$envmap}} использовать альфа-канал {{ent|$basetexture}} как маску.
* Используя [[Glowing_Textures#.24selfillum|$selfillumfresnel]] '''вместе с''' {{ent|$normalmapalphaenvmapmask}} умножит {{ent|$envmap}} на <code>0.0f</code>, тем самым отключив эффект!
* Когда [[Glowing_Textures#.24selfillum|$selfillumfresnel]] '''не''' используется, то маска, используемая для {{ent|$envmap}} будет альфа-каналом {{ent|$basetexture}} '''до тех пор''' пока не будет использован {{ent|$normalmapalphaenvmapmask}}.
* '''Если''' {{ent|$normalmapalphaenvmapmask}} используется, то альфа-канал {{ent|$bumpmap}} будет использоваться как маска Фонга. Используя <code>$basemapalphaphongmask</code> или <code>$basemapluminancephongmask</code> перекроет этот параметр.
<br>
{{MatParam|$bumpmap|texture|Для работы Фонга требуется маска. [[alpha channel|Альфа-канал]] [[$bumpmap|карты нормалей]] работает как маска Фонга по умолчанию.}}
{{MatParam|$basemapalphaphongmask|bool|Использует [[alpha channel|альфа-канал]] {{ent|$basetexture}} как маску Фонга, вместо [[alpha channel|альфа-канала]] <code>$bumpmap</code>.
{{warning|Используя этот параметр вместе с {{ent|$normalmapalphaenvmapmask}} перекроет маску используемую для {{ent|$envmap}}, и сделает её содержимым альфа-канала {{ent|$basetexture}}!}}
{{warning|В {{gmod|4}} используя этот параметр вместе с {{ent|$normalmapalphaenvmapmask}} и {{ent|$envmap}} отображения в {{ent|$envmap}} и '''<code>$phong</code>''' будут замаскированы как альфа-каналом '''<code>$basemapalphaphongmask</code>''', так и альфа-каналом {{ent|$normalmapalphaenvmapmask}}.}} |since={{src07}}|shaders=VertexLitGeneric}}
{{MatParam|$basemapluminancephongmask|bool|Маскирует силу фонга основываясь на яркости <code>$basetexture</code>.
{{bug|Basetexture Luminance заменит маску используемую для {{ent|$envmap}}, '''если''' {{ent|$normalmapalphaenvmapmask}} уже используется.}}
{{bug|Не работает в {{gmod|4}}.}}
|not={{gmod}}|since={{l4d}}|shaders=VertexLitGeneric}}
{{MatParam|$phongexponent|and=$phongexponent2|int|Общее значение [[Phong materials#Phong mask and exponent texture|экспоненты]]. Перекрывает маску экспоненты, если она присутствует.
: <code>$phongexponent2</code> предназначен для второго материала <code>WorldVertexTransition</code> в {{csgobranch|4}}.}}
{{MatParam|$phongexponenttexture|texture|По-тексельная карта экспоненты. В карте экспоненты хранятся:
:* '''Красный канал:''' Маска экспоненты (размер блика, значение варьируется от 0 до 255, 0 - большой блик, 255 - маленький.)
:* '''Зелёный канал:''' Маска оттенка альбедо (работает только если <code>$phongalbedotint 1</code>, значение варьируется от 0 до 255, 0 - нет оттенка, 255 - полный оттенок.)
:* '''Синий канал:''' Ничего.
:* '''Альфа-канал:''' Маска {{ent|$rimlight}} (работает только если '''<code>$rimmask 1</code>'''.)
:{{Note|Затенения <code>LightmappedGeneric</code> и <code>WorldVertexTransition</code> не поддерживают <code>$phongexponenttexture</code>. Вместо этого используйте <code>$phongexponent</code>.}}|shaders=VertexLitGeneric}}
{{MatParam|$phongexponentfactor|float|Multiply the exponent from the <code>$phongexponenttexture</code> by this amount. {{tip| По умолчанию значение этого параметра <code>"0.0"</code>. Однако, более разумным значением по умолчанию было бы <code>"149.0"</code>}}|only={{src13mp}}{{tf2}}|shaders=VertexLitGeneric}}
{{MatParam|$invertphongmask|bool|Инвертирует значения маски Фонга.
{{bug|In {{as}}s and {{src13}}s Shadercode, using this parameter will invert the mask used for {{ent|$envmap}}, not the one used for <code>$phong</code>! }}
{{confirm| Is this the case for all branches?}}
|since={{src07}}|shaders=VertexLitGeneric}}
{{MatParam|$forcephong|bool|Заставляет работать затенение фонга на материалах использующих его, даже на низких уровнях видеокарты, когда <code>mat_phong</code> отключён.|since={{portal2}}|shaders=VertexLitGeneric}}
{{MatParam|$diffuseexp|float|Diffuse exponent used for dynamic lights only.
{{note|При использовании этого параметра с {{ent|$halflambert}} сильно снизит его эффект.}}|only={{L4ds}}|shaders=VertexLitGeneric, Infected}}
{{MatParam|$shinyblood|int|Derive phong mask from areas that are more red than others. Only when variation is disabled.|only={{L4ds}}|shaders=VertexLitGeneric, Infected}}
{{MatParam|$shinybloodexponent|int|Экспонента для параметра выше.|only={{L4ds}}|shaders=VertexLitGeneric, Infected}}


=== Masking ===
=== Яркость ===
{{MatParam|$phongboost|float|Коэффициент яркости фонга. Чем выше значение, тем ярче блик. Полезен для таких поверхностей как металл и стекло.|shaders=VertexLitGeneric, LightmappedGeneric({{mapbase|only}})}}
{{MatParam|$phongfresnelranges|matrix|Смотреть [[Phong materials#Phong Fresnel ranges|Диапазоны Фонга по Френелю]]. Значения по умолчанию: <code>"[0 0.5 1]"</code>.
:{{note|Эти диапазоны френеля также влияют и на <code>$envmap</code>, если он и Фонг включены в материале.}}
:{{note| drives the x component of a phongwarptexture if specified.}}|shaders=VertexLitGeneric, LightmappedGeneric({{mapbase|only}})}}
{{MatParam|$phongdisablehalflambert|bool|Отключает принудительное [[$halflambert|half-lambertian]] затенение на материалах Фонга. {{note|This parameter is effectively forced on in {{csgobranch|4}} due to <code>$halflambert</code> being disabled.}}|since={{as}}|also={{gmod}},{{Mapbase}}|shaders=VertexLitGeneric}}


; <code>$bumpmap <{{L|texture}}></code>
=== Цвета ===
: Здесь должна быть {{L|$bumpmap|карта нормалей}}. Ее {{L|alpha channel|альфа канал}} действует по умолчанию как [[Phong materials#Phong mask and exponent texture|маска Фонга]].
{{MatParam|$phongalbedotint|bool|Окрашивает блик цветом <code>$basetexture</code>. Количество окраски определяется зелёным каналом <code>$phongexponenttexture</code>. <code>$phongexponenttexture</code> должен быть указан, чтобы <code>$phongalbedotint</code> мог заработать.
; {{L4D add|<code>$BasemapLuminancePhongMask <{{L|bool}}></code>}}
: {{Warning|<code>$phongalbedotint</code> не может быть использован вместе с <code>$phongtint</code>. Последний параметр отключит эффект.}}
: Интенсивность Фонг основывается на яркости <code>$basetexture</code>.
: {{Note|<code>$phongalbedotint</code> работает путём умножения <code>$basetexture</code> на отражение, при это не затемняя альбедо. В результате блик станет тусклее, поэтому учтите это в вашей маске фонга или с помощью <code>$phongboost</code>.}}
;<code>$BasemapAlphaPhongMask <bool></code>
: {{Note|<code>$phongalbedotint</code> окрасит блики оригинальным цветом <code>$basetexture</code>, даже когда материал окрашен используя <code>$color2</code> или <code>rendercolor.</code>}}|since={{src07}}|shaders=VertexLitGeneric}}
: Заменяет маску Фонга на {{L|alpha channel|альфа канал}} <code>{{L|$basetexture}}</code> вместо {{L|$bumpmap|карты нормалей}}.
[[File:Albedotint example.jpg|thumb|200px|Пример, демонстрирующий как AlbedoTint отображается на модели.]]
; <code>$PhongExponent <{{L|int}}></code>
{{MatParam|$phongalbedoboost|float|Phong albedo overbrightening factor. Диапазон: 0-255.
: The numeric value overrides an exponent mask if present.
: {{note| Этот параметр умножит окрас применяемый к фонгу от $phongalbedotint.}}
; <code>$PhongExponentTexture <texture></code>  
: {{bug| Этот параметр не работает при использовании [[$detail]]. }}|since={{csgo}}|also={{gmod}}|shaders=VertexLitGeneric}}
: An global [[Phong materials#Phong mask and exponent texture|exponent]] value, or a per-texel exponent texture map. In an exponent map:
[[File:Phongwarp example.png|thumb|200px|Охотник без и со своей <code>$phongwarptexture</code>.]]
:* '''<span style="color:red">Красный канал:</span>''' Exponent (size of highlight, 0-255, where a value of 0 is a large highlight, 255 small.)
{{MatParam|$phongtint|RGB matrix|Оттенок цвета отражения Фонга.
:* '''<span style="color:green">Зеленый канал:</span>''' Albedo tint (if <code>$phongalbedotint 1</code>, higher is more tint)
: {{Warning|Этот параметр перекроет <code>$phongalbedotint</code>, если используются оба.}}
:* '''<span style="color:blue">Синий канал:</span>''' Nothing
: {{note| Также окрашивает {{ent|$rimlight}}}}|since={{src07}}|shaders=VertexLitGeneric}}
:* '''Alpha channel:''' <code>{{L|$rimlight}}</code> mask
[[File:Phongwarp_coordinate_guide.png|thumb|200px|Разбор $phongwarptexture на составляющие: рассчитанные координаты, текстура и результат.]]
; {{L4D add|<code>$shinyblood <{{L|int}}></code>}}
{{MatParam|$phongwarptexture|texture|Используется для создания эффекта переливчатости, как показано на [[npc_hunter|Охотниках]] из Второго Эпизода.
; {{L4D add|<code>$shinybloodexponent <int></code>}}
: The highlight is multiplied with a texture. The coordinates of the sampled pixel are as follows:
: {{todo|1=See ''[http://www.valvesoftware.com/publications/2010/GDC10_ShaderTechniquesL4D2.pdf#page=33 Shading a Bigger, Better Sequel: Techniques in Left 4 Dead 2]''.}}
:x: 1 - (distance to the center of the highlight)
; <code>$allowdiffusemodulation <int></code>
:y: 1 - (fresnel component as computed by [[Phong materials#Phong Fresnel ranges|Phong Fresnel ranges]])
: {{todo}}
: {{note|Disables the initial phongfresnelranges masking}}
; <code>$DiffuseExp</code>
: {{bug|Не работает в {{l4d2|4}}.}}|since={{src07}}|shaders=VertexLitGeneric}}
: {{todo|Does this have something to do with the ''$phongexponent'', ''$phongexponenttexture or both?}}
[[File:Brush_phong.jpg|thumb|200px|Фонг на примитиве в {{csgo|2}} с использованием tile/hr_t/inferno/tile_a. Заметьте полное отсутствие отражения в затемнённой области.]]


=== Brightness ===
===Параметры затенения на примитивах{{csgobranch|only}}{{also|{{gmod}}}} ===
{{MatParam|$phongmaskcontrastbrightness|and=$phongmaskcontrastbrightness2|vector2|Первое значение контролирует уровень контраста между светлыми и тёмными областями в маске, а второе значение контролирует общую яркость.
: <code>$phongmaskcontrastbrightness2</code> предназначен для второго материала <code>WorldVertexTransition</code>.
: {{todo|Узнать диапазон обоих значений.}}|shaders=LightmappedGeneric, WorldVertexTransition}}
{{MatParam|$phongamount|and=$phongamount2|vector4|Первые три значения контролируют оттенок цвета, а четвёртое значение управляет яркостью. Четвёртое значение может быть больше 1, но в таком случае оно повлияет на яркость всей текстуры, а не только блика.
: <code>$phongamount2</code> предназначен для второго материала <code>WorldVertexTransition</code>.|shaders=LightmappedGeneric, WorldVertexTransition}}
{{MatParam|$phongbasetint|and=$phongbasetint2|float|Позволяет <code>$basetexture</code> и/или <code>$basetexture2</code> окрасить цвет блика.|shaders=LightmappedGeneric, WorldVertexTransition}}


; <code>$phongboost <{{L|int}}></code>
== Консольные команды ==
: Phong brightness factor. Larger values create a more intense highlight, useful for surfaces like metal and glass.
{{IO|mat_phong|param=bool|Отключает или включает затенение Фонга. Значение по умолчанию: 1.}}
; <code>$PhongFresnelRanges <matrix></code>
: See [[Phong materials#Phong Fresnel ranges|Phong Fresnel ranges]]. Default is <code>"[0 0.5 1]"</code>.
; <code>$PhongDisableHalfLambert <bool></code> {{P2 add}}
: Used in {{L|Portal 2}} on the Personality Cores such as Wheatley, disables functionality of $halflambert. MAY need <code>$halflambert 0</code>!
;<code>$AmbientOcclusionTexture <texture></code>
: A "dirtmap". Mentioned in the SDK samples and seen in the VMT for Alyx's face. {{L|$ambientocclusion|Ambient Occlusion}} is generally used for the eyes and face.


=== Colours ===
== Смотреть также ==
 
* [[Phong materials]]
; <code>$PhongAlbedoTint <bool></code>
* {{L|$envmap}} (карта окружения)
: Allows the <code>{{L|$basetexture}}</code> to affect the colour of the Phong highlight. The amount of tint is defined by the green channel of <code>$phongexponenttexture</code> (see above).
; <code>$phongtint "[<red {{L|float}}> <green float> <blue float>]"</code>
: Modifies the colour of the phong reflection. The channels are interpreted relative to each other (so "[0 0 0]" and "[1 1 1]" are the same).
; <code>$PhongWarpTexture <texture></code> {{EP2 add}}
: {{todo|Used to create an iridescence effect, as seen on {{L|npc_hunter}}s.}}
 
== Phong shading on brush faces ==
 
A May 2015 update to {{csgo}} '''{{L|Counter-Strike: Global Offensive}}''' added limited support for Phong-based highlights on <code>{{L|LightmappedGeneric}}</code> materials. Currently it only works when the material is directly lit by an env_cascade_lighting, using the dynamic shadows as a mask (although traditional Phong masking is supported on top of this). It is known to work on displacements as well as <code>{{L|WorldVertexTransition}}</code> materials, but not water or <code>{{L|Lightmapped_4WayBlend}}</code>.
 
=== New Parameters ===
 
; <code>$phongMaskContrastBrightness "[<float> <float>]"</code>
: Defines the contrast level between light and dark areas in the mask, and the overall brightness, respectively. Added along with support for phong-shaded lightmapped textures. {{todo|Find out the range of both values, and whether or not it can be used on models.}}
; <code>$phongAmount "[<red float> <green float> <blue float> <brightness> float]"</code>
: Controls the tint and brightness. The fourth value can go beyond 1, but affects the brightness of the whole texture, not just the highlight.
 
== See also ==
 
* {{L|Phong materials}}
* {{L|$envmap}} (environment map)
* {{L|$lightwarptexture}}
* {{L|$lightwarptexture}}
* {{L|$rimlight}}
* {{L|$rimlight}}
{{ACategory|Shader parameters|p}}{{ACategory|VMT Lighting}}
 
{{ACategory|Material System}}
== Дополнительные ссылки ==
* [https://tf2maps.net/threads/phong-on-brushes-the-hacky-way.26765 $Phong on brushes*: The Hacky Way] - A TF2maps.net guide on how to fake $Phong on brushes for games prior to CS:GO. Can also be used to fake phong on [[prop_static|static props]] which are lit per-vertex, without falling back to lower-quality point lighting on the main prop
*[https://share.substance3d.com/libraries/6595 SubstancePainter Source Engine Complex Phong Shader]
[[Category:Shader parameters|p]][[Category:VMT Lighting]]
[[Category:Material System]]

Revision as of 04:40, 26 October 2024

English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)
Info content.png
This translated page needs to be updated.
You can help by updating the translation.
Also, please make sure the article complies with the alternate languages guide.(en)

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

Фонг наделяет кожу, губы и головную повязку Аликс бликами.

It is also available on the LightmappedGeneric and WorldVertexTransition shaders in all games since Counter-Strike: Global Offensive Counter-Strike: Global Offensive(также в Garry's ModXengineMapbase). It provides Wikipedia icon diffuse reflections at low intensity and Wikipedia icon specular highlights at apex intensity, masked by a texture which control per-texel its intensity. Для полного объяснения смотреть материалы Фонга.

Note.pngПримечание:Затенение Фонга для LightmappedGeneric и WorldVertexTransition доступен только в CS:GO engine branchStrata Source. It requires the material to be lit by the sunlight from a env_cascade_light entity to work properly and uses the dynamic shadows generated by it as a mask on top of the traditional phong masking. ((Во всех играх начиная с Strata Source) env_projectedtexture также влияет на примитивы с включённым фонгом)
Icon-Bug.pngБаг*:Garry's Mod Garry's Mod reads lighting direction for brush phong from env_sun; карты с нескольким количеством солнц могут иметь не совсем точные отражения фонга на примитивах.
Note.pngПримечание:Затенение Фонга для LightmappedGeneric также доступно и в Mapbase Mapbase, но в нём оно реализовано по другому.

Синтаксис

$phong <bool(en)>
Note.pngПримечание:Все параметры в примере ниже должны быть указаны в материале, иначе затенение Фонга не появится вовсе, исключением является Insurgency Insurgency.
Нужно сделать: Другие игры, которые не требуют присутствия всех параметров фонга в материале (Скорее всего Portal 2 и дальше)
VertexLitGeneric
{
	$phong 1

	$bumpmap				[текстура]
	$phongexponent			5			// либо это
	$phongexponenttexture	[текстура]	// либо это
	$phongboost				1.0
	$phongfresnelranges		"[0 0.5 1]"
}

Параметры шейдера

Маски

Warning.pngПредупреждение:Имеются некоторые нюансы касаемо $normalmapalphaenvmapmask и $selfillumfresnel, когда используется $phong!


$bumpmap $basemapalphaphongmask $basemapluminancephongmask $phongexponent $phongexponenttexture $phongexponentfactor $invertphongmask $forcephong $diffuseexp $shinyblood $shinybloodexponent

Яркость

$phongboost $phongfresnelranges $phongdisablehalflambert

Цвета

$phongalbedotint

Пример, демонстрирующий как AlbedoTint отображается на модели.

$phongalbedoboost

Охотник без и со своей $phongwarptexture.

$phongtint

Разбор $phongwarptexture на составляющие: рассчитанные координаты, текстура и результат.

$phongwarptexture

Фонг на примитиве в Counter-Strike: Global Offensive Counter-Strike: Global Offensive с использованием tile/hr_t/inferno/tile_a. Заметьте полное отсутствие отражения в затемнённой области.

Параметры затенения на примитивах(только в CS:GO engine branch)(также в Garry's Mod)

$phongmaskcontrastbrightness $phongamount $phongbasetint

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

mat_phong <булева переменная(en)>
Отключает или включает затенение Фонга. Значение по умолчанию: 1.

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

Дополнительные ссылки