Portals allow a map to have a geometry not normally possible in a "2.5D" engine such as Doom. A few ports have implemented portals. A surface, such as a wall, a floor, or a ceiling, becomes a "window" allowing to see another part of the level. The difference between a portal and a camera texture is that the angle and pitch of the viewpoint always match that of the player looking through the portal. In a way, the sky in Doom can be thought of as a type of floor/ceiling portal, since the ceiling or floor does not display its flat in the normal manner, but instead shows a projected wall texture from a fixed viewpoint.
There are several types of portals:
- Sight-only portal
- When looking at a portal surface, instead of seeing the surface, the player sees another part of the map. However, the portal remains impossible to pass through; and no-clipping through it shows that there is actually nothing.
- Pass-through portal
- Passing through such a portal is possible and allows to seamlessly get to the associated area. Also known as a linked portal.
- Wall portal
- The portal's surface is on a wall.
- Floor or ceiling portal
- The portal's surface is on a floor or ceiling. Often used for skyboxes.
- Fixed-point portal
- The view from the portal is always from the same point, usually chosen by a "camera" object in the reference sector. Skyboxes usually are of this type.
- Moving-point portal
- The portal's camera moves along with the player. This allows to create "room-over-room" effect, however the mapper needs to make sure that the camera will always be at a valid position for any point where the portal surface can be seen; otherwise a hall of mirrors effect will appear as if the player had noclipped into the void.
For more information on what types of portals are supported, how they are implemented, and the limitations they have; refer to the documentation of the source port used.
The phrase portal engine is or portal renderer is sometimes used when discussing approaches to software rendering. This represents an alternative to the BSP-based approach in the Doom rendering engine. In a portal engine, every two-sided line is effectively a portal between the two sectors it connects, and the renderer will recursively process the content of each sector in view, this approach has the benefit that it requires very little work to support "non-Euclidian" architecture as the renderer does not need for the sectors to actually touch. The Build engine, used notably in Duke Nukem 3D, is an example of a portal renderer. Other examples include the Jedi engine used in Star Wars: Dark Forces, and the engine developed for Marathon.
Original intent for Doom
BSP hack portals
By hacking the BSP structure of a level, it is possible to create visual wall portals. This effect, called a linguortal after its pioneer Andrew Stine (Linguica), can work with vanilla Doom though it may be broken by source ports depending on changes brought to the renderer. However, since displaying the walls of the projected area requires hacking the segs to change their position in the map to where they will be shown instead of where they actually are, the effect should only be used for viewing areas that cannot be visited.
Source ports with portals
- Eternity Engine — see portals and linked portals at the Eternity Engine wiki
- ZDoom and derivatives — see skybox, stacked sectors and line portals at the ZDoom wiki.
- Vavoom — see skybox and stacked sectors at the ZDoom wiki
- Craddock, David (4 December 2017). "Rocket Jump: Quake and the Golden Age of First-Person Shooters. Chapter 14: Arenas." Shacknews. Retrieved 12 December 2019.