This article's documentation is for anything that uses the Source engine. Click here for more information.

EyeRefract: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
No edit summary
 
(9 intermediate revisions by 9 users not shown)
Line 1: Line 1:
{{Source topicon}} {{LanguageBar}}
[[File:Eyerefract.jpg|right|300px]]
[[File:Eyerefract.jpg|right|300px]]
{{For|about=the shader|the preceding shader|{{ent|Eyes}}|the [[QC]] property of [[$model]]|[[Eyeball]]|the tool|[[qc_eyes]]}}
{{For|about=the shader|the preceding shader|{{ent|Eyes}}|the [[QC]] property of {{ent|$model}}|[[Eyeball]]|the tool|[[qc_eyes]]}}
{{Shader|EyeRefract|dx9=1|since=Source 2007}} It is used to create realistic eyes, which are affected by map lighting and dynamic lighting, such as those from flashlights. This shader is a successor to the {{ent|Eyes}} shader from {{Game link|Half-Life 2}}.
{{this is a|vertex shader|since=Source 2007|name=EyeRefract}} This shader is a successor to the {{ent|Eyes}} shader from {{src04|1}}. Like it, {{code|EyeRefract}} is used to create life-like eyes, with more realistic shading, cornea parallax, and a wider set of supported effects than {{code|Eyes}}.  
{{Bug|Although this shader has support for {{ent|$emissiveblend}}, it is not fully implemented and does not work properly.}}
{{Bug|Although this shader has support for {{ent|$emissiveblend}}, it is not fully implemented and does not work properly.}}
{{Bug|The shader doesn't work in Counter-Strike: Global Offensive. Eyes always directed to map center. Standard models use static eyes}}
{{Bug|The shader doesn't work in {{csgo|2.bold}}, where eyes are always directed to the map's center. Standard models use static eyes.}} {{confirm|is this just CS:GO, or is it all {{csgobranch|2}} games?}}
 
{{Bug|On {{src13|3.1}}, it's been observed to cause issues when used in scenes with [[expensive]] [[water]], causing flickering and tears or disappearing of the water itself. It is advised to stick to the more stable {{code|Eyes}} shader, unless you're sure you can avoid these issues.}}
== Shader Parameters ==
== Shader Parameters ==
 
{{MatParamDef|$iris|texture|The texture used for the iris. The alpha channel masks the iris against the sclera, which makes the iris more prominent. Opaque values mark the sclera, and transparent values mark the iris.}}
{{MatParam|$iris|texture|The texture for the iris. The alpha channel controls the noisiness of the cornea.}}
{{MatParamDef|$irisframe|int|The frame to start an animated <code>$iris</code> on.}}
{{MatParam|$irisframe|int|The frame to start an animated <code>$iris</code> on.}}
{{MatParamDef|$corneatexture|texture|A texture to specify the shape of the cornea, similar to a normal map. Influences lighting and dilation. The red and green channels are used for the normal mapping, the blue channel is a mask for parallax mapping (straight multiply), and the alpha channel seems to be a multiplier for lighting. Because the <code>$iris</code> is warped in various ways the normals will not match 1-to-1 with the base texture. {{todo|Requires more testing. Source code: eye_refract_ps2x.fxc - search for "fIrisHighlightMask"}}}}
{{MatParam|$corneatexture|texture|A texture to specify the shape of the cornea, similar to a normal map. Influences lighting and dilation. The red and green channels are used for the normal mapping, the blue channel is a mask for parallax mapping (straight multiply), and the alpha channel seems to be a multiplier for lighting. Because the $iris is warped in various ways the normals will not match 1-to-1 with the base texture. {{todo|Requires more testing. Source code: eye_refract_ps2x.fxc - search for "fIrisHighlightMask"}}.}}
{{MatParamDef|$corneabumpstrength|float|Strength of the <code>$corneatexture.</code>}}
{{MatParam|$corneabumpstrength|float|Strength of the <code>$corneatexture.</code>}}
{{MatParamDef|$parallaxstrength|float|How much the viewing angle should influence the positioning of the eye. Stronger values cause the iris to be smaller, but also move slower, making it seem "inset further". Default <code>0.25</code>.}}
{{MatParam|$parallaxstrength|float|How much the viewing angle should influence the positioning of the eye. Stronger values cause the iris to be smaller, but also move slower, making it seem "inset further". Default <code>0.25</code>.}}
{{MatParamDef|$dilation|normal|Dilates the pupil using the cornea texture to determine the shape of dilation. Default <code>0.5</code>.}}
{{MatParam|$dilation|normal|Dilates the pupil using the cornea texture to determine the shape of dilation. Default <code>0.5</code>.}}
{{MatParamDef|$lightwarptexture|texture|1-dimensional texture which remaps lighting colors.}}
{{MatParam|[[$lightwarptexture]]|texture|1-dimensional texture which remaps lighting colors.}}
{{MatParamDef|$envmap|texture|Enables cubemap reflections. This shader has a specific cubemap made for it, <code>engine/eye-reflection-cubemap-.vtf</code>, but others can be used, including <code>env_cubemap</code>.}}
{{MatParam|[[$envmap]]|texture|Enables cubemap reflections. This shader has a specific cubemap made for it, <code>engine/eye-reflection-cubemap-.vtf</code>, but others can be used, including <code>env_cubemap</code>.}}
{{MatParamDef|$glossiness|float|The opacity of the cubemap reflection. Does not affect the eye glint. Default <code>0.5</code>.}}
{{MatParam|$glossiness|float|The opacity of the cubemap reflection. Does not affect the eye glint. Default <code>0.5</code>.}}
{{MatParamDef|$ambientoccltexture|texture|An ambient occlusion texture overlaid onto the entire eye (be sure to adjust the iris scale of the [[Eyeball]] in the QC to make it fit) to make it appear darker near the borders. The texture is multiplicative (white changes nothing, black turns the result darker).}}
{{MatParam|$ambientoccltexture|texture|An ambient occlusion texture overlaid onto the entire eye (be sure to adjust the iris scale of the [[Eyeball]] in the qc to make it fit) to make it appear darker near the borders. The texture is multiplicative (white changes nothing, black turns the result darker).}}
{{MatParamDef|$ambientocclcolor|RGB matrix|Tints the <code>$ambientoccltexture</code>. Default <code>"[0.33 0.33 0.33]"</code>.}}
{{MatParam|$ambientocclcolor|RGB matrix|Tints the <code>$ambientoccltexture</code>. Default <code>"[0.33 0.33 0.33]"</code>.}}
{{MatParamDef|$ambientocclusion|float|Strength of the dynamic ambient occlusion. Default <code>1</code>. {{todo|Strength for SSAO?}}|since={{l4d}}}}
{{MatParam|[[$ambientocclusion]]|float|Strength of the dynamic ambient occlusion. Default <code>1</code>. {{todo|Strength for SSAO?}}|since={{l4d}}}}
{{MatParamDef|$halflambert|bool|Enables half-lambertian lighting.}}
{{MatParam|[[$halflambert]]|bool|Enables half-lambertian lighting.}}
{{MatParamDef|$raytracesphere|bool|Enables sphere raytracing. Each pixel is raytraced to allow sharper angles to look more accurate.}}
{{MatParam|$raytracesphere|bool|Enables sphere raytracing. Each pixel is raytraced to allow sharper angles to look more accurate.}}
{{MatParamDef|$spheretexkillcombo|bool|Requires <code>$raytracesphere 1</code>. Causes pixels which don't hit the raytraced sphere to be transparent, instead of rendering the "non-raytraced" eye behind it.}}
{{MatParam|$spheretexkillcombo|bool|Requires <code>$raytracesphere 1</code>. Causes pixels which don't hit the raytraced sphere to be transparent, instead of rendering the "non-raytraced" eye behind it.}}
{{MatParamDef|$eyeballradius|float|Requires <code>$raytracesphere 1</code>. Radius of the eyeball. Should be the diameter of the eyeball divided by 2. Default <code>0.5</code>.}}
{{MatParam|$eyeballradius|float|Requires <code>$raytracesphere 1</code>. Radius of the eyeball. Should be the diameter of the eyeball divided by 2. Default <code>0.5</code>.}}


== Other Parameters ==
== Other Parameters ==
 
{{MatParamDef|$eyeorigin|vector3|Eyeball origin. Most likely derived from the QC eyes definition.}}
{{MatParam|$eyeorigin|vector3|Eyeball origin. Most likely derived from the qc eyes definition.}}
{{MatParamDef|$irisu|vector4}}  
{{MatParam|$irisu|vector4}}  
{{MatParamDef|$irisv|vector4|U/V projection vector for the iris. Default <code>"[0 1 0 0]"</code> and <code>"[0 0 1 0]"</code>, respectively.}}
{{MatParam|$irisv|vector4|U/V projection vector for the iris. Default <code>"[0 1 0 0]"</code> and <code>"[0 0 1 0]"</code>, respectively.}}
{{MatParamDef|$intro|bool|Eyes are used on a model in {{hl2ep1|2}}'s intro cutscene. Adds another shader pass.}}
{{MatParam|$intro|bool|Eyes are used on a model in Episode 1's intro cutscene. Adds another shader pass.}}
{{MatParamDef|$warpparam|float|Requires <code>$intro 1</code>. How far into the warp animation we are.}}
{{MatParam|$warpparam|float|Requires <code>$intro 1</code>. How far into the warp animation we are.}}
{{MatParamDef|$entityorigin|vector3|Requires <code>$intro 1</code>. World-space location of the entity, required to correctly animate the warp.}}
{{MatParam|$entityorigin|vector3|Requires <code>$intro 1</code>. World-space location of the entity, required to correctly animate the warp.}}


{{todo|Include cloak parameters in here?}}
{{todo|Include cloak parameters in here?}}


{{todo|Can this shader be used outside of a model with qc eyes, by using proxies (or in SFM override materials) to modify these shader values?}}
{{todo|Can this shader be used outside of a model with qc eyes, by using proxies (or in SFM override materials) to modify these shader values?}}

Latest revision as of 11:45, 23 August 2025

English (en)Translate (Translate)
Eyerefract.jpg
This article is about the shader. For the preceding shader, see Eyes.  For the QC property of $model, see Eyeball./ For the tool, see qc_eyes.

EyeRefract is a Vertex shader available in all Source Source games since Source 2007 Source 2007. This shader is a successor to the Eyes shader from Source 2004. Like it, EyeRefract is used to create life-like eyes, with more realistic shading, cornea parallax, and a wider set of supported effects than Eyes.

Icon-Bug.pngBug:Although this shader has support for $emissiveblend, it is not fully implemented and does not work properly.  [todo tested in ?]
Icon-Bug.pngBug:The shader doesn't work in Counter-Strike: Global Offensive Counter-Strike: Global Offensive, where eyes are always directed to the map's center. Standard models use static eyes.  [todo tested in ?]
Confirm:is this just CS:GO, or is it all CS:GO engine branch CS:GO engine branch games?
Icon-Bug.pngBug:On Source 2013, it's been observed to cause issues when used in scenes with expensive water, causing flickering and tears or disappearing of the water itself. It is advised to stick to the more stable Eyes shader, unless you're sure you can avoid these issues.  [todo tested in ?]

Shader Parameters

The texture used for the iris. The alpha channel masks the iris against the sclera, which makes the iris more prominent. Opaque values mark the sclera, and transparent values mark the iris.
The frame to start an animated $iris on.
A texture to specify the shape of the cornea, similar to a normal map. Influences lighting and dilation. The red and green channels are used for the normal mapping, the blue channel is a mask for parallax mapping (straight multiply), and the alpha channel seems to be a multiplier for lighting. Because the $iris is warped in various ways the normals will not match 1-to-1 with the base texture.
Todo: Requires more testing. Source code: eye_refract_ps2x.fxc - search for "fIrisHighlightMask"
Strength of the $corneatexture.
How much the viewing angle should influence the positioning of the eye. Stronger values cause the iris to be smaller, but also move slower, making it seem "inset further". Default 0.25.
Dilates the pupil using the cornea texture to determine the shape of dilation. Default 0.5.
1-dimensional texture which remaps lighting colors.
Enables cubemap reflections. This shader has a specific cubemap made for it, engine/eye-reflection-cubemap-.vtf, but others can be used, including env_cubemap.
The opacity of the cubemap reflection. Does not affect the eye glint. Default 0.5.
An ambient occlusion texture overlaid onto the entire eye (be sure to adjust the iris scale of the Eyeball in the QC to make it fit) to make it appear darker near the borders. The texture is multiplicative (white changes nothing, black turns the result darker).
Tints the $ambientoccltexture. Default "[0.33 0.33 0.33]".
$ambientocclusion <float> (in all games since Left 4 Dead)
Strength of the dynamic ambient occlusion. Default 1.
Todo: Strength for SSAO?
Enables half-lambertian lighting.
Enables sphere raytracing. Each pixel is raytraced to allow sharper angles to look more accurate.
Requires $raytracesphere 1. Causes pixels which don't hit the raytraced sphere to be transparent, instead of rendering the "non-raytraced" eye behind it.
Requires $raytracesphere 1. Radius of the eyeball. Should be the diameter of the eyeball divided by 2. Default 0.5.

Other Parameters

Eyeball origin. Most likely derived from the QC eyes definition.
Todo: This material shader parameter has not been described.
U/V projection vector for the iris. Default "[0 1 0 0]" and "[0 0 1 0]", respectively.
Eyes are used on a model in Half-Life 2: Episode One Half-Life 2: Episode One's intro cutscene. Adds another shader pass.
Requires $intro 1. How far into the warp animation we are.
Requires $intro 1. World-space location of the entity, required to correctly animate the warp.
Todo: Include cloak parameters in here?
Todo: Can this shader be used outside of a model with qc eyes, by using proxies (or in SFM override materials) to modify these shader values?