Portals are a powerful mapping feature which allow a variety of rendering effects; they allow an architectural surface to be used as a "window" which can display something besides the texture that would normally cover the surface. Anything from simple fixed plane, to another area of the map can be rendered within these surfaces via the same architecture.
'Portal window' refers to the area of the screen that a portal occupies. For example:
This is a simple map with no portal surfaces, and no portal window.
This is the same simple map with a fixed plane portal applied to the ceiling of the sector. The portal window is outlined in white.
This is the map, but the same plane portal is applied to the ceiling and the far wall. The two surfaces display the same portal, and as such, they share a common portal window (also outlined in white).
All surfaces in a scene that have a common portal will share the same portal window.
A sector off of the main map area which is used by line or sector specials as a model, or as housing for lines which need to be a specific size.
Fixed Plane Portals
Fixed plane portals (as the name implies) render a single, fixed plane into the portal window. The plane is always rendered a the same height and texture offset even when the camera changes it's position.
- 283 Apply fixed plane portal to the ceilings of tagged sectors
- 284 Apply fixed plane portal to the floors of tagged sectors
- 285 Apply fixed plane portal to the floors and ceilings of tagged sectors
The front side sector of the special line is used to generate the plane. The ceiling texture, sector light, and ceiling texture scrolling are all used as attributes for the rendered fixed plane. The absolute height of the ceiling is used as the height of the plane. That is, if the special line front sector has a ceiling height of 64, the plane will always render at 64 units above the camera height. If the ceiling height is 128, the plane will always render at 128 units above the camera height, and so on.
The left image shows a simple map with a small sector off to the side of the rest of the map. One of the lines in this sector has been given a 283 special which will apply a fixed play portal to all tagged sector ceilings. The height of the dummy sector is set to 128, the blue water texture FWATER1 is the ceiling texture, there is no scrolling applied to the ceiling, and the ceiling height is 128.
The right image shows what the map looks like in Eternity. Notice the rendered height of the plane is the same as a ceiling 128 units above eye level.
The line special 289 can be used to apply fixed plane portals to walls as well. The special will find a portal with the same line tag and will display that portal on the surface of the line.
Here is the map from above:
The highlighted wall has been given a special of 289 and tagged to the portal line. In-game, the tagged wall now displays the portal. Note: The 289 line special works for all portal types.
Horizon Plane Portals
Horizon portals display two planes which appear to go on forever until they meet in the middle (horizon). The plane coordinates are not fixed, and will appear to move with the camera. This can be used to achieve the illusion that water or grass goes off far into the distance without having to make overly large sectors.
- 286 Apply horizon portal to the ceilings of tagged sectors
- 287 Apply horizon portal to the floors of tagged sectors
- 288 Apply horizon portal to the floors and ceilings of tagged sectors
Like the fixed plane portals, the front sector of the special line is used. The top plane uses the front sector ceiling (height, texture, scrolling, light) as its model, and the bottom plane uses the front sector floor (height, texture, scrolling, light) as its model. Example:
This map has a horizon portal applied to the ceiling and wall of the sector where the player starts. Both sectors have a floor height of 0, and a ceiling height of 72, but the floor texture in the dummy sector is set to a grass texture, and the ceiling texture is set to FSKY_1. This produces a field of grass which goes on into the horizon. If the camera moves up or down, the floor plane will appear to move along with it. If the ceiling plane had a regular texture on it, it would also move with the camera and appear to go off into the distance.
Note: If the camera ever travels below the floor height of a horizon portal, the bottom plane will appear to move in the opposite direction of the camera movement until the camera is once again above the floor height.
Skybox portals draw another part of the map into the portal window. The scene in the portal window will use the angle from the player camera, but will render the scene from the location of the skybox camera. This helps create the illusion that the contents of the skybox actually surround the map and are much larger in size than they really are.
- 290 Apply skybox portals to the ceilings of tagged sectors
- 291 Apply skybox portals to the floors of tagged sectors
- 292 Apply skybox portals to the floors and ceilings of tagged sectors
The front sector of the special line becomes the "skybox sector". This is not the only sector that gets rendered, but this sector is where Eternity will look for the skybox camera object which will be the point the skybox is rendered from.
This map has a skybox portal applied to the ceiling and wall of the sector with the player start. The "Skybox sector" is the small rectangular one which contains the EESkyboxCamera object. The camera object always spawns on the floor, so the skybox sector has been made a glass floor 48 units above the surrounding area so the camera will be above the floor of the box.
The first image is the view in-game when the player no-clips into the sky box. The second image is the view from inside the main map area with the skybox portal applied. No matter where the player moves inside the map area, the skybox portal will always render from the location of the camera inside the skybox, however, the skybox is rendered from the angle the player is looking. ExtraData also provides a means of assigning a z-height to objects in maps. This could also be used to raise the skybox camera off the floor. If the skybox camera is left on the floor, the floor plane will not render and result in HOM.
The skybox is not restricted to simple boxes. Any map architecture the skybox camera can see can be part of a skybox.
(This article is currently a work in progress)