3D建模 - 变形

时间:2009-08-31 02:09:29

标签: 3d morphing

我想要实现的总体目标是实现一个可定制的头像系统,可以改变身高,体重,体型等。这是怎么做到的?举一个简单的例子,当你改变一个头像的高度时,你不希望头部/眼睛/手指/等伸展出来,你只希望躯干和腿部改变尺寸,让其他一切保持不变(也许重新定位)。另一个例子是添加“啤酒肚”。这种变形的现有技术是什么?

每个变形的部分都是一个单独的网格吗?

如果是这样的话,两个被操纵的部分如何以可信的方式“粘住”在一起(它们改变了尺寸)。

如果没有,你如何将操作限制在网格的一个部分而不是其他部分?

我正在寻找一般技术以及具体的解决方案。这是一个通用的3D图形问题,但我正在使用Kit3D / Silverlight / C#。这类似于我发布的另一个问题,但这更为一般。

2 个答案:

答案 0 :(得分:2)

看看MakeHuman项目。 (警告,一些可能不安全的工作屏幕截图可能在主页上。大多数都很模糊,但是公平警告。)

MakeHuman使用的人体网格是一个简单的基础网格,其中包含一系列可在4或5轴上调整的目标。该程序的大部分是用Python编写的,因此它应该相对容易挖掘。 document site上还有一些白皮书和其他文件。

答案 1 :(得分:1)

如果您的几何体是基于网格的,那么我建议您尝试生成非线性变换(让我们称它们为“变形”)。

例如,您可以在3D世界中插入N个轴点,然后确定网格中每个顶点(点)受任何给定轴的影响程度。您可以使用反平方加权,例如高斯衰减,或某种3D Voronoi,或....然后移动枢轴点,然后根据权重图变形网格顶点。

如果对所有网格中的所有顶点执行此操作,并且网格构造良好,则应该永远不会出现间隙或不需要的交叉点。

另一种方法是使用具有衰减的局部变形。以3D缩放为例。您可以定义缩放操作的中心点C,但比例因子取决于距此基点的距离。因此,接近C的网格部分将会扩展很多,而远处的部分将会缩放很少或者根本不会缩放。