Water (shader): Difference between revisions
(added bug to reflectskyboxonly) |
MyGamepedia (talk | contribs) No edit summary |
||
Line 126: | Line 126: | ||
{{MatParam|$flow_uvscrolldistance|float|How far along the flow map the normal map should be distorted. Higher values lead to more distortion.|since={{l4d2}}|also={{Xe}}}} | {{MatParam|$flow_uvscrolldistance|float|How far along the flow map the normal map should be distorted. Higher values lead to more distortion.|since={{l4d2}}|also={{Xe}}}} | ||
{{MatParam|$flow_timeintervalinseconds|float|Time needed for the normal map to cross the <code>$flow_uvscrolldistance</code>.|since={{l4d2}}|also={{Xe}}}} | {{MatParam|$flow_timeintervalinseconds|float|Time needed for the normal map to cross the <code>$flow_uvscrolldistance</code>.|since={{l4d2}}|also={{Xe}}}} | ||
{{MatParam|$flow_timescale|float|Modifies flow speed without affecting the amount of distortion.|since={{l4d2 | {{MatParam|$flow_timescale|float|Modifies flow speed without affecting the amount of distortion.|since={{l4d2}}}} | ||
{{MatParam|$flow_bumpstrength|normal|How rough the surface of the water is.|since={{l4d2}}|also={{Xe}}}} | {{MatParam|$flow_bumpstrength|normal|How rough the surface of the water is.|since={{l4d2}}|also={{Xe}}}} | ||
{{MatParam|$flow_noise_texture|texture|A treatment texture used to break up repetition of the normal map.|since={{l4d2}}|also={{Xe}}}} | {{MatParam|$flow_noise_texture|texture|A treatment texture used to break up repetition of the normal map.|since={{l4d2}}|also={{Xe}}}} | ||
{{MatParam|$flow_noise_scale|float|How many times to fit the noise texture into the normal map. Typically around 0.01.|since={{l4d2}}|also={{Xe}}}} | {{MatParam|$flow_noise_scale|float|How many times to fit the noise texture into the normal map. Typically around 0.01.|since={{l4d2}}|also={{Xe}}}} | ||
{{MatParam|$flow_debug|bool|Replaces the water surface with a literal rendering of the flow map. {{bug|Although the flow map will show up in Hammer, it may not be in the correct place! Don't rely on Hammer's view for alignment.}}|since={{l4d2}}|also={{Xe}}}} | {{MatParam|$flow_debug|bool|Replaces the water surface with a literal rendering of the flow map. {{bug|Although the flow map will show up in Hammer, it may not be in the correct place! Don't rely on Hammer's view for alignment.}}|since={{l4d2}}|also={{Xe}}}} | ||
{{todo|Add {{bms|4}} parameters.}} | |||
==== Basetexture Flow ==== | ==== Basetexture Flow ==== | ||
{{MatParam|$basetexture|texture|A "sludge layer", used in {{portal2}} for the sludge and debris in test chambers. The alpha channel of the <code>$basetexture</code> acts as a mask for the reflection; darker values are more reflective, while lighter values are less reflective. | {{MatParam|$basetexture|texture|A "sludge layer", used in {{portal2}} for the sludge and debris in test chambers. The alpha channel of the <code>$basetexture</code> acts as a mask for the reflection; darker values are more reflective, while lighter values are less reflective. | ||
: {{Note|From {{portal2}} onwards, the opacity of the <code>$basetexture</code> is controlled by the alpha channel of the flow map.}}|since={{as}}}} | : {{Note|From {{portal2}} onwards, the opacity of the <code>$basetexture</code> is controlled by the alpha channel of the flow map.}}||since={{as}}|also={{Xe}}}} | ||
{{MatParam|$color_flow_uvscale|float|The number of world units covered by the base texture before it repeats. Typically in the 100s.|since={{as}}}} | {{MatParam|$color_flow_uvscale|float|The number of world units covered by the base texture before it repeats. Typically in the 100s.|since={{as}}|also={{Xe}}}} | ||
{{MatParam|$color_flow_timescale|float|Modifies flow speed without affecting the amount of distortion.|since={{as}}}} | {{MatParam|$color_flow_timescale|float|Modifies flow speed without affecting the amount of distortion.|since={{as}}}} | ||
{{MatParam|$color_flow_timeintervalinseconds|float|Time needed for the base texture to cross the <code>$color_flow_uvscrolldistance</code>.|since={{as}}}} | {{MatParam|$color_flow_timeintervalinseconds|float|Time needed for the base texture to cross the <code>$color_flow_uvscrolldistance</code>.|since={{as}}|also={{Xe}}}} | ||
{{MatParam|$color_flow_uvscrolldistance|float|How far along the flow map the base texture should be distorted. Higher values lead to more distortion.|since={{as}}}} | {{MatParam|$color_flow_uvscrolldistance|float|How far along the flow map the base texture should be distorted. Higher values lead to more distortion.|since={{as}}|also={{Xe}}}} | ||
{{MatParam|$color_flow_lerpexp|float|How sharp the transition should be between repeats, should be 1. | {{MatParam|$color_flow_lerpexp|float|How sharp the transition should be between repeats, should be 1. | ||
: {{todo|Better explanation}}|since={{as}}}} | : {{todo|Better explanation}}|since={{as}}|also={{Xe}}}} | ||
{{MatParam|$color_flow_displacebynormalstrength|float|How much the normal map affects the base texture. Uses extremely low values, usually 0.01 or less.|since={{portal2}}}} | {{MatParam|$color_flow_displacebynormalstrength|float|How much the normal map affects the base texture. Uses extremely low values, usually 0.01 or less.|since={{portal2}}|also={{Xe}}}} | ||
==== Authoring a flow map ==== | ==== Authoring a flow map ==== | ||
Revision as of 10:10, 1 June 2024
It creates water that realistically reflects and refracts the world, and that can flow throughout a map.

Special behaviour
- Expensive and cheap
Water
materials fall into two groups: expensive and cheap. Expensive water reflects and refracts the world in real-time, while cheap water uses an $envmap and does not refract. Users can disable expensive water rendering through their video options, so always place env_cubemap entities throughout a map.- Above and below
Water
actually requires two materials: one for above the surface and one for below. These materials are independent of each other, but for proper effect need to correlate in most areas.- Flow Mapping
- Water can flow in arbitrary directions. It's very tricky to create a flow map by hand however, and the tool Valve used internally hasn't been released.
Shader parameters
Textures
$abovewater
$bottommaterial
$underwateroverlay
$bumpmap
$normalmap
$dudvframe
$bumpframe
$bumptransform
$scale
$flashlighttint
$waterdepth
$depth_feather
Fog
$fogstart
$fogend
$lightmapwaterfog
Reflection
$reflecttexture
$reflectamount
$reflecttint
$envmap
$envmapframe
$forceenvmap
$forcecheap
$forceexpensive
$cheapwaterstartdistance
$cheapwaterenddistance
$reflectentities
$reflectonlymarkedentities
$reflectskyboxonly
$reflect2dskybox
$reflect3dskybox
$reflectblendfactor
$nofresnel
$forcefresnel
$basereflectance
$maxreflectance
Refraction
$refract
$refracttexture
$refractamount
$refracttint
$blurrefract
$pseudotranslucent
$waterblendfactor
Flowing water
$scroll1 "[<normal X> <normal Y>]"
(in all games since)
$scroll2 "[<normal X> <normal Y>]"
(in all games since)
- If
$scroll1
is defined and X is not zero, two more instances of the normal map will be drawn in such a way that they are merged together. The first layer is 7x larger and rotated 45°; the second is 2x larger and rotated 90°. The parameters specify the speed and direction that the extra layers will move. (Valve's materials usually contain a third number, but it doesn't have any apparent effect and is most likely obsolete.)
Flow maps
$flowmap
$flow_normaluvscale
$flow_worlduvscale
$flow_uvscrolldistance
$flow_timeintervalinseconds
$flow_timescale
$flow_bumpstrength
$flow_noise_texture
$flow_noise_scale
$flow_debug

Basetexture Flow
$basetexture
$color_flow_uvscale
$color_flow_timescale
$color_flow_timeintervalinseconds
$color_flow_uvscrolldistance
$color_flow_lerpexp
$color_flow_displacebynormalstrength
Authoring a flow map
Overall, trying to create a flow map manually is a nightmare. Painting the flow map, fitting it into the world, and painting foam, is extremely difficult.
But if you do want to give it a try, flow direction is read from the red and green channels of the flow map. 50% tone means no movement.
The texture scale of any faces using a water texture with a flow map appear to have a direct correlation on the flow map. The fewer water faces or planes you use the easier the process of authoring a custom flow map will be (selecting all of your water faces and using 'treat as one' when using the fit scaling may also be an option)
- There are now tools to assist in painting flowmaps.
- Flow field editor from algoholic.eu : http://algoholic.eu/another-flow-field-editor-update/ [dead link]
- Flowmap generator (paid): http://www.superpositiongames.com/products/flowmap-generator
- Creating flowmaps using Houdini (UDK) : https://www.dropbox.com/s/ii2x077vj64lyhl/Water%20Flow%20For%20UDK.pdf [dead link]
Other
%compilewater
$surfaceprop
%tooltexture
WaterLOD proxy
- This connects the water_lod_control entity in a level to the water’s internal parameters. This must be declared in the material for the LOD mechanisms to work properly.