曲面的变形是另一项成果显著的几何处理方法。如图2中间两图所示,我们希望中间左图的曲面能够变形到它的曲率方向对齐上面由流线引导出的光滑方向场。曲面的形状在每个局部由它的曲率刻画,所谓变形即是改变曲面的曲率。这里我们可以依赖的几何处理工具是曲面上曲率表达的离散化,即我们能够建立以三角网格表示的曲面上每顶点处曲率的函数表达式,该函数以三角网格每个顶点的三维坐标为变量。图形学中,大量的应用将该表达式做线性化处理,用以实现实时交互的变形,如实时地拖拽一个三维动物的手脚来改变它的姿态,模拟一块布料碰撞物体,甚至捕捉重建运动中人的动态等。 在图3中,我们看到更多以对齐流线的方法构造曲面的结果。这些结果均符合我们观察曲线时对物体空间形状的想象。
图3 更多的对齐流线曲面结果 用平面绘制构造自由曲面
图4 茶杯:参考图片、平面草图、和对应的三维物体(平面草图定义了正面的形状,背面通过对称获得) 很多时候我们想要构造的物体并不具有规则的线框,而是有着丰富的形状变化和细节,因此需要更灵活的线条来刻画这些更自由的形状。如图4所示,为了构造参考图片中给出的茶杯,我们绘制了中间所示的非常稀疏的平面草图,然后凭借算法构造出右图所示的有丰富变化、与图片相似的三维物体。 与第一个问题不同的是,这些零散的平面草图没有严密的结构,无法被转换到三维空间,因此我们无法通过寻找插值空间曲线的曲面的方法构造三维物体,而必须将平面草图所覆盖的区域直接转换到带有深度的三维形状。 与第一个问题相似的地方则是,除去物体边界线,这些零散的平面笔画很多仍然是以曲率线的方式刻画所期望的三维物体。为了区别于前面所述空间中的流线,我们称这些平面投影的曲率线为曲面弯折线。假设物体边界线的空间位置会通过其他方式给定,剩下的问题就是如何找到插值边界曲线的曲面,使得它的曲率方向投影到平面后与用户所画的弯折线一致。 借鉴第一个问题的解决思路,我们仍然寻求从弯折线导出的光滑方向场出发,以之作为曲面应具有的目标曲率场(见图5)。所不同的是,在空间曲面上每一点处的前后与左右为垂直方向,而投影到平面区域后,这些方向不再垂直。我们考虑到了这些差异,并定义了一个局部光滑的物体的曲率线在投影后应具有的属性。然后求解满足这些属性的平面曲率方向场(图5中图),最后寻找曲面使其对齐这个曲率场。
图5 从平面草图产生三维自由形状的算法流程 从左至右:输入的平面草图(其中的弯折线被自动标记了曲率正负)、产生覆盖平面区域的网格、构造对齐了弯折线的目标曲率方向场、最终求得的曲率场、和对应的空间曲面 另一个区别于第一个问题的方面在于,j2直播,此时的弯折线本身不带有曲率大小信息,仅仅包含曲率方向,而我们必须完整重现出曲率大小,才可以确定曲面的空间形状。我们采取两个步骤来解决这个问题:第一步是确定弯折线每段所代表的曲率正负,这通过将弯折线分解为简单弧线并利用弧线间的关系做出分类;第二步则是估计弯折线所应具有的曲率值大小。 曲线之间的曲率大小互相影响,且需要存在曲面能够实现特定的曲率,因此我们再一次直接从变化的曲面出发,求解变分问题,要求嵌入曲面中的弯折线所导出的曲率场与曲面自身的曲率一致(如图5右两图所示)。为了求解这个离散化到三角形网格的变分问题,我们采用迭代方法,每步迭代则是求解变分问题的线性近似问题。通过每步迭代求解线性方程组,对于如图5所示的曲面,约7千个变量的变分问题可以在3秒以内解决。 完整的物体,每个角度所能看到的只是一片曲面,其他表面被遮挡了。为了构造完整的物体,我们采用多个视角,每个视角下通过绘制草图构造对应的空间曲面,然后将各曲面合并成完整的物体。合并多个曲面,仍然是一个曲面变形的问题,只是这时我们需要每片曲面尽量保持自身形状的同时能够在相交处重合。
图6 通过绘制平面草图构造的三维物体 (责任编辑:本港台直播) |