light

From Valve Developer Community
Jump to navigation Jump to search
English (en)Русский (ru)Translate (Translate)
Edit Tabs
C++ Class hierarchy
CLight
↳CPointEntity
↳CBaseEntity
C++ lights.cpp
This article is about the light entity. For general information about using lights, see Lighting.
Light.png

light is a semi-internal point entity available in all Source Source games.

It creates an invisible static light source that shines in all directions.

AltNames.pngAltNames: light, light_spot, light_glspot, and (in all games since Left 4 Dead) light_directional are all tied to the same C++ class in game, and only differ in VRAD.
Note.pngNote: When building Cubemaps, this entity will be rendered as a sprite on the generated cubemaps. Sometime this might be unwanted, in which case modifying engine/lightsprite.vmt is necessary to prevent the sprite from appearing. Try changing the sprite's $basetexture to tools/toolsblack instead.

Keyvalues

Name (targetname) <string>
The name that other entities refer to this entity by, via Inputs/Outputs or other keyvalues (e.g. parentname or target).
Also displayed in Hammer's 2D views and Entity Report.
See also: Generic Keyvalues, Inputs and Outputs available to all entities
Icon-Important.pngImportant: Naming a static light radically changes its behavior. See Naming Lights for details.
Entity To Point At (target) <targetname> Obsolete
Deprecated.
Entity to point this light at. Non-functional, as this entity casts light in all directions, regardless of if it has a target; use light_spot instead.
Maximum Distance (_distance) <integer>
This is the distance that light is allowed to cast, in inches. Non-functional in Source 2013 and later, use 50 and 0 percent falloff instead.
Appearance (lightstyle) (style) <integer choices>
Various lightstyle presets.
Warning.pngWarning: On some modern drivers[Which?] this will degrade performance by causing frequent stutters. There is no workaround for this other than not using styled lights. The symptoms of this are high spikes in Dynamic Light Rendering when using +showbudget. When toggling r_dynamiclighting off, these spikes will disappear. DXVK is not affected by this problem.
Lightstyle presets (epilepsy warning)
Literal Value Description Sequence Preview
0 Normal m Lightstyle 0.png
10 Fluorescent flicker mmamammmmammamamaaamammma Lightstyle 10.gif
2 Slow, strong pulse abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba Lightstyle 2.gif
11 Slow pulse, noblack abcdefghijklmnopqrrqponmlkjihgfedcba Lightstyle 11.gif
5 Gentle pulse jklmnopqrstuvwxyzyxwvutsrqponmlkj Lightstyle 5.gif
1 Flicker A mmnmmommommnonmmonqnmmo Lightstyle 1.gif
6 Flicker B nmonqnmomnmomomno Lightstyle 6.gif
3 Candle A mmmmmaaaaammmmmaaaaaabcdefgabcdefg Lightstyle 3.gif
7 Candle B mmmaaaabcdefgmmmmaaaammmaamm Lightstyle 7.gif
8 Candle C mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa Lightstyle 8.gif
4 Fast strobe mamamamamama Lightstyle 4.gif
9 Slow strobe aaaaaaaazzzzzzzz Lightstyle 9.gif
12 !FGD Underwater light mutation mmnnmmnnnmmnn Lightstyle 12.gif
63 !FGD Testing (Off) a Lightstyle 63.png

Values 32-62 are written automatically by VBSP for named lights.

Default Style (defaultstyle) <integer choices> !FGD
Written by VBSP automatically for any named lights with a non-zero style.
Custom Appearance (pattern) <string>
A string of english letters, like a sequence of piano keys, that define a pattern of brightness. a is 0%, m is 100%, and z is 200%. Updates at 10 Hz. Requires light to have a targetname.

Internal keyvalues used only by VRAD:

