Making curved or spiral stairs from brushwork in Radiant
Creating spiral or curved stairs using GtkRadiant or QeRadiant is probably one of the most tricky things to try when you’re new to Quake 3 (or ‘BSP’ based) level editing. It needn’t be, and once you get to grips with the basic principles involved you’ll be able to do different types and sizes of staircases.
Each has their own sworn ‘believers’ and ‘Pros’ and ‘Cons’. The following tutorial runs though the process of using the ‘fan method’ for creating spiral stairways as outlined below.
the best way to make spiral stairs ^
Each approach to production has its own inherent problems so the choice as to what to do depends on the engine being used and the tolerance level they have with regards to object construction and 'errors' in precision during compile; there isn't a 'best' method per say, but there is a 'most accurate' in terms of the step size and rotation angles if that's what you need - this is visual accuracy not 'accuracy' in relation to 'clean' brushwork how that relates to compiling a level.
So, there are a couple of generally accepted methods used by level designers to create curved or spiral stairs using the Radiant editor (GTK Radiant or QeRadiant) for editing Quake 3 powered games;
Patch mesh curve template
This method makes use of various forms of patch mesh end caps, bevels or curved mesh sections as a cutting template; the patch mesh sub divisions (the red lines you see in the editor) act as guidelines along which you cut or draw out a brush block. [link:forum post]
Brush cylinder template
Similar to the above but makes use of a 'brush cylinder' of a fixed number of sides ("8" sided cylinder brush, "16" sided cylinder brush etc.) as a template guide against which brushes can be shaped or from which steps can be cut, each step is made 'per side'.
Angled crosscut block
This process relies on making equally spaced cuts around the parameter of a brush, cut from one side across a brush to it's opposite; each subsequent cut (step) covers the same grid distance between each segment.
'Fan blade' rotation
Makes use of a 'mirrored' brush prefab object that's duplicated and then rotated a certain number of degrees per step unit.
The patch mesh, brush cylinder and crosscut processes all result in steps that are, to varying degrees, of uneven sizes because of the way or what they are constructed from; more so the patch mesh and crosscut method due to the way the apex of a curve (patch) and the grid divisions (crosscut) decrease depending on angle and distance between clipping points - the shallower the angle, the less width the brush has along the 'guide' edge of the brush - the result are steps that are smaller towards the centre of the stairway's rotation than those on the outer edge which are aligned to the grid.
The 'fan blade' method creates accurate steps of uniform size because it makes use of duplicate copies of each step. However, in doing so it creates something called 'non-axial brushwork' - brushwork not 'snapped' or 'aligned' to the grid - that can cause some potentially serious problems because of the way the compile process handles the accuracy of the data used to build a level (polygons and vertexes). Where ever possible brushwork should be built 'on grid' and not 'off grid'.
Also bear in mind that the finished stair and any other stairs should be set as 'detail flagged' brushwork (in Radiant, select brushwork >> right click >> set detail).
Making the spiral stairs first step template ^
The first thing to do is create a base 'template' from which the spiral staircase will be constructed; it's highly recommended that you texture the brushwork before you begin manipulating the objects because textures on brushes that are at an acute angle to the grid ('none axial') are very tricky and time consuming to align, so much so in fact that should you make a mistake it's often quicker to delete the stairs and rebuild.
Design note: Keep an eye on visible texture pattern repeat - this is where the same visual feature or mark on a texture repeats itself noticeably as you go up the steps. This can be countered by offsetting the textures on different steps; this can be done on the steps themselves before they're rotated into place.
Step one - initial brushwork ^
Depending on how visually interesting you want the stairs to look you can either use a single block covered in one texture. Or it can be broken down into a number of composite brushes each using a different texture depending on what you're trying to do.
Draw out a block and cover it in 'caulk' (draw out or cut extra brushwork blocks depending on the visual appearance the overall step needs).
In the example below, the step that's going to be used for the stairs has been textured with a stone 'block' for the main area and a secondary smaller 'block' for the edge. To create the edge activate the clipper tool, "X", and place two markers by clicking the LMB to mark a cut along the leading side of the brush to a depth you're happy with. Shift+Enter to confirm and keep both sections.
Alternatively, draw out a smaller brush along the leading edge of the step, caulk and then texture the top and front face.
Clipping or drawing out the step edge block
Step two - clipping ^
The clipper tool is a useful feature of Radiant that allows speedy brush manipulation by cutting blocks into sections rather than individual block placement. It's also a useful 'cross cut' tool allowing shapes to be created that otherwise can't using the default brush 'drawing' approach.
Using the clipper tool (by pressing 'X'), place 2 points at each corner of the brush to create a cut line diagonally across the brush.
Press 'Ctrl+Enter' to toggle which side of the cut line is active.
Press 'Shift+Enter' to confirm the cut and keep both sections.
You should end up with something similar to the image below;
The brushwork 'base unit' that forms the template from which the spiral stairs will be made
Step three - duplication ^
Once you've got a textured section, in order for this method to work correctly it needs duplicating. The reason for this is that later on we'll be using the 'rotate' tool which turns selected objects around their relative centre of mass; in other words, rotating the section on its own would rotate the object around it's current centre of mass and not the point (on the right hand side) as we need.
Duplicate the object - 'Ctrl+C'/'Ctrl+V' to copy/paste
or press the 'Space Bar' to create a clone of the brushwork.
Once create leave the object selected and click on the 'Z axis' rotation button on Radiant's main application tool bar twice to rotate the selected object through 180°.
You may need to reposition the brushes slightly once done, by the end of which you should have two sections of brushwork position similar to the image below.
Base unit is duplicated and rotated 180°
Step four - func_group ^
The easiest way to manipulate a number of brushes is to group them together into a func_group; this also prevents the brush distortion that sometimes happens when trying to manipulate multiple objects.
Select all the brushes that are needed for the grouping.
Right click and select "func » function_group".
Base unit is func_grouped
Step five - func_group duplication ^
Once the prefab is func_grouped it's now simply a matter of duplicating the original and then using the duplicates as further step units for the full spiral stairway. To duplicate the original prefab;
With the original selected press the 'Space Bar' - be careful to avoid holding the Space Bar down too long as it will keep duplicating so long as it's pressed.
Select the original and use 'Ctrl+C' and 'Ctrl+V' to 'copy' and 'paste' the object in place.
Design note: Before you rotate the prefab you may want to 'offset' the textures slightly to alleviate pattern repeat on the final steps. If left 'as is' you'll see a noticeable pattern travel up the steps which can be visually distracting.
Step six - arbitrary rotation ^
Radiant only has 90° rotation options by default so to use smaller angles of rotation you have to use the 'Arbitrary Rotation' option from the 'selection' menu. You can do the following 'by eye' or work out some math to get the initial rotational angle you need 360 (full circle) divided by the number of steps you want to have in the spiral. Doing the latter means that the brush prefab may need adjusting to you don't get any gaps you didn't anticipate between the steps.
'Alt+Shift+LMB' to select the prefab ('Shift+LMB' will selected individual parts of the group) and duplicate it. Leave it selected (it you 'Shift' duplicated you'll need to reposition the prefab so it sits directly on top of the original).
In the main editor menu find and select 'Selection » Rotate » Arbitrary Rotation' to open up the dialogue box.
In the dialogue box type a value ('15' was used in this example) and press 'Apply'; the selected brush prefab will rotate by that amount. Press OK (or 'Cancel') to close the pop up box.
In order to get this to work correctly and to make sure the brushwork prefab doesn't distort too much, make sure you only use the original selected prefab from which to do the rotations, incrementing the angle with each iteration of the prefab; 15, 30, 45, 60, and 75.
Base unit rotated using 'arbitrary rotation'
Top down view showing the alignment of the brush groups
Step seven - stacking ^
Once the prefabs needed for the steps have been rotated it will result in a quarter turn that allows you to then duplicate the whole lot and have the bottom step fit with the top of the previous section when stacking the stairs.
Before doing that the individual steps need to be stacked on top of each other.
If you haven't got the 'Z' axis view open (it's usually locked onto the left hand side of the main grid view) then use 'Ctrl+TAB' to toggle through the editors grid views to display either 'front' or 'side' view; this is to allow the manipulation along the 'Z' axis (up/down).
Select a prefab and move it upwards by the required depth. For optimum performance do not raise the steps above 16 units (one of the smaller blocks when using Radiant's default grid depth) if players or Bots/NPCs need to navigate the area in which the steps will be used.
Alt+Shift+LM will select and prefab unit.
Alt+Shift+LM hold & drag will 'paint select' multiple units.
Once you've rotated each section you should end up with a stepped 'fan'
Duplication and then individual rotation of each group by the same number angle of rotation - 15° in this particular example
Step eight - repositioning ^
Leaving the stacked steps in their default position after rotating the individual units can be a little tricky to work with, so what can be done now is to select one half of the stack and rotate it so that it sits over the unselected half of the prefab. Once there it simply needs to be moved upwards (or downwards) so the lower step of the upper half sits on the top step of the lower half.
Select all, un-group the objects ("RMB » un-group entity") and then regroup into a func_group to get a usable 180° turn and you're done. This should then produce a prefab that will 'lock' onto itself when further stacked upwards.
Design note: When duplicating and rotating the units in step six above, you may have noticed that a full 180° isn't required. The reason for this is to allow the steps to 'lock' onto each other as mentioned above where each completed step unit can sit on top of itself without the need to select and delete a stage.
Rotation one half of the grouping to create a full 180° spiral staircase
Making a spiral stairs video walk through ^
Watch the following video walk through of the process of creating a set of spiral stairs before or after reading the text and image tutorial above as it will show the process as described above in 'real time'.
Spiral Staircase video walk through