reference materialAdvanced Lighting in Lightwave
by Adam Sanders

 

Part 1 – How the lights work

 

Light is so complex.  I'll probably spend the rest of my life as an animator thinking about light and never really understand every aspect of its behavior.  But I do understand a few things.  So do you, no doubt.  Lightwave however, understands less than either of us.  Default lighting in Lightwave is flat and boring and makes it very easy for the average viewer to realize that they are looking at computer animation, and not real filmed objects.  Luckily, Lightwave is VERY flexible and can be fooled and cajoled into fulfilling our dark purpose(s).  Let's take a look at some examples of the default lights available in Lightwave v7.5c.

 

Note: I have turned on Raytrace shadows and medium anti-aliasing but have left all other settings at default.  This means that the crappy ambient intensity setting under the global illumination settings box is left at 25%.

 


Distant Light

 
          

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


The first light is a Distant Light at 100% intensity.  It's supposed to mimic sunlight but doesn't quite get us all the way there, if you know what I mean.  The Distant Light projects light orthonographically from one direction. The more perpendicular a surface is to the direction of the light's path, the more intense the effect of light becomes.  Surfaces that are more horizontal to the path of light receive less light.  Surfaces that are obstructed by other objects receive no light.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


The second light is the omni-directional Point Light.  The way it works is similar to the way the Distant Light works, except that instead of calculating how perpendicular surfaces are to a constant (reference\global) angle, Lightwave draws rays from the single point light source to the surfaces and calculates how perpendicular any given surface is to the ray that hits it.  This is what I consider to be one of the two worst lights at default usage.  No light in the natural world emanates from a 0-dimensional point like what happens here.  Even light bulbs (without that frosting on the inside to make them "softer") have that little filament which is sort of a little glowing line.  The closest thing around are those little LED lights, and if you are ever in a dark room lit by only one of those lights and your eyes adjust to the low light, things start to look less like reality and more like computer animation (it's sorta fun).  It's very obvious in this picture that we are looking at computer animation, but then again you might want this in one of your animations.  You may now think that the Point light is the worst light, but you will hopefully learn that it is the Mother of all Lights.  If you're clever and know how to use it right, you can create the effect of any naturally occurring light with just point lights.  Believe me.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


The third light is the Spotlight.  It is a variant of the point light only it is not omni-directional.  We also have the option here of using "Shadow map" shadows.  I think that Lightwave uses the spotlight like a sort of "camera of light."  Stay with me here.  When you use a spotlight with shadow maps, it takes a 2D picture of the visible scene from the light's point of view (POV), taking perspective angles into account and noting where one object overlaps another from that POV, then projects the image as a "texture of light" back onto the surfaces.  This is why it's called Shadow Mapping.  If there is nothing overlapping an object from that POV, the spotlight drapes light onto that object in a uniform manner from that 2D POV.  However, if for instance Object A obstructs part of the view of Object B, the spotlight's shadow map uses the image of Object A from its POV to "key out" light from that area, thus creating the effect of shadow.  It can also blur the image of Object A so that its shadow appears "soft."  Spotlights still suck because they emanate light from a 0-dimensional point like point lights.  Also, shadow maps are never 100% accurate.  Sometimes they get accidentally mapped onto surfaces that do not correspond to the originating object (like Peter Pan’s shadow in the Disney version).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


The next light is called a "Linear Light," and that is exactly what it is.  It's much nicer than the previous lights because it's sort of a 1-dimensional light.  At least it's not 0-dimensional.  Think of it like a bunch of point lights arranged in a row.  Not only does it project light perpendicularly onto objects, but I think it also projects light rays in a finite number of obtuse angles from a finite number of points.  This creates two definable zones of shadow.  The first zone is where no rays can reach, therefore creating an area of true shadow called the “umbra.”  The second area is one that some rays can reach while others cannot.  This area is called the “penumbra” and is responsible for the “soft” shadows of the linear light.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

The final light that Lightwave 7.5c offers is called the "Area Light."  This is simply an actual 2D version of the 1D linear light, which is in turn a 1D version of the 0D Point light.  Like the Linear Light, it has two zones of shadow called the umbra and the penumbra, thus resulting in softer shadows.  The effect of Area Lights is much better than the previous lights because it is the closest to the way light works in the natural world.  The problem with it is that it is still only 2D, and every object in the natural world is 3D.  Also, Area Lights and Linear Lights take longer for Lightwave to calculate, especially if you are using motion blur and other multi-pass rendering options that one uses when trying to achieve a realistic computer generated image. If you are using Linear or Area lights in an attempt to mimic real-world lighting effects, it is safe to assume that you would also be using motion blur (and possibly depth of field) to achieve a realistic image.  There are different ways of achieving the same lighting effects of linear lights and area lights and additionally actual 3D light sources that use less CPU clock cycles by using point and spot lights in conjunction with the process that Lightwave uses for motion blur.

 

Remember that all perceivable things in the natural world are 3D, including light sources.  It is common to think of a light source as a having a “point” of origin, and that all light from that source emanates from that 0-dimensional space.  But a more accurate way of thinking about a light source is to visualize an actual 3D object, one composed of an array of points that each emanate light so that each point has its own unique line-of-sight.  This array is the origin of the umbra, penumbra/soft shadows which the linear and area lights attempt to mimic from the natural world.  In order to produce a computer-generated lighting system that affects objects like in the real world, we have to make it act like light does in the real world (or at least a reasonable facsimile).  Let me simplify that previous sentence into an even broader generalization:  In order for things to look real, they have to act real. 

 

 



Part 2 – Mimicking real world light sources by using simple lights

 

 

 

Motion Blur in Lightwave

 

 

In the real-world photography process, a camera's shutter is open for a certain amount of time, and then closes to expose the film to the image that the lens sees. The amount of time that the shutter is open can be thought of as truly linear - that is, there is a beginning point and end point and infinite number of points in between.  But Lightwave's camera captures a 0-dimensional representation of time (there goes Lightwave’s 0-dimensional tendencies again) - that is it captures only one infinitely small slice of time. (Actually, every single "thing" in Lightwave is 0-dimensional - the only way things become more dimensional is through relating to each other.  Blame computer programmers.)   In an attempt to compensate for this, Lightwave programmers implemented a multi-pass rendering system to capture multiple 0-dimensional images to simulate film motion blur.  What happens is this:  Suppose that we making an animation at 30 frames per second, with low anti-aliasing and motion blur on at 50% (the default setting for motion blur once you turn it on, which is a fine setting actually).  If we want to render frame one, Lightwave’s low anti-aliasing motion blur renders full images at frame 1, 0.5, 0.625, 0.75, and 0.875. It went back to 0.5 because the motion blur setting is 50%, which means that it goes back 50% of one frame and adjusts increments from there.  Lightwave then averages the results of the five images together and voila! Motion Blur! Sorta. Check it out:

 


The higher anti-aliasing setting you choose, the more points in between 1 and 0.5 are rendered and averaged together, thus resulting in a “smoother” motion blur.

So what does motion blur have to do with real world lighting?  Well, it turns out that inherent in the way Lightwave simulates motion blur is a way to simulate real-world lighting effects.  Say that we have a point light that is at Point A in the scene at frame zero, but moves linearly from a different place (Point B) at frame 0.5.  Also imagine that immediately after it reaches Point B it somehow defies the rules of space and time and re-appears at Point A only to make the same movement again every half frame (1/60 seconds at 30fps).  If motion blur is capturing the movement of every object in 1\60 seconds, this repeated movement will create an effect very similar to a linear light but in a fraction of the render time!  Suppose that the point light moves in a small circle over and over every 1/60 seconds.  This will create the effect of an area light.

 

Let’s stop talking about it and actually do it.  Open up Lightwave Modeler.  Create a ball in one layer and a simple plane large enough for it to cast shadows on in another layer.  Go ahead and give the surfaces a simple texture if you want, but I’m leaving mine plain gray with smoothing on the ball.  Save this object.  Now open up Lightwave Layout and follow these steps:

 

  1. Import the ball and plane.
  2. Adjust the camera so that you have a good view of the objects in the frame.
  3. Change the light source to a Point Light and move it to position 0,0,0 then add two more lights and name them "light2" and "light3". While we're at it, change each light's intensity to about 25%.
  4. Now add 4 Nulls and call them "main," "rotater1," "rotater2" and "rotater3."
  5. Parent each light to the null that has the same number in its name (the default "light" will go to rotater1) and parent the numbered nulls to the "main" null.
  6. Make sure you have "Autokey" on and move to frame 1.
  7. Hit the "y" key on the keyboard to switch to rotation controls.
  8. For set rotater1's “H” rotation, rotater2's “P” rotation, and rotater3's “B” rotation each to 720°.
  9. In Graph Editor, set the pre and post behavior for the point at frame 1 of each null’s rotating channel to repeat.
  10. Move “Light” slightly (about 500mm) out along its X-axis and “light2” and “light3” out the same amount on their y-axes.
  11. Now move the “main” null out from its position and up to light the scene.
  12. If you want to see what’s going on, now would be a good time to check the “allow fractional current frame” box in “General Options.”  Move the key frame slider slowly to the right (it helps to have your last frame be something small like 5 instead of the default 60). All three lights should be making complimenting orbits around the main null twice in each frame.
  13. Go to the camera options. Set antialiasing on medium or high and motion blur on dithered.
  14. Go ahead and turn on “show rendering in progress” under render options and watch it.  Every frame has different shadow positions.  These passes will be blended together for a smoother final image.  The final render should show some pretty soft raytraced shadows with the umbra and penumbra.

 

Here’s what I got.  Additionally I’ve included renders of versions with an Area Light under the same antialiasing settings for render quality and time comparisons.  All renders are done on a Hyperthreading Pentium 4 at 3.3Ghz:

 

3 Point rig, Medium AA: 7.5seconds

 

Area Light, Medium AA: 38.7seconds

 

Area Light, High AA: 70.2 seconds

 

3 Point rig, High AA: 14.2 seconds

 

One-fifth the render time is not bad.  The shadows in the 3-point light rig with medium AA get a little choppy, but if you bring the lights in closer or raise the AA to high, they won’t be.  Notice the difference in the shape of the shadows between the 3-Points rig and the Area light renders.  This can be accounted for by the fact that the Area Light is a 2D source while the 3-points rig is a true 3D source.  The 3-light rig is much closer to shadows that would come from a real glowing orb in space.  However, the setup demonstrated here is not necessary for all situations.  If you are working on a scene with multiple light sources or distant light sources, you can get away with just one or two rotating point lights.





Part 3 - Mimicking real-world global lighting

In the real world, light does not simply hit objects and then bounce directly to our eyes or die. It bounces off one object, then another and then maybe it finds its way into our eyes, almost exactly the same way that sound echoes. It really is a mess out there. If light didn't bounce, all natural settings having only one light source (such as outdoors during the day) would be much darker and shadows would be truly black. Usually, bounced/redirected light can be responsible for 50-100% of the light we see on objects. The behaviors of light in natural world really seem chaotic, but chaos is not the nature of computers (although it may seem like it). The effect of bounced light in the natural world creates the phenomenon known as "radiosity." Radiosity is the effect of light from an originating source hitting an object and then bouncing off or being redirected and adding to the lighting of another object. The most famous effect of this is moonlight. When I was young, my older brother explained to me that no, the moon wasn't actually making its own light, but instead it was reflecting light onto us that was produced by the sun which was way on the other side of the world. During the day, sunlight hits the atmosphere and clouds and gets redirected so that it seems to come from many directions. It also bounces off objects on earth onto other objects. Sometimes, like on an overcast day, there is very little direct lighting and everything falls under the penumbra (discussed in part 1) resulting in objects that seem to have no shadows or very faint, very soft shadows.

In order to mimic this phenomenon in 3D graphics software, we must come up with some way of simulating a ubiquitous or ambient light source, one that seems to emanate from every which direction. Animators seeking to create realistic images have been well aware of the effect of bounced light for some time and have invented many ways of simulating it. Some methods are more realistic than others and some require much more rendering time that others. The least realistic is Lightwave’s default Ambient Light setting, found under Global Light settings.  Crank this all the way up to 100% and turn off all lights and you will get a 100% flat image.  So if we leave it on 25%, won’t we get a 25% flat image? Yes.  When you desire to create a realistic image, always immediately turn this setting OFF!  The second easiest method, but also the most render-time consuming, is to actually enable Lightwave's (excellent) radiosity renderer. However, on today's sub-10Ghz machines this can result in incredibly high render times. There is an option to use HDR images in conjunction with something called "background only" radiosity to reduce render times. But even on my super-duper 3.3 Ghz HT Pentium 4 render times can get above 20 minutes a frame.

We're going to set up a scene now and use rotating lights to mimic global lighting and a little bit of radiosity. Go ahead and open up Lightwave Layout then follow these steps:

  1. Import cow.lwo into the scene (right-click and "save target as").
  2. Import the ball and floor object from the scene above, then delete the ball layer so that our cow has something to stand on.
  3. Move the camera somewhere so that you have a good view of the cow.
  4. Create a null and name it "main rotater."
  5. Make sure "autokey" is on and move to frame 1, then keyframe the null's H rotation at 720°. Open up Graph Editor and set the pre and post behavior of the keyframe at frame one for the H channel of this null to repeat.
  6. Parent the light to the null. Also, make the target of the light the cow.

Now we're going to do some tricky things with the lighting. Cows like the outdoors, but they don't like being too hot, so we're going to make it a sunny but sorta overcast day. Bessie's been a good heifer, so I think she deserves it.

  1. Go to the light properties. Keep the light "Distant" but change the intensity to 60% and turn on Raytraced shadows (also, turn this setting on in render options).
  2. While you're in light properties, go to the global illumination settings. Turn that wretched ambient light intensity setting to 0.0%! Never use it again!!! I know that this will be a big change for you in you life, and it might be hard at first, sort of like a rough break-up. You'll want it back at times. You'll feel nostalgic about the "good ol' days" of 25% ambient intensity. Believe me, it's no good and you're better off without it. You never really loved it anyway. Throw away all the notes that Ambient Intensity passed to you in class that you've been saving in a little heart shaped box since the beginning.
  3. Now arrange the light so that it is almost directly above the cow.
  4. Make two clones of the light, and arrange them below the first light cascading in an arc fashion, and adjust their intensity to 50%.
  5. Make one more clone, but change it to a spotlight with 60% intensity with no shadows and arrange it so that it is opposite the first light. Your scene should look like this:

  1. Make sure you have both render display and raytraced shadows on in render options.
  2. Go to Camera properties and turn antialiasing on High and Motion blur on Dithered.
  3. Now render. Check out how the lighting changes as lightwave renders each pass. When the three distant light are on the far side from the camera, you'll see how the spotlight is simulating a radiosity effect from the ground. You should end up with something like this:

Render time: 24.1 seconds @3.3Ghz.

I think that this image looks pretty good, particularly the shadows on the cow. The shadows on the ground could be better, so I'm going to make a change. I will clone all three distant lights twice each, and change the first set (5-7) to spotlights with negative intensities of opposite values to their original values, and the second set (8-10) also to spotlights but keep the intensities and change the shadows to fuzzy shadow maps. Do not move them. Then, change the object properties of the cow so that it does not cast shadows (this specifically means raytraced shadows only), and change the properties of the ground so that it does not receive light from the distant lights. Crank the AA down to medium since high is no longer necessary with the fuzzy shadow maps, and you should get this:

Render time: 19.4 seconds @3.3Ghz

Here's the scene file if you want to check it out. You'll also need my ball and floor object file to see the scene. You can choose which you think is a better image/technique.



web page contact: Vonda Yarberry
SMSU
-
Computer Animation Resources Home