根据Mesh生成Cage的心路历程(3)

自动生成Cage最自然的想法就是利用原网格,然后往法向扩张就好了。但事实并不是这么简单的。我想有必要先描述一下我们的Cage的目标。

(1) Cage必须是能够包围原Mesh。

(2) Cage是自适应的。例如,像手掌模型,我们希望可以生成包围每个手指头的Cage,或者是把手掌当成一个整体来包围的Cage。或者我们也可以使用交互来控制细节。

(3) Cage可以满足对偶性。例如,像动物模型,以脊柱为界,两旁的形体具有相似性,我们希望生成的Cage可以利用这个优点加速生成。不过我觉得这个还是有点难度的。

(4) Cage能够有一定的智能型。如果是应用到网格编辑这个领域,对于刚体运动我们希望位于关节处的细节多于其他部分。或者可以在关键点处加约束。

根据Mesh生成Cage的心路历程(3)_第1张图片

上图是一个还不错的Cage。

方法一:对原Mesh进行简化,然后使每个顶点往法向伸长一个给定的长度。虽然我没有用程序实现这个算法,但是预计会出现的问题自交。自交以后可以解决的方法是检测每个顶点是不是在Cage的内部,在时间上来说是很不可取的。

方法二:用一系列的OBB包围盒包围住模型。这个方法是看到Cookies在手工做Cage的时候想到的。并且David Levin也比较赞成这个idea。

下面是他的邮件原文:

About building a cage. I would start with a box enclosing the part of the shape we would like to deform. Then, the user may define a level of refinement. E.g., each face fo the cube will be subdivided to a 2x2 or 4x4 mesh, and triangulated. The cage will be now defined by moving this triangulation to be close to the object we are going to deform. Then, the crucial step is to move the trianguleted meshes on the face of the cube, toward the object, so that the triangulations stay valid, faces are not crossing each other, etc. I suggest that you will think about it, and think of an algorithm for moving the triangulation, and let me know if you go for it.

之后后面全部心思都用去写会议论文了,没有接下来进行研究。

方法三:对模型进行Segment,每两个Segment之间就会有一个Contour,用三角形面连接Contour应该可以形成Cage。这个方法有点类似于Ju Tao的Reusable Skinning Templates方法。

根据Mesh生成Cage的心路历程(3)_第2张图片

方法四:该方法类似于方法二,我们利用Tetrahedron来集合成Cage。如下图所示Steve Capell的Interactive Skeleton-Driven方法。之前也有浙大的黄劲用了软件NETGEN来生成四面体控制网格,但是这个网格不是一个Mesh整体,而是由很多Tetrahedron的集合,自然也就不能用上重心坐标了。我现在就想我是不是可以自己处理一下这个Tetrahedron的集合,去掉那些重合面不就是剩下了外壳。

根据Mesh生成Cage的心路历程(3)_第3张图片

方法五:利用距离场(Distance Fields)来生成外部点云,然后通过Marching Cube算法来生成Cage。

在寻找方法的过程中我差不多花了半年的时间,当然其中也包括自己的拖拖拉拉。

Distance Fields的算法目前已经很成熟了,而且还有有向距离场。我最后选择了GPU Gems3上的一个算法。

http://http.developer.nvidia.com/GPUGems3/gpugems3_ch34.html

根据Mesh生成Cage的心路历程(3)_第4张图片

使用距离场的概念其实和HC里面对Cage进行离散化是一个反过程。在HC里面我们是已知Cage,然后对Cage进行离散化。此时离散化的程度直接对最后的重心坐标精度产生影响。而我们采用GPU来首先对整个Mesh的AABB包围盒进行离散化,其离散程度是比较好控制的。在此浙大的Chuhua Xian在Automatic Generation of Coarse Bounding Cage里面就是使用这种逆过程。我在做HC的时候事实上已经把前面一部分做完了,但是就是没有想到如何去把这些Cell变成Mesh的。呵呵,我在想方法四,既然Cell可以最后规整为Mesh,那么Tetrahedon应该也是可以的。

clip_image010

目前来说我觉得Chuhua Xian的方法只有两个缺点。其一,用cpu来生成cell会花去比较长的时间,尤其是对于稠密网格模型。其二,生成的Cage网格是没有什么规律的。

你可能感兴趣的:(根据Mesh生成Cage的心路历程(3))