$emissiveblend: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (→‎Example: moved a line in the example code because i wrote it on the wrong line.)
(→‎Example: made a mistake with the default descriptions for the mask and color textures. they were flipped.)
Line 22: Line 22:
$EmissiveBlendEnabled 1 // Enable EmissiveBlend. Like $selfillum 1
$EmissiveBlendEnabled 1 // Enable EmissiveBlend. Like $selfillum 1
$EmissiveBlendStrength 1 // how strong the entire glow effect is.
$EmissiveBlendStrength 1 // how strong the entire glow effect is.
$EmissiveBlendTexture Glow_texture_mask // This is the glowing texture's mask, like $selfillummask.  SHOULD BE VTF i8 FORMAT, NOT DXT5!!!
$EmissiveBlendTexture Glow_texture_color // this is the glowing texture.vtf
$EmissiveBlendBaseTexture Glow_texture_color // this is the glowing texture.vtf
$EmissiveBlendBaseTexture Glow_texture_mask // This is the glowing texture's mask, like $selfillummask.  SHOULD BE VTF i8 FORMAT, NOT DXT5!!!
$EmissiveBlendFlowTexture vgui/white // EmmisiveBlend can "flow" or move. But ours is static, so a white texture is used.
$EmissiveBlendFlowTexture vgui/white // EmmisiveBlend can "flow" or move. But ours is static, so a white texture is used.
$EmissiveBlendTint " [ 1 1 1 ] " // RGB glow intensity. Leave at 1 1 1. This can be used to change how strong each color should glow. So instead of using a darker red color, you may use [.5 1 1] to have red glow half as strong.
$EmissiveBlendTint " [ 1 1 1 ] " // RGB glow intensity. Leave at 1 1 1. This can be used to change how strong each color should glow. So instead of using a darker red color, you may use [.5 1 1] to have red glow half as strong.

Revision as of 08:27, 13 October 2022

English (en)Translate (Translate)
Nuvola apps ksnapshot.png
This article or section needs a screenshot to help visually convey the subject.
You can upload screenshots at Special:Upload. For help, see Help:Images.

Template:Shaderparam It provides advanced self-illumination that can be flowed using a flowmap. It is used for the Vortigaunts in Half-Life 2: Episode Two Half-Life 2: Episode Two and succeeds the VortWarp shader from Half-Life 2: Episode One Half-Life 2: Episode One. All parameters must be specified except for $emissiveblendstrength in order for the effect to work properly.

Note.pngNote:$emissiveblend is additive, and does not read from the material's albedo.
Note.pngNote:$emissiveblend parameters are X+ and Y-, for both flowmap and scroll. (e.g. Giving X a positive scroll vector will have it go left and giving Y a positive scroll vector will have it go up)
Note.pngNote:This effect does not need to use a flowmap, and can instead be used as a simple emissive map. Use dummy textures (dev/null or a pure white texture with a pure black alpha channel) for $emissiveblendtexture and $emissiveblendflowtexture, and use a value of "[0 0]" for $emissiveblendscrollvector. In this instance, illumination is solely provided by the $emissiveblendbasetexture, and the time proxy is not required.

Parameters

$emissiveblendenabled $emissiveblendtexture $emissiveblendbasetexture $emissiveblendflowtexture $emissiveblendtint $emissiveblendstrength $emissiveblendscrollvector

Time Proxy

For any reason, you may want to modulate time by scale it. The below material proxy is a simple sample to work properly.

Note.pngNote: you don't need to declare "CurrentTime" Proxie in cases where you don't need to relative modify time scale.
	"$time" "0.0"
	"$CurrentTime" "0.0" // declare a custom VMT Parameter to "CurrentTime" Proxie output
	"$timeMult" "0.5"    // declare a custom VMT Parameter to use at "Multiply" Proxie

	"Proxies"
	{
		"CurrentTime"
		{
			// It pass CurrentTime Proxie to "$CurrentTime" variable to scale materials effects such $emissiveblendscrollvector.
			"resultVar" "$CurrentTime" 
		}
		"Multiply"
		{
			"srcVar1" "$CurrentTime" // get $CurrentTime VMT parameter to multiply with srcVar2
			"srcVar2" "$timeMult"    // get $timeMult VMT parameter to multiply with srcVar1
			"resultVar" "$time"      // writes multiplication product into $time, scaling "CurrentTime" 
		}
	}

Example

Basic example setup of EmissiveBlend. This here acts like $selfillum and is not animated.

$EmissiveBlendEnabled 		1					// Enable EmissiveBlend. Like $selfillum 1	
$EmissiveBlendStrength 		1 					// how strong the entire glow effect is.
$EmissiveBlendTexture 		Glow_texture_color	// this is the glowing texture.vtf
$EmissiveBlendBaseTexture 	Glow_texture_mask	// This is the glowing texture's mask, like $selfillummask.  SHOULD BE VTF i8 FORMAT, NOT DXT5!!!
$EmissiveBlendFlowTexture 	vgui/white	 		// EmmisiveBlend can "flow" or move. But ours is static, so a white texture is used.
$EmissiveBlendTint 			" [ 1 1 1 ] "		// RGB glow intensity. Leave at 1 1 1. This can be used to change how strong each color should glow. So instead of using a darker red color, you may use [.5 1 1] to have red glow half as strong.
$EmissiveBlendScrollVector 	" [ 0 0 ] " 		// makes the EmmissiveBlend flow in either direction if a proper EmissiveBlendFlowTexture were set. But ours is static, so leave at 0 0

The only known material using this shader parameter, found in Half-Life 2: Episode Two Half-Life 2: Episode Two, materials/models/vortigaunt/vortigaunt_blue.vmt

"VertexLitGeneric"
{
	"$surfaceprop" "default"
	"$basetexture" "Models/vortigaunt/vortigaunt_base"
	"$bumpmap" "Models/vortigaunt/vortigaunt_normal"
	"$phong" "1"
	"$phongboost" "10"
	"$phongexponenttexture" "Models/vortigaunt/vortigaunt_exponent"
	"$phongalbedotint" "1"
	"$phongfresnelranges" "[.18 .4 1]"
	"$halflambert" "1"
	"$nodecal" "1"

	// Rim lighting parameters
	"$rimlight" "1"												// To enable rim lighting (requires phong)
	"$rimlightexponent" "10"										// Exponent for phong component of rim lighting	
	"$rimlightboost" "3"										// Boost for ambient cube component of rim lighting


	// Blend between color textures
	"$detail" "Models/Vortigaunt/vortigaunt_blue"
	"$detailblendmode" "3"
	"$detailblendfactor" "0.0"
	"$detailScale" "1.0"

	// Emissive Scroll Pass
	"$emissiveBlendEnabled"     "1" // Enables effect
	"$emissiveBlendTexture"     "models/vortigaunt/vortigaunt_illum"
	"$emissiveBlendBaseTexture" "Models/Vortigaunt/vortigaunt_blue"
	"$emissiveBlendFlowTexture" "models/vortigaunt/vortigaunt_flow"
	"$emissiveBlendTint"        "[1 1 1]"
	"$emissiveBlendScrollVector" "[0.11 0.124]"
	"$time" "0"
	"Proxies"
	{
		"VortEmissive"
		{
		}
		"MaterialModify"
		{
		}
		"CurrentTime"
		{
			"resultVar" "$time"
		}
	}
}

See Also