In this tutorial, you'll learn how to create
a working skybox for your custom Raven Shield map. The process
is pretty similar with any Unreal engine game. The major
difference with Raven Shield is that the skyboxes have all
been designed as static meshes rather than textures (static
meshes which are, of course, textured themselves... to be
technical about it). You can browse through a number of skybox
textures in the editor, but if you try to plug them into your
skybox directly they simply won't display properly (as many of
you have probably discovered already).
This tutorial assumes that you are already
familiar with UnrealED and know how to load a simple custom
map into Raven Shield. If this is not the case, take a look at
my earlier tutorial, "Building
Your First Raven Shield Map", and then come back to this
one. I'm not going to spend much time in this tutorial dealing
with textures, lighting, insertion points, or path nodes. I'll
assume you know what you're doing and can improvise these as
you go along.
Let's get started.
Open the texture browser and choose "R6_Common.Backdrop" by
opening "R6_Common.utx" and selecting "Texture Backdrop
[DXT1]". Carve out a cube sized
Height=640,Width=768,Breadth=1408. Change the ground surface
to any appropriate terrain texture. Select the ceiling and 4
inside walls, right click, and choose "Surface Properties".
Select the "Fake Backdrop" checkbox and then click the "Apply"
button. This tells the map to look for a skybox to use as a
background for these surfaces. (It is important that you apply
the R6_Common.Backup texture on any surface which you
designate as a fake backdrop. This texture has no impact
effect set, which will allow bullets to sail into the
distance, rather than unrealistically bouncing off of the fake
backdrop.)
Close the surface properties window. Open
the Actor Classes browser, expand "Info" and select
"ZoneInfo". Right click in the center of our area and choose
"Add ZoneInfo Here". (Note: this step was not in the original
version of this tutorial, and as a result the skybox did not
appear for clients when playing multiplayer games.) Add an
insertion zone and and a node point as well. (If you need help
with this, review
my earlier tutorials).
Return to the Actor Classes
browser, expand "Light" and select "Sunlight". Right click in
the center of our area and choose "Add Sunlight Here".
Position the Sunlight icon in the top half of the 'world', and
rotate it so that the red arrow points downward. Open the
properties window, expand "LightColor", and set
LightBrightness to "240" and LightHue to "50". (This will
illuminate the ground pretty well as long as you pointed the
red arrow down).
Now, create a builder brush sized
Height=256,Width=512,Breadth=512. Drag this brush completely
outside our subtracted area (the two areas should not touch)
and then subtract the cube. It doesn't matter what texture you
have selected, because this texture will never be seen. Open
the Actor Classes browser, expand "Info | ZoneInfo", and
select "SkyZoneInfo". Right click in the center of the area we
just created and choose "Add SkyZoneInfo Here". This
identifies the entire inside of this area as our skyzone (you
should only have one skyzone per map). Make sure the
SkyZoneInfo actor icon is completely inside the cube, both
horizontally and vertically.
Now open up the static
mesh browser, open "Airport_SM.usx", choose "Skybox", and
select "SkyBoxAirport". Right click inside our skybox and
choose "Add Static Mesh:
'Airport_SM.usx.Skybox.SkyBoxAirport'". Postion the static
mesh so that it fits perfectly inside our skybox. Open the
Actor Classes browser again, expand "Light" and select
"R6GlowLight". Right click in the center of the skybox and
choose "Add R6GlowLight Here". Make sure the lightbulb icon is
completely inside the skyzone. Open the properties window,
expand "LightingColor", and set LightBrightness to "1" and
LightHue to "50". That will do a fine job of lighting our
skybox background.
The vertical positioning of the
SkyZoneInfo actor in your skybox is very important. In the
case of the airport skybox that we are using here, I recommend
we place the SkyZoneInfo actor just slightly above the floor
of our skybox; this will set a low perspective, causing the
mountains to rise up majestically over you. In some cases, you
will want to set the SkyZoneInfo actor higher in the skybox.
For example, in the Penthouse map, you are looking down at the
city below so you want to set a high perspective. The best way
to think about it is to imagine that your entire subtracted
world been shrunk and stuffed inside the SkyboxInfo actor
icon. Note that you can test how the skybox is positioned
right from the editor. After repositioning the SkyZoneInfo
actor, rebuild, position your camera low to the ground in your
map, and press [K] to toggle 'Show Backdrop' in the 3d view.
Then move the camera around the map, staying low to the ground
where the player will be, to see how it looks. Press [K] to
hide the backdrop again.
Now, we'd
better cage the player in a bit. In my opinion, one of the
most important decisions in building a map is how to block the
borders of the map without making the player feel like they
are trapped or living in a box; this can make all the
difference in how realistic the map feels. The best borders
are those that are layered, for example a vehicle, followed by
a fence, followed further back by a small building and finally
by the far off mountains in the skybox. Some of the Raven
Shield campaign maps go to great lengths to make you feel like
you're part of a larger world. When I burst through the Garage
level for the first time, and found myself looking at a 3d
modeled ocean, I fell out of my chair.
With all that
said, we'll be keeping it pretty simple for this tutorial. Our
goal is simply to keep the player from ever seeing a 'horizon'
where the ground abruptly ends and the sky begins. Not only
does this look unrealistic, but if the player peeks over the
edge, they'll see a hall of mirrors effect. That doesn't mean
you've built the skybox incorrectly. You just need to do a
good job of keeping the player away from the edges.
Create a cube builder brush sized
Height=224,Width=16,Breadth=1408. In the texture browser, open
"Airport_T.utx", choose "Wall" and select any of the wall
textures. Add one wall on the far side of the world and one
wall on the near side, right along each edge. Next, place a
shorter wall (sized Height=64,Width=736,Breadth=16) to block
the left edge of the map. However, then place an identical
wall about 256 units in from the first one to keep the player
from getting to close and peeking over the edge. Our 'sun'
won't do a very good job of lighting these, so open up their
surface properties, select the "Unlit" checkbox, and click the
"Apply" button for each one. (I rarely recommend using the
"unlit" setting in a final map, but it'll do fine for now.)
Now open
up the static mesh browser again, and browse to
"Airport_SM.Vegetation.Backdrop_01". Place this static mesh,
rotate it, and position it along the right edge of the area.
Return to the static mesh browser, select
"Airport_SM.usx.Vegetation.Backdrop_02" and position that on
the map as well. Make sure no vegetation is sticking through
the floor. You should be blocking the entire right edge now,
but it doesn't need to be exact, since we won't let the player
get too close.
Return once more to the static mesh
browser. Browse to "Airport_SM.Fences.Mur_Grillage3_Air" and
place it about 256 units in front of the vegetation. It's
slightly wider than we need. Open the properties window,
expand "Display", and change DrawScale to "0.95". Make sure
the fence isn't sticking through the floor or either wall. Our
'cage' should be complete.
Rebuild the map, save it,
and try it out in-game.
I hope
you found this tutorial helpful. If there's anything I've
gotten wrong, please let me know and I'll correct the
information. Email me if you have any questions or mapping
issues you'd like to discuss. -Beckett
|