by Hugh Macdonald
This tutorial aims to give the UMS user an understanding of how to add and use Cameras.
I may refer back to something mentioned in the first tutorial, without explaining it. This will usually be something that an experienced UnrealEd user may know. This will be things like adding objects, opening the object properties.
Before you start this tutorial, please make sure you have a map built with what I mentioned at the end of the first tutorial in it.
- Once you have UMS loaded into UnrealEd, locate MovieCamera in the classes browser. This is the object that will control where the viewer sees from at any point. The MovieCamera is almost completely moveable, with some very nice effects built into UMS.
- When you have found MovieCamera, add one into your level somewhere near where you want the view to be from. It is very useful to put the 3D view looking from this place, as you can then line up the shot exactly.
- Unreal Tournament has, as a default, a FOV (Field Of View) of 90o. This means that if you took a top down view of the player, what he can see is 90o from left to right. This is a lot wider than normal film lenses. In fact, a lens of 25mm (the widest normally used) corresponds to a FOV of 52.9o.
- Therefore, this is the value that I generally use. I have noticed that this removes a lot of the feel that you are watching it in a game.
- To actually change the FOV of the camera, you need to go into the MovieCamera properties. In there, expand MovieCamera and change the CurrentFOV to whatever you want.
- The other slight problem with this is the fact that the 3D view will be zoomed further out that what will eventually come out onto the screen. So, we also need to change the FOV of the 3D view. You do this by finding the Camera in one of the 2D views (it looks like an eye with a red arrow coming out of it) and opening up it's properties. Expand Pawn, and change FOVAngle to whatever FOV you will be using.
- Now we have the camera in the level, and the 3D view and the camera set to the same FOV, we need to place the camera in the same position as the 3D view. Firstly, make sure that the 3D view is looking at whatever you want the camera to be looking at. The 3D view can see slightly more than the camera, so make sure that there is nothing important right at the edge of the screen.
- There are two ways to move the camera to the 3D view - a quick and easy, but not extremely accurate way, which is to just move it and rotate it in the 2D views until it looks vaguely in the right place.
- The other way is to copy the positional and rotations coordinates by hand. This can get quite tedious, but is a lot more accurate. To do this, open up the 3D view's properties, and expand Movement. Expand Location and write down the three values for x, y, and z (you can do it to however many decimal places you want - I normally do it to the nearest integer). Then expand Rotation, and do the same thing with the rotational values. (The rotational values in Unreal are done whereby 216 (65536) is 360o) If the camera is going to be a still camera, it doesn't matter if one of the rotational values is, say 133608. If, however, you want the camera to move (dolly) or rotate (pan), then you will need to make the rotational values between -32768 and 32768. If, at any point, you find that a camera does a flip, you will need to either add 65536 (or a multiple of) or take 65536 from the rotation.
- Once you have these values written down, open up the MovieCamera properties, and go to Movement → Location and type the values for the location in. Then, go to Movement → Rotation and do the same. Now, your MovieCamera should be in the same place as the 3D view.
- We now need to name the MovieCamera. If you use UnrealEd a lot, you will know exactly how to do this. If, however, you are a new user, you do this by opening the MovieCamera properties, and going to Event. Then, put the name for the MovieCamera into Tag. Each object in the level should be named differently, with certain exceptions. I tend to name my cameras Camera1, Camera2 etc. Make sure that there are no spaces in the name.
- You now should have your MovieCamera in the level, and are ready to add it to your director. Open up the director properties, and put Camera Camera1 CutTo in the next available slot. This will cause the view to be moved to that of Camera1's. That is the most basic command. The other commands, which I will go through in order, are Pan, Dolly, Zoom, Track, Circle, ChaseCam, and Interpolate.
- There are three different ways of panning the camera. You can either pan by a certain amount, pan to a point described in the Director, or you can pan to a point in the level (could be an actor, could be a SimplePoint (as described in the previous tutorial)).
- To pan a camera, you need to know the camera's name. In my example, I have used Camera1 as my camera. If you want a camera to start panning as soon as the view goes to that camera, you need to start the next slot in Script with the following: Camera Camera1 Pan.
- In the script, the first word will always be what type of object is being used (in this case, a camera). The second word is the tag of the object (Camera1 here). Anything after that is what will happen to that object. In this case, we have put Pan next, so UMS will then look in ScriptRotators to see how much we want to pan the camera. Yaw is a change in the horizontal rotation (as if you rotated it from the top down view). Pitch changes the camera to be looking up or down, and Roll will, well, roll the camera.
- If, instead of Camera Camera1 Pan, you put Camera Camera1 Pan To, UMS would look in ScriptVectors for a point on the map. It would then pan to look at that point. If you want the camera to look at a point, it is invariably easier to just put a SimplePoint into the map at the point, and tell the camera to pan to that. This is done by putting Camera Camera1 Pan To CamPoint1, where CamPoint1 is the tag of the SimplePoint.
- The one thing that I have missed out in this is the time that the camera takes to pan from one point to another. This is entered in the ScriptVals, in seconds.
- That is about it for panning the camera. If you use either Pan To or Pan To CamPoint1 and you find that the camera either rotates the wrong way, or does a complete flip, then you'll have to check the original camera's rotation. Try adding 65536 to or taking 65536 away from the rotation that is going the wrong way. This may cause it to do a double flip, or may cause the problem to be corrected.
- Dollying works in much the same way as panning. To dolly by a certain amount, you put Camera Camera1 Dolly with the amount to dolly by in ScriptVectors.
- To dolly to a certain point, you either put Camera Camera1 Dolly To, with the point to dolly to in ScriptVectors, or you put Camera Camera1 Dolly CamPoint1 where CamPoint1 is the SimplePoint that you want to dolly to.
- As with panning, the time you want the camera to take dollying goes in ScriptVals.
- Zooming is a very simple command. The Script command is very simply Camera Camera1 Zoom. The FOV that you want it to zoom to is put in one of the ScriptVectors slots (only one - leave the other two at 0).
- The time you want that camera to take to zoom into that FOV is put into ScriptVals.
- Tracking is also a very simple command, but a very widely used one. If you tell the camera to track an object, it will follow that object, until told to either pan of chase. All you put in is Camera Camera1 Track CamPoint1 where CamPoint1 is the tag of either a SimplePoint, or a moving object that you want to track (usually a pawn)
- The other options with this command are to track a point offset from the target. To set the offset, put the values in ScriptVectors.
- The other option is to let the camera only track horizontally, or vertically. To stop the camera from yawing (panning horizontally), set Yaw, in ScriptRotators, to -1. Do the same to Pitch if you want to restrict the vertical panning.
- Circling is probably one of the most complex Camera commands, but can produce stunning effects (Stephen Deaver's words, not mine!). Most of the time, you will probably want to circle a moving pawn, or object, but you can also have the camera circle a spot in space (by using a SimplePoint). There is a way to make this spot, even if it doesn't have anything there, move. I will cover that in the pawns tutorial.
- To circle a point, there are two options for how far the camera starts from the object. You can set the camera to start the distance that you want from the object that it is circling. This is great if the object is stationary, but as soon as you have an object that is moving, it becomes slightly inaccurate.
- The other option is to make it out of two commands. The first one dollys the camera to the point that you want it to circle in 0 seconds (instantaneously). Then, you can use ScriptVals to determine how much further away from the object you want to go.
- The command to go in Script is very simple: Camera Camera1 Circle CamPoint1
- The values which determine how fast the camera is circling the object are in ScriptRotators. Yaw will make the camera circle horizontally round the point. This will be in how many units per second (so, putting a value of 65536 in will make it do one revolution per second). Pitch will make the camera rotate over or under it's target. Doing a combination of both of these can produce some wonderful effects.
- Just doing Circle on it's own will make the position of the camera circle the point, but not make the camera point to it. To do that, you need to combine the Circle command with a Track command.
- The other option that is available with the Circle command is the ability to circle round a point that is offset from the target. This offset is defined by ScriptVectors. This would be useful for if you wanted to rotate round an actor's head, which may not be their centre.
- This will allow the camera to remain at a certain point from an object, turning with it, and moving with it. The Script command is Camera Camera1 ChaseCam Actor1 where Actor1 is the actor that the camera will be chasing.
- In ScriptVectors, you should put the offset that you want the camera to chase from. This is where a positive x value is in front of the actor, a positive z value is above the actor, and a positive y value is to the right of the actor.
- The ScriptRotators has the rotational difference in. If this is all set to 0, then the camera will be pointing the same direction as the actor. If, say, the camera was above and behind the actor, you would want to set the Pitch to be slightly negative. This would cause the camera to look down to the actor.
- Interpolation is a very useful tool, for when you want the camera to follow a long winding path. With dollying, you can only make the camera move in a straight line. This section will only describe how to make the camera go to an interpolation path. For instructions on setting up an interpolation path, go to the [Interpolation tutorial]?.
- To make the camera follow an interpolation path, the command is Camera Camera1 Interpolate InterpolationTag where InterpolationTag is the tag of the Interpolation Points.
- ScriptVals is the rate at which the camera moves along the Interpolation path. One of ScriptVectors (leave the other two at 0) is the alpha of the camera. This is how dark it is. It is best to leave this at 0 too, as this will make no difference. If the alpha is 255, the the screen with be blank.
That was how to use cameras. In the next tutorial, I will cover how to add actors into your films, and how to make them do whatever you want them to do.