这是一篇Siggraph2018的文章,作者为国立清华大学的YOU-EN LIN,朱宏国,以及bath大学的YONGLIANG YANG。
本文研究的是:由计算机从3D模型自动生成2D黑白扁平化设计图片的一种方法。扁平化设计的原则是“Less is More”,用最少的设计元素精确表达出原来的模型。
一&二 . Introduction&related works
扁平化设计有着很多自己的设计特点:
- 为了反映被挡住物体和加强深度的对比,设计者经常利用一种叫做halo-like gap region的设计方法
- 为了产生更强的对比度和强调单独图形的几何形状,设计者利用的方法为hollow lines and patches
现有的相关的研究有:
- Xu and Kaplan[2018] “Artistic Thresholding”:提出了一种只利用黑白两色绘制连续色调的图片的方法。他们主要是将分割的输入图片优化连接。虽然这也是基于图片的颜色标记,但我们的方法在以下两个方面更加的不同:1)我们的输入是3D模型;2)我们的公式基于扁平化设计原则;3)我们的图片包含有着最小色调的边界节点。
三、设计原则
- Contrast (对比) 设计的主题是黑色,背景是白色;
- Halo 利用halo效果强调几何图形的深度顺序,为了防止搞混深度的顺序,白色的gap是设计在被挡住物体上的。
- Hollow 一些部分上单独的几何体经常用不同的颜色来更好的表达。
- Consistency(一致性) 3D模型中提取出来的一样的部分应该使用一致的颜色。这能够帮助保存图形的语义信息,使用户更好的建模和理解。
- Prominence(突出) 经常使用突出的特征线来表达几何模型的信息。
- Clarity(清晰) 简洁设计提高可读性。
四.概述
输入:3D人工模型,观测角度,指定尺寸
输出:2D黑白扁平化设计
在我们的扁平化设计中有两种patch:shape patch & boundary patch;
shape patch:提取输入的模型
boundary patch:强调几何特征或者输入模型的空间结构;
五、2D/3D模型分析
5.1 3D模型分析
输入:多个组件的人工模型,由三角面片构成,三角面片表示成M={C1,C2,……,CN},我们基于面片之间的连接关系,将所有的面片分成单独的组件。为了统一变量的设置,我们将输入的模型归一化到x,y,z轴均为(-1.0,1.0)的三角坐标系中。我们用一个无向图表示多组件模型的结构,这里图的节点表示单独的组件,图的边连接和,为了简化模型,我们使用表示第i个面片和它对应图中的节点。我们使用[Yang et al. 2015]论文中的方法来确定对称的组件。我们首先估计每个组件的方向边界框(OBB)。然后通过查看OBB和模型是否都对齐来确定对称的两个组件(图5)。注意虽然将模型从3D映射到2D时很容易通过内部或相互的遮挡确定邻接关系,但这里暂时不考虑。我们也通过检测锋利的网格边界提取几何特征,这可以用来强调内部组件的特点。
5.2 2D图片分析
2D图片由3D输入模型使用一个基本的图形渲染流程在固定的相机视角下产生。为了保存输入模型的结构,我们使用一种特定的渲染分割算法,这种算法即考虑3D模型又考虑2D投影,当相关的三角面片的ID在框架模型中时,我们首先将3D模型渲染成2D图片。然后在像素级别,我们使用一种洪泛算法,根据面片的连结性使用临近的面片的像素,输出为一组2Dpatch,每个patch都由一个组件中邻接三角面片的像素组成(Figure 6)。注意一个面片的组件可能由于其他组件的遮挡或者自我遮挡生成多个2Dpatches。实际上,我们渲染的分辨率为1600*1200.视觉的距离为5.0,视角范围为60度。图7展示了产生的一些结果。
我们使用有向图 来表示2D图像分割的结构关系,由两种有向图的节点,一种是图形节点(patch node)代表单独的2D图形,我们也设计了边界节点来连接两个同一条边分割的相邻的图形和。边界节点的目的是更好的表达两个相邻图形的3D空间关系,并在合适的时候使用halo效果(详见第6部分)。对于每一个图节点,我们也记录对应三角面片组件的ID。有向图中的边包括两种类型:邻接边和内含边。邻接边单纯描述图节点的邻接关系,内含边指出一个patch node完全被另一个patch node包含的部分。在分割中两个相邻的部分定义了两个邻接边,方向为从被包含的patch node到被遮挡的patch node ,中间通过边界节点连接。两个相邻的patch遮挡关系通过检查depth buffer中的深度值来确定。内含边总是指向被包含patch node 。我们把邻接边和内含边的集合分别表示为和(图8).
六.提取设计优化
基于上述和,第二步是确定每一个patch node 的颜色是白或者黑。并且确定每个boundary node (边界点)是否要使用halo效果。因为颜色仅仅涉及黑色和白色并且halo效果只判断使用或者不使用,我们将该设计优化问题视为二元标记问题。更具体地,对于每个patch node ,我们加上一个二元颜色标记,当=0,代表该patch 为黑色,当=1,代表该patch为白色。对于每个边界节点我们加上一个二元标记来指出是否使用halo 效果。=1表示使用,=0表示不使用。最终2D图片由最大化下列目标函数产生:
这里的项分别代表neighber energy(邻接程度),consistency energy(一致程度)和background energy(背景程度),权重用来控制对应项的相关度。每个程度项反映的是在第三部分中讨论过的设计原则,我们现在详细描述一下每一项。
Neighbor energy 这个项强调相邻patch 的特征和空间关系,是由每一个有向图中邻接节点的三元组所决定的。对于每个三元组,根据的不同设定能够产生不同的设计。我们根据设计的特点进一步将三元组设计分成四种类型:‘merge’(合并),'contrast'(对比),'halo'和 'invalid', 其中,‘invalid’指当两个相邻的patches是不同颜色的时候,使用halo效果是错误的。其他三个类型的设计适合于不同的情况。‘contrast’类型的设计用于强调包含两个深度接近的邻接patches的空间关系。‘halo’类型用来反映两个有很大的深度差的邻接patches的遮挡关系,因为halo效果本来就是强调深度次序的。‘merge’类型只在当patches很小并且‘contrast’和‘halo’类型因为缺少空间或者辩认度而无法应用时使用。表1列出了所有可能的设计和对应的类型。下边我们将定量描述四种设计类型。
对于‘contrast’类型,数值如下定义:
ScaleContrast(Pi,Pj)是激活函数,当patch足够宽能够辩认时,只确定颜色对比。Relative(Pi,Pj)测量Pi和Pj的关联度,d(Bij)是Bij的归一化深度,Inclusion(Pi,Pj)反映Pi是否包含Pj。注意由于激活函数的存在,量化值的连续函数是被乘起来的而不是加起来。这只适用于patch的尺寸合适时的颜色对比,不易识别的特征应该使用加法。更具体的,单独的方程如下定义:
Width是patch的最小辩认尺寸(在我们的实验中为5个像素)D(Pi)是patch Pi传递的最大距离值,从patch的边界估计patch的宽度。
b(Pi,Pj)是Pi和Pj的共有边界的归一化长度,a(Pi)是Pi的归一化面积,在图9中我们可以看到,如果Pi和Pj能够被很容易的单独分辨出来(即各自的面积很大)并且对比强烈(即有很长的边界),那Pi和Pj有很强的相关性。注意类似的量化方法也用在[xu and Kaplan 2008]
当Pi和Pj由一个有向图的内含边连接时,返回Wi,否则返回1.在我们的实验中,我们使用Wi=1.5来进一步提高包含的patch的对比度。
对于‘halo’类型,数值如下定义:
Relative(Pi,Pj)和d(Bij)和‘contrast’类型定义相同。类似Scalecontrast,ScaleHalo(Pi,Pj)是一个激活函数只在patch有足够的宽度时使用halo效果,定义如下:
不同于ScaleContrast,这里我们使用D(Pi)而不是2D(Pi)来进一步限制patch的尺寸,因为halo的区域是在被遮挡的patch上进行绘制的,halo的区域和被遮挡的patch都需要在最后的设计中显示出来。
最后两种类型‘merge’和‘invalid’简单地定义为常数:
注意‘invalid’类型是尽量避免的,因此等于0。当‘contrast’和‘halo’类型不符合时,最好使用‘merge’类型,因此merge类型返回一个很小的正值。
整体的neighbor energy fn 由计算出的上述不同情况的所有三元组的和确定,定义如下:
这里
Consistency energy 这个项表示两个对应的组件是相同的或者对称的patches: Pm和Pn的颜色一致性,定义如下:
这里im是Pm的组件的ID,XNOR是同或操作(相同时输出1,不同时输出0),a(Pm)时patchPm的面积,方程min(a(Pm),a(Pn))用来根据patch的尺寸确定影响。
Background energy 这一项表示背景和前景的颜色对比,定义如下:
这里,是紧挨着背景的有向图节点的集合,表示白色的背景颜色,XOR是异或操作(相同时输出0,不同时输出1),Relative是关联函数,在前边已经定义过。
Optimization 我们使用置信传播[Yedidia et al. 2003]来最大化目标函数(1)并且得到最好的patch颜色和halo效果。根据经验,我们在所有的实验中设置。
6.1 突出主要特点
最好的扁平化设计主要考虑各组件间的几何特点和结构特点。组件内部的特点除了自我遮挡都已经考虑过了(比如轮廓线)。为了更好的设计,我们把突出的边界提取为每个面片的显著特征,因为它们能有效代表人工制作的模型。[Gal et al 2009]
突出的边界是指面片的边界由两面之间的锐角三角形构成。(>80度)
然后我们将突出边界投影到2D,并且使用洪泛算法追踪2D线条分割。在实验中,我们在最后的设计中使用一个特征线变量 L,仅仅当1*这是突出的,2*不影响已经做好的原本设计的外观。第一条原则使用公式 表示,其中Length(L)是L的长度,W是突出性的权重,在我们的实验中定义为10。第二条规则使用约束公式 这里P是L所在的patch,这里的符号定义与halo效果的定义相同。图10表示了强调突出的特点后的效果以及不强调的效果对比。
6.2 扁平化设计实现
当我们已经定义了如何提取patch nodes,boundary nodes 和sharp features之后,就能够对最终的设计方案进行渲染了。首先我们根据最优化颜色标签进行颜色确定,生成黑白部分的设计。这里每一个部分都对应一个模型的patch。然后我们在初始模型上生成边界patch,对于每个的boundary node边界节点,我们提取两个相邻的patch的边界,然后用半径为Width的盘状掩模(mask)在被遮挡patch上的每个边界像素上塑造halo区域(这个区域也是一个边界patch)显然Halo区域的宽度是Width,即最小可辨认Patch的宽度。符合突出特征线的边界patch也同上产生。对于2D特征线L,我们用半径为Width/2,圆心为L的每个像素点的盘状掩模刻画特征线区域(这也是一个边界Patch),特征线区域的宽度为Width
6.3 可调节比例的设计
我们的设计优化和生成算法是非常灵活的,能够产生多比例的设计图案,在大尺度的设计中包含更多的细节特征,能够更好的刻画输入模型,而在小尺寸的图案中只保留了突出特征来避免视觉混乱从而增加可读性。2D图像默认大小为最大尺度:1600*1200。一个生成最小尺度的图案的简单方法是:增加与输入模型的视线距离,并且保持优化中的Width不变。然而,这极大的影响了5.2中patch分割的质量,并且很容易导致分割结果出错。这是因为,在光栅化时因为使用了低分辨率的图片 导致小的三角面片被忽略了。相反地,我们建议在最好的分辨率上计算所有的设计,并且在优化过程中把Width进行分类(在我们的实验中是从5到35),最后的结果是通过最优化后的设计(最小辨认尺寸仍然为5)下采样得到的.为了简化变量的设置,我们利用一个比例变量 来直接控制。具体来说,当s=1时,使用Width=5的最大比例,s=0对应Width=35的最小比例,s与Width是线性一一映射。图11展示了三种不同比例的设计。
最小的比例的设计不是大比例的设计的下采样而是单独优化生成的,也可以增加Width的值到35以上来产生更小的作品,其限制只是在于映射的图案的尺寸。
6.4 可选择的用户控制
虽然我们的算法是自动进行的,我们的框架也提供允许用户为patch自定义颜色的功能,设计优化通过优化其他变量确定对应的颜色标签来约束用户。
七、结果和评价
我们在来自论文[Chen et al. 2003]的很多人造的不同种类的三位模型上测试了我们的框架,图13展示了一些自动生成的结果。这些结果都遵循前边提到的设计准则并且很好的展示了输入模型的特点。我们的框架也能够产生不同比例的设计结果,提高结果的可读性。更多的设计结果展示在文末的材料里(我分享了百度云链接)
7.1 性能
链接:https://pan.baidu.com/s/1v4G6K_pdfb3j-gAQs3k12w 提取码:b8q8