60 likes | 213 Vues
Neighbor Isolation Culling. 例子说明. 本文中所有例子均使用类似如下的三角形网格条带: 并且使用其侧视图描述空间形状(方便 2D 表达) 例如: 原图 侧视图 BVH (忽略最底层组成一个正方形的三角形对). 自碰撞检测 典型算法 1. 算法: SelfCollide (Node n) if n is leaf node return SelfCollide (n-> leftChild ) SelfCollide (n-> rightChild ) Collide(n-> leftChild , n-> rightChild )
E N D
例子说明 • 本文中所有例子均使用类似如下的三角形网格条带: • 并且使用其侧视图描述空间形状(方便2D表达) • 例如: • 原图侧视图 BVH • (忽略最底层组成一个正方形的三角形对)
自碰撞检测 典型算法 1 • 算法: • SelfCollide(Node n) • if n is leaf node return • SelfCollide(n->leftChild) • SelfCollide(n->rightChild) • Collide(n->leftChild, n->rightChild) • 特点: • BVH中所有中间结点其左右子树对 都会进行Collide操作 • 代价极大。
自碰撞检测 典型算法 2 • P. Volino and N. M. Thalmann, 1994 • 算法: • SelfCollide(Node n) • if n is leaf node then return • if normal cone test & contour test passed then return // culling here • SelfCollide(n->leftChild) • SelfCollide(n->rightChild) • Collide(n->leftChild, n->rightChild)
自碰撞检测 典型算法 2 • 例子: • 其左右孩子需要做collide操作的结点 • 特点:大大减少了collide操作的任务量 • 问题:contour test似乎没有很好的实现
算法2存在的问题 • 对于所有做collide操作的结点对,一定会递归下降到叶子结点,因为这对子树对应的两片三角网是邻接的——包含邻接三角形的任意层次包围盒均相交 • 对于更大规模的格网,适应性不佳 • 如下例: