Portal Engine
 
 

           One of the biggest problems in 3D viewing is

           define what scene elements hide each others.

           To better understand the problem think in a scene
 
           composed by polygons disposed in random positions.
 
           You can´t draw all of them in any order because a closer
 
           polygon can be covered by a polygon that are behind it.

           The magic of make only what is in front of the viewer
 
           visible is known as hiden surface removal.

           To make it exist many technics: Z-buffer, deph-sort,
 
           BSP-Tree sort and others.
 
           The algorithm used in this case is called portal clip.

           To understand this algorithm imagine the viewer
 
           inside a convex scene, the viewer is rounded by

           polygons. This polygons do not overlap each others in any
 
           point of view where viewer can be.
 
           The polygons in this scenery can be drawn

           in any order because they never overlap each orders.

           Portal engines use this principle to draw the scenery.

           The scenery unit is known as "sector": a convex set of polygons
 
           where they never overlap (if the viewer is inside them).

           There is a problem: the sectors must be very simple

           because they must be convex. To create more complex scenes

           is used portal clip: some of the sector polygons are passages
 
           to other sectors. This polygons is known as "portals": polygons
 
           (normaly invisible) that work as clip ares to adjacent sectors.
 

           The basic view algorithm is: draw the sector where the viewer
 
           is, if a portal is visible from viewer point of view, call
 
           recursively the sector draw algorithm - drawing the

           sector linked by the portal. The sector visible througth a
 
           portal polygon is a "destin sector" and their polygons must
 
           be clipped acording the portal.

           If more portals are visible from the destin sector

           call again the sector draw algorithm making the

           apropriate clip. The scene is complete when all visible
 
           portal polygons have their destin sectors drawn.
 

           Portal clip can be thinked as an evolution of BSP-tree

           sort, as BSP-tree sort is an evolution of Z-buffer or
 
           deph-sort. In Z-buffer to make hiden surface removal is
 
           needed test each pixel - the scenery unit is a pixel.
 
           In BSP-tree sort hiden surface removal is performed
 
           drawing polygons in the right other acording the tree,
 
           the scenery unit is a polygon. In portal engines the

           hiden surface removal is made by portal clip througth a
 
           convex set of polygons - the scenery unit is a sector.

           Sure, think if a view method is better as other because
 
           the scenery units are biggest between each other is
 
           dangerous. Big scenery units mean scene design limitations,
 
           but normaly performace increase, too.

 
           Some problems of portal approach are: a very complex scene
 
           with many objects would be hard to be modeled, the scene

           must be indoor and the objects modeled with portals and
 
           sectors must be static. All this limitations can be
 
           atenuated with some additions. Usualy portal engines are

           used to visualize the static scene objects like rooms, walls,
 
           pillars. More complex or moveble objects like stairs,
 
           chairs and animals would be visualized using an other

           method: Z-buffer, BSP-tree sort, and so on.
 
 
           Advantajes of portal redering: the implementation is relatively

           easy, big scene clusters are complete clipped very fast;

           transform universe reference system to camera reference

           system must be made only in visible sectors and their inside
 
           objects - with some precautions the scene can be hude without

           performace loose. Many tests like viewer collision detection

           can be optimized - made only between viewer and polygons sector
 
           where it be.


Up 1