Presentation is loading. Please wait.

Presentation is loading. Please wait.

Hierarchical Data Structure in Game Programming Yanci Zhang Game Programming Practice.

Similar presentations


Presentation on theme: "Hierarchical Data Structure in Game Programming Yanci Zhang Game Programming Practice."— Presentation transcript:

1 Hierarchical Data Structure in Game Programming Yanci Zhang Game Programming Practice

2  Overview of hierarchical data structures  Spatial partition  Bounding volume hierarchies Outline Game Programming Practice

3  STL and Boost provide excellent implementations for most of basic data structures  Dynamic array, list, queue, hash table, graph…  Do not implement these data structures by yourself  Basic data structures are far from meeting all the requirements in game programming Basic Data Structures Game Programming Practice

4  Bases for many advanced data structures in game programming  Typical applications  Scene graph  State graph  Decision tree  Kd-tree, quad tree  … Tree and Graph Game Programming Practice

5  Tree data structure  Organize spatial data to implement querying, searching efficiently  Widely used in game: collision detection, ray tracing…  An example in our daily life  University -> College -> Grade -> Major Hierarchical Data Structure Game Programming Practice

6  Task: find the closest intersection between a ray and multiple objects  Solution1: for-loop  Simple  Low efficiency Example Example 1/2 t_min = MAX_FLT; FOR EACH object { float t = computeIntersection(object); if (t < t_min) t_min = t; } Game Programming Practice

7  Solution2: organize objects wisely  Complicate solution  High efficiency  Not necessary to compute intersections between ray and all objects  Early exit Example Example 2/2 Game Programming Practice

8  Spatial partition  Typical data structures: quadtree, octree, BSP, KD-tree…  Object-based partition  Typical data structures: AABB, OBB… Two Ways to Build HDS Game Programming Practice

9  Partition the space occupied by objects  Uniform partition  Adaptive partition  One object might belong to multiple nodes Spatial Partition Game Programming Practice

10  Partition according to objects themselves  Space occupied by objects might overlap Object-based Partition Game Programming Practice

11  Each node has 4 children nodes at most  Features  Uniform partition  Not balanced Quadtree Game Programming Practice

12  Terrain rendering is very important in many games  Size of terrain data is always huge  Inefficient to render all terrain data  How to cull invisible parts? Example: Terrain Rendering Game Programming Practice

13  Suppose terrain is divided to 16x16 blocks  Solution 1: check every block one by one  All blocks have to be checked  Very inefficient Culling Game Programming Practice

14  Solution 2: use quadtree to organize data  Uniformly divide terrain to four sub-blocks  Root node with four children nodes Building Quadtree Building Quadtree 1/2 1 5 43 2 Game Programming Practice

15  Keep dividing each children node  Until each child node only contains one block Building Quadtree Building Quadtree 2/2 Game Programming Practice

16  Node 2,3,4 are invisible  Not necessary to check offspring nodes of 2,3,4  Node 5 is visible  Keep testing children node of 5 Culling With Quadtree Culling With Quadtree 1/3 1 2 345 Game Programming Practice

17  Node a, b, c are invisible  Not necessary to check offspring nodes of a,b,c  Node d is visible  Keep testing children node of d Culling With Quadtree Culling With Quadtree 2/3 5 d cb a Game Programming Practice

18  Continue check node d until leaf nodes are reached  Performance comparison  Solution 1: 16*16 = 256 visibility tests  Solution 2: 1 + 4 + 4 + 16 = 29 visibility tests Culling With Quadtree Culling With Quadtree 3/3 Game Programming Practice

19  Adaptively build quadtree  Connect centers of empty block to form a graph  Route planning based on graph Route Planning With Quadtree Game Programming Practice

20  Quadtree is defined in 2D space  Extend quadtree to 3D space to get octree  Each node has 8 children nodes at most  Uniform subdivision Octree Game Programming Practice

21  Produce very unbalanced tree from unevenly distributed objects  Consequence of uniform subdivision  High memory cost  Lots of wasted memory because empty space Disadvantages Game Programming Practice

22  Stands for K-Dimensional Tree  Organize data stored in k-dimensional space  Use a clever way to split space  Quadtree/Octree: fixed split strategy (uniform subdivision)  KD-tree: determine split according to data distribution  Widely adopted in ray tracing, collision detection KD-tree Game Programming Practice

23  Binary tree  Every non-leaf node split its space to two sub space by a split plane  Split plane is perpendicular to some axis KD-tree X Y Game Programming Practice

24  Determine a split axis and split position p  Split space occupied by current node into two sub- space  Split plane is a hyper plane in K-dimensional space which is perpendicular to the split axis  Suppose X axis is chosen as split axis  Object belongs to left child if its x coordinate is smaller than p x  Object belongs to right child if its x coordinate is larger than p x Building KD-tree Game Programming Practice

25 Building KD-tree: Example 1 1 23 2 3 4567 4 5 6 7 8910111213 8 9 10 11 12 13 Game Programming Practice

26 Building KD-tree: Example Game Programming Practice

27  How to determine split axis?  Use every axis in turn  Choose the longest axis  Not necessary to use the same axis for brother nodes  How to determine split position?  Center of split axis  Center of data inside current node  Make the number of data in two children node equal  When to stop splitting? Building KD-tree Game Programming Practice

28  KNN: K-Nearest Neighbor  Given data set P{p 1,p 2,…} in N-dimensional space, find the k-closest points in P to point q  Widely used in many applications (like fluid simulation)  Consider a simplified problem: K=1, N=2  Two solutions  Quadtree  KD-tree KNN Query Game Programming Practice