Brightness (_light) <color255 + int>
The RGB color of the light, and a multiplicative scalar for brightness (applied after gamma correction). Colors should be between 0 and 255; brightness can be anything (even absent). If only one value is provided, light will be greyscale.
Note.pngNote: Brightness values below zero are clamped; this can be fixed by modifying VRAD.
Cpp.pngCode Fix: In utils/vrad/lightmap.cpp, look for the comment saying "// make sure light is legal", then remove the following if statement, including all its contents.
BrightnessHDR (_lightHDR) <color255 + int>
RGB color and brightness override used in HDR mode. Default is -1 -1 -1 1, which means no change.
Warning.pngWarning: The fourth digit must be positive. Otherwise all light will be sucked out of your map!
BrightnessScaleHDR (_lightHDRscale) <float>
A simple intensity multiplier used when compiling HDR lighting.
Note.pngNote: Unlike _light and _lightHDR, negative values are supported. Negative brightness will suck out the amount of lighting that the equivalent positive brightness would cast. Use sparingly; set falloff to linear instead of quadratic to make it more like an ordinary shadow and less like a black hole. Since this only applies to HDR mode, it should be reserved for games that don't officially support disabling HDR.
Constant (_constant_attn) <float>
Linear (_linear_attn) <float>
Quadratic (_quadratic_attn) <float>
These three values determine how the intensity of the emitted light falls off over distance. See Constant-Linear-Quadratic Falloff.
50 percent falloff distance (_fifty_percent_distance) <float>
0 percent falloff distance (_zero_percent_distance) <float>
Distances at which brightness should have fallen to 50% and (1/256)% respectively. Overrides Linear/Constant/Quadratic parameters if non-zero.
Icon-Bug.pngBug:Using this setting will sometimes not work, which may or may not be related to using the light inside of an instance. Collapsing the instance and messing with the light's falloff values seems to help.
Hard falloff (_hardfalloff) <boolean>
Causes lights to fall to exactly zero beyond the 0% distance. May cause unrealistic lighting if not used carefully.
Cast entity shadows (_castentityshadow) <boolean> (in all games since Left 4 Dead) (also in Garry's Mod)
Allows the light to modify the direction of nearby render-to-texture shadows so that they always point away from its origin. See also shadow_control. !FGD in some games.
Note.pngNote: This keyvalue is also in VRAD++ VRAD++, but will only affect the map when loaded in third party engines such as Garry's Mod, or post-Left 4 Dead engines (such as Strata SourceJabroni Brawl: Episode 3).
Shadow cast offset (_shadoworiginoffset) <vector> (in all games since Left 4 Dead)
A world-space offset that gets applied to the light origin when casting entity shadows. Useful for dealing with funny-looking shadows from very low lights: Just offset up the z axis. Default 0 0 0. !FGD in some games.
Pitch Yaw Roll (Y Z X) (angles) <angles> !FGD Obsolete
Deprecated.
Written by VRAD to the worldlights lump, but is unused, as light from this entity is omnidirectional.

Flags

Initially dark : [1]
Spawns with the light turned off, so a light switch or similar can turn it on.

Inputs

TurnOn <void>
Turn the light on (sets pattern to m).
TurnOff <void>
Turn the light off (sets pattern to a).
Toggle <void>
Toggle the light's current state.
Cpp.pngCode: Uses the current state of the m_spawnflags to determine whether to turn on or off. As such, if the light has been manually turned off (such as by setting pattern to a in SetPattern or FadeToPattern), this input will appear to have no effect.
SetPattern <stringRedirectInput/string>
Set a custom pattern of light brightness for this light. Flags the light to game code as being "on".
FadeToPattern <stringRedirectInput/string>
Fades from first value in old pattern, to first value in the new given pattern.
Fade occurs 0.1 seconds per letter, the same speed as the pattern itself. Flags the light to game code as being "on".
Tip.pngTip: This can be used to have a light turn on and off slowly (over the span of 1.3 seconds), by setting the pattern to m to turn on, and a to turn off.
Kill <void>
Killing lights will leave their associated lightmaps and worldlights in whatever state they were in prior to the entity being killed.
If the light is on, it will stay on; if the light is off, it will stay off. If a pattern is playing, the pattern will continue to play. If FadeToPattern was used, and the target pattern hasn't been reached, the light will remain at whatever level of partial fade it was at.
Tip.pngTip: Used carefully, killing a light when it can no longer change state can clean up entity slots, which may be useful if running close to entity limits.
Tip.pngIdea: If there are specific lights wherein bounced light is undesirable, give them all the same targetname, then kill them with logic_auto.


See also