Lighting: Difference between revisions
Kestrelguy (talk | contribs) m (updated language bar.) |
Kestrelguy (talk | contribs) m (added light_directional.) |
||
Line 12: | Line 12: | ||
== Types == | == Types == | ||
=== Static | === Static Light Sources === | ||
{{tip|Static lighting is compiled into [[ | {{tip|Static lighting is compiled into [[lightmap]]s, which illuminate [[brush]]es and [[model]]s, and [[cubemaps]], which provide static [[reflection]]s. | ||
It is [[free]] to render, as additional static lights only ''alter'' that which is already being processed.}} | It is [[free]] to render, as additional static lights only ''alter'' that which is already being processed.}} | ||
Line 20: | Line 20: | ||
;{{ent|light}}:A static, omni-directional point light source. (e.g. a naked light bulb or flame.) | ;{{ent|light}}:A static, omni-directional point light source. (e.g. a naked light bulb or flame.) | ||
;{{ent|light_spot}}:A static, uni-directional point light source. (e.g. a torch or flashlight) The conical beam angle cannot exceed 90°. | ;{{ent|light_spot}}:A static, uni-directional point light source. (e.g. a torch or flashlight) The conical beam angle cannot exceed 90°. | ||
;{{ent|light_environment}}: Provides two linked light sources: | ;{{ent|light_environment}}:Provides two linked light sources: | ||
:*A diffuse 'ambient' light (representing reflected light from clouds and the atmosphere in general) that emits from all skybox surfaces | :*A diffuse 'ambient' light (representing reflected light from clouds and the atmosphere in general) that emits from all skybox surfaces | ||
:*A directional 'brightness' light (representing sunlight or moonlight) that is only cast in a single direction. | :*A directional 'brightness' light (representing sunlight or moonlight) that is only cast in a single direction. | ||
:Both are emitted from the <code>[[Tool textures#skybox|toolsskybox]]</code> and <code>[[Tool textures#skybox|toolsskybox2d]]</code> materials wherever they are used in a map. See also [[Skybox]]. | :Both are emitted from the <code>[[Tool textures#skybox|toolsskybox]]</code> and <code>[[Tool textures#skybox|toolsskybox2d]]</code> materials wherever they are used in a map. See also [[Skybox]]. | ||
;{{ent|env_particlelight}}: Illuminates particles produced by {{ent|env_smokestack}}. Particles are not affected by normal lighting. Use (no more than) two of these to make <code>env_smokestack</code> particles appear to reflect ambient lighting. | ;{{ent|env_particlelight}}:Illuminates particles produced by {{ent|env_smokestack}}. Particles are not affected by normal lighting. Use (no more than) two of these to make <code>env_smokestack</code> particles appear to reflect ambient lighting. | ||
;[[Glowing Textures]] | ;{{ent|light_directional}} {{since|{{l4d}}}}:Essentially a second (or third, or…) one of the direct light from <code>light_environment</code>. Like <code>light_environment</code>'s direct light, it is emitted only from brush faces textured with <code>toolsskybox</code>. {{confirm|this is actually static, right? and not dynamic?}} | ||
:[[Brush]] surfaces with a light-emitting material (as defined in <code> | ;[[Glowing Textures]]:[[Brush]] surfaces with a light-emitting material (as defined in {{ent|lights.rad</code}}, either the one in your mod directory or the one in <code>sourcesdk/bin/</code>) applied will cast volumetric light in a 180° cone. | ||
=== Static | === Static Light Receivers === | ||
;[[Brush]]es | ;[[Brush]]es | ||
Line 42: | Line 42: | ||
;{{ent|func_brush}} and other visible brush entities:Have a <code>vrad_brush_cast_shadows</code> keyvalue to allow them to cast (but not receive) lightmap shadows. {{not in FGD}} in most games other than {{game name|name=Portal 2}}. {{todo|what other games have it?}} | ;{{ent|func_brush}} and other visible brush entities:Have a <code>vrad_brush_cast_shadows</code> keyvalue to allow them to cast (but not receive) lightmap shadows. {{not in FGD}} in most games other than {{game name|name=Portal 2}}. {{todo|what other games have it?}} | ||
=== Dynamic | === Dynamic Light Sources === | ||
{{tip|Dynamic lighting is calculated at runtime, which makes it [[expensive]] to render.}} | {{tip|Dynamic lighting is calculated at runtime, which makes it [[expensive]] to render.}} | ||
Line 49: | Line 49: | ||
;{{ent|light_dynamic}}:A simple, uni-directional dynamic light that can be moved, turned, and adjusted. | ;{{ent|light_dynamic}}:A simple, uni-directional dynamic light that can be moved, turned, and adjusted. | ||
;{{ent|point_spotlight}}:A dynamic spotlight beam effect, with an optional dynamic light source where it hits a surface. | ;{{ent|point_spotlight}}:A dynamic spotlight beam effect, with an optional dynamic light source where it hits a surface. | ||
;{{ent|npc_spotlight}}:A spotlight [[NPC]], similar to <code>point_spotlight</code> but with the capability of tracking targets. | ;{{ent|npc_spotlight}}:A spotlight [[NPC]], similar to <code>point_spotlight</code>, but with the capability of tracking targets. | ||
;{{ent|env_projectedtexture}}:A dynamic light that lights with a texture rather than a solid color and | ;{{ent|env_projectedtexture}}:A dynamic light that lights with a texture rather than a solid color and "subtracts" realistic dynamic shadows. Affects all surfaces that can accept lighting, and is used for the player's flashlight in {{game link|Half-Life 2: Episode Two}}. | ||
:*In games since {{game name|name=Portal 2}}, most visible dynamic entities can have texture projection disabled with the <code>disableflashlight</code> keyvalue, and they can have it toggled at runtime with the EnableReceivingFlashlight and DisableReceivingFlashlight inputs. Their shadow-casting behavior, however, must be controlled separately (see under Dynamic Shadows). In earlier games, this behavior can still be controlled via the <code>EF_NOFLASHLIGHT</code> effect flag (see below). | :*In games since {{game name|name=Portal 2}}, most visible dynamic entities can have texture projection disabled with the <code>disableflashlight</code> keyvalue, and they can have it toggled at runtime with the EnableReceivingFlashlight and DisableReceivingFlashlight inputs. Their shadow-casting behavior, however, must be controlled separately (see under Dynamic Shadows). In earlier games, this behavior can still be controlled via the <code>EF_NOFLASHLIGHT</code> effect flag (see below). | ||
;[[Effect flags]] {{not in FGD}}:Most entities with a parent can have {{ent|EF_BRIGHTLIGHT}} or {{ent|EF_DIMLIGHT}} applied to them to have them radiate dynamic light of the appropriate brightness. | ;[[Effect flags]] {{not in FGD}}:Most entities with a parent can have {{ent|EF_BRIGHTLIGHT}} or {{ent|EF_DIMLIGHT}} applied to them to have them radiate dynamic light of the appropriate brightness. | ||
Line 73: | Line 73: | ||
;[[Effect flags]] {{not in FGD}}:Most entities with a [[Entity Hierarchy (parenting)|parent]] can have various effect flags applied to them to regulate many of the same effects as the aforementioned keyvalues, even if they don't have those keyvalues in your version of Source. | ;[[Effect flags]] {{not in FGD}}:Most entities with a [[Entity Hierarchy (parenting)|parent]] can have various effect flags applied to them to regulate many of the same effects as the aforementioned keyvalues, even if they don't have those keyvalues in your version of Source. | ||
=== Tyndall | === Tyndall Effects === | ||
[[Wikipedia:Tyndall effect|Tyndall effects]] are caused by light scattering on suspended (colloid) particles in a transparent medium. E.g., car headlights in fog. | [[Wikipedia:Tyndall effect|Tyndall effects]] are caused by light scattering on suspended (colloid) particles in a transparent medium. E.g., car headlights in fog. | ||
* [[Wikipedia:Halo_(optical_phenomenon)|Halo]] (Glow Sprite) effects : | * [[Wikipedia:Halo_(optical_phenomenon)|Halo]] (Glow Sprite) effects : | ||
Line 85: | Line 85: | ||
* See also [[Render Modes]] for sprites, particularly [[Render Modes#World Space Glow (9)|World Space Glow]]''. | * See also [[Render Modes]] for sprites, particularly [[Render Modes#World Space Glow (9)|World Space Glow]]''. | ||
== Common | == Common Values == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 110: | Line 110: | ||
== Notes == | == Notes == | ||
*Naming a light makes it more expensive. Only name lights when you need to. Multiple lights sharing the same name are cheaper than lights with separate names. | *Naming a light makes it more expensive. Only name lights when you need to. Multiple lights sharing the same name are cheaper than lights with separate names. | ||
* | *{{ent|light_dynamic}} is especially expensive and will not even show up on some systems | ||
*The basic light entities do not come with a visible representation (e.g. a lightbulb). For that you need a prop. See [[HL2 light props]] for a list. | *The basic light entities do not come with a visible representation (e.g. a lightbulb). For that, you need a prop. See [[HL2 light props]] for a list. | ||
*The basic light entities do not come with a "glow" as you'd expect to see in a foggy or misty area. To provide this, either compile and run the map with [[HDR]] enabled, or add a | *The basic light entities do not come with a "glow" as you'd expect to see in a foggy or misty area. To provide this, either compile and run the map with [[HDR]] enabled, or add a {{ent|point_spotlight}} (with dynamic lighting ''off'' unless needed), {{ent|env_lightglow}}, or {{ent|env_sprite}} entity. | ||
*Maps will not be lit unless you run [[ | *Maps will not be lit unless you run [[VRAD]] (or equivalent). VRAD will not run properly and will not calculate realistic light bounces unless the level is free of [[leak]]s. | ||
*Moving brushed-based objects will '''not''' change the way they are lit. Their lighting will be calculated only according to their positions in Hammer. (e.g. a brush in a dark room will not become bright if it is brought into a bright room.) | *Moving brushed-based objects will '''not''' change the way they are lit. Their lighting will be calculated only according to their positions in Hammer. (e.g. a brush in a dark room will not become bright if it is brought into a bright room.) | ||
*Light can be reflected off surfaces during compile, indirectly illuminating the environment around them. See | *Light can be reflected off surfaces during compile, indirectly illuminating the environment around them. See {{ent|$reflectivity}}. | ||
== [[Console | == [[Console Command]]s == | ||
[[Image:Mat fullbright 2.jpg|thumb|<code>mat_fullbright 2</code>. The bright white physics props seem to be a bug; they are lit correctly when in motion. ]] | [[Image:Mat fullbright 2.jpg|thumb|<code>mat_fullbright 2</code>. The bright white physics props seem to be a bug; they are lit correctly when in motion. ]] | ||
Line 127: | Line 126: | ||
:<code>2</code> has been introduced with the Orange Box and is 'lighting only'. It replaces all textures' images with a colourless monotone, allowing you to see exactly what is lit, where, and probably how. | :<code>2</code> has been introduced with the Orange Box and is 'lighting only'. It replaces all textures' images with a colourless monotone, allowing you to see exactly what is lit, where, and probably how. | ||
== See | == See Also == | ||
* [[HL2 light props]] | * [[HL2 light props]] | ||
* [[Color theory (level design)]] | * [[Color theory (level design)]] | ||
* [[List_of_entities#Light_entities|Light entities]] - A list of light entities. | * [[List_of_entities#Light_entities|Light entities]] - A list of light entities. | ||
* [[ | * [[Intermediate Lighting]] | ||
* [[ | * [[Advanced Lighting]] | ||
* [[Window lighting]] - How to simulate refracted sunlight through openings. | * [[Window lighting]] - How to simulate refracted sunlight through openings. | ||
== External | == External Links == | ||
* [http://web.archive.org/web/20070826121450/http://www.halflifestorm.com:80/?page=tutorials&tutorial=18 Understanding and Using Lightmaps] {{Archived|date=26 August, 2007}} | * [http://web.archive.org/web/20070826121450/http://www.halflifestorm.com:80/?page=tutorials&tutorial=18 Understanding and Using Lightmaps] {{Archived|date=26 August, 2007}} | ||
* [http://web.archive.org/web/20070824050403/http://www.halflifestorm.com:80/?page=tutorials&tutorial=44 Volumetric Lighting] {{Archived|date=24 August, 2007}} | * [http://web.archive.org/web/20070824050403/http://www.halflifestorm.com:80/?page=tutorials&tutorial=44 Volumetric Lighting] {{Archived|date=24 August, 2007}} | ||
* [http://web.archive.org/web/20160906193301/http://source-tutorials.yolasite.com:80/lighting-tutorial.php Lighting Tutorial] - Covers entities & variables with examples {{Archived|date=6 September, 2016}} | * [http://web.archive.org/web/20160906193301/http://source-tutorials.yolasite.com:80/lighting-tutorial.php Lighting Tutorial] - Covers entities & variables with examples {{Archived|date=6 September, 2016}} | ||
* [http://web.archive.org/web/20101124123030/http://www.editlife.net/tutorial.php?tutid=15 Quadratic/Linear/Constant in Lights] {{Archived|date=24 November, 2010}} | * [http://web.archive.org/web/20101124123030/http://www.editlife.net/tutorial.php?tutid=15 Quadratic/Linear/Constant in Lights] {{Archived|date=24 November, 2010}} | ||
*[http://web.archive.org/web/20080120193849/http://www.sdknuts.net:80/akg/?sdk=tutlights HDR/Shaped Light/Burning Light/Darkness/Sun/Volumetric] {{Archived|date=20 January, 2008}} | *[http://web.archive.org/web/20080120193849/http://www.sdknuts.net:80/akg/?sdk=tutlights HDR/Shaped Light/Burning Light/Darkness/Sun/Volumetric] {{Archived|date=20 January, 2008}} | ||
Revision as of 12:25, 2 May 2022
Abstract Mapping series Discuss your thoughts - Help us develop the articles or ideas you want |
---|
Ammunition | List of HL2 Animals and Creatures | Mapping with Antlions | Beams and Lasers | Cables and Ropes | Moving Clouds | Color Theory in Level Design | Combat | Combine | Compression (Source 1) | Doors | Dust, Fog, & Smoke | Elevators | Level Transitions | Environmental Lighting, Sun, Weather, & Outdoors | Explosions | Fire | Half-Life 2 Foliage | Glass & Windows | Headcrab | Health | Ladders | Lighting | Optimization (level design) | Physics | Retinal scanners | Sound and Music | Special effects | Terrain | Trains | Turrets | Water | Weapons | Zombie |
Lighting refers to all systems in Source which light up a level to make it look realistic. There are many areas of knowledge about lighting that a source level designer should know, most of which are accessible through this page.
Guides
- Adding Light - A beginners tutorial on how to set up a basic light entity.
- Intermediate Lighting - A tutorial dealing with all the light sources in more detail.
- Advanced Lighting - Additional information about lighting.
- Constant-Linear-Quadratic Falloff - An easy-to-read explanation of the old C-L-Q light attenuation system.
- HDR - High Dynamic Range Lighting.
Types
Static Light Sources

- light
- A static, omni-directional point light source. (e.g. a naked light bulb or flame.)
- light_spot
- A static, uni-directional point light source. (e.g. a torch or flashlight) The conical beam angle cannot exceed 90°.
- light_environment
- Provides two linked light sources:
- A diffuse 'ambient' light (representing reflected light from clouds and the atmosphere in general) that emits from all skybox surfaces
- A directional 'brightness' light (representing sunlight or moonlight) that is only cast in a single direction.
- Both are emitted from the
toolsskybox
andtoolsskybox2d
materials wherever they are used in a map. See also Skybox. - env_particlelight
- Illuminates particles produced by env_smokestack. Particles are not affected by normal lighting. Use (no more than) two of these to make
env_smokestack
particles appear to reflect ambient lighting. - light_directional (in all games since
)
- Essentially a second (or third, or…) one of the direct light from
light_environment
. Likelight_environment
's direct light, it is emitted only from brush faces textured withtoolsskybox
.Confirm:this is actually static, right? and not dynamic?
- Glowing Textures
- Brush surfaces with a light-emitting material (as defined in [[Lights.rad</code|lights.rad</code]], either the one in your mod directory or the one in
sourcesdk/bin/
) applied will cast volumetric light in a 180° cone.
Static Light Receivers
- Brushes
- The "Lightmap Scale" tool in the Hammer Face Edit Dialog can be used to control how sharp or diffuse the lightmap of a brush surface will be—an effect most noticeable between areas of high contrast, e.g. shadows. Note that, while adding extra light sources will not significantly affect performance, decreasing lightmap scale (i.e., increasing resolution) will more directly increase map file size and memory usage.
- prop_static
- Unlike other model entities,
prop_static
s are lit statically: a lighting value is stored for every vertex, and the model's collision mesh (or, optionally, reference mesh) is used to calculate lightmap shadows. - There are the following options:
disableshadows
- Do not cast lightmap shadowsdisablevertexlighting
- Only store a single lighting value for the entire modeldisableselfshadowing
- Prevents the entity from casting shadows on itselfignorenormals
- Ignores normals of vertex data to calculate lighting. This is extremely useful for foliage and other thin types of vertex meshes.generatelightmaps
(only in) - Allows the props to use lightmaps (like world brushes) if VRAD is run with
-StaticPropLighting
and the prop is not bumpmapped. Lightmap resolution can be configured withlightmapresolutionx
andlightmapresolutiony
.
- func_brush and other visible brush entities
- Have a
vrad_brush_cast_shadows
keyvalue to allow them to cast (but not receive) lightmap shadows. !FGD in most games other than Template:Game name.Todo: what other games have it?
Dynamic Light Sources

- light_dynamic
- A simple, uni-directional dynamic light that can be moved, turned, and adjusted.
- point_spotlight
- A dynamic spotlight beam effect, with an optional dynamic light source where it hits a surface.
- npc_spotlight
- A spotlight NPC, similar to
point_spotlight
, but with the capability of tracking targets. - env_projectedtexture
- A dynamic light that lights with a texture rather than a solid color and "subtracts" realistic dynamic shadows. Affects all surfaces that can accept lighting, and is used for the player's flashlight in
Half-Life 2: Episode Two .
- In games since Template:Game name, most visible dynamic entities can have texture projection disabled with the
disableflashlight
keyvalue, and they can have it toggled at runtime with the EnableReceivingFlashlight and DisableReceivingFlashlight inputs. Their shadow-casting behavior, however, must be controlled separately (see under Dynamic Shadows). In earlier games, this behavior can still be controlled via theEF_NOFLASHLIGHT
effect flag (see below).
- In games since Template:Game name, most visible dynamic entities can have texture projection disabled with the
- Effect flags !FGD
- Most entities with a parent can have EF_BRIGHTLIGHT or EF_DIMLIGHT applied to them to have them radiate dynamic light of the appropriate brightness.
Dynamic Shadows



info_no_dynamic_shadow
to get around this problem if you encounter it.
env_projectedtexture
-based effects).

- shadow_control
- Point entity used to control Dynamic shadow projections for the entire map, including maximum distance cast, direction cast, and sharpness/diffuseness.
- info_no_dynamic_shadow
- Point entity used to list brush surfaces that should not receive Dynamic shadows.
- Most dynamic visible entities
- Have a
shadowcastdist
keyvalue to override how far these objects cast Dynamic shadows, adisableshadows
keyvalue to control whether they cast Dynamic shadows, and EnableShadow and DisableShadow inputs to control Dynamic shadows cast by them. In games since Template:Game name, they also havedisableshadowdepth
to prevent them casting shadows fromenv_projectedtexture
. - Effect flags !FGD
- Most entities with a parent can have various effect flags applied to them to regulate many of the same effects as the aforementioned keyvalues, even if they don't have those keyvalues in your version of Source.
Tyndall Effects
Tyndall effects are caused by light scattering on suspended (colloid) particles in a transparent medium. E.g., car headlights in fog.
- Halo (Glow Sprite) effects :
- env_sprite - entity used to create omni-directional glow or flare effects.
- env_lightglow - an asymmetrical glow (for areas of contrasting light).
- env_sun - adds a bright haloed spot to the Skybox to represent the position of the Sun or Moon.
- Lightbeam (Volumetric Light) effects :
- Brush texture :
models/effects/vol_light001
- Brush texture :
models/effects/vol_light002
- Model :
models/Effects/vol_light.mdl
- use with prop_static.
- Brush texture :
- See also Render Modes for sprites, particularly World Space Glow.
Common Values
Brightness | |
---|---|
Car Headlights | 231 223 192
|
Combine lamp | 147 226 240
|
Tungsten bulb | 254 216 146
|
Fluorescent tube | 159 237 215
|
Incandescent tube | 255 245 145
|
For values to accompany the stock skybox materials, see Sky List.
Notes
- Naming a light makes it more expensive. Only name lights when you need to. Multiple lights sharing the same name are cheaper than lights with separate names.
- light_dynamic is especially expensive and will not even show up on some systems
- The basic light entities do not come with a visible representation (e.g. a lightbulb). For that, you need a prop. See HL2 light props for a list.
- The basic light entities do not come with a "glow" as you'd expect to see in a foggy or misty area. To provide this, either compile and run the map with HDR enabled, or add a point_spotlight (with dynamic lighting off unless needed), env_lightglow, or env_sprite entity.
- Maps will not be lit unless you run VRAD (or equivalent). VRAD will not run properly and will not calculate realistic light bounces unless the level is free of leaks.
- Moving brushed-based objects will not change the way they are lit. Their lighting will be calculated only according to their positions in Hammer. (e.g. a brush in a dark room will not become bright if it is brought into a bright room.)
- Light can be reflected off surfaces during compile, indirectly illuminating the environment around them. See $reflectivity.
Console Commands
mat_fullbright <0-2>
0
is normal lighting.1
is 'full bright' lighting, where everything is 100% lit.2
has been introduced with the Orange Box and is 'lighting only'. It replaces all textures' images with a colourless monotone, allowing you to see exactly what is lit, where, and probably how.
See Also
- HL2 light props
- Color theory (level design)
- Light entities - A list of light entities.
- Intermediate Lighting
- Advanced Lighting
- Window lighting - How to simulate refracted sunlight through openings.
External Links
- Understanding and Using Lightmaps (Archived version retrieved on 26 August, 2007)
- Volumetric Lighting (Archived version retrieved on 24 August, 2007)
- Lighting Tutorial - Covers entities & variables with examples (Archived version retrieved on 6 September, 2016)
- Quadratic/Linear/Constant in Lights (Archived version retrieved on 24 November, 2010)
- HDR/Shaped Light/Burning Light/Darkness/Sun/Volumetric (Archived version retrieved on 20 January, 2008)