题目

3D Modeling with Silhouettes

概述

文章介绍了一种新的基于草图的建模方法,在二维上进行两个方向(前方和上方)的草图的绘制,画出轮廓之后,通过“组装”轮廓的形状,转化生成3D的模型。即将三维空间上的模型构建搬到了二维空间中来完成。

论文内容

简介

文章提出一种新的基于草图的建模方式,可以针对业余和专业的用户。设计师首先在二维中勾勒出一个物体,通常是从正面、侧面和顶部的视图,然后使用这些草图作为一个参考,在构建一个计算机上的三维模型。

从算法的角度,文章采用的是一个在CAD-CAM比较具有挑战性的方法:布尔运算(具体后面详述)。通过视觉上简单的交叉思想,就可以运用二维图像进行复杂的三维空间模型的构建。

pic1

解读

在我的印象中,包括从初中以来接触的只是,三维的模型应该是要由三幅图像,即xyz轴三幅图像才能形成完成的三维物体的。而且还没有办法包含模型内部的一些特殊的构建。而文章在这一点上面做出了很大的突破,只用了两幅图片,发现其实这两幅图片已经涵盖了所有的信息点了,然后解决模型内部的细节构建,则是运用了我们在计算机中十分常见的布尔运算,使用不同的性质(颜色)的线来代表不同的物体,然后直接生成模型后进行布尔操作,就生成了最终的结果。这方法的巧妙之处给我之前的思维带来了很大的冲击。

方法

(文章花了比较多的篇幅在介绍用户接口,即如何使用它,这里就不加详述,主要关注其算法实现的部分)

一个零件的形状是模拟它的轮廓线的交叉点,这是相同的视觉船体(hull)。减法部分被切走,通过相交的子牵引部分的轮廓线,并减去从原来的部分的结果。

在之前的方法中,计算任意多面体的布尔操作涉及许多特殊的情况,并在网格的一部分,一个错误会使其无法生成正确的表面其他地方。这是众所周知的难以产生强大的实施。

在本文中提出了一个简单的算法,可以计算出固体产生任意CSG树,从而应用于轮廓圆柱体。由于二维布尔运算碰到的特殊情况远比三维布尔运算少,由此产生的CSG实体各个方面依赖性就显著降低,所以这个算法易于实现,且具有鲁棒性。

pic2

最后还引入了一个简单的平滑算法的操作,生成一个表面拉普拉斯变化幅度最小的表面,并且仍然具有原始输入的形状。

CSG固体计算

我们通过检查每一个潜在的平面上一个最终的三维实体可能,计算一个CSG形状固体算法。每一个输入轮廓的每一部分都有一个这样的平面:它是一个平面,它有一个正常的正交的段和轮廓的观看方向。(将所有曲线轮廓为折线)

这个算法寻找对应于平面的表面上的收益如下:

首先,我们找到了每个轮廓的交点与平面的。我们标记这些交叉多边形集成电路。对于每一个轮廓,我们也找到了平面(相对于内部),这是我们的标签,这是一个子集的轮廓线的平面的交点。

然后,我们应用二维布尔运算的交叉点和面多边形对应的一组的轮廓,布尔操作应用在相应的轮廓线的固体,计算产生的固体。在一般情况下,布尔运算可以计算任何2个固体,每一个平面是已知的,产生平面的固体,允许进一步的操作,以适用于派生固体。

计算形状交叉口

给定一个平面,用于每个轮廓。

  1. 找到集成电路,轮廓线和平面的交点。

  2. 我们发现平面的轮廓与平面的表面的交点。

  3. 找到完全是在这条线的轮廓部分。

进行布尔运算

在一个平面上的布尔运算,可以计算两固体A和B,还有其内部连线I和S,表面的多边形是已知的,以产生固体C,由其自身的内部和表面的多边形定义。

最小化拉普拉斯变化幅度

我们采取平滑如FiberMesh中的方法,并将其应用为一系列简单的平滑迭代。每次迭代更新顶点的位置如下:

pic3

心得

这周看的这边文章也是十分有趣,也是类似于模型构建的。这篇就是介绍采用二维图像转化为三维图形的。并且这篇文章的可贵之处在于它不仅做出来了这个方法,而且把用户接口和界面也实现出来了,使用鼠标的操作,将复杂的算法转化为便捷的可视化操作。

而且这篇文章一个很大的冲击在于它只运用了两幅图像,就生成了三维的模型。这种思维上的转变带来的操作上的便捷,会是一种全新的设计体验。