A Survey on Collision Detection Techniques for Virtual Environments Mauro Figueiredo1,2, Luis Marcelino1, Terrence Fernando1 1
Centre for Virtual Environments, University of Salford University Road, Salford, UK 2
Escola Superior Tecnologia, Universidade do Algarve Faro Portugal
[email protected], {L.Marcelino, T.Fernando}@salford.ac.uk
Abstract. Collision detection is an important component of many applications in computer graphics applications. In particular, it is a critical question for virtual environments applications, where real time performance is required to provide the feeling of being immerse in a environment that looks and is interactive like a real one. In this paper, we look into current approaches for collision detection that can be used for real time interactive virtual environments where the trajectories of moving objects are not predefined. We also present a taxonomy for classifying different collision detection algorithms. In the end, using collision detection toolkits publicly available, we have performed a set of experiments in order to compare the performance between collision detection algorithms based on axis-aligned, discrete orientation polytopes and oriented bounding boxes.
1. Introduction Fundamental to much of the virtual environment work is, in addition to high-level 3D graphical and multimedia scenes (visual output), is the research on advanced methods of interaction and the development of behavioral models. The user, or rather, the visitor of such virtual worlds must be able to act and behave intuitively, as well as receive expectable natural behavior presented as feedback from the objects in the environment, in a way that he/she has the feeling of direct interaction with his/her application, and not using a computer. The collision detection process plays a very important role for achieving the construction of a realistic virtual world, enabling interaction among virtual objects and assisting in the simulation of their dynamic behavior. In many virtual environments, collision detection allows the virtual representation of the user (e.g. the virtual hand) to interact with other virtual objects. This paper reviews different approaches for finding exact collisions between multiple objects with arbitrary trajectories for virtual environment applications. Recently [Jiménez 01] presented a survey on collision which focus greatly in methods for collision detection that explore the tradeoff between the accuracy in finding collisions and the computational time. In our paper, we concentrate on methods to find exact collisions in real time. We think that this is an important issue in a virtual environment. If we want to provide a realistic feedback of an interactive 3D world it is
important to simulate the behavior and the exact interactions between 3D virtual objects. To achieve this goal, it is necessary to use the exact representation of the models’ geometry. If we consider the case of using only bounding boxes or bounding spheres, for example, as approximate models we can obtain very unrealistic situations of interaction in a virtual environment. Furthermore, in virtual environment applications such as virtual prototyping it involves exact object interactions and control. In this paper, we also propose an extension of the taxonomy presented by [Lin 98]. Lin’s classifies the different collision detection techniques according to the model representation. Nevertheless, we have found that most of the current collision detection methods for virtual environment applications are supported by polygonal models and therefore we have found the need to extend her taxonomy in order to compare and classify different approaches for collision detection. This paper is organised as follows. In section 2 it is introduced a taxonomy for classifying different collision detection techniques. In section 3, it is presented different methods used for partitioning the space occupied by objects. In section 4, we show several approaches to decompose 3D models in hierarchies of bounding volumes to speed up the collision detection process. In section 5 we also present some results using public available toolkits. In section 6 conclusions are presented.
2. A Taxonomy for Collision Detection Currently there are many implementations of collision detection schemes. It is important to find a framework that enables us to classify and compare different approaches. [Lin 98] relates collision detection techniques according to its 3D model representation: constructive solid geometry, implicit surfaces, parametric surfaces or polygonal models. We have found that much of the work done in collision detection for virtual environment applications is supported by polygonal models. Then, it is necessary to introduce an additional refinement, extending this classification, in order to unite similar approaches and to compare strengths and weakness of each method. In this way, we present a taxonomy for collision detection algorithms in figure 1, which is used to structure the following sections of this paper. World
Spatial Partitioning Representations
Regular Grid
Octree
Binary Space Partitioning Tree
Bounding Volume Hierarchies
R-Tree
AxisAligned Bounding Volumes
Oriented Bounding Boxes
Discrete Orientation Polytopes
3-d Tree
Figure 1. A taxonomy for comparing different approaches for collision detection.
3. Spatial Partitioning Representations One class of hierarchical data structures used for collision detection are spatial partitioning representations: regular grids, octrees, BSP-trees, k-d trees and R-trees. Spatial subdivisions are a recursive partitioning of the embedding space occupied by objects. In general, spatial partitioning structures are used as a secondary representation for the collision detection process. The main idea behind all space partitioning methods is to exploit spatial coherency. For each object, we check for collision only objects of the neighborhood, eliminating comparisons with those objects that are faraway and therefore cannot be colliding. By dividing the space occupied by 3D objects in the environment, one needs to check for contact between only those pairs of objects that are in the same cells of the decomposition. Using such decompositions in a hierarchical manner, as in octrees, BSPtrees, k-d trees or R-trees, can further speed up the collision detection process. Spatial partitioning representations can be used for the N-body or broad phase problem, as well as, for the pair processing or narrow phase problem of the collision detection process. In the broad phase we want to discard, so many as possible, pairs of objects that do not collide. While in the narrow phase we want to know if two objects are colliding. 3.1. Regular Grids The most basic spatial division of the environment is the uniform grid. The three-dimensional space, which is considered to be a unit cube, is divided into N × N × N cubic cells of equal volume, building a grid of boxes called voxels (figure 2). Each voxel has a list of the objects occupying that region. Each of the three-dimensional objects of the scene can occupy one or more cells of the grid. In this way, an object can be stored in the list of several voxels and the resulting data structure can be large compared to the input data structure.
Figure 2. Partition of a 2D scene by a 4x4 uniform grid.
When using regular grids some care must be taken when choosing the number N of divisions considered for each of the coordinate axes. It is always difficult to know which is the optimal number N. This is an important question because N defines the size of the cells. According to [Held 95] experiments this value is typically kept small between 5 to 50. If we choose a large value, then each cell will have a smaller volume and will have a small number of objects, which can be good for the collision detection
problem, but on the other hand it will result in large memory usage. If we choose a small value for N, then the size of each cell is larger and we will loose the advantages of using spatial partition techniques. Due to its simplest structure, algorithms based on regular grids are in general very simple and for the collision detection problem an algorithm based on regular grids is straightforward. To find out overlapping objects in the broad phase we need to check only those objects that share the same cells. Uniform grids can also be used in the narrow phase. To find out if two objects are colliding it is necessary to check only those cells that have more than one polygon from different objects. Grids are used in a dynamic environment to find collisions in real time by [Zyda 93]. It is used to find overlapping objects in the broad phase of the collision detection procedure, determining pairs of objects candidates for collision, from the intersection of the bounding volumes of the objects. The testbed scenario used is a very large environment where objects are very small compared to grid cells. In fact, they are so small, that objects are approximated by points. Cells are also large enough so that objects cannot traverse more than one cell per frame. [García-Alonso 94] also uses uniform grids. However, in this case, this structure is used to find exact collisions between 3D objects for the narrow phase. It is used a uniform grid for each object. The bounding volume of each object is partitioned in equal boxes and each voxel has a list of the corresponding overlapping faces of that object. To find if two objects are intersecting, then it finds if there is an interference between the voxels of the corresponding objects. In [Held 95] it is also described an algorithm for collision detection that makes use of a grid with 40x40x40 voxels to represent a scene of three dimensional models. In their work, grids are used in a collision detection algorithm implemented in two-phases. In the first phase, they use the bounding volume of the moving object to find out the intersecting cells. An object can occupy more than one cell. From these overlapping voxels they have a list of triangles from the static environment which are candidates for collision. For each static triangle, from the previous step, if its bounding volume intersects the bounding volume of the flying object, then this triangle is passed to a second phase of the collision detection process. In the second phase, for each triangle of the moving object it is determined the overlapping cells, using its bounding box, and it is intersected with each triangle from the static environment in the list of the overlapping cells. They have implemented this approach and tested it in the determination of exact collisions in a static environment with one moving object. [Held 95] concludes that the collision detection algorithm implemented using regular grids is comparable to the faster approach they have implemented using R-trees. In fact, it is known that in sparse environments, in which the objects are uniformly distributed through the space, the use of regular grids is very effective for finding out pairs of colliding objects [Cohen 95]. In a virtual environment, [Zachmann 00] reports the use of grids for finding pairs of candidate objects for collision, also in the broad phase. In this case, objects can also occupy more than one cell. It is presented an improvement of about eighty percent, when using a grid of 8 × 8 × 8 voxels, compared to the traditional algorithm for the allpairs test without using a grid. Although, the scenario presented was fairly simple, including one moving object with 20 polygons among five hundred static objects with 52 polygons each.
Despite the effective use of uniform grids by several authors, regular grids cannot adapt to the distribution of the objects or primitives in the scene. It treats in the same way, regions of the environment with different degrees of occupancy. It cannot adapt to large, entirely occupied or empty regions of space. 3.2. Octree An octree represents 3D solid objects by a tree defining a recursive subdivision of space [Samet 84, Veenstra 88]. The volume occupied by objects in the environment is partitioned, at each time, into eight axis-aligned subvolumes, using a cubic decomposition. Each cube is marked as empty or occupied by solid objects. The resulting octree is a tree structure of degree eight where each nonleaf node has eight sons. There is also an alternative representation where spheres are used instead of cubes as octant including volumes [Hubbard 93, Tzafestas 96]. We start with a finite unit axis-aligned cubic universe, the root node, which is decomposed into eight smaller axis-aligned cubes called octants, numbered from one to eight (figure 3). These octants are obtained from the split of each coordinate direction in the middle of the original cube. If an octant is completely outside the object, then the corresponding node is labeled as white, which means that this region of space is empty. If an octant is completely inside the object, then the node in the octree structure is labeled as black. In both cases, the recursive procedure on that side of the tree is finished. Leaf nodes are either marked as black or white whether they are occupied by the 3D object or not, respectively. If the octant is partially contained in the object, then the octant is decomposed into eight suboctants, each of them being tested again to determine if it is completely inside or completely outside the object. At this time, the size of the corresponding suboctants is again divided by two. At a node level n the corresponding cube is of size 2− n , where node level zero is the root. This recursive procedure is continued until there isn’t any octant partially contained in the object or until a desired level of resolution is achieved defined by the depth of the octree structure. If this is the case, then those octants that are only partially contained in the object are approximated as occupied or unoccupied, black or white, using some criteria. Figure 3-b presents an object enclosed by its octant hierarchy and the corresponding octree representation is shown in figure 3-c. Root
z 3 4
2
1
1 6
8 x
3
2
4
5
6
7
8
y
5 1
(a)
(b)
2
3
4
5
6
7
8
(c)
Figure 3. (a) Octant labeling; (b) an object octree partitioning and (c) the octree structure for the above 3D model.
Many researchers use octrees to represent three-dimensional objects. They have also been used to represent the spatial relationship of geometrical objects, making it
relatively simple to determine neighbor objects [Moore 88] and to traverse the volume from front to back for hidden surface removal [Gargantini 93]. The idea behind using octrees for collision detection is to compare for collision only those pairs of objects that share the same cells. In figure 4, it is shown the partition of a 2D scene using the quadtree subdivision, which is the equivalent for 2D of the octree subdivision. In this two-dimensional example, it is considered a new quadtree subdivision if the node has more than five objects. Those pairs of objects that do not have some cell in common cannot be overlapping and should not be considered. Each leaf node, in the octree representation of the scene, has a list of the objects sharing that suboctant which are cross checked pairwise for collision.
Figure 4. Spatial partition of a 2D scene using a quadtree subdivision.
Octrees recursively partition cubes into axis-aligned octants. At each instance, the objects are assigned to one or more octants and each cell is classified as empty or not empty. Those parts of space where octants are labeled as empty are simply discarded, since no overlapping occurs in those cases. Collisions are checked between all object pairs belonging to a particular cell. In order to find pairs of objects that are intersecting, we start at the unit universe root node and find out which are the cells occupied with more than one object. Then we check for exact collision those objects that share at least one of these cells. The resulting advantage of using an octree structure is that we can discard many pairs of objects and primitives that cannot be colliding, increasing the overall performance of the collision detection process. The hierarchical nature of octrees makes them a good choice because they are also adaptive to the cluttering of the environment. In fact, during the octree construction process, as the subdivision is carried at a node level, if the node contains more than the optimum number of objects, an octal-subdivision is generated. On the other hand, it is also more efficient for representing large areas of the free space. However, there are also some problems. Position of the octants is restricted to be aligned with the coordinate axes and the sizes of the octants are fixed to powers of two. In this way, the size of the octree is dependent of the position and orientation of the object. In some positions of the object, the tree may be compact. While in others the tree can become very large. In fact, the position and orientation of the object, affects the size of the octree, as well as, it can influence the quality of the representation, since it is restricted to the depth of the tree allowed for its implementation. Octree models are approximations of the solid objects which are restricted to the desired depth of the tree
structure. On the other hand, representing a complex 3D scene can return in a large octree representation with a quite large depth, requiring a large amount of memory and which results in poor worst-case search time. It is possible to overcome these difficulties using vector octrees [Samet 88], extended octrees [Ayala 85, Brunet 90] or polytrees [Carlbom 85]. These generalizations of an octree structure, allows terminal nodes to contain parts of the solid geometry of the object. In this way, the 3D model can be exactly represented, by the underlying primitives, and also reduce the degree of subdivision making the resulting representation to be more compact. [Hubbard 93, 96] approach for finding collisions in real time is based on a time-critical computing algorithm and on octrees of spheres. A time-critical collision detection implementation finds out collisions between successive more detailed approximations of the 3D objects. It uses different levels of detail to the objects geometry. The collision precision is dependent on the time slot available for the detection process, regarding that the overall performance cannot slow down, in order to maintain the application running interactively. A time-critical collision detection algorithm as different levels of accuracy. [Kitamura 94] algorithm for collision detection uses an octree for each object. To find collisions it traverse the updated octree of the moving objects against the static ones to find intersecting nodes. Only those face pairs found on overlapping octree nodes are then cross checked for intersection. [Smith 95] uses bounding volumes in the broad phase to find out possible colliding objects. For each object that share some overlapping bounding box, using the faces’ bounding volumes, it is found a list of faces for that object that intersect the overlapping region. If there is more than one list of faces, then it is built a face octree structure for the remaining faces. Each face from the lists of faces are inserted in the octree where the root node is the unit cubic of the scene. To find if there is any exact collision, the face octree is traversed and those faces from different objects that share the same cell are intersected, and a list of intersecting face pairs is built. This implementation was tested with two spheres of varying complexity, from about 200 to 4000 triangles, and with fifteen models of the space shuttle with 528 faces. This approach supported by octrees did find the first intersection between 3D objects interactively. However, real applications do not terminate at the first collision. In fact, after the first collision there will be in the next time steps more collisions, probably of the same objects, in the neighborhood. [Smith 95] compared his approach with better results than the work of [Kitamura 94]. A real time exact collision detection for the narrow phase using spherical octrees was developed by [Tzafestas 96]. In this algorithm, each 3D object is described by an octree structure in its local coordinate system. The decomposition process is done using spheres instead of cubes. At each node, it is inscribed a sphere into the cube of the original cubic octree decomposition. From this consideration, it should be noted that in this case the total volume of the spherical octree representation is larger than an equivalent cubic octree structure. The leaf nodes of the spherical octree structure, point to the list of vertex, edge or faces that the corresponding sphere intersects. The exact collision detection algorithm is done in two steps. In the first step it is found the intersecting spherical octree nodes, determining the candidate faces of each object for collision. In the second step, it is determined exactly the pairs of colliding faces from two objects. This implementation was tested using a virtual scene where fifty was the
maximum number of vertices of colliding objects. This is in fact a very simple object scene. It is outlined that as the depth of the spherical octree is increased, the collision detection process has a behaviour that approximates to linear. [Zachmann 00] also implemented an incremental collision detection algorithm for the broad phase using octrees, that makes use of temporal coherence. His concern was in finding an approach of quickly updating the octree in a dynamic environment, when the geometry of an object is changed or when it moves. Some care has to be taken since the octree representation must have to be recomputed, which can be particularly expensive. 3.3. Binary Space Partitioning Tree Binary space partitioning (BSP) is an approach that was initially designed to solve the visible surface determination problem [Fuchs 80, Gaede 98, Naylor 90] and can also be used for partitioning the space. A BSP tree is a binary hierarchy tree that represents a recursive subdivision of the n dimensional universe into homogeneous subregions, using n-1 dimensional hyperplanes. In a BSP-tree, the partitioning of the space is defined by these hyperplanes and therefore is not limited to be axis-aligned. Each subregion is divided independently of preceding subdivisions and of the other subspaces, repeatedly until the number of objects or primitives in each subregion is under a given threshold, τ . In a three-dimensional space, a hyperplane h is a plane defined by the set of points that satisfies the equation ax + by + cz = d . It partitions ¡3 into two half spaces. Those points in space defined as h + = {p ∈ ¡ 3 : ax + by + cz > d } represent the positive or front open halfspace. The negative or back open halfspace h − is defined by the set of points that satisfies the condition represented as h− = {p ∈ ¡3 : ax + by + cz < d } . The BSP tree is stored in a binary structure. The root node t0 of a BSP tree matches the complete region of the 3-D environment, r (t0 ) = ¡3 . In fact, the region covered by the root node is unlimited, but in practice it is considered only the region limited to the bounding volume that covers the 3D models of the scene. To this region it is applied a hyperplane h0 , defining a negative h0− and a positive h0+ open halfspaces. Such hyperplane, partitions the original space into two new subregions: r − (t1 ) = r (t0 ) ∩ h0− and r + (t1 ) = r (t0 ) ∩ h0+ , stored in the tree as the left ( t0 .left ) and right ( t0 .right ) child of t0 . To each of this sub-regions, this procedure can be repeated recursively to construct a binary space partition tree. The intent is to cut space recursively into two halves. Starting with the whole universe, cut it in half and continue with each of the halves. Each internal node t of the binary tree stores a hyperplane ht responsible for the partitioning of the space in two disjoint subregions represented by the descending nodes: left edge corresponding to the negative halfspace and right edge for the positive halfspace. The region r (t ) represented by each internal node t is defined by the intersection of the open-halfspaces, determined by the hyperplanes associated with the previous nodes on the path from the root to the node t . That is, given a node ti at depth i which is along the path defined by {t0 ,..., t i } , where the subscripts denote depth, then if ti is the left child of ti −1 it defines the region r (ti ) = r (ti −1 ) ∩ ht− otherwise r (ti ) = r (ti −1 ) ∩ ht+ . i−1
i−1
If the number of objects or primitives is under some predefined constant τ , then the subspace is no longer partitioned and the node is a leaf of the BSP tree. Each leaf node of a BSP structure corresponds to an unpartitioned region designated as cell and stores references to those objects or primitives that are present in the corresponding region. Figure 5 illustrates the building procedure of a BSP tree. 1 2 a
2
1
1
4
3 c b
a
3
d
5
f 4
b
5
c
e
f
d e
(a)
(b)
Figure 5. a) Partitioning the 2D space and (b) the corresponding BSP tree.
BSP trees are often used to solve problems in computer graphics such as global illumination, shadow generation, ray casting and visibility [Naylor 90, Chin 89, Fussel 90]. They are also used to represent solid models and in information retrieval for finding nearest and farthest neighbours, and performing range queries [Thibault 87, Naylor 90]. A major disadvantage of BSP trees is when used in a dynamic scene. If we want to use a BSP structure for collision detection in dynamic scenes, other approaches must be taken in the design of the tree structure. [Naylor 90] approach to this problem was to build a BSP tree for the static environment and another BSP tree for the moving object. At each frame, the two trees are merged to produce a complete scene. An alternative incremental approach was implemented by [Chrysanthou 92] where the polygons of a moving object, and the nodes they define, are removed from the tree and re-inserted at their new position at each frame. When a polygon is deleted from the tree, then we will get two unconnected trees that are merged incrementally. The complexity of restructuring is claimed to be reduced since any moving polygon is closed to a leaf node after the first deletion. This approach was tested with small moving objects. [Kumar 99] describes an algorithm to deal with dynamic environments by expanding BSP trees for polygons to BSP representations of objects and using separating planes between objects. Three-dimensional scenes are represented as a composition of a set of objects, each of which can be represented, added, deleted and moved independently. The BSP tree of an object stores the corresponding polygons in the leaf nodes and the BSP for the complete scene is built by successive merging operations of objects. When an object is moving there is no need to reconstruct the tree, since this structure is not changed under translation and rotation. It is necessary to update only the geometry information to maintain current positions and orientations. Nevertheless, as it is described, after a number of iterations a number of redundant planes result in the parent object from the motion of an object. This leads to the need of periodically reconstruct the complete BSP tree. The main problem of the BSP approach is that in general it is not possible to avoid that the hyperplanes will not cut objects or polygons. Thus, the size of a BSP tree can get very large.
Other disadvantage is that the choice of partitioning planes depend heavily on the current arrangement of objects which is critical for dynamic scenes, as it is the case in virtual environments. One of the main advantages of BSP trees is that they provide simple 3D searching, using simple comparisons involving a sidedness test against the hyperplane cut associated to each of the nodes of a BSP tree representation. A BSP tree is not suitable for objects which change their geometry, since in this case the BSP representation has to be recomputed. Binary space partition trees can adapt well to different data distributions [Gaede 98]. Nevertheless, in general they are not balanced and may have very deep subtrees, which has a negative impact on the tree performance. 3.4. k-d Tree The k-d tree [Bentley 75, Bentley 79, Gaede 98] is a binary space partition tree that represents a recursive partition of the space into subspaces using (d-1) dimensional hyperplanes. These hyperplanes are iso-oriented and their directions alternates among the d possibilities. In the three dimensional space, a 3-d tree is a BSP tree whose splitting hyperplanes are chosen alternately orthogonal to the coordinate axes. The 3-d structure is similar to the BSP tree. The root node is also associated to the universe. The difference is that, in this case, as the hyperplanes are always perpendicular to the coordinate axes, then each node of the tree is associated with a parallelepiped, and implicitly with the set of objects or primitives that intersect that subregion. Each non-leaf node is also associated with a hyperplane. To define the children of a node, we must decide if the hyperplane is orthogonal to the x-, y- or z-axis and the coordinate of the corresponding split. If the number of objects or primitives intersecting a subregion falls below a threshold, τ , then the subspace is not partitioned, and the corresponding node is a leaf in the tree. Each leaf node has a list of objects or primitives that intersect its subregion as in a BSP tree. The 3-d tree structure presents identical properties to BSP trees. In addition, a 3-d tree as a very good depth property, since it is always O (log n) [Duncan 01], which is important for the performance of the tree structure that is directly related to its depth. [Held 95] presents the implementation of a 3-d tree for exact collision detection in a virtual reality walkthrough application. In his work, he evaluates the resulting collision detection manager in a 3-D world, with one moving object in a static environment. Only the static objects in the environment are represented in the 3-d tree. The implemented collision detection manager finds collisions in two steps. First, it searches, in the leaf nodes of the 3-d tree, for triangles from the scene whose bounding boxes overlap the bounding volume of the moving object. If there is an overlapping between bounding volumes, then in the second step, each triangle from the moving object is passed to the 3-d tree and processed until it reaches the appropriate leaf nodes and it is intersected for an exact collision with the corresponding triangles of the 3D scene. In his implementation, [Held 95] found that better results were achieved with a cutting plane perpendicular to the coordinate axis that minimize the product of the number of triangles in the two resulting subregions. It was also decided to split always at the midpoint of the corresponding parallelepiped length and it was defined a threshold τ = 10 .
The performance of the collision detection manager implemented with the 3-d tree was always worst when compared to an approach supported in a regular grid representation [Held 95]. A single polygon can belong to more than one partition in a 3-d tree and therefore is stored as many times as the number of regions that it overlaps. Experiments conducted by [Held 95] shows that the number of triangles stored in a 3-d tree can be from three to eight times more than the original number of triangles for 3D objects models. Testing scenarios used different objects, with a number of triangles changing from 100 to quite complex ones with about 30 000. On average the number of triangles stored in a 3-d tree is five times more than the original number of triangles. On the other hand, the 3-d structure requires two times more triangles stored than the correspondent uniform grid structure. Besides, to find exact collisions, the implementation based on the 3-d tree required ten times more nodes visits than the approach based on the regular grid. 3.5. R-Tree Another hierarchical data structure used to represent a partition of the space is the R-tree [Guttman 84, Beckmann 90]. The main idea is to partition the set of objects or primitives associated with a node, as it is shown in figure 6, rather than partitioning the subregion associated with a node, as is done in a BSP or a 3-d tree. 1 6 5
Root
4
1
2
3
7 10 11 8
12
4
5
6
7
8
9
10
11
12
9 3 2
(a)
(b)
Figure 6. (a) A 2D scene of a set polygons partitioned in a R-tree. (b) The corresponding R-tree for the 2D scene shown above.
A R-tree is a multi-ary tree in which the non-leaf node has between τ and σ children, except for the root node. The values τ and σ (σ ≥ 2τ ) are the minimum and maximum number of children of a node, respectively. The root node has at least two children unless it is a leaf. The root node is associated to the space covered by all the objects or primitives in the environment. Each node of the tree defines a subregion represented by the bounding volume that encloses the corresponding primitives of its child nodes. If the number of primitives of a node is between τ and σ , then the node is a leaf, and the corresponding primitives are stored on that leaf node. Otherwise, the node is split and the child nodes will then represent their respective subsets of the objects or primitives. Subregions of different nodes can overlap in a R-tree. This means that a spatial query may often require the visit of several nodes to find out overlapping bounding volumes.
When building an R-tree, each object is inserted at a leaf node. The appropriate leaf node is found by traversing the R-tree from the root and at each internal node choosing the subtree whose covering bounding volume has to be enlarged the least. Once the leaf node is found, then it is necessary to see if the insertion will cause the node to overflow. If this is the case, then it must be split and the σ + 1 primitives are divided between two nodes. This split is then propagated up the tree. Some important properties of R-tree can be underlined. At any level of the tree, each primitive is associated with only a single node. It is also interesting to note that in a Rtree all leaf nodes appear on the same level. The depth of a R-tree storing n primitives is O (log n / log τ ) . The total number of primitives stored in a R-tree equals the number of original primitives. On the contrary, as it was discussed in section 3.4, in a BSP tree the number of stored primitives can be much greater than the original number of primitives. To find collisions of a moving object in a virtual environment, [Held 95] implemented a binary R-tree to represent the static scenario. From their experiments they have concluded that the R-tree was the best approach for finding exact collisions in walkthroughs, when compared to regular grids and 3-d trees. In the R-tree implemented it was defined a threshold τ = 1 . In this way, leaf nodes were chosen to have only one triangle. Internal nodes were split using the median x-, y-, or z-coordinate of the centroids of the primitives associated to that node. The corresponding primitives were associated to one of the two sons of the split according to how the centroids fall with respect to the median value. We conclude this section with the Table 1 that summarizes the main properties of the different spatial partitioning techniques for the collision detection problem.
4. Bounding Volumes Hierarchies Many different approaches based on bounding volumes hierarchies have been used to speed up collision detection algorithms in the broad and narrow phases between general polygonal models. The basic idea of these approaches is to approximate the threedimensional models with bounding volumes to reduce the number of pairs of objects or primitives that is needed to be checked for contact. These methods cannot find out if two 3D models are intersecting, but they can be used to quickly reject objects or pairs of polygons which cannot intersect. There are many types of bounding volumes: axis-aligned bounding boxes, spheres, oriented bounding boxes and discrete orientation polytopes. 4.1. Axis-Aligned Boxes and Spheres Typical examples of bounding volumes used in collision detection algorithms for virtual environments are axis-aligned boxes [Van Der Bergen 98] and spheres [Hubbard 96, Palmer 95, Quilan 94]. An axis-aligned bounding box (AABB) is a parallelepiped whose faces are aligned with the coordinate axes. It is very simple to compute an AABB since it is represented with the minimal and maximal values along each axis, specifying a region R limited by the planes parallel to the axes specified by the values: xmin, xmax, ymin, ymax, zmin, zmax. This requires six parameters to specify an axis-aligned bounding box. A bounding sphere is defined with four parameters describing its center point C and radius r, specifying the bounded region.
Table 1. Advantages and disadvantages of the spatial partitioning representations. Type of Representation Regular Grids
Octrees
BSP
3-d Tree
Advantages/Disadvantages § § § § § § § § § § § § § § § § § § § § § §
R-Tree
§ § § §
Simple algorithms. Improved performance of about 80% [Zachman 00] compared to the traditional n-body problem. Unadapted to the environment distribution of 3D objects. Number of stored primitives greater than the original. Hierarchy structure. Adaptive to the object distribution. Position and size of octants is restricted. Size of the octree is dependent of the position and orientation of 3D models. Requires large amount of memory. Hierarchy structure. Simple 3D searching algorithms. Adapt well to the environment distribution. Hyperplanes cut objects and polygons. Hyperplanes depend on the scene. Number of stored primitives greater than the original. A BSP tree can get very large. In general the BSP tree is unbalanced. Not suitable for objects that changes its geometry. Same as BSP trees. Good depth property. Number of stored primitives is about three to eight times more than the original [Held 95]. Worst performance compared to regular grids [Held 95]. A 3-d structure requires two times more stored primitives than the regular grid. The collision detection algorithm implemented with the 3-d tree required to traverse ten times more nodes than the approach based on the regular grid. Hierarchy structure. Each primitive is associated with only a single node. All leaf nodes are on the same level. The number of primitives stored equals the number of original primitives.
A collision detection algorithm supported only with bounding volumes cannot find out accurately if two polyhedral models are intersecting. In fact, bounding volumes can be effectively used to support an algorithm to reject pairs of objects that do not intersect and generate a list of pairs of models candidates for intersection. A further step can be considered and, for each object, a bounding volume tree is built in order to reduce the number of comparisons needed to find out the candidate primitives for intersection between two polytopes. These types of volumes trees have been widely chosen in virtual environments since it is very easy to implement and fast to find collisions between two such volumes. In fact, to find out if two axis-aligned bounding boxes are overlapping only six comparisons are required. It is also possible to say that two AABBs are disjoint, in the best case situation, with only one comparison. Testing two bounding spheres for overlap is also trivial and can be done with only four additions/subtractions and three comparisons. In addition, it is simple to update these volumes as an object rotates and translates. Collision detection algorithms based on bounding volume hierarchies recursively test pairs of bounding volumes for overlap. If they do not intersect, then that recursion branch ends. If they intersect, then the children bounding volumes nodes are tested for
overlap. If it has reached a point where two leaf nodes are found to overlap, then to find out if the two models are colliding, we have to intersect the descendant polygons. 4.2. Oriented Bounding Boxes An oriented bounding box (OBB) is also a rectangular bounding box but with an arbitrary orientation so that it encloses the underlying geometry more tightly (figure 7). The representation of an oriented bounding box encodes not only position and widths, as in the case of the axis aligned bounding boxes, but also orientation.
a1A1 C a 2A2
(a)
(b)
(c)
Figure 7. a) An example of an oriented bounding box in 2D and (b) the corresponding axis-aligned bounding box. c) Definition parameters of an OBB.
For the representation of an oriented bounding box A (figure 7-c), fifteen parameters are used to define the center point C, edge half-lengths a1, a2, a3 and an orientation specified as three mutually orthogonal unit vectors A1 , A 2 and A 3 , which are the columns of a 3x3 rotation matrix. With these parameters we can define the bounded region of the oriented bounding box. 4.2.1. RAPID Recent work using oriented bounding boxes was presented by [Gottschalk 00], for the implementation of an algorithm for collision detection that has been made publicly available in a system called RAPID (Rapid and Accurate Polygon Interference Detection). Using a top-down approach, RAPID builds a hierarchical tree of oriented bounding volumes. This tree is constructed as a recursive application of fit-and-split operations. Given a collection of polygons, it fits a bounding volume to them, and then partitions the collection into two groups. To each group, fit a new bounding volume and partition again until all leaf nodes are indivisible. The subdivision rule used in the RAPID system is to split the longest axis of an oriented bounding box with a plane orthogonal to one of its axes. The placement of this splitting plane is chosen to be that of the mean point, µ, of the vertices. Then descending polygons are grouped into subgroups according to which side of the plane their center point lies on. If the longest axis cannot be subdivided, the second longest axis is chosen. Otherwise, the shortest one is used. If the group of polygons cannot be partitioned along any axis by this criterion, then the group is considered indivisible and this procedure ends. The resulting OBB tree built in this way, based on where the median center point lies, is balanced [Gottschalk 00]. The basic approach in RAPID for fitting an OBB aligned with the model is, using covariance methods, to choose first an orientation for the OBB, and then choose a centre and minimal edge lengths that enables it to cover the model. The overall time to build the oriented bounding tree is not an essential issue for virtual environments applications. This is a pre-processing step which does not influence the
interactive component of a virtual environment. On the other hand, it is important that the algorithm for the intersection of three-dimensional models, supported by this hierarchical tree of oriented bounding boxes, runs in real time. An algorithm for finding the overlap status of two oriented bounding boxes tests exhaustively all edges of one box for intersection with any of the faces of the other box and vice-versa. If two OBB overlap, then either one completely contains the other or their boundaries overlap. Testing to find if there is contact between the two OBB requires 144 edge-face tests, which each is a 3-by-3 linear system. If they do not touch, then it is necessary to test whether any point in one box is entirely contained in the other box and vice-versa. In practice, it is an expensive test. What RAPID does to overcome this problem is based on the separating axis theorem [Gottschalk 00]. Two disjoint 3D models can always be separated by a plane which is parallel to a face of either object, or parallel to an edge taken from each object. An oriented bounding box has three unique face orientations and three unique edge directions. This leads to fifteen potential separating axes to test, three faces from one OBB, three faces from the other OBB, and nine pairwise combinations of edges. If two oriented bounding boxes are not in contact, then a separating axis exist, and at least one of the fifteen axes mentioned above will be a separating axis. If the polytopes are overlapping, then clearly no separating axis exists. So, testing the fifteen given axes is a sufficient test for determining overlap status of two OBBs. RAPID implemented this effective approach and the worst-case intersection test between two overlapping oriented bounding boxes is done with 252 arithmetic operations of which we have 15 comparisons, 96 additions and subtractions, 117 multiplications and 24 absolute values. The best case input requires 89 arithmetic operations, distributed as one comparison, 39 addition and subtractions, 39 multiplications and 10 absolute values calculations. 4.2.2. V-COLLIDE V-COLLIDE is a system for interactive collision detection for polygonal models undergoing rigid motion in VRML environments [Hudson 97]. V-COLLIDE is built on top of the RAPID library, where RAPID is a collision detection library based on oriented bounding boxes (OBB). V-COLLIDE does a sweep-and-prune operation for the broad phase using an axis-aligned bounding box (AABB) for each object. In this first level, V-COLLIDE finds all pairs of overlapping bounding boxes eliminating pairs of objects that cannot intersect. Then for each pair of objects, which are potentially in contact, it uses RAPID algorithm for the narrow phase based on oriented bounding boxes to detect collisions. V-COLLIDE does not provide direct access to the triangles of the underlying geometry. Thus, if the application changes part of the object geometry, then it is necessary to destroy the complete object and rebuild it again from scratch. 4.2.3. Proximity Query Package The PQP library, Proximity Query Package, uses two different type of bounding volumes [Larsen 99]. It uses rectangle swept spheres (RSS) for distance queries and oriented bounding boxes (OBBs) for collision detection. It is also based on RAPID library.
4.3. Discrete Orientation Polytopes As defined by [Klosowski 98] discrete orientation polytopes, or “k-dops”, are bounding volumes that are convex polytopes whose facets are determined by halfspaces whose outward normals come from a small fixed set of k orientations. An axis-aligned bounding box in 3D is anrexample of a six-dop with orientation vectors r r determined by the unit vectors ± i , ± j , ± k . An eight-dop in two dimensions is defined by eight fixed normals defined by the orientations at ±45, ±90, ±135 and ±180 degrees. These different types of bounding boxes are illustrated in figure 8.
(a)
(b)
Figure 8. An example in 2D of (a) an oriented bounding box and (b) an eightdop.
The work of Klosowski, which is available in the QuickCD toolkit, concentrated in the study of four choices of k-dops: 6-dops, 14-dops, 18-dops and 26-dops for the collision detection problem. Six-dops are in fact axis-aligned bounding boxes and can easily be built as it was explained in the section 4.1. In order to build a 14-dop, for example, it is required to find the minimum and maximum coordinate values of the primitives along each of the seven directions, which r r r r r r r r r r r r were defined by Klosowski by the unit vectors i , j , k , i + j + k , i − j + k , i + j − k and r r r i − j − k . That is, a 14-dop uses six halfspaces defining the volume of an axis-aligned bounding box, plus additional eight diagonal halfspaces that are used to cut off as much of the eight corners of an AABB as possible. Consider again the seven directions vectors defined above, which can also be written as the vectors vv 1 = (1,0,0) , vv 2 = (0,1,0) , vv 3 = (0,0,1) , vv 4 = (1,1,1) , vv 5 = (1,−1,1) , vv 6 = (1,1,−1) and v v 7 = (1,−1,−1) . To define a 14-dop bounding volume, fourteen parameters are required to define the lower, l i , and upper, u i , coordinate values of the m vertices, P j , of the r underlying polygons, projected onto the seven vectors vr i . For each direction v i , the lower and upper values can then be determined by the following expressions: uuur li = min OP j ⋅
uuur ui = max OP j ⋅
r vi r ∧ j = {1..m} , i = {1..7} vi
r vi r ∧ j = {1..m} , i = {1..7} vi
(1)
This values of li and ui specifies fourteen halfspaces defining a bounding volume for the underlying geometry constructed as an axis-aligned bounding box with its corners cut off. This volume defines the bounded region for the 14-dop as: uuur R = P ∈ ℜ3 : li ≤ OP ⋅
r vi r ≤ ui ∧ i = {1..7} vi
(2)
This concept can be extended and more directions can be considered. The QuickCD system also implements a 26-dop volume constructed by the union of the defining halfspaces for the 14-dops and 18-dops, using the six halfspaces of an axisaligned bounding box, plus the eight diagonal halfspace that cut off corners and more twelve halfspaces that cut off edges. The 18-dops is reported as the more effective choice of discrete orientation polytopes. The implementation of the collision detection problem in this system is also based on a bounding volume tree, in this case supported by k-dops. Discrete orientation polytopes are very simple to intersect. If we use 18-dops volumes we need to perform only eighteen comparisons.
5. Experimental Tests Our experiments were conducted using collision detection toolkits publicly available that implement different types of bounding volumes hierarchies. We have used QuickCD, that implements discrete orientation and axis-aligned bounding volumes, which is a particular case of a 6-dop. RAPID was also used for testing the implementation of collision detection schemes supported by oriented bounding boxes. Unfortunately, we did not find any publicly available collision detection that implemented any of the spatial partitioning techniques described in section 3 and, therefore, we could not test its practical importance. First, we have compared different types of bounding volumes. We wanted to have an idea about the order of magnitude of the computation time for calculating the worst-case intersection between two bounding volumes. The running experiments were done in two platforms. We have used one AMD Athlon1600+ with 256Mb of memory and one Silicon Graphics ONYX2 with MIPS10000 processors clocked at 250MHz and 4 gigabytes of RAM. Table 2. Intersection times between bounding volumes.
Bounding Volume
Athlon1600+
Inf. Reality
AABB 18 DOP OBB
31 ns 78 ns 940 ns
67 ns 168 ns 800 ns
As we can see from Table 2, the axis-aligned bounding box is found to be an order of magnitude faster than the oriented bounding boxes. In fact, in a SGI the AABBs are about twelve times faster than the OBBs. Although, the axis-aligned bounding boxes do not enclose the object geometry so tight, nevertheless they are much faster than the oriented-bounding boxes. It is expected in a collision detection cycle that we will require more bounding boxes checks than oriented-bounding boxes intersections. But, these last ones are very expensive and in the end if a proper hierarchy of bounding volumes is chosen then a collision detection supported by axis-aligned bounding box is effective. For this reason, we understand why axis-aligned bounding box are commonly used for collision detection. In a second step, we also wanted to compare different collision detection toolkits publicly available. To make the experiment results comparable we used similar conditions for all experiments.
For the first tests, we have used equal prisms with four thousand triangles each. One of the prisms is static, centered at the origin of the coordinate axis system. The second prism is moving along the x-axis from an initial position until it reaches the origin. In this case, at the initial position, the two objects are separated from each other. At the final position, the two objects are completely overlapping each other. In this path, the number of contacts between triangles change from 509 to 2601. In this first experiment, we want to compare the use of axis-aligned bounding volumes, using quickCD configured as 6-dops, against 18-dops bounding volumes, which is reported as the most effective choice for k-dops. Results are presented in figure 9. From figure 9-a), we can see that it is not achieved real time interaction. Nevertheless, we have chosen this working scenario because we have tried first with smaller objects, in terms on number of polygons, and it was not possible to compare the two approaches, since the results were quite similar. However, in more complex worlds we can see that using k-dops is more effective than using axis-aligned bounding volumes. 18-dop
Bounding Volumes
1600
140%
1400
120%
Ratios AABB/18-dops
time to collision (ms)
AABB
1200 1000 800 600 400
100% 80% 60% 40% 20%
200 0 509
Triangles
1075
1449 1859 Number of Contacts
(a)
2095
0% 509
1075
1449 1859 Number of Contacts
2095
(b)
Figure 9. (a) Performance of an AABB approach compared to k-dops. (b) Overhead of an AABB versus 18-dop approach in terms of percentage of bounding volumes and triangles intersection tests.
The 18-dops bounding volume intersection checks are more expensive than the simple axis-aligned tests. On the other hand, 18-dops volume are more tight to the underlying geometry. Therefore, it is possible to filter out much more pairs of not colliding bounding volumes and triangles. In the end, this is more important for the collision detection problem. This assumption is confirmed in figure 9-b), where it is presented the relation between the number of intersection tests between bounding volumes and triangles of axis-aligned bounding boxes, in respect to the 18-dops volumes. On average, axis-aligned bounding volumes requires 30% and 47% more bounding volumes and triangles intersection tests, respectively, than the collision detection manager based on 18-dop. We remember that we have used the QuickCD collision detection toolkit for both tests. Therefore, the algorithm for building the hierarchy tree is the same and, in this way, we are comparing only the use of AABBs or 18-dops. Our next experiment was also done with two prisms, with four hundred polygons each, under identical trajectories circumstances of the first test. We have used a simpler scene because we wanted to test the use of oriented bounding boxes or discrete orientation polytopes at interactive rates.
Figure 10-a) presents the comparison between RAPID and QuickCD configured with 18-dops volumes. The number of colliding triangles in this path varies from 268 to 380. In this setup the QuickCD collision detection toolkit has better performance than RAPID. In figure 10-b), we can see the ratios of 18-dops versus oriented bounding boxes. It is interesting to see that on average the 18-dops require 83% more bounding volume tests than the oriented bounding volumes. However, we have seen before that the cost of intersecting oriented bounding volumes is about five times more than 18dops. It is also interesting to see that QuickCD does on average about 800% more triangle intersection tests than RAPID, which is an expensive test. Although, in this case, they can be optimised since the underlying primitives are triangles. But in the end the QuickCD was faster than RAPID. 100 80
Bounding Volumes
Rapid
70 60 50 40 30 20 10 0 268
309 336 Number of Contacts
(a)
Triangles
1200%
QuickCD Ratios 18-dops/OBBs
time to collision (ms)
90
366
1000% 800% 600% 400% 200% 0% 268
309 336 Number of Contacts
366
(b)
Figure 10. (a) Time to find exact collisions using RAPID and QuickCD. (b) Overhead of an 18-dops versus OBBs approach in terms of percentage of bounding volumes and triangles intersection tests.
In our last experiment, we have used a real industrial case study from Rolls Royce. A Fuel Metering Unit is moving into an Oil Pump from the Trent 800 engine, along a path where the number of contacts change from 28 to 851. These parts are used in the engine for the Boeing 777. The Fuel Metering Unit is a component tessellated to 5130 triangles and the Oil Pump has 23 541 triangles. Figure 11 shows the fuel-metering unit and the oil pump.
Figure 11. The fuel metering unit and the oil pump.
In figure 12 we compare RAPID and QuickCD. In this case, RAPID is faster and at each time step, it requires on average 26ms to find all collisions, against 38ms by QuickCD. From the ratios of 18-dops versus oriented bounding boxes, we can see now that on average the 18-dops require 500% more bounding volume tests and 200% more triangle intersection tests than the oriented bounding volumes.
Bounding Volumes 90
Rapid
QuickCD
80
Ratios 18-dops/OBBs
time to collision (ms)
Triangles
1200%
100
70 60 50 40 30 20
1000% 800% 600% 400% 200%
10 0
0% 28 117 198 221 240 261 286 525 603 846 Number of Contacts
(a)
28
117
198
221 240 261 286 525 Number of Contacts
603
846
(b)
Figure12. (a) Time to find exact collisions using RAPID and QuickCD for the industrial case study. (b) Overhead of an 18-dops versus OBBs approach in terms of percentage of bounding volumes and triangles intersection tests.
6. Conclusions In this paper we have presented a taxonomy that classifies current collision detection algorithms for polygonal soups in two classes, based on the representations: spatial partitioning representations and bounding volume hierarchies. We have found out that much of the collision detection algorithms that use some spatial partition representation is supported by octrees. In fact, they were used by several researchers in both the broad and/or narrow phases to find colliding objects. Its hierarchical structure adapts well to the environment distribution. Nevertheless, the Rtree structure should be considered more often in the development of collision detection toolkits. We believe that, in fact, the R-tree n-ary hierarchical structure can be more effective than other structures for partitioning the 3D space. Moreover, in such structure, the number of primitives stored equals the number of original ones. This is important for the performance of the traversal algorithms. On the other hand, the R-tree is more compact than an octree structure. We have also compared collision detection toolkits publicly available. In particular, we could compare different types of bounding volumes hierarchies based on axis-aligned, discrete orientation polytopes and oriented bounding boxes. We have seen that a bounding volume hierarchy based on discrete orientation polytopes is faster than one based on axis-aligned bounding boxes. We also showed that RAPID and QuickCD can be effectively used interactively. However, we should note that QuickCD current version allows only one moving object in a virtual environment scenario and does not report collisions when one object is full inside of another. Nevertheless, their performace is comparable. In fact, it is difficult to compare collision detection toolkits and as we could see it is dependent on the type of scenario and application. In future, some work should be done in order to provide a set of standard testing scenarios that could be used for comparing different approaches.
Acknowledgements Mauro Figueiredo is grateful to Calouste Gulbenkian Foundation for financing and supporting his work. We would like to thank to Rolls Royce for providing the case study used for these experiments.
References Ayala, D., Brunet, P., Juan, R. and Navazo, I. (1985) “Object representation by means of non minimal division quadtrees and octrees”, ACM Trans. Graphics, vol. 4, no. 1, pp.4159. Beckmann, N., Kriegel, H-P., Schneider, R. and Seeger, B. (1990) “The R*-tree: An efficient and robust access method for points and rectangles”, In Proc. ACM SIGMOD International Conference on Management of Data, pp. 322-331. Bentley, J. (1975) “Multidimensional binary search trees used for associative searching”, Communicaions of ACM, Vol. 18, No. 9, pp. 509-517. Bentley, J. and Friedman, J. (1979) “Data structures for range searching”, ACM Computing Surveys, Vol. 11, No. 4, pp. 397-409. Brunet, P. and Navazo, I. (1990) “Solid Representation and Operation Using Extended Octrees”,. ACM Trans. on Graphics, Vol. 9, No. 2, pp. 170-197. Carlbom, I., Chakravarty, I. and Vanderschel, D. (1985) “A hierarchical data structure for representing the spatial decomposition of 3D objects”, IEEE Computer Graphics and Applications, vol. 5, no. 4, pp.24-31. Chin, N. and Feiner, S. (1989) “Near real time shadow generation using BSP trees”, ACM Computer Graphics, Vol. 23, No. 3, pp. 99-106. Chrysanthou, Y. and Slater, M. (1992) “Computing dynamic changes to BSP tree”, In Computer Graphics Forum (Proc. of Eurographics), Vol. 11, No. 3, pp. 321-332. Cohen, J., Lin, M., Manocha, D. and Ponamgi, K. (1995) “I-COLLIDE: An Interactive and Exact Collision Detection System for Large-Scale Environments”, In Proceedings of ACM Int. 3D Graphics Conference , vol. 1, pp. 189-196. Duncan, C. A., Goodrich, M. T. and Kobourov, S. G. (2001) “Balanced Aspect Ratio Trees: Combining the Advantages of k-d Trees and Octrees”, Journal of Algorithms, Vol. 38, pp.303-309. Fuchs, H., Kedem, Z. and Naylor, B. (1980) “On visible surface generation by a priori tree structures”, ACM Computer Graphics, Vol. 14, No. 3, pp. 124-133. Fussel, D. and Campell, A. (1990) “Adaptive mesh generation for global diffuse illumination”, ACM Computer Graphics, Vol. 24, No. 3. Gaede, V. and Gunther, O. (1998) “Multimensional Access Methods”, ACM Computing Surveys, Vol. 30, No. 2, pp. 170-231. García-Alonso, A., Serrano, N. and Flaquer, J. (1994) “Solving the collision detection problem”, In IEEE Computer Graphics and Applications, Vol. 14, No. 3, pp. 36-43. Gargantini, I. and Atkinson, H. (1993) “Ray Tracing an octree: Numerical Evaluation of the first intersection”, Computer Graphics Forum, vol. 12, no. 4, pp. 199-210. Gottschalk, S. (2000) “Collision Queries using Oriented Bounding Boxes”, PhD thesis, University of North Carolina, Chapel Hill. Guttman, A. (1984) “R-trees: A dynamic index structure for spatial searching”, In Proceedings of the ACM SIGMOD International Conference On Management of Data, pp. 47-57.
Held, M., Klosowski, J. and Mitchell, J. (1995) “Evaluation of Collision Detection Methods for Virtual Reality Fly-Throughs”, In Proc. Seventh Canadian Conference Computer Geometry, vol. 3, pp. 205-210. Hubbard, P. M. (1993) “Interactive collision detection”, In Proc. of IEEE Symposium on Research Frontiers in Virtual Reality, pp. 24-31. Hubbard, P. M. (1996) “Approximating polyhedra with spheres for time-critical collision detection”, ACM Trans. Graphics, Vol. 15, No. 3, pp. 179-210. Hudson, T. C., Lin, M. C., Cohen, J., Gottschalk, S. and Manocha, D. (1997) “V_COLLIDE: Accelerated Collision Detection for VRML”, In Proc. of VRML, pp. 119125. Jiménez, P., Thomas, F., and Torras, C. (2001) “3D Collision Detection: A Survey”, Computers and Graphics, Vol. 25, No. 2, pp. 269-285. Kitamura, Y., Ahuja, H. and Kishino, F. (1994) “Coarse to fine collision detection for real time applications in virtual workspace”, In International Conference on Artificial Reality and Tele-Existence, pp 147-157. Klosowski, J., Held, M., Mitchell, J., Sowizral, H. and Zikan, K. (1998) “Efficient Collision Detection using Bounding Volume Hierarchies of k-DOPs”, IEEE Trans. On Visualization and Computer Graphics, 4, 1, pp. 21-36. Kumar, S., Manocha, D., Garret, W. and Lin, M. (1999) “Hierarchical Back-Face Computation”, In Computers and Graphics, 23, 5, pp. 681-692. Larsen, E., Gottschalk, S., Lin, M. C. and Manocha, D. (1999) “Fast Proximity Queries with Swept Sphere Volumes”, Technical report TR99-018, Department of Computer Science, University of N. Carolina, Chapel Hill. Lin, M. C. and Gottschalk, S. (1998) “Collision Detection between Geometric Models: A Survey”, In Proc. of IMA Conference on Mathematics of Surfaces (San Diego (CA)), vol. 1, pp. 602-608. Moore, M. and Wilhelms, J. (1988) “Collision Detection and Response for Computer Animation,” Computer Graphics (SIGGRAPH ’88 Proc.), vol. 22, pp. 289-298. Naylor, B., Amatodes, J. A. and Thibault, W. (1990) “Merging BSP trees yields polyhedral set operations”, Computer Graphics (SIGGRAPH’90 Proc.), vol. 24, pp. 115-124. Palmer, I. and Grimsdale, R. (1995) “Collision detection for animation using sphere-trees”, Computer Graphics Forum, vol. 14, no. 2, pp. 105-116. Samet, H. (1984) “The Quadtree and Related Hierarchical Data Structures”, ACM Computing Surveys, Vol. 16, No. 2, pp. 187-260. Samet, H. and Webber, R. (1988) “Hierarchical data structures and algorithms for computer graphics, part I: Fundamentals”, IEEE Computer Graphics and Applications, vol. 8, no. 3, pp.48-68. Samet, H. and Webber, R. (1988) “Hierarchical data structures and algorithms for computer graphics, part II: Applications”, IEEE Computer Graphics and Applications, vol. 8, no. 4, pp.59-75. Smith, A., Kitamura, Y., Takemura, H. and Kishino, F. (1995) “A simple and efficient method for accurate collision detection among deformable objects in arbitrary motion”, In Proceedings of the IEEE Virtual Reality Annual Symposium, pp. 136-145. Thibault, W. and Naylor, B. (1987) “Set operations on polyhedra using binary space partition trees”, ACM Computer Graphics, Vol. 21, No. 4, pp. 153-162.
Tzafestas, C. and Coiffet, P. (1996) “Real-time collision detection using spherical octrees: Virtual reality application”, IEEE International Workshop on Robot and Human Communication. Van Der Bergen, G. (1997) “Efficient Collision Detection of Complex Deformable Models using AABB Trees”, In Journal of Graphics Tools, 2, 4, pp. 1-13. Veenstra, J. and Ahuja, N. (1988) “Line Drawings of Octree-Represented Objects”, ACM Trans. On Graphics, Vol. 7, No. 1, pp. 61-75. Zachmann, G. (2000) “Virtual Reality in Assembly Simulation – Collision Detection, Simulation Algorithms and Interaction Techniques”, PhD thesis, Darmstadt University of Technology, Germany. Zyda, M., Osborne, W., Monahan, J. and Pratt, D. (1993) “NPSNET: Real time vehicle collisions, explosions and terrain modifications”, In The Journal of Visualization and Computer Animation, Vol. 4, No. 1, pp. 13-24.