How to use the sun(s)
This tutorial will walk you through the process of creating a map with
working suns. You can download the reference map to see what the final
result should look like. In this tutorial, I will describe three different
methods for aiming. Once you are become accutomed to the aiming methods,
you can use whichever method you find the easiest.
To start, we must have a map. Open up your favorite map editor
and create a new map. Let's make a floor. Pick your favorite floor texture
and make a floor brush, 512 by 512. Surround it by walls 128 units high.
Make sure that the walls all meet to make a square.
Now switch to the the sky texture and create brushes that go up
another 128 units and seat against the outside of the walls. Cap it all
off with a ceiling. It is important to remember that you should not have
any sky brushes on the same plane as any of your other world brushes if
they are not blocked by another brush. If a sky brush and a world brush
are on the same plane and there is a brush blocking their line of sight to
each other, it is okay, but if there isn't a brush blocking their line of
sight, you may get unwanted results.
Select all of the sky faces that will be seen within the level and
apply a light value of 50 (select the light flag and add a value of 50).
The actual light value is not important as long as it is over a minimum
value. Fifty is a good safe number.
Next, pick a post texture and make four 64x64x256 posts, one for
each corner, 64 units from the walls. Place an player start in the center
of the level, and you are done with the map portion of the tutorial.
Now lets deal with the sun. The first definition method we will use is
the angle definition. Although this may be difficult to understand at
first, I find it to be the easiest way to aim a sun. Define your
_sun_angle key as follows:
"_sun_angle" "315 -45"
See the tutorial on pitch
and yaw for an explanation of the angles.
To define a brightness for the sun, we enter a _sun_light value.
_sun_light 400
Give the sun a color. We will be using really ugly colors for the
purpose of this tutorial for purposes of clarity. Define a _sun_color
value of 1 1 0 for a 100% yellow sun.
"_sun_color" "1 1 0"
Let us define an ambient shadow value. The ambient shadow can be
defined in one of two ways. If you only define a single value
("_sun_ambient" "50"), the color of the shadow will be defined by an
average of all of your suns. If you define three values, one for each
color, then you will override the ambient color with the one you enter. If
you use the second method, each value entered will be the intensity of the
color.
"_sun_ambient" "10 10 10"
The above value overrides the default shadow color with a brightness of
50 red, 50 green, and 50 blue, resulting in a value of 50 white. Notice
that, unlike the _color value, the _sun_ambient value is an absolute
measurement of the light intensity. A value of 50 entered will return an
absolute texture brightness of 50.
The first sun has been properly created. You may compile the map now to
evaluate the results, or go on to the second sun.
For the second sun, we will use the conventional aiming method. Create
a light entity. Add the keyvalue pair:
"target" "star"
The target's name is not important. It just needs to match the
targetname of the info_null you are about to create. Create an info_null
that is one grid unit left and one grid unit down from your light. If your
light were at an origin of 64 64 64, and your grid is set to snap at 16
units, then you would place the info_null at 32 32 32. Set the info_null's
targetname
"targetname" "star"
With that out of the way, it's back to the worldspawn we go. To define
your second sun, we will use the _sun key. Since this is the second sun,
we will substitute _sun with _sun2. You can substitute _sun2 _sun3 or
_sun4 for any key with _sun in it except _sun_ambient.
"_sun2" "star"
The _sun and _sun_target keys do the same thing. The value that follows
the _sun key is the targetname of the info_null.
We shall make this sun red with a brightness of 500
"_sun2_light" "500" "_sun2_color" "1 0 0"
The second sun is created. Compile it or go on to the third method.
Notice that in software mode, the shadows of the two suns do not behave
completely logically. Since the colored light is translated into white
light of the same intensity, the overlapping shadows will appear to be
blended into a single highlight value.
The third method is the vector aiming method. To use vector aiming, you
will enter a value in to the worldspawn:
"_sun3_vector" "-32 32 -32"
What this does is tells the sun a direction to point relative to the
map's origin (0 0 0). The angle from the origin to the defined vector
value is -32x 32y -32z or 32 units left, 32 units up on the horizontal
plane and 32 units down on the vertical plane. The resulting angle SHOULD
BE the same as a yaw 135 and pitch -45. The angles derived from the
vector, however, differs slightly from the actual angle.
We'll make the sun brightness 800, and its color green.
"_sun3_light" "800" "_sun3_color" "0 1 0"
Well, that's it. You know how to make a sun in each of the three
different methods.
Now that you know how to create your suns, let's mess with the diffuse
settings. Extract ex02b.bsp into your baseq2/maps/ director from the zip
file. Start up Quake2, load the map, and observe the difference
between the shadows coming through the windows.
By
default, the shadows cast by the sun are blocky. The stepped appearance is
an unsightly sideffect of the directional nature of the sun. To overcome
this, ArghRad offers the "_sun_diffuse" key. This allows you to set a
gradiated intermediate value to soften the contrast between the sunlight
and the shadow.
To use _sun_diffuse, set a value that is between your _sun_ambient
brightness and your _sun_light brightness. If you find that the rate at
which your _sun_diffuse fades is unsatisfactory, you can set the
_sun_difwait or _sun_diffade values to increase or decrease the rate at
which it fades. See the example map ex02b.map for an example of this.
As you
can see, with the _sun_diffuse value defined, the shadow is much smoother
and more realistic. There are three different brightness values apparent.
The center of the lit area represents the _sun_light intensity, while the
darkest area represents the areas lit by the _sun_ambient light. The
semi-dark areas between the highlight and shadow is the _sun_diffuse
light.
To
better demonstrate the difference between the light levels, the four
squares of light in the example map have triggers to let you know the
diffade value of light shining in each square. The square in the image to
the right has no diffade value set. You can see that there is no diffusion
of light between the dark and light areas.
Although it is difficult to
tell in the image to the left, if a _sun_diffade value is set to a value
above 1, the rate at which the _sun_diffuse light fades dramatically
decreases. In this example image, the _sun_diffuse light takes up the
entire corner.
|