Lightmapped 4WayBlend: Difference between revisions
Shawnolson (talk | contribs) m (Added link to docs on making 4way blends and painting them in 3ds Max) |
m (→Example) |
||
Line 42: | Line 42: | ||
"$texture4_blendstart" "0.90" | "$texture4_blendstart" "0.90" | ||
"$texture4_blendend" "0.99" | "$texture4_blendend" "0.99" | ||
"$ | "$texture4_bumpblendfactor" "0.3"<br> | ||
"$detail" "detail\noise_detail_01" | "$detail" "detail\noise_detail_01" | ||
"$detailscale" "[ 32 32 ]" | "$detailscale" "[ 32 32 ]" |
Revision as of 13:56, 2 February 2018
Lightmapped_4WayBlend
is the shader used to blend the vertices of a displacement surface between four different materials. It handles four at once by using mirrored sets of parameters with "2", "3", or "4" in their name.
The first 2 textures can have bumpmaps like WorldVertexTransition. If you want to use an envmap and have masking then you should use the alpha channels of the base textures and $basealphaenvmapmask. This shader does not support $normalmapalphaenvmapmask. You can use an $envmapmask texture, but you'll have to hand paint it to match what you want on the blended result.
Being a replacement of the older Multiblend shader, it was introduced to Counter-Strike: Global Offensive for the map cs_insertion.



Example
Lightmapped_4WayBlend { "$basetexture" "brick_a" "$bumpmap" "brick_a_normal" "$texture1_lumstart" "0.0" "$texture1_lumend" "0.5"
"$basetexture2" "brick_a" "$ssbump" "1" "$bumpmap2" "brick_a_normal" "$surfaceprop" "concrete" "$texture2_lumstart" "0.0" "$texture2_lumend" "0.5" "$texture2_blendmode" "0" "$texture2_blendstart" "0.8" "$texture2_blendend" "0.9" "$texture2_uvscale" "[1.0 1.0]" "$texture2_bumpblendfactor" "0.7"
"$basetexture3" "brick_a_bottom_grime" "$texture3_blendmode" "0" "$texture3_uvscale" "[2.0 2.0]" "$texture3_lumstart" "0.0" "$texture3_lumend" "0.05" "$texture3_blendstart" "0.8" "$texture3_blendend" "1.0" "$texture3_bumpblendfactor" "0.7"
"$basetexture4" "brick_a_top_grime" "$texture4_blendmode" "0" "$texture4_uvscale" "[2.0 2.0]" "$texture4_lumstart" "0.0" "$texture4_lumend" "0.2" "$texture4_blendstart" "0.90" "$texture4_blendend" "0.99" "$texture4_bumpblendfactor" "0.3"
"$detail" "detail\noise_detail_01" "$detailscale" "[ 32 32 ]" "$detailblendfactor" "0.7" "$detailblendfactor2" "0.4" "$detailblendfactor3" "0.2" "$detailblendfactor4" "0.2"
"$lumblendfactor2" "0.5" "$lumblendfactor3" "0.7" "$lumblendfactor4" "0.4" }
Controlling Blending
The pattern of the blend is defined by Hammer's sculpt window blend tool (shown in the picture on the right). The texture preview in Hammer requires you to set up additional VMT files for each texture to show up in the dialog. Those are not used by the shader itself. The Alpha Blend and Color Blend features of this dialog are disabled when using 4WayBlend, they are only used by the Multiblend material.
The blend can be tuned between being a linear gradient and a more realistic look using the luminance of each basetexture adjusted by parameters. This is done using some simple math in the shader, and avoids requiring extra textures.
Luminance Adjust
The lumstart and lumend parameters adjust the luminance value into a usable range with a smoothstep.
luminance = smoothstep( lumstart, lumend, luminanceof(basetexture) )
You can think of this as adjusting the contrast of the luminance. In general, you need more contrast to get a more interesting blend.

Luminance Blending
When blending a given layer, you can choose between using the luminance of that layer or the inverse of blended luminance of the layers below it. This is done with the lumblendfactor parameters.
Vertex Blend Modulate
The resulting luminance is used to modulate the vertex blend value with this formula:
blend = vertexblend * luminance + vertexblend
.
The vertexblend is what you paint using the blend tool in hammer.
Blend Adjust
Finally, the result of that formula is adjusted by another smoothstep with the blendstart and blendend parameters.
blend = smoothstep( blendstart, blendend, blend )
You can think of this as adjusting the sharpness of the blend.
Supported effects
The effects supported by LightmappedGeneric plus:


$basetexture2
$texture2_uvscale
$texture2_lumstart
$texture2_lumend
$texture2_blendstart
$texture2_blendend
$texture2_bumpblendfactor
$surfaceprop2
$basetexture3
$texture3_blendmode
$texture3_uvscale
$texture3_lumstart
$texture3_lumend
$texture3_blendstart
$texture3_blendend
$texture3_bumpblendfactor
$surfaceprop3
$basetexture4
$texture4_blendmode
$texture4_uvscale
$texture4_lumstart
$texture4_lumend
$texture4_blendstart
$texture4_blendend
$texture4_bumpblendfactor
$surfaceprop4