Matthias Wagner und Michael Henze
RenderFMI was developed to visualize the FMI building in realtime using newest culling techniques. It features many high-polygon objects which need to be culled efficiently to allow realtime usage.
Update: RenderFMI has been updated to include high quality shading and lighting effects as diploma thesis. New screenshots are available.
FMI Building Model
We used a Maya model of the FMI building as source data. In order for our culling algorithms to work, it was necessary to regroup any geometry hierarchically. That way, a room is parent of any geometry, including walls, that are inside this room. Portals are also specified per-room inside Maya. They use a special name syntax so that we can parse them later on. Floor planes and room boxes, which are both used for finding out the room the camera is inside, are encoded in a similar way. The Maya model is saved in OpenInventor format and then imported using an helper tool called ivimport into the .fmi format.
Importing an IV file
ivimport is used to import IV files into the FMI format. Each FMI file holds several rooms which are linked together by portals that can be in each room. The objects in each room, except dynamic objects, are saved inside an kd tree. As ivimport is a preprocessing step, many expensive optimizations can be turned on to allow faster rendering of the generated FMI file.
Rendering the FMI file
The generated FMI file can then be rendered by RenderFMI. First off, a list of rooms which can be seen from the room the camera is in is built. For each room this list contains a list of portals the room is visible through. Then, each room's kd tree is rendered front-to-back using frustum and portal culling. Additionally, we use the ARB extension GL_ARB_occlusion_query to further cull kd nodes that are completely hidden by objects in the front.
In above screenshots, the right window shows which nodes of the kd tree have actually been rendered. The red bar at the bottom represents the approximate time spent with OpenGL calls (except occlusion queries), the green bar the time spent with occlusion queries and the whole bar the time spent for one frame.
Dynamic objects and doors, walk mode
RenderFMI also supports dynamic objects, like for example doors. Some of the doors can be opened by clicking on them, as you can see in the video. Those dynamic objects are not part of the kd tree, but are directly attached to a room. A walk mode with simple collision detection is supported.
J. Bittner, M. Wimmer, H. Piringer, W. Purgathofer (TU Wien)
Coherent Hierarchical Culling: Hardware Occlusion Queries Made Useful
Computer Graphics Forum, 23(3):615-624, September 2004.
XVid [24 MB]