Multiplayer Map Theory (UT3)
Document Summary: Some of the Level Designers for UT3 wanted to share some of our philosophies of making a great UT3 MP map now that the editor is public. Hopefully you can put them to good use.
Document Changelog: Created by Dave Ewing and Richard Nalezynski?.
This document contains a series of Tips and Tricks to make the most of your UT map.
Please be aware that these are just suggestions on how to make user maps closer to professional quality, rather than a definitive ‘follow these steps to make a map’ guide.
When starting a level, no matter what the game-type it is always best to ‘shell out’ the gameplay before you start on any visual work. With BSP and very few static meshes, quickly flush out the entire level to a point where you can play the level and see how fun it is. If it’s not fun before visual work, it’s not going to be fun after, and since visual work in UE3 can take the bulk of the level work time, you want to be sure you get your level as fun as possible before you start so you don’t waste a lot of time re-meshing and lighting to accommodate game-play changes.
One of the first things to look at when you start shelling is the scale of the level. It’s good to have variety, but generally, you don’t want your level so big and open that it feels like you are moving across it at a snail’s pace. But by the same token, you want hallways and rooms to be open enough that you can dodge a bit and can easily navigate without getting stuck. Another good tip is to avoid ledges that look like you can double jump to, but are actually just slightly higher than the double jump range. Once you have one area roughed out, be sure to jump in there with PIE (Play In Editor) and spend time just moving around and get the feel of your scale.
This is tricky to get right at times, but you want your level to be comfortable and intuitive to traverse. You want to pull the player around map without making people double back on themselves by accident. Pickup placement will have a large effect on flow, but the geometry of you level itself can often affect flow too. The best way to check your flow is have someone who hasn’t seen you level before try it out. Have them run around the level a few times to get familiar with it and see if they are favoring any particular spots or if they are missing any other spots entirely. Make sure they aren’t still getting lost after running through the map a few times and that they aren’t inadvertently doubling back on themselves.
Spread out your goodies! If key power-ups are too close together, other parts of your level are going to see very little traffic. Try to make sure players can easily find a weapon very quickly. Risk vs. reward is always a nice rule of thumb to follow for pickups in that you usually want more powerful pickups in spots where they are more difficult to get. Having large pickups in a guardable area works well, so once players get it, they can try to hold it.
If you want your map to stand out from the crowd, this is the key! The fact that UT mapping is such a playground of gameplay and visual possibilities is what makes it so special. Don’t be afraid to go against the grain and try something completely different. Sometimes you fail miserably (like I have many times!), but when you succeed, you will have something very memorable on your hands.
An essential step to polishing your level and getting to the point where you are ready to release it to the world is doing a blocking volume pass. If you open any of the UT3 ship maps in the editor you will see they are blanketed in blocking volumes. It can be tedious work, but it really pays off to have smooth walls and floors. If you just rely on the custom static mesh collision players will often get ‘hung up’ on spots where two meshes meet, even if they seem to be flush against each other. Be sure to turn off collision on any meshes completely encased in blocking volumes or are out of the play area (set these to ‘Block_Weapons’ since weapon fire will go through blocking volumes).
Force Direction Volumes
These are very useful for containing vehicles in playable space. They are essentially like ‘soft’ blocking volumes that will stop vehicles but have a little give so it doesn’t feel like you are hitting an invisible wall. Open up the ‘ForceDirVolume\Arrow’ tab and it’s direction indicates the direction the volume will push. You can also set the volumes to block on foot players and disallow them exit from vehicles that have pushed inside them.
Collision View Modes
In the drop-down menu for each viewport, you will find collision view modes. Non-Zero extent is player collision, Zero extent is weapon collision, and Rigidbody is rag-doll and vehicle collision. Non-Zero extent view mode is very useful for seeing what the player is actually colliding with and helps you eliminate sticky points were players can get hung up. It’s definitely best to view this mode with lighting fully built and enabled.
We try to keep the scale of our assets proportional to player size. Over-scaling will cover up BSP using fewer assets, but in the end it also lowers the overall visual quality of a level. Focus on 3 distinct types of visual detail: large, medium and small. Large objects are generally the walls and architecture; medium scale identifiers are doors and windows; small objects are things like trash, control panels, wires, or pickups. By maintaining a close eye on all 3 groups will you give the player a more satisfying and believable level regardless of whether it is sci-fi, semi-realistic, or Cel shaded.
Post Process Volumes
Post Process Volumes (PPV) are a relatively quick way of unifying the look of a level and give an artist/LD control over contrast, brightness, color hues and saturation. Your level should still be lit relatively close to how you want it, and then use post process to do exactly what the name says – as a correction tool applied after an event. If you use this tool to correct poor lighting decisions, it can lead to poor player / character / vehicle visibility and negatively impact bloom effects.
Within the PPV you have settings to define the amount a pixel will bloom, depth of field (which we add to help aid in defining the depth perception of a level), full screen motion blur, and object motion blur.
It is always best to have a good idea of your lighting scheme before you begin meshing a level. This sounds obvious, but if you don’t start this way, you may find yourself wastefully redoing your lighting scheme a number of times. Whenever possible, we use concept art or photo reference to give the artist a strong starting point to follow. Remember – poor lighting can make even the best meshed level look bad and good lighting can really pull together a poorly meshed level!
Often, outdoor daytime levels are the easiest to light, as you have an obvious key light (the sun) and using a skylight actor will give you the overall bounce light from the sky and the ground (set each independently). Use point lights in areas where there is strong light to give the feel of reflected light and radiosity.
With interior levels, it makes sense to start with the obvious light sources and then work outward. Consider the lighting scheme and type of light while you are meshing to help your level look more professional. Are you using light that streams in from the windows as your main source of light? Are you using up-lighting in your corridors? Is the glowing pool of slime going to be the main light source? We often use different colored lights to help separate floors in a map, as it provides the player with a quick way of identifying which level they are on.
Fog sheets are a great way to add atmosphere to your level – they give the illusion of mist, smoke, heavy atmospherics, and can even help separate parts of a level. Fog meshes are often used in doorways leading to another room as they highlight the transition and are more subtle than something like a glowing neon sign. The material applied to a fog mesh can be set to any color and you can even use the material to reduce opacity as you approach.
No level should be without height fog! It doesn’t always need to be a heavy, but fog is a great way to aid depth perception and enhance the illusion of distance. You can place multiple height fog actors in your level to create things like low lying ground mist, a dense fog, or even just a more general atmospheric haze.
Importing custom meshes
Upon import, you will want to check that you have set up basic collision, a second UV set (can be done automatically in the editor or by hand in a 3D package), correct pivot position for optimal placement, and that the object has the correct number of materials. Choose if you want light map or vertex lighting on the mesh and assign a material. Place the mesh in a level and test out its scale and collision -- there is nothing more frustrating than collision snags for Level Designers!
Path colors and vehicles
Once your level is pathed, hit ‘p’ in the orthographic viewport to see how they connect up. For bots on foot: White paths mean the best connection and bots will cut corners between paths connected with white lines. Green lines are medium wide connections, and blue paths are narrow connections. With blue lines, bots will run directly on that line and if possible will not deviate from that path. For bots in vehicles, the lines mean more: Large vehicles like Goliaths and Paladins will only drive between paths connected by white lines. Medium vehicles like Hellbenders will drive white and green paths and only small vehicles like Mantas and Scavengers will navigate blue paths. If you are having trouble getting bots to navigate your level in vehicles, having not enough white and green paths is likely the culprit.
bBlocked for vehicles
If you are noticing bots trying to drive vehicles in places they should not be trying to take them (like inside buildings or on narrow foot paths) you can easily stop this behavior by selecting the offending paths, opening up the ‘VehicleUsage’ tab in the properties and check bBlockedForVehicles. Conversely, if there are paths you want them to favor with vehicles, you can set them to bPreferredVehiclePath.
Map errors list
This is the list that pops up after you are finished a full rebuild. If possible this list should be empty! These errors are all there for a reason and eliminating them will both make your level run faster and make the bots navigate and play the level better. Don’t ignore it!
From a Level Design standpoint, this is a big part of what makes UT3 so scalable. Meshes and particle emitters can be set to Low, Medium, or High detail setting (you can find this in the properties or in the right-click menu). All actors default to ‘Low’, which means they show up at all levels of detail. Use medium and high settings to have meshes only show up on medium and high detail settings. Be aware that meshes set to High will still be there on Low detail settings, they just won’t render. Thus if they have any collision turned on, they will still collide, even though you can’t see them. In View\Detail Mode in the Editor, you can set the viewports to show what the game looks like at each detail setting.
Typing ‘Stat LD’ at the console while running the game will give you lots of useful stats to help you optimize your level. This shows details of all the major elements related to what is rendering on screen at that moment. There are so many variables that account for frame rate, but a couple good guidelines to start with are as follows: ‘Static Mesh Tris’ will start to be a bottleneck once you are approaching 800,000 polygons and ‘Visible Static Mesh Elements’ (the actual number of static meshes visible) will start to be a bottleneck around 900. Another good thing to try if your level is really chugging and you don’t know why, try Stat LD in a shipping level that most resembles your level and check its numbers to see if any of your numbers are completely out of whack with those.
Cull Distance Volumes
With UE3, occlusion occurs whenever the bounding box of a mesh is completely obscured by terrain, bsp, meshes or any combination of the three. Because of this, cutting down on sight-lines is a good optimization method since anything occluded doesn’t get rendered. But the process of deciding which polygons to occlude can be expensive itself, not to mention the fact that allowing players to fly around in Raptors makes it difficult to cut down on sight-lines. In these cases, Cull Distance volumes come in very handy. Search for CullDistance?
volumes in shipping levels similar to yours to get a good idea of what values will work well. If cull distance volumes overlap, the more aggressive settings of the two will win out, so you can put a smaller cull distance volume with more aggressive settings inside a tightly occluded room even if your whole level is encompassed by a less aggressive cull distance volume. Keep in mind you can still set cull distance volumes on a per-mesh basis if you uncheck bAllowCullDistanceVol in the StaticMeshActor?
\StaticMeshComponent tab. This is handy if you are seeing obvious ‘popping’ with a few meshes when they cull out, but don’t want to have to change the whole cull distance volume settings.