Lighting: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(cleanup)
Line 1: Line 1:
{{Abstract Mapping}}
{{Abstract Mapping}}
__NOTOC__
== Guides ==
== Guides ==
* [[Adding Light]] - A beginners tutorial on how to set up a basic [[light]] entity.
* [[Adding Light]] - A beginners tutorial on how to set up a basic [[light]] entity.
Line 11: Line 9:
== Entities ==
== Entities ==
=== Static light sources ===
=== Static light sources ===
{{tip|Static lighting is compiled into [[Lightmap]]s (which illuminate [[world brush]]es) and [[Cubemaps]] (which illuminate [[model]]s).}}
 
{{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.}}


;[[light]]:A static, omni-directional point light source. (e.g. a naked light bulb or flame.)
;[[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) The conical beam angle cannot exceed 90°.
;[[light_spot]]:A static, uni-directional point light source. (e.g. a torch) The conical beam angle cannot exceed 90°.
;[[light_environment]]: Provides two linked light sources; a "Diffuse light" reflected from overhead clouds/sky and a "Parallel light" which represents sun- or moon- light. Both are emitted from the [[Tool textures#skybox|toolsskybox]] material wherever it is used on a map. See also [[Skybox]].
;[[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 [[Tool textures#skybox|toolsskybox]] material wherever it is used on 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 (only) [[env_smokestack]] particles appear to reflect ambient lighting.
;[[env_particlelight]]: Illuminates particles produced by [[env_smokestack]]. Particles are not affected by normal lighting. Use (no more than) two of these to make (only) [[env_smokestack]] particles appear to reflect ambient lighting.
;luminous materials
;luminous materials
:[[Brush]] surfaces with a light-emitting material (as defined in <code>game_dir/lights.rad</code>) applied will cast volumetric light in a 180&deg; cone.
:[[Brush]] surfaces with a light-emitting material (as defined in <code>game_dir/lights.rad</code>) applied will cast volumetric light in a 180&deg; cone.
=== Static light receivers ===
;[[Brush]]es
:This [[Hammer Face Edit Dialog]] tool '[[Lightmap Scale]]' 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.
;[[prop_static]]
:Unlike other model entities, prop_static 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:
:*<code>disableshadows</code> - Do not cast lightmap shadows
:*<code>disablevertexlighting</code> - Only store a single lighting value for the entire model
:*<code>disableselfshadowing</code> - Prevents the entity from casting shadows on itself
:*<code>ignorenormals</code> - Unknown


=== Dynamic light sources ===
=== Dynamic light sources ===
Line 28: Line 44:
;[[point_spotlight]]:A dynamic spotlight beam effect, with an optional dynamic light source where it hits a surface.
;[[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.
;[[npc_spotlight]]:A spotlight [[NPC]], similar to point_spotlight but with the capability of tracking targets.
;[[env_projectedtexture]]:A dynamic light that lights using a texture rather than a solid colour, and which also casts realistic dynamic shadows. Affects all surfaces that can accept lighting, and is used for the player [[flashlight]] in [[Episode Two]].
;[[env_projectedtexture]]:A dynamic light that lights with a texture rather than a solid colour, and which also 'subtracts' realistic dynamic shadows. Affects all surfaces that can accept lighting, and is used for the player [[flashlight]] in [[Episode Two]].


=== Shadows ===
=== Dynamic shadows ===
* '''Static Shadows''' are cast only by the combination of static light sources and static geometry (Brushes and Models); they are calculated and baked into the Lightmaps by [[vrad|VRAD]], so they look much better and are relatively [[showbudget|cheap]] to render.
* '''Dynamic Shadows''' are cast only by World [[Model]]s (NPCs, phys-props, etc), and only onto [[Brush]] surfaces (from both Static and Dynamic light sources). They are calculated at runtime, so they are quite crude and relatively [[showbudget|expensive]] to render.
:* Sometimes (?) Dynamic Shadows are projected through walls and floors, giving away the location of enemies. Use [[info_no_dynamic_shadow]] to workaround this problem.
:* Dynamic Shadows do not coagulate with each other or with Lightmapped shadows when they overlap. For example, [[light_environment]] casts both Static and Dynamic Shadows, so use [[info_no_dynamic_shadow]] to prevent 'shadows within shadows' from a single light source.


;[[shadow_control]]:Point entity used to control Dynamic Shadow projections for the entire map.
{{tip|Dynamic Shadows are cast only by world [[model]]s (NPCs, phys-props, etc), and only onto [[brush]] surfaces (from both Static and Dynamic light sources). They are calculated at runtime, so they are quite crude and relatively [[showbudget|expensive]] to render.}}
 
{{warning|Dynamic Shadows can sometimes project through walls and floors, giving away the location of players or objects. Use [[info_no_dynamic_shadow]] to workaround this problem if you encounter it.}}
 
{{note|Dynamic Shadows do not merge with each other or with Lightmaps when they overlap. This can produce undesirable 'doubling up' effects when, for instance, phys props are placed on a phys prop table. You can enable and disable shadows on dynamic entities to work around this.}}
 
;[[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.  
;[[info_no_dynamic_shadow]]:Point entity used to list [[Brush]] surfaces that should ''not'' receive Dynamic Shadows.  
;[[Lightmap Scale]]:[[Hammer Face Edit Dialog]] tool used to define how sharp/diffuse the Static Shadows will be on individual Brush surfaces. See also the [[shadow_control]] Entity's "distance" parameter for diffusion of Dynamic shadows.
;[[prop_physics]] entities : have a "shadowcastdist" keyvalue to override how far this object casts Dynamic Shadows.
;[[prop_physics]] entities : have a "shadowcastdist" keyvalue to override how far this object casts Dynamic Shadows.
;[[prop_dynamic]] entities : have a "disableshadows" keyvalue, and "enableshadows" and "disableshadows" inputs to control Dynamic Shadows cast by them.
;[[prop_dynamic]] entities : have a "disableshadows" keyvalue, and "enableshadows" and "disableshadows" inputs to control Dynamic Shadows cast by them.
;NPC entities : have the prop_dynamic shadow controls, plus a "disablereceiveshadows" {{todo|to prevent...?}}
;NPC entities : have the prop_dynamic shadow controls, plus a "disablereceiveshadows" {{todo|to prevent...?}}
;[[prop_static]] entities : have "disableshadows" as well as "disablevertexlighting", "disableselfshadowing" and "ignorenormals" vertex lighting controls.


=== Tyndall effects ===
=== Tyndall effects ===
[http://en.wikipedia.org/wiki/Tyndall_effect Tyndall effects] are caused by light scattering on suspended (colloid) particles in a transparent medium. Eg car headlights in fog.
[[Wikipedia:Tyndall effect|Tyndall effects]] are caused by light scattering on suspended (colloid) particles in a transparent medium. Eg car headlights in fog.
* [http://en.wikipedia.org/wiki/Halo_%28optical_phenomenon%29 Halo] (Glow Sprite) effects :  
* [[Wikipedia:Halo_(optical_phenomenon)|Halo]] (Glow Sprite) effects :  
:*[[env_sprite]] - entity used to create omni-directional glow or flare effects.
:*[[env_sprite]] - entity used to create omni-directional glow or flare effects.
:*[[env_lightglow]] - an asymmetrical glow (for areas of contrasting light).
:*[[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.
:*[[env_sun]] - adds a bright haloed spot to the [[Skybox]] to represent the position of the Sun or Moon.
* [http://en.wikipedia.org/wiki/Light_beam Lightbeam] (Volumetric Light) effects :  
* [[Wikipedia:Light beam|Lightbeam]] (Volumetric Light) effects :  
:*Brush texture : <code>models/effects/vol_light001</code>  
:*Brush texture : <code>models/effects/vol_light001</code>  
:*Brush texture : <code>models/effects/vol_light002</code>
:*Brush texture : <code>models/effects/vol_light002</code>
Line 90: Line 106:
:<code>0</code> is normal lighting.
:<code>0</code> is normal lighting.
:<code>1</code> is 'full bright' lighting, where everything is 100% lit.
:<code>1</code> is 'full bright' lighting, where everything is 100% lit.
:<code>2</code> has been introduced with the Orange Box and is 'lighting only'. It replaces all textures' images with a grey 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 also ==
== See also ==
Line 107: Line 123:
*[http://www.sdknuts.net/akg/?sdk=tutlights HDR/Shaped Light/Burning Light/Darkness/Sun/Volumetric]
*[http://www.sdknuts.net/akg/?sdk=tutlights HDR/Shaped Light/Burning Light/Darkness/Sun/Volumetric]
-->
-->
[[Category:Level design]]
__NOTOC__

Revision as of 04:11, 31 May 2008

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

Guides

Entities

Static light sources

Tip.pngTip:Static lighting is compiled into Lightmaps, which illuminate brushes and models, and Cubemaps, which provide static reflections. It is free to render, as additional static lights only alter that which is already being processed.
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) 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 material wherever it is used on 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 (only) env_smokestack particles appear to reflect ambient lighting.
luminous materials
Brush surfaces with a light-emitting material (as defined in game_dir/lights.rad) applied will cast volumetric light in a 180° cone.

Static light receivers

Brushes
This Hammer Face Edit Dialog tool 'Lightmap Scale' 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.
prop_static
Unlike other model entities, prop_static 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 shadows
  • disablevertexlighting - Only store a single lighting value for the entire model
  • disableselfshadowing - Prevents the entity from casting shadows on itself
  • ignorenormals - Unknown

Dynamic light sources

Tip.pngTip:Dynamic lighting is calculated at runtime, which makes it expensive to render.
env_projectedtexture shines from a doorway.
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 colour, and which also 'subtracts' realistic dynamic shadows. Affects all surfaces that can accept lighting, and is used for the player flashlight in Episode Two.

Dynamic shadows

Tip.pngTip:Dynamic Shadows are cast only by world models (NPCs, phys-props, etc), and only onto brush surfaces (from both Static and Dynamic light sources). They are calculated at runtime, so they are quite crude and relatively expensive to render.
Warning.pngWarning:Dynamic Shadows can sometimes project through walls and floors, giving away the location of players or objects. Use info_no_dynamic_shadow to workaround this problem if you encounter it.
Note.pngNote:Dynamic Shadows do not merge with each other or with Lightmaps when they overlap. This can produce undesirable 'doubling up' effects when, for instance, phys props are placed on a phys prop table. You can enable and disable shadows on dynamic entities to work around this.
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.
prop_physics entities
have a "shadowcastdist" keyvalue to override how far this object casts Dynamic Shadows.
prop_dynamic entities
have a "disableshadows" keyvalue, and "enableshadows" and "disableshadows" inputs to control Dynamic Shadows cast by them.
NPC entities
have the prop_dynamic shadow controls, plus a "disablereceiveshadows"
Todo: to prevent...?

Tyndall effects

Tyndall effects are caused by light scattering on suspended (colloid) particles in a transparent medium. Eg 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.
  • Brush texture : models/effects/vol_light001
  • Brush texture : models/effects/vol_light002
  • Model : models/Effects/vol_light.mdl - use with prop_static.
  • See also Render Modes for sprites, particularly World Space Glow.

Common values

City 17 day
Brightness 237 218 143 800
Ambience 190 201 220 100
Ravenholm night
Brightness 175 230 239 50
Ambience 43 45 57 5
Combine lamp
Brightness 147 226 240 3000
Ambience N/A
Tungsten bulb
Brightness 254 216 146
Ambience N/A
Fluorescent bulb
Brightness 159 237 215
Ambience N/A

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) or env_lightglow 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.
  • Several textures provide their own light & can do so using lights.rad in a mod's directory or the one in sourcesdk/bin.
  • 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.)

Console commands

mat_fullbright 2. The bright white physics props seem to be a bug; they are lit correctly when in motion.
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

External links