CSE4MOD

CSE4MOD
Lighting
Paul Taylor 2009
Textures need Lights
Lights need Textures
One Ring to rule them all, One Ring to find
them,
One Ring to bring them all and in the darkness
bind them
-Does this need context to be awesome?-
OpenGL /DirectX Light Types
Point
Spotlight
Ambient
Distant
Point
home.elka.pw.edu.pl/.../general/General.html
Spot
home.elka.pw.edu.pl/.../general/General.html
Ambient (Area)
home.elka.pw.edu.pl/.../general/General.html
Distant (Sun / Moon)
home.elka.pw.edu.pl/.../general/General.html
Specular Reflection
• Specular
– The more specular a surface, the move light is
reflected very closely to the angle of reflection
– A mirror is a near perfect Specular Surface
http://www.indigorenderer.com/j
oomla/forum/files/specular_mat
erial_test_01_168.jpg
Diffuse Reflection
(Lambertian reflection)
http://torcode.com/
http://www.glenspectra.co.uk/SiteResources/Data/Templates/1product.asp?DocID=389&v1ID=
Emissive
• It Glows!
http://www.gennetten-concreteartist.com/dnetwork.html
Translucent Surfaces
Too Hard Basket!!!
http://www.trinity3d.com/product.p
hp?productid=1572&cat=293&page=
2
http://www.nondot.org/sabre/Proje
cts/Raytracer/
Great so light is stupid complex!
Good lighting is dependant on the reflections
and behaviours of surfaces
This means we can not just use simple textures
that are coloured to look good
We need to be able to define the behaviours of
our objects
We need to define the materials they are made
of
Materials
• For OpenGL to calculate the lighting correctly
your surfaces (Polygons) need to have their
material properties set.
• There are five Variables you will need to consider:
–
–
–
–
–
Shininess Exponent
Emission (4x Floats rgba)
Specular (4x Floats rgba)
Diffuse (4x Floats rgba) // Diffuse sets the alpha trans!
Ambient (4x Floats rgba)
Lighting in 2k4
How many lights does DirectX 9 support?
OpenGL 2.0?
Here’s the lighting in a 2k4 Level
So how many lights??
8
Wow!
How do so many appear in game?
There are 2 common ways to increase the
lighting in a rendered scene:
Baked in Lighting
Multi-Pass Rendering
Multi-Pass
• Only 8 lights can be used per render
• Using the accumulation buffer we can store a
frame and blend it with the next frame
• By doing an additive combine we can add the
lighting from both sets of lights to the scene
Baked In
• This type is pre-calculated
– As you have seen when you build a level
• All the ‘light’ is stored in textures called light
maps
Lighting in 2k4
• There are 2 light groups
– Dynamic
– Static
Light Properties
• Colour
– Brightness, Hue & Saturation ~= RGB
– All range 0-255 (Brightness can exceed this limit)
• Radius
– The max distance a light may affect.
• LightType is redundant (From the Unreal1 Era)
– Lights will default to LT_Steady
– The other light types are now implemented in
another UT system called projectors
Directional Lights
There are a few ways to create these
• The Actor Browser
– Light->Spotlight / Sunlight
– The sunlight actor is a special case, it utilises a
surface to emit light from an ‘infinite’ distance
• Set the bDirectional property to true
– Advanced->bDirectional
Light Effects
• Lighting->LightEffect
• Beware of Animated Effects they only work in
UnrealEd!!!
The Important ones:
• LE_None – Default Constant Falloff
• LE_NonIncidence – Sharper Falloff
• LE_QuadraticNonIncidence – Super Sharp
Falloff
Rebuild Often
• As soon as you relocate a light the shadows
are removed until you rebuild
• Use the lights only button when you are not
moving geometry around
Surface Properties (F5)
• This is where you get to tweak all of your
settings for texturing and light mapping
• Inside the Pan/Rot/Scale Tab you will find
Light Map:
Light Map Size
• This is the detail level of your light map.
– 1 is the most detailed
– 256 the least detailed
– Higher detail creates sharper shadows!!!
Static Meshes
• Static Meshes are really bad at receiving
shadows as they do not share the light maps
used in the Unreal Engine
– Surfaces are either Lit or Unlit, no graduation!
• Static Meshes are good at casting shadows
– So try to avoid casing shadows onto static meshes,
instead let the static mesh cast a shadow onto the
BSP Geometry
Terrain Behaviour
• Terrain light maps are stored separate to the
BSP Geometry
• Stored as a birds-eye view texture.
Particles
• Particles receive no light
– Except for Mesh Emitters which receive very basic
lighting as per static meshes
Selective Lighting
If Lighting->bSpecialLit is set a light will only
affect surfaces that also have bSpecialLit set to
true
Improving your workflow
• Scaling lights
– Literal value Light += value
– Percentage Light *= percentage
Making Actors Emit Light
• Any Static Mesh can emit light but you need to
do a few alterations:
• Set bShadowCast to false so light will exit the
mesh without becoming a shadow
• Set bUnlit to true so the mesh will not decide
that it is in shadow and turn black
Adding Coronas to Lights
• This is as simple as adding a skin to your light
that resembles a corona.
• You’ll need to open Coronas.utx
• Navigate to Display->Skins click add then click
use to get the corona added to your light.
• You can scale the Corona using DrawScale3D
with the X and Y values
Two types of Dynamic Light
• TriggerLight
– These guys are set up to be triggered
• Plain Old Dynamic
– Poor trigger abilities
Projectors
Replace Dynamic Lights for almost all uses
They reduce the dependence on hardware
lighting, by replacing the lighting with
projected textures
Projectors are both faster and better looking
Projected textures interact with animated
objects too!!!
Think of them as little Cameras
• We take the camera, load in image into it and
point it at a surface
• But how do we make an animated projector?
Next Week Texturing and Materials