Contact GenerationErwin CoumansSony Computer Entertainment US R&D
Contact generation Pipeline overviewA single contact pointContact clippingMultiple contact points using perturbationPersistent contact cachingInternal edges and contact normalsDynamic aabb tree acceleration structure
Physics PipelineCollision DataCollisionshapesObjectAABBsDynamics avityContactpointsPredicttransformsForward tecontactpointsCollision DetectionComputationAABB axis aligned bounding boxSetupconstraintsSolveconstraintsForward DynamicsComputationIntegrateposition
Collision Detection PipelineCollision on DetectionWorldtransforms etectoverlappingchild shapes(compound)Midphase (concave)Collision Detectionculling using acceleration structuresComputeclosestpointsGeneratefull contactmanifoldNarrowphaseCollision Detection
Contact generation Pipeline overviewA single contact pointContact clippingMultiple contact points using perturbationPersistent contact cachingInternal edges and contact normalsDynamic aabb tree acceleration structure
Closest point computationvoid computeClosestPoints( ); Black box is discussed in Erin Catto’s GJK talk GJK needs companion algorithm for penetration
Touching contactdistance 0
Shortest distanceShapeAdistance 0ShapeB
Closest points (witness)
Separating vectors
Minimum translational distancedistance 0
Points of deepest penetration
Minimum separating vector
What is a contact point? Distance A separating normal Pair of closest pointsShapeAShapeB
Removing redundancy a b n*dShapeAandbShapeB
Contact point structurestruct ContactPoint{floatm distance;Vector3m normalB;Vector3m pointOnB;};
Single contact
Single contact point Works fast and stable for simple cases
Single contact
Single contact
Single contact
Contact generation Pipeline overviewA single contact pointContact clippingMultiple contact points using perturbationPersistent contact cachingInternal edges and contact normalsDynamic aabb tree acceleration structure
Box-Box Clipping Setup Identify referenceface Identify incident faceincidentreferencen
Box-Box Clippingclipping planes Clip incident faceagainst referenceface side planes(but not thereference face). Consider clip pointswith positivepenetration.n
Contact generation Pipeline overviewA single contact pointContact clippingMultiple contact points using perturbationPersistent contact cachingInternal edges and contact normalsDynamic aabb tree acceleration structure
Multiple points for general convex General convex might not have vertices/faces Compute multiple closest point samples All “single shot” within this simulation step
Perturbing around normal Works well but costs additional GJK queries
Perturbation pseudo codecontact computeContact(shapeA,transA,shapeB,transB, ho1);Matrix3x3 R p MatrixFromAxisAngle (ortho0, perturbationAngle);float angle 360 / number of iterations;for (i 0 ; i number of iterations;i ){Matrix3x3 Rn rbedA Rn.inverse() * R p * Rn * ,transB,.);updateContactDistance(transA,transB);}
Perturbing around normal Issue with round shapes: they start rolling
Perturbing around normal Replace contact at actual position Keep perturbation small Last resort: apply damping or skip round shapes
Perturbating in 3D
DEMO!!!
Contact generation Pipeline overviewA single contact pointContact clippingMultiple contact points using perturbationPersistent contact cachingInternal edges and contact normalsDynamic aabb tree acceleration structure
Incremental contact caching Add a single point at a time to small cache Refresh cache, update or remove points
Adding points to cache Check for duplicate points Use feature id or distance tolerance Reduce points when more than 4 points Always keep point with deepest penetration Try to maximize area
Cache local closest pointsShapeAandanbbShapeBd‘
Update contact distanceworldPosA transA(localPosA);worldPosB transB(localPosB);distance (worldPosA-worldPosB).dot(worldNormalB);anbd
Removing pointsanbd‘
Hybrid method Single shot manifold to build a full cache Only add a single point to a full cache Google for btPersistentManifold
Collision margins GJK doesn’t work in penetrating cases and penetration depth calculation is a bit slower
Collision margins Sphere can be a point with radius as margin
Compensate for margins
Collision margin approximationBcore shapeB
Collision margin approximationerrorerror
DEMO!!!
Contact generation Pipeline overviewA single contact pointContact clippingMultiple contact points using perturbationPersistent contact cachingInternal edges and contact normalsDynamic aabb tree acceleration structure
Internal edge collisions3D viewtriangle Btriangle Ainternal edge2D view
Internal edge collisions Object is colliding against triangle B Contact normal is pointing against velocitytriangle Btriangle A2D viewinternal edge
Solution 1: triangle normal Works well for flat connected trianglescorrectedcontact normaltriangle normal Btriangle A2D viewinternal edge
Solution 1: triangle normal Works well for concave edgescorrectedcontact normaltriangle normal Btriangle A2D viewinternal edge
Cliff problem Object can be pushed of a clifftriangle Acorrectedcontact normal2D viewtriangle normal Binternal edge
Solution 2: use voronoi regions Only adjust normal outside voronoi regiontriangle normal Aedge voronoi regiontriangle A2D viewtriangle normal Binternal edge
Solution 2: use voronoi regions No correction neededtriangle normal Aedge voronoi regiontriangle A2D viewtriangle normal Binternal edgetriangle B
Solution 2: use voronoi regions Rotate normal towards voronoi regiontriangle normal Aedge voronoi regiontriangle A2D viewtriangle normal Binternal edgetriangle B
Implementation Google for btInternalEdgeUtility
Contact generation Pipeline overviewA single contact pointContact clippingMultiple contact points using perturbationPersistent contact cachingInternal edges and contact normalsDynamic aabb tree acceleration structure
Collision Detection PipelineCollision on DetectionWorldtransforms etectoverlappingchild shapes(compound)Midphase (concave)Collision Detectionculling using acceleration structuresComputeclosestpointsGeneratefull contactmanifoldNarrowphaseCollision Detection
Concave shapes
Convex decomposition
Concave triangle mesh
Concave triangle mesh
Contact for concave shapes GJK and EPA can only deal with convex objectsConvex decompositionTriangle meshes: a single triangle is convexConcave mesh is just a collection of trianglesDeal with each triangle individually
Concave Shapes: AABB treessplitting axis
AABB tree structureroot nodeinternal nodes(don’t contain geometry)convexleaf nodes
AABB tree queries by traversal Find overlapping nodes given a AABB Find overlapping nodes given a Ray (from,to)
AABB tree traversal Recursive Stackless with skip indices History tracking (see Harada’s talk)
AABB tree Static AABB tree Can be optimized and quantized Allows for basic tree refit operator Dynamic AABB tree Can deal with change in topologyAdd and remove nodesIncrementally rebalance treeIs very general purpose
Adding a node Find leaf with smallest Manhattan distance
Implementation insert leaf nodevoid insertleaf(btDbvt* pdbvt,btDbvtNode* root,btDbvtNode* leaf) {if(!pdbvt- m root){pdbvt- m root leaf;leaf- parent 0;}if(!root- isleaf()) {do {root root- childs[Select(leaf- volume,root- childs[0]- volume,root- childs[1]- volume)];} while(!root- isleaf());}btDbvtNode* prev root- parent;btDbvtNode*node createnode(pdbvt,prev,leaf- volume,root- volume,0);if(prev) {prev- childs[indexof(root)] node;node- childs[0] root;root- parent node;node- childs[1] leaf;leaf- parent node;do {if(!prev- volume.Contain(node- volume))Merge(prev- childs[0]- volume,prev- childs[1]- volume,prev- volume);elsebreak;node prev;} while(0! (prev node- parent));}else {node- childs[0] root;root- parent node;node- childs[1] leaf;leaf- parent node;pdbvt- m root node;}}
Removing a leaf node Find and remove node and relink
Implementation remove leaf1: btDbvtNode*removeleaf(btDbvt* pdbvt, btDbvtNode* leaf){2:if(leaf pdbvt- m root){ pdbvt- m root 0; return(0);}3:btDbvtNode*parent leaf- parent;4:btDbvtNode*prev parent- parent;5:btDbvtNode*sibling parent- childs[1-indexof(leaf)];6:if(prev)7:{8:prev- childs[indexof(parent)] sibling;9:sibling- parent prev;10:deletenode(pdbvt,parent);11:while(prev) {12:const btDbvtVolumepb prev- volume;13:Merge(prev- childs[0]- volume,prev- childs[1]- volume,prev- volume);14:if(NotEqual(pb,prev- volume)){15:prev prev- parent;16:} else break;17:}18:return(prev?prev:pdbvt- m root);19: }20: else21: {22:pdbvt- m root sibling;23:sibling- parent 0;24:deletenode(pdbvt,parent);25:return(pdbvt- m root);26: }27: }
Update/move a leaf node If new AABB is contained by old do nothing Otherwise remove and re-insert leaf Re-insert at closest ancestor that was not resizedduring remove (see line 18 previous page) Expand AABB with margin Avoid updates due to jitter or small randommotion Expand AABB with velocity Handle the case of linear motion over n frames
Incremental tree optimization Rebalance tree removing and inserting a fewleaf nodes at a time
Dynamic AABB tree broadphaseFCBDA012FCD12BA131014FD3E58E71115CEAB
Dynamic BVH tree broadphase Keep two dynamic trees, one for movingobjects, other for objects (sleeping/static) Find neighbor pairs: Overlap M versus M and Overlap M versus SM: Moving DBVTS: Non-moving DBVTFPDCEABQRSTU
DEMO!!!
Summary Use a persistent manifold for multiple points keep contacts in local space and update distance Adjust normals to avoid internal edge collisions only if normal outside edge voronoi region Dynamic AABB trees are fast and versatileacceleration structure for broadphase pair search and ray test midphase for triangle meshes, cloth, deformables occlusion and view frustum culling
Bullet An open source 3D physics engine http://bulletphysics.org Written in C
culling using acceleration structures. Contact generation Pipeline overview A single contact point Contact clipping . DEMO!!! Contact generation Pipeline overview A single contact point Contact clipping Multiple contact points using perturbation Persistent contact caching
Modelos de iPod/iPhone que pueden conectarse a esta unidad Made for iPod nano (1st generation) iPod nano (2nd generation) iPod nano (3rd generation) iPod nano (4th generation) iPod nano (5th generation) iPod with video iPod classic iPod touch (1st generation) iPod touch (2nd generation) Works with
NEW BMW 7 SERIES. DR. FRIEDRICH EICHINER MEMBER OF THE BOARD OF MANAGEMENT OF BMW AG, FINANCE. The sixth-generation BMW 7 Series. TRADITION. 5th generation 2008-2015 1st generation 1977-1986 2nd generation 1986-1994 3rd generation 1994-2001 4th generation 2001-2008 6th generation 2015. Six
The following iPod, iPod nano, iPod classic, iPod touch and iPhone devices can be used with this system. Made for. iPod touch (5th generation)*. iPod touch (4th generation). iPod touch (3rd generation). iPod touch (2nd generation). iPod touch (1st generation). iPod classic. iPod nano (7th generation)*. iPod nano (6th generation)*
BASPINAL@SHAW.CA (Office Email) Contact Info Contact Info Contact Info Contact Info Contact Info Contact Info Contact Info Contact Info 8 JAG-2013-02024 s.22. FIGR0171 2013-12-04 10:55 AM Business Licences Expiring Between 2013-Dec-
span class "news_dt" Oct 09, 2017 /span · strong 2018 Stewardship theme: “Generation to Generation /strong ” It is my privilege to announce Trinity’s 2018 strong Stewardship /strong campaign! The theme for 2018, “Generation to Generation,” is a spot-on description of Trinity’s generational commitment to strong generosity /strong of spirit and resources! Although Trinity church has been around almost 200 years,
8 critical success factors for lead generation Brian J. Carroll 2 8 critical success factors for lead generation My book, Lead Generation for the Complex Sale (McGraw-Hill, 2006), was inspired by the inarguable fact that concerted lead generation endeavors were primarily that in name only until recently. Until now, "lead generation"
Address The contact’s address. Address 2 The contact’s address. City The contact’s city. State / Province / Region The contact’s state, province, or region. Postal Code The contact’s ZIP or Postal Code. Business Phone The contact’s business phone number. Cell Phone The contact’s cell phone num
Business tourism trends Adventure travel Executives are increasingly attracted to the adventure venue business trip, which combines team building and strategic planning needs with adventure travel. One company, for example, designs adventure vacations for organizations designed to boost morale and develop leadership in corporate employees, while providing a "perk" in the way of a rafting trip .