29 Solution 1: Quadtree R = ∞; stack.push(RootNode); While (!stack.empty()) { T = stack.pop(); for each children nodes C of T { if (C is leaf node) { d = minimum distance from q to points in C; if (d < R) R = d; } else { if (C has intersection with circle centered at q with radius R) stack.push(C); } Game Programming Practice

30 Solution 2: KD-tree Solution 2: KD-tree 1/4  Start from root node  Start from root node A  Depth-first traversal  Initial estimation of the nearest distance D min = dis(q, )  Initial estimation of the nearest distance D min = dis(q, A ) Game Programming Practice

31 Solution 2: KD-tree Solution 2: KD-tree 2/4  Check left child node  Check left child node B  d = dis(q, B)  D min is updated to d because d < D min  Check children nodes of (left to right)  Check children nodes of B (left to right) Game Programming Practice

32 Solution 2: KD-tree Solution 2: KD-tree 3/4  Check left child node  Check left child node D  d = dis(q, D)  D min is not updated because d > D min  D is a leaf node, then E is checked Game Programming Practice

33 Solution 2: KD-tree Solution 2: KD-tree 4/4  Check for left sub-tree of is finished  Check for left sub-tree of A is finished  The region occupied by right sub-tree of A has no intersection with the best-estimate sphere  The whole right sub-tree can be safely ignored Game Programming Practice

34 BSP Tree BSP Tree 1/2  BSP = Binary Space Partition  Binary tree  Similar to KD-tree, using a hyper-plane to split current space into two sub-space  Different from KD-tree, hyper-plane is not required to perpendicular to axis Game Programming Practice

35 BSP Tree BSP Tree 2/2  Selection of hyper-plane is very important  Build a good BSP tree is not easy  Choosing best hyper-plane from multiple candidates  Not suitable for dynamic scene Game Programming Practice

36 Summary: Space Partition  Organize data by partitioning space  The whole sub tree is skipped if its root fails test  Different partition methods produce different data structures  Fixed partition way: quadtree, octree  Perpendicular to axis: KD-tree  Arbitrary way: BSP-tree  One object may belong to different nodes Game Programming Practice

37 Object-based Partition  Core idea: bounding volume  Typical application: collision detection  Input: objects A, B representing by two triangle sets respectively S={S 1,S 2,…,S n } and T= { T 1,T 2,…,T m }  Question: How to efficiently determine whether A collides with B?  Simple solution: check all {S i, T j } pairs  Better solution: use bounding volume technique to accelerate Game Programming Practice

38 How to Choose BV  Conflict targets  Bound objects as tight as possible  Low update cost when objects are moved or deformed  Fast intersection test Game Programming Practice

39 Bounding Volume Tree  Binary tree  How to create?  Root node is the bounding volume for whole object  Recursively split object in current node to two sub-objects  Create two children bounding volume for the two sub-objects Game Programming Practice

40 Bounding Sphere  The sphere enclosing object with minimum radius  Features  Good: quick intersection test  Bad: Not tight enough  Representation: center point c and radius r Game Programming Practice

41 AABB  AABB = Axis Aligned Bounding Box  Features  Good: quick intersection test  Bad: cannot rotate with objects, not tight enough…  Representation: min and max values along each axis Game Programming Practice

42 OBB  OBB = Oriented Bounding Box  Features  Arbitrary orientation  No recomputation when object is rotated  More expensive to construct Game Programming Practice

43 OBB Construction  Top-down construction  Root node: OBB for whole object  Split plane:  Perpendicular to the longest axis of current OBB  Pass the center of OBB Game Programming Practice

44 How to Determine OBB Axis  Want OBB to be aligned with the best fit plane of model  Achieve this by examining the principle components of statistical distribution of geometry  PCA: Principle Component Analysis  A very important feature extraction method in patter recognition field Game Programming Practice

45 Feature Extraction  Object/Data is represented by features  Number of features is too big to analysis  Can we reduce the number of features so that the smaller number still represents the data accurately?  Definition of accurate representation: the large feature vector can be reconstructed from small one with a small error in the least square sense Game Programming Practice

46 Principle Component Analysis  D-dimensional feature vectors  D-dimensional feature vectors x  Transform to whereis the mean of all  Transform x to y= A(x -μ) where μ is the mean of all x is a orthogonal matrix, with so is an -dimensional vector  A is a M x D orthogonal matrix, with M < D so y is an M-dimensional vector  Reconstruct by  Reconstruct x by x appr = μ+ A t y  For which isminimal?  For which A is E[||x-x appr || 2 ] minimal? Game Programming Practice

47 Principle Component Analysis  If we want to represent this 2-D data by 0-D data (a point), which point is the best? Game Programming Practice

48 Principle Component Analysis  So the 0-D best representation of a data set, in terms of least square error, is the mean Game Programming Practice

49 Principle Component Analysis  If we want to represent this 2-D data by 1-D data (a line), which line is the best?  It must be a line going through the mean Game Programming Practice

50 Computing OBB Axis  Input: 3D point set P{p 1,p 2,…,p n }  Compute the mean of point set  Compute covariance matrix C Game Programming Practice

51 Computing OBB Axis  Compute eigenvalues ofC  Compute eigenvalues λ of C | λE - C | =0  Compute eigenvectors X (λE – C)X = 0  Three eigenvectors are OBB’s axes Game Programming Practice

52 Issues

53 Exercises  Implement a binary tree CBinaryTree with the following functions:  Add child to the specified node;  Get child of the specified node;  Implement a KD-tree, which is derived from CBinaryTree  Implement a AABB tree, which is derived from CBinaryTree


Download ppt "Hierarchical Data Structure in Game Programming Yanci Zhang Game Programming Practice."

Similar presentations


Ads by Google