home *** CD-ROM | disk | FTP | other *** search
- [Included with permission]
-
- MANAGING TEXTURES AND THE "UNPEGGED" ATTRIBUTE
- ----------------------------------------------
-
- Scott Amspoker (scott@basis.com)
-
- There have been recurring questions regarding the use of "pegged" and
- "unpegged" textures on walls as well as the tile rendering of textures
- by the Doom engine. This is not just a beginner's problem. Even the
- more sophisticated and popular PWADs submitted by netters have the
- occasional texturing oversight. Here is an explanation of how textures
- are rendered by Doom. The bulk of the following text deals with wall
- textures in particular.
-
- As you have already discovered, every section of wall in Doom has three
- rectangular areas that must be filled in by the Doom engine - the
- upper texture, the normal texture, and the lower texture. Each area may
- have a different texture map assigned to it or no texture at all
- inidicated by a texture name of "-". Any given wall can have all three
- areas exposed to the player but most walls will have one of more of these
- areas out of view. When choosing texture maps, the PWAD creator must
- consider how Doom will use that texture map to fill in the rectangular wall
- areas and understand how Doom's default behaviour can be changed via the
- "unpegged" attributes.
-
- Doom fills in each wall area by tiling its texture map horizontally
- and vertically until the entire area is covered. The texture map
- may be truncated horizontally and/or vertically if the wall area
- dimensions are not an even multiple of the dimensions of the texture
- map.
-
- In all cases, texture maps are placed on the horizonal axis beginning
- with the left edge of the wall and working towards the right. The
- placement of textures on the vertical axis is more complicated and differs
- depending on various conditions described below.
-
- Some of the texture maps found in the standard DOOM.WAD file are have
- a homogeneous quality to them. The effects of tiling/truncating
- them are not visible and the PWAD designer need not worry about
- unusual wall dimensions.
-
- On the other hand, some texture maps have distinct markings that won't
- appear correct when tiled/truncated without some intervention by the
- PWAD designer. It is desirable that the texture maps of adjoining
- wall segments line up with each other to create a seamless composite
- wall. Sometimes, deliberate texture mis-alignment is used as a hint
- to the player of a secret door. NOTE: some texture maps that
- have a height other than 64 or 128 (such as a stair riser) do not
- appear to tile very well. For some reason you might end up with
- small pink cracks in the wall texture. While this can have a really
- cool effect, treat it as a bug.
-
- Most texture maps found in the standard WAD are 128 units high. For
- most of the following examples, I will use the following texture map:
-
- --------------------
- |TTTTTTTTTTTTTTTTTTTT|
- | |
- | |
- | |
- | |
- | |
- | |
- | |
- | |
- |BBBBBBBBBBBBBBBBBBBB|
- --------------------
-
- For reference, I've labeled the top of the map with T's and the bottom with
- B's.
-
-
- THE NORMAL TEXTURE
- ------------------
-
- Single-sided linedefs only require that the normal texture be defined. In
- this case the normal texture is the entire area of wall you see from floor
- to ceiling. By default, Doom will fill the normal texture with the assigned
- texture map starting with the top and working down. If the wall is
- somewhat taller than the texture map, it will look like this:
-
- --------------------
- |TTTTTTTTTTTTTTTTTTTT|
- | |
- | |
- | |
- | |
- | |
- | |
- | |
- | |
- |BBBBBBBBBBBBBBBBBBBB|
- |TTTTTTTTTTTTTTTTTTTT|
- | |
- | |
- --------------------
-
- If the wall is shorter than the texture, the result would be:
-
- --------------------
- |TTTTTTTTTTTTTTTTTTTT|
- | |
- | |
- | |
- | |
- --------------------
-
- Notice that the top of the texture is always at the top of the wall.
- The texture is rendered working down the wall towards the floor and
- repeated if necessary.
-
- By setting the "lower unpegged" bit in the linedef, the rendering of the
- normal texture will be performed from the bottom up instead of the top
- down. (The "lower unpegged" bit is normally associated with the lower
- texture but also has an effect on the normal texture.) Our tall wall
- would now look like this:
-
- --------------------
- | |
- | |
- |BBBBBBBBBBBBBBBBBBBB|
- |TTTTTTTTTTTTTTTTTTTT|
- | |
- | |
- | |
- | |
- | |
- | |
- | |
- | |
- |BBBBBBBBBBBBBBBBBBBB|
- --------------------
-
- Our short wall would be:
-
- --------------------
- | |
- | |
- | |
- | |
- |BBBBBBBBBBBBBBBBBBBB|
- --------------------
-
- Notice that the bottom of the texture map begins at the bottom of the wall
- and works up.
-
-
- THE UPPER AND LOWER TEXTURES
- ----------------------------
-
- A linedef may have sectors on both sides of the line. In such a case, both
- sides of the linedef have wall definitions (sidedefs). If the "2-sided"
- attribute is set then Doom considers each of the two sectors to
- be exposed to the other sector. When a 2-sided line is used, the PWAD
- designer must always consider what they player should see when facing the
- line from both sides. A 2-sided line is most often used as a see-through
- connection between two sectors (such doorways, windows, stairs, and
- platforms). Therefore, the normal texture on both sides would typically
- be invisible ("-"). However, since the two sectors could have different
- floor and ceiling heights, the dimensions of wall space on either side
- of the line could be different. The "upper texture" is used to handle
- the difference (if any) between adjacent ceilings. The "lower texture"
- is similarly used to handle the different floor elevations (if any).
-
- In a nutshell, the normal texture is the area of wall that both sectors
- have in common. This would be the portion of the wall above the higher
- of the two floors and below the lower of the two ceilings. (Both sides of
- the line will normal textures.) The upper texture is the area of the
- wall between the two ceiling heights. This area is visible only
- on the side of the line with the higher ceiling. The lower texture
- is the wall space between the two floor heights and is only visible
- on the side with the lower floor.
-
- NOTE: If the ceiling texture of both sectors is F_SKY1 then the upper
- texture between them will also be invisible regardless of its assigned
- texture map. See the courtyard in E1M1 for an example of this.
-
-
- By default, the upper texture is tiled from the bottom up and the lower
- texture is tiled from the top down.
-
- Consider a window. The area above the window opening is the upper texture.
- The window opening itself is the normal texture. The area below the
- window opening is the lower texture. Let's use the following wall
- segment with our example texture map assigned to upper and lower areas:
-
- --------------------
- | |
- | | <- upper texture
- |BBBBBBBBBBBBBBBBBBBB|
- |--------------------|
- | | <- normal texture ("-")
- | |
- |--------------------|
- |TTTTTTTTTTTTTTTTTTTT|
- | | <- lower texture
- | |
- --------------------
-
- Notice how the bottom of the texture map rests on the bottom of the
- upper area whereas the lower area is just the opposite. If this wall
- section were placed adjacent to a regular wall panel, the texture
- pattern would not line up:
-
- --------------- --------------------
- |TTTTTTTTTTTTTTT| |
- | | |
- | |BBBBBBBBBBBBBBBBBBBB|
- | |--------------------|
- | | |
- | | |
- | |--------------------|
- | |TTTTTTTTTTTTTTTTTTTT|
- | | |
- |BBBBBBBBBBBBBBB| |
- --------------- --------------------
-
-
- By setting the "upper unpegged" attribute, the upper texture is rendered
- from the top down similar to a normal texture:
-
- --------------- --------------------
- |TTTTTTTTTTTTTTT|TTTTTTTTTTTTTTTTTTTT|
- | | |
- | | |
- | |--------------------|
- | | |
- | | |
- | |--------------------|
- | |TTTTTTTTTTTTTTTTTTTT|
- | | |
- |BBBBBBBBBBBBBBB| |
- --------------- --------------------
-
- Likewise, by setting the "lower unpegged" attribute, the lower texture
- will appear rendered from the bottom up:
-
- --------------- --------------------
- |TTTTTTTTTTTTTTT|TTTTTTTTTTTTTTTTTTTT|
- | | |
- | | |
- | |--------------------|
- | | |
- | | |
- | |--------------------|
- | | |
- | | |
- |BBBBBBBBBBBBBBB|BBBBBBBBBBBBBBBBBBBB|
- --------------- --------------------
-
- Actually, an unpegged lower texture is a tad more complicated than this.
- The bottom starting point on the texture map is not necessarily the
- bottom of the map. Instead, Doom choses the starting point based on
- the distance between the ceiling and the floor. The end result is that
- the bottom of the lower texture will line up with the bottom of the
- adjacent wall. If the above example were shorter, both wall sections
- would still align:
-
- --------------- --------------------
- |TTTTTTTTTTTTTTT|TTTTTTTTTTTTTTTTTTTT|
- | | |
- | | |
- | |--------------------|
- | | |
- | | |
- | |--------------------|
- | | | <- bottom row cut off both walls
- --------------- --------------------
-
- As you can see, unpegged upper and lower textures are used for seamless
- windows.
-
- NOTE: As mentioned earlier, the effect of "lower unpegged" on normal textures
- really does cause a bottom-up rendering of the texture. If the "lower
- unpegged" attribute were set for the adjacent wall in the above example,
- it would look like this:
-
- --------------- --------------------
- | |TTTTTTTTTTTTTTTTTTTT|
- | | |
- | | |
- | |--------------------|
- | | |
- | | |
- | |--------------------|
- |BBBBBBBBBBBBBBB| | <- bottom rows don't match
- --------------- --------------------
-
-
- APPLICATIONS OF UNPEGGED ATTRIBUTES
- -----------------------------------
-
- The following are common situations where an understanding of pegged vs.
- unpegged textures is important:
-
- Windows and fixed doorways:
- As shown in the above example, use unpegged upper and lower textures
- to ensure alignment with surrounding wall sections.
-
-
- Doors:
- Doors are usually implemented as a sector where the ceiling height
- is the same as the floor height. The player will normally see only
- the upper texture which will contain the image of the door. When the
- door "opens", the ceiling of the door sector rises. The default
- pegged mode is used to let the door image rise with the ceiling since
- the upper texture is based at the bottom edge of the rising ceiling.
-
- The walls making up the inside tracks of the door are defined as
- normal textures since they are going to be on single-sided lines.
- Since normal textures are rendered from the ceiling down, the
- inside tracks will rise as the door (ceiling) rises. This is usually
- not the desired behaviour. By setting the "lower unpegged" bit
- for the inside tracks, they will remain stationary while the
- door opens since they will be based on the non-changing floor.
-
- The rising hallway on the other side of the acid pit in E1M3
- is a classic example of the side walls remaining pegged so that
- they rise with the ceiling.
-
-
- Secret doors:
- Secret doors behave the same way as regular doors but add a little
- more complexity to texture decisions if the door is to blend in
- with the surrounding wall. Normally the door is closed
- so that the player only sees the upper texture from floor to
- ceiling. Since the upper texture is rendered from the bottom
- up, the bottom of the door (where it meets the floor) will
- show the bottom of the texture map. If the room has a non-standard
- ceiling clearance, the adjacent wall panel won't meet the floor
- the same way as the closed door. Rather than make the door
- match the adjacent walls, you can make the adjacent walls match
- the door by unpegging their lower texures (which re-aligns
- the normal textures) so that everybody builds from the floor up.
-
- The "secret" attribute may be set so that the door doesn't show
- up on the map. However, this will only work if the floor/ceiling
- height of the closed door sector is less than or equal to the floor
- height of the room sector. In other words, if the doorway is a
- step up from the room, the map will give away the secret by showing
- the lines immediately beyond the door even before the door is first
- opened.
-
-
- Switches and other wall decorations:
- The standard textures containing wall switches are 128 units high.
- (This also includes decorations such as "POISON" signs and
- gargoyles). When using these textures on a wall that is shorter, the
- switch will move down towards the floor since the normal wall
- texture is rendered from the ceiling down. To keep the switch at
- a reasonable height on the wall, set the "lower unpegged" bit.
- The wall will build up from the floor and the switch will always
- be at a proper height regardless of where the ceiling is.
-
-
-
- MANUAL ADJUSTMENT OF TEXTURE OFFSETS
- ------------------------------------
-
- There are situations where manipulation of the "unpegged" bits
- will fail to create the desired alignment of wall sections.
- Since the "unpegged" bits only affect the vertical rendering
- of texture maps, they will not help when a horizontal adjustment
- is needed. Horizontal adjustments might be necessary when wall
- sections with non-standard widths are combined to create a
- single wall. If the texture map style creates a noticable seam,
- then you may adjust the horizontal and vertical offsets for
- each wall segment. The "X offset" parameter tells Doom how
- far horizontally into the texture map to begin rendering. A positive
- value would appear to shift the texture to the left. Likewise,
- the "Y offset" specifies how far vertically (from the top) to
- begin rendering. A positive value would appear to shift the
- texture upward. All three textures (upper, lower, and normal)
- are affected by these values.
-
- At first glance it might appear that these offets are troublesome
- to determine. In actual practice, it is usually easy to determine
- offsets for any given situation.
-
- Y offsets are the most common since they are necessary to make things
- appear aligned horizontally (by shifting a texture up and down,
- you affect the alignment of horizontal features). Generally,
- there are 3 values to consider when setting the Y offset:
-
- 1) The ceiling height of the current sector.
- 2) The ceiling height of a relevant adjoining sector.
- 3) The height of the texture map.
-
- Normally, the desired Y offset will turn out to be the difference
- between any 2 of these values. It is also useful to remember that
- an offset can be negative. For example instead of an offset of 100
- into a 128-unit texture, an offset of -28 will do the same thing.
- (There's also a good chance that the "28" was easier to determine from
- the circumstances.)
-
- The X offset is less common and is most often used to center textures
- on wall segments that are not the same width as the texture. This
- happens when creating narrow doorways or placing switches and other
- decorations on short wall segments. In such cases, simply subtract
- the wall length from the texture length and set the X offset to
- half that value.
-
- A less common situation is when textures for several contiguous wall
- segments must appear as one wall. Most Doom textures would still appear
- just fine in such situations if the X offset were ignored. However,
- a few textures (such as computer panels) would look sloppy without
- carefully setting the X offsets. In such cases, the X offset for
- a wall would be the sum of the X offset and length of the preceeding
- wall (to the left). If the offset gets too large then wrap it around
- to the negative and continue.
-
-
- FLOORS AND CEILINGS
- -------------------
-
- The textures used for floors and ceilings are all 64 x 64 units. Unlike
- wall textures, floor and ceiling textures are aligned and oriented with
- respect to the underlying map coordinate grid. Since these textures
- are tiled globally, they will always create seamless transitions from
- one sector to the next (assuming the adjoining sector has similar
- floor/ceiling textures).
-
- Some floor/ceiling textures have specific markings on them that are
- important. For example, some ceiling textures have a grid of lights.
- To ensure that the ceiling lights in a sector tile correctly, not only
- must the sector size be a proper multiple of a single light, but the
- sector itself must be placed on the map at an appropriate grid line.
-
- A transporter pad has a special design. In order for the image
- on the transporter pad to appear correct, the pad must be aligned on
- a 64 x 64 map grid.
-
- There are some special stair step textures (STEP1 and STEP2). These could
- be used for the top surface of each stair. If you wish to use these textures
- for your stairs, make sure you pick the texure with the proper north/south or
- east/west orientation and snap your stairs to a 64-unit width and a
- 32-unit depth.
-