Mapping Tips & Tricks
UnrealEd is a complex tool, running on an old and complex engine. Here are a number of tips and notes to help you getting started. They cover the proper use of the software, some help, advice and technical details which will be helpful in creating, optimizing, cleaning the map, and achieving a balanced level. They do no cover gameplay, distribution or beta-testing.
Brushes and Textures
- By default, the Unreal world is full: you create a map by subtracting matter to create rooms. You can create an additive map where the world is empty, as in engines such as Source, Gldsrc, or the Quake Engines.
- Semi-solids are important tools. They are similar to normal brushes, but to no create BSP cuts on the surfaces of solid and subtracted brushes, as they are another branch of the BSP tree. As a result, they should be used for details and decorations which are not part of the main structure of the map. However, they affect each others in the same way as normal solid brushes affect the whole level: do not use abuse them. They are also very sensible to BSP errors, and cannot be placed in contact with zone portals or a non-solid of any kind - including sheet brushes. In many cases, a semi-solid brush placed in contact with a solid brush will suffer also. The problems arising then can go from a surface of the semi-solid disappearing, or the semi-solid brush turning into a non-solid one, to to a full-blown Hall of Mirrors when the problem is more serious.
- An easy way to select a brush in the 3D Viewport is SHIFT+LMB click on any surface of the brush. You can select several brushes this way by pressing CTRL+SHIFT while clicking on brushes.
- Texture alignement has been facilitated in UnrealEd 2.1 by the addition of two options in the contextual menu: after a RMB click on a surface, select Align Selected: the Align To Wall Around X Axis and Align To Wall Around Y Axis are the vertical equivalents of the Align to Floor projection, which aligns vertical surfaces perfectly.
- Make sure all the textures in your map are properly aligned: nothing looks more ugly and amateurish than a map where coplanar walls with a similar texture are not properly aligned.
- By default, textures wrap: a texture too small to fit the surface it is applied on will be repeated - hence the importance of "looping" textures. This is the normal way things work. New options has been added in the texture browser to prevent the looping: by setting UClampMode and VClampMode to UClamp instead of UWrap, the texture will not be repeated.
- The Texture Browser now features a All textures in use button. This displays all the textures used throughout the map currently opened in UnrealEd.
- Some textures are loaded by the engine but not displayed in the map. Such is the case, for example, of textures applied to surfaces which are entirely hidden (in contact with another piece of geometry, for instance). You can delete such textures by entering Texture Cull in the command prompt of UnrealEd. The log then shows the list of textures and a list of the textures which have been deleted.
- The Environment surface flag creates a reflecting effect on the surface, to simulate a shader.
- You can set Tesselated to true in the builder brush window to have the faces of a cube tesselated. You cannot do this for cylinders, and cylinders do not have all their vertices snapped to the grid. Here is a trick you can use to create tesselated cylinders and prisms snapped to the grid:
- OldUnreal's 227 patch adds a Lighting Only view mode, which allows you to see the geometry with only the lightmaps and no textures. This is a powerful and useful mode.
- You can determine how fine and accurate the lighting and shadows of an area are by modifying the ZoneInfo (or any other adequate Info actor): under ZoneLight, decreasing the values in LightMapDetailLevels will make the lighting of the zone more accurate. Increasing the levels will make the shadows less accurate, mor blocky and generally less pleasant. A finer lightmap means a nicer scene, a bigger filesize and more strain on the computer's resources.
- The previously not-working flag Dirty Shadows can be activated on a surface to add random patches of shadow on a surface, regardless of its lighting.
- You can prevent an actor from casting shadows with the parameter bNoShadowCast, under Display.
- The DistantLight Actor can be used when the maximum lighting distance of a light actor is not enough: it supports a lighting radius superior to 255 without adding several normal lights.
- If using a fog effect, make sure the DistanceFog parameter has a superior value then DistanceFogStarts. Otherwise, the engine will be unable to display fog: Distance Fog is the distance where the fog becomes opaque, and cannot be smaller than DistanceFogStarts, which is the distance at which fogs begins to be visible.
- You can create static-meshes from BSP Geometry by selecting one or several brushes and choosing RMB - Convert - To Static Mesh. Note that surfaces with the flag Fake Backdrop will be eliminated from the mesh, allowing you to control what is and is not part of the final mesh.
- Subtracted brushes will have strange problems when converted to static meshes, as their normals will be upside down. Do not convert subtracted brushes, or structures containing such brushes, into static meshes: start by intersecting the structure.
- You can build an entire map with static meshes, but you will need at least one piece of BSP somewhere (possibly out of view) inside the map. Otherwise, the lighting rebuild will not be possible.
- You can create movers from static meshes by selecting the desired mesh in the mesh browser and RMB clicking on the addmover menu, then choosing one of the options followed by the [Mesh] signal.
- Among other things, you can prevent a static mesh from receiving static shadows by setting bBuildStaticLights to false.
- You can disable the collision of all the surfaces of a mesh bearing a specific texture by going in the texture browser, and opening the mesh's properties: under StaticMesh - Materials, select the desired material and set bNoCollision to true.
- You can speed up the rendering of static meshes by disabling "bUseMeshcollision".
- Static meshes use a special type of lighting: they do not have lightmaps, but the lighting is calculated at each vertex of the mesh, and then extrapolated for the whole triangle. Make sure the vertices are not inside a well if the mesh appears black. If you still have lighting issues after converting brushes into static meshes, exporting and reimporting the mesh as a .obj file may fix the problem.
- Zones now require an Info actor (Zoneinfo, WaterZoneInfo, SkyZoneInfo or other) to be counted as a separate zone. They will otherwise be merged with one of the adjacent zones. If two zones with separate Infos are merged into one, the zone is either not sealed (i.e: the zone portal does not cover all the separation), or a BSP hole affects the portals and prevents the division.
- The new DynamicZoneInfos can be moved or generated on the fly. They do not count towards the maximum limit of 64 zones in a map.
- A problem might arise if a single zone portal covers several opening between two zones (for example, if a single zone portal is used to seal two windows). In this case, delete the portal and replace it by several smaller ones, one by opening.
- You can activate the fake backdrop rendering in both real time preview and in simple preview modes in UnrealEd. By default, the real time preview has the fake backdrop activated, and the simple preview does not. You can activate the fake backdrop in simple preview with the K key.
- Textures projected by a Projector will have a blue tint when combined with distance fog. You can prevent this by using the AlphaBlend style.
- It is a good idea to trim the borders of platforms and walkways. The transition from one texture to another is less jarring this way. Use a trim texture which has a significant contrast with the other nearby textures, so that the edges of the map stand out.
- The ACTOR ALIGN console command can repair brushes with vertex rounding errors. This command snap vertices of any selected brushes to the current grid. This way cylinders/shapes from 2D shape editor and other brushes can be aligned to the grid without problems. Before using this command make sure that selected brushes are transformed permanently. Make sure faces with 4 or more vertices still have all their vertices on the same plane after using this command: otherwise, BSP problems will occur.
- UnrealEd can perform simple math operations in the input fields of the Brush Builders. Prefix the operation with the '=' sign. For instance, enter "=512+128" in the height field (without the double quotes) and build the brush. The final height will be 640.
- Save often and save multiples copies of your map. It is a good idea to save before any rebuild.
- It is best to path the map after the map is finished. Rebuilding the map rebuilds paths, which adds invisible actors used by bots to navigate the map. With successive rebuilds, this can slow down the whole process. A solution is to select all items and NavigationPoints in the map and set them to Last (Order - To Last) before the final rebuild.
- Do not try to fit everything in a single map. Select a theme and stick to it. Many maps are plagued by unfocused design.
- Use music and sounds to bring your map to life. A map without any sound is both unrealistic, boring and feels like it lacks something.
- You can use groups to save time. Assigning a group to several brushes allows you to turn them on and off at will: when turned off, they will not be displayed or rebuild, speeding the rendering, building process and decluttering the screen. You can then turn them back on for the final rebuild.
- An easter egg is always appreciated.
- The traditionnal way to build a map is to first build a rough sketch with no decoration or lighting, then detail the geometry, then add the lighting and finally the items, monsters and AI pathing.
- A lot of textures of the original game are very abstract and can be used for a lof of different things, including things you didn't see in the game. Making a map with the exact same style as one of the stock Unreal maps is dull, and uninteresting. A good way to break away from this is to use a lot of textures that are only scarcely used in the game and using them in ways they were not designed to: The Skaarj.utx texture pack is used a lot at the end of the game, but you can use the ceiling textures on your walls and vice-versa). The change will allow you to be original and creative with old assets.