探秘Rhino:产品三维设计进阶必读
上QQ阅读APP看书,第一时间看更新

2.2 Rhino建模的整体思路

2.2.1 整体思路

建立Rhino模型的最终目的通常是要得到满意的实体模型或者曲面模型,建立Rhino模型的整体思路是点—线—面—体。实体是由封闭的边界面围合而成的,边界面可以是一个面(如球体),也可以是很多个面,面和面之间必须没有缝隙(水密的),面上不能有孔洞,这些面组合、封闭起来就形成实体。所以,建立面的模型在Rhino建模中是最重要的工作。

Rhino中建立曲面的主要指令有(以二、三或四个边缘曲线建立曲面)、(以平面曲线建立曲面)、(矩形平面(角对角))、(直线挤出)、(放样)、(单轨扫掠)、(双轨扫掠)、(从网线建立曲面)、(嵌面)、(旋转成形)等,它们都是以曲线为基础形成曲面,所以曲线质量的优劣将直接影响后续的曲面质量。如图2.1所示,使用(单轨扫掠)指令,由断面曲线a和路径b生成曲面S,曲面参数结构受曲线ab影响,所以曲线质量决定了曲面质量,而曲线ab由点生成,调整ab的形态也要靠控制点或者编辑点,所以Rhino建模的整体顺序是由点及线,由线及面,由面及体,其中最重要的是曲线和曲面。

图2.1 由线生成面

2.2.2 组合与合并

(组合)指令是Rhino中使用最频繁的几个指令之一,它针对的是线和线、面和面之间的操作,曲线和曲线可以组合成多重曲线,面和面可以组合成多重曲面。如图2.2所示,曲线a的一个端点和曲线b的一个端点重合,可以用(组合)指令把它们组合成一条多重曲线。假设ab都是3阶曲线,它们的节点矢量都是{0,0,0,1,1,1},如果我们移动它们的公共控制点c,则这条多重曲线就会变为一条3阶的含有锐角点的曲线,它的节点矢量相应地修改为{0,0,0,1,1,1,2,2,2}。其实两条曲线组合起来的结果就相当于成为一条有锐角点的曲线,它们的组合点就是锐角点,可以通过删除锐角处的节点把它变成一条无法再分开的曲线,所以组合指令会暂时把要组合曲线变成同阶的曲线。如图2.3所示,3阶曲线a和2阶曲线b在c点连接,把它们组合后会暂时把曲线b由2阶升到3阶,变成一条有锐角点的曲线,下一步就可以执行删除c处节点指令,把它变成一条单一的曲线。

图2.2 同阶曲线组合

图2.3 不同阶曲线组合

关于组合,还有一个需要注意的问题就是:如果两条曲线端点之间有间隙,只要满足一定的条件,也可以把它们组合在一起。这个条件就是绝对公差。有时我们创建的曲线端点并不重合,但只要两个曲线最近端点之间的距离小于2倍的绝对公差,就可以把它们组合在一起。这一点比较特殊,因为在Rhino中其他指令的近似计算误差一般都是限制在1倍的绝对公差内,只有组合指令是2倍的公差。如图2.4所示,有两条曲线ab端点之间的距离为2mm,我们把绝对公差设为1mm,则可以把它们组合起来,组合后ab的端点都移动到它们的中点c,然后组合在一起。如果用(炸开)指令再把曲线炸开,又分解成两条曲线,不过它们的端点已经移动到c,端点位置已经改变。

图2.4 有间距的曲线的组合

曲面组合的情况与曲线不同,如图2.5所示,新建两个曲面,使用(分析曲线偏差值)指令分析两个曲面S1和S2公共边缘之间的间隙,图中a点处最大间隙为0.024,系统绝对公差为0.1,两个曲面边缘的最大间隙远远小于2倍的公差,因此可以把它们组合在一起。组合以后两个曲面仍然会保持原先的数据结构不变,曲面边缘之间的间隙同样保持不变,只是在拓扑关系(拓扑关系的讨论见3.4.2节)上认为两条曲面具有公共的边缘。曲面S1是u向3阶、v向1阶的曲面,曲面S2是u向4阶、v向2阶的曲面,二者的参数完全不同,组合以后两个曲面会保持各自的参数结构。

(合并曲面)指令与组合指令不同,它可以把两个曲面合并成一个单一曲面,很自然地,单一曲面具有统一的参数结构,因此,合并的条件是两个参与合并的曲面必须具有一样的参数结构。如图2.5所示中的两个曲面,它们的参数结构不同,如果要把它们合成一个曲面,则首先必须使它们的参数保持一致。所以在合并之前,首先把曲面S1也升阶为u向4阶、v向2阶(升阶算法详见3.2.8节),与曲面S2保持一致,然后才能把它们合并成一个曲面。如图2.6所示为合并以后的曲面控制点结构。需要注意的是,曲面剪切边缘因为不是曲面在结构上的真正边缘,所以无法对剪切边使用合并指令。

图2.5 曲面组合

图2.6 曲面合并

2.2.3 NURBS方法和细分建模方法

目前在CAD领域,在产品设计方面NURBS方法已经成为主流的设计工具,它更成为飞机、汽车、船舶设计领域不可分割的一部分,1991年制定了关于NURBS数据交换的国际标准,用于在不同的CAD工具之间交换数据,各种CAD应用也纷纷把它作为设计工具,如Rhino、Alias Design、I-DEAS等。除此以外,它在动画、游戏制作领域也得到了广泛应用,3ds Max、Maya等软件系统中都内嵌有NURBS建模工具。NURBS作为一种参数造型技术,它通过数学方程来建立曲面,有明确的解析表达,它建立的曲面光滑连续,并能够精确地计算曲面上每一个点的坐标和参数,这是它的优势所在。而它的不足之处在于它是定义在矩形参数空间内,它所建立曲面的拓扑结构一定是一个四边面,如果要建立复杂拓扑结构的模型,必须要用许多片NURBS曲面拼接才能完成,曲面片数量越多,拼接越困难,这就为建模带来很大的难度,也为设计人员快速掌握建模方法带来障碍。相对于此,细分建模方法能够克服NURBS在这方面的不足。

细分建模是与NURBS同时发展起来的一种造型技术,它的工作原理是从一个初始的网格造型开始,用另一个细化的造型来代替原始形态,这个细化的造型比原始造型更光滑,更接近于曲面。这样,用同样的细化规则可不断地细化造型,使之最终得到的造型非常接近曲面并可以用来近似地代替曲面。细分建模在许多3D软件,如3ds Max、Maya等中得到了广泛应用。我们举一个例子说明细分建模的特点。在3ds Max中先建立一个如图2.7左图所示的方块形体,然后再对这个形体施加mesh smooth的修改操作,也就是对它进行细分。经过4次细分之后,其造型如图2.7右图所示,形成了一个与方块形体形状相近但却表面光顺的造型,整个造型由同一个网格面构成。像这种拓扑形状的造型,如果用NURBS曲面来建构,不可能由一个曲面完成,必须要多张曲面拼接才行,而且需要花费很多时间衔接各个拼接曲面之间的连续性关系,才能保证拼合而成的整张曲面处处光滑连续。这里用细分建模的方法可以轻而易举地完成这个模型,这就是细分建模的最显著的优势:它可以很容易地建立任意拓扑形状的模型。这种特点非常有利于设计师灵活地设计和修改产品的造型,使设计师专注于造型本身,而不必费尽脑汁去考虑如何分片和缝合曲面。

图2.7 曲面细分

细分建模的优点很明显,但是目前在工业设计领域中用细分方法来建立产品模型却并不多见,这是因为目前的细分建模方法,细分后只是用多边形近似代替曲面,而且细分曲面没有明确的解析表达式,很难精确地计算和控制它的尺寸。在设计中常常需要计算产品的尺寸、质量、体积等参数,这就需要所建的模型要非常精确才行,这就限制了目前的细分建模方法在产品设计上的应用。

目前在CAD领域,一个重要的研究方向就是试图把NURBS的精确性和细分建模的拓扑灵活性结合在一起,给设计师提供一种既有造型的灵活性,又有足够的精确性,且能够满足造型设计以后的工程分析和生产需要的辅助设计工具。下面简单介绍在这一领域细分曲面的计算原理。

曲面的细分方法非常类似于现实中对于造型的切割、磨光方法。例如我们想将一块有棱有角的石头加工成一块圆形的造型,那么我们常用的方法就是将石头的棱边和尖角磨掉,石头的边数增加,更圆一些,再进一步将细化的棱边和尖角磨掉,这样一点一点地逐渐将所有的棱角磨掉,打磨成圆形,如图2.8所示。这种切割和磨光加工方法的原理其实可以用数学几何方法来总结和表示。事实上,Bezier曲线本身就是割角曲线的一种,我们在第1章中讨论了Bezier曲线的解析表达式,现在来看一下如何用几何作图法绘出Bezier曲线。早在1959年左右,法国雪铁龙公司的de Casteljau已经发现用几何作图方法能够产生圆滑的曲线。

图2.8 切割磨光

如图2.9中左图所示,是3段直线段组成的多段线,按照相同的比例用点分别分割这3个线段,分别把这3个线段平均分割成4段,abc分别是3个线段的四分之一分割点,连接abbc形成两个新线段,再用同样的比例分割abbc,得到新线段ef,再用同样比例找到ef的四分之一点BB就是所求曲线上的一个点。用同样的方法,依次找到并连接几条线段的中点,可以求得曲线上另一个点,如图2.9中的右图所示。

图2.9 递归割角获得Bezier曲线

依次类推,用不同的比例依次分割各条边并递推,可以求得整条曲线上的所有的点,这就是递归割角法求曲线的方法。可以证明,用这种方法求得的曲线就是Bezier曲线。我们知道,Bezier曲线是NURBS曲线的一个特例,NURBS曲线是Bezier曲线更一般的形式,那么能否找到一种方法,把多边形切割磨光成NURBS曲线呢?也就是能否通过某种细分的方法,把多边形细分成NURBS曲线?

在本书第3章中,将讲述在NURBS曲线中插入节点的算法,利用这种算法,插入节点后曲线的形状将不会发生变化。只要改变节点矢量和几个相关控制点的位置,新的控制点位置就相当于把旧的控制多边形割角,割角后控制多边形的形状会与曲线更接近,插入节点越多,控制多边形与曲线的形状越一致。很自然地我们考虑,如果反过来,我们能否通过一步步地对控制多边形割角,从而使控制多边形最终收敛于NURBS曲线呢?答案是肯定的。1978年,E.Catmull和J.Clark发表了《在任意拓扑网格上递归产生B样条曲面》的论文,提出了一种对任意拓扑网格进行细分的方法。利用这种方法,可以把任意拓扑的多边形网格逐渐细分,其细分的极限就是最终多边形网格收敛成为B样条曲面。

如图2.10所示,在Rhino中用(控制点曲线)指令建立一条3阶曲线,输入5个控制点,那么这条曲线有一个内部节点,如图2.10中最左边黑色图形所示。执行(插入节点)指令,在命令选项中选择“自动”,则程序会在每两个节点的中点各插入一个节点,插入节点后曲线形状不发生变化,而相关的控制点位置会发生改变,相当于新加入的节点自动加入两个新控制点,如图2.10中中间红色的图形所示,可以看出新的控制点多边形相当于把旧的控制多边形的角切割磨光了一样,新的控制多边形向曲线靠近。我们再执行一次(插入节点)指令,在命令选项中选择“自动”,则程序会自动插入4个新节点,与刚才的计算相似,会把旧的控制多边形的角磨掉,再加入4个新的控制点,如图2.10中最右边的蓝色图形所示,可以看出控制多边形的形状更接近于曲线。读者可以在Rhino中做一个实验,按照这样的步骤重复在曲线中间插入节点,控制多边形与曲线间的距离会越来越小,只要步骤重复的次数足够多,最终控制多边形的极限形状将与曲线重合。E.Catmull和J.Clark在论文中指出,每次插入节点,根据插入节点的算法,新控制点的位置可以由旧控制点的位置用公式计算出来。反过来,假如从一个控制多边形开始,我们只知道旧的多边形顶点的位置,那么通过这个公式就可以计算出割角后的新顶点位置,这样经过一次次的递推计算,多边形会不断细化,其极限位置就是一条3阶NURBS曲面。

图2.10 3阶NURBS曲线插入节点

上面的算法很容易就可以推广到曲面的情形。如图2.11所示,在Rhino中建立一个双向3阶的单跨距曲面,曲面有4×4共16个控制点,如图2.11左图所示。执行(插入节点)指令,自动在曲面uv向各插入一排节点,曲面形状没有变化,但会增加控制点,新的控制点有5×5共25个,如图2.11右图所示。新的控制点网格相当于对旧的控制点网格割角磨光而成,同样,新控制点的坐标可通过公式由旧的控制点坐标计算得到。

图2.11 3阶NURBS曲面插入节点

同样,假如我们有一个多边形模型,把它当作控制点网格,那么可以通过细分公式,一次次地把旧的控制点网格割角。如果细分的次数足够多,控制点网格最终会收敛于这个双向3阶曲面。

E.Catmull和J.Clark还把这种方法推广到任意拓扑形状的网格上面,从任意拓扑形状的网格开始,应用细分公式,依次递推出新的控制点网格,最终的多边形网格会收敛于3阶B样条曲面,这个B样条曲面可以是开放的曲面,也可以是封闭的实体,并且它与最初的多边形网格相同,可以是任意拓扑形状。这个任意拓扑形状B样条曲面可以是单张四边曲面,也可以是由数张B样条曲面组合而成,这些四边B样条曲面都是完整的曲面,没有剪切,曲面之间没有间隙,除了曲面上的奇异点是G1连续以外,其余部分曲面上和曲面之间都是G2连续。细分建模方法在表现复杂拓扑形状的造型,如生物体、人体方面,具有很大的简便性优势,因此它在计算机绘图和动画领域得到了广泛应用。E.Catmull后来成为PIXAR(皮克斯)动画工作室的总裁,PIXAR在动画故事的创作以及计算机动画技术尤其是细分建模方面,拥有很多创新的应用。

近些年来,CAD领域对E.Catmull—J.Clark细分方法的后续研究掀起了一个新的热潮,其方向就是把细分建模的灵活性和NURBS建模的严密性有机融合在一起,把E.Catmull—J.Clark细分方法从均匀B样条曲面扩展到非均匀有理B样条曲面,能把任意拓扑的多边形网格细分得到NURBS曲面,并且发展出B样条的一般形式:T样条,给计算机建模带来极大的方便性。如图2.12所示,这是与图2.7中形状相同的多边形通过细分方法所得的最终曲面,这个曲面是一个由多张完整的标准四边3阶NURBS曲面组合而成的实体,整个曲面除了在奇异点处是G1连续以外,其余部分包括曲面组合拼接处都达到了G2连续。

图2.12 3阶NURBS细分曲面

2.2.4 NURBS曲面向网格面转换的控制参数

Rhino中,理论上曲线曲面上的每个点都可由方程计算出来。但在计算机中显示或用于模型渲染时,是不可能也不需要计算和显示曲线曲面上的每一个点的,只需把连续的曲线和曲面变成离散的多边形和多面体网格,来近似地表示曲线和曲面,然后在屏幕上渲染和显示这些有限的多边形网格即可。

此外,在将NURBS曲面模型输出成3DS、STL等格式的文件时,也需要将曲面网格化。将曲面变成网格的过程是先产生一个比较粗略的网格来拟合曲面,然后再不断地将这个粗略的网格细分,以得到更加逼近曲面的多边形网格,这个细分的过程就是不断迭代计算的过程。当然,要得到非常精细的网格,就需要更多的计算时间。

在Rhino中,模型转换成网格的精细程度可以由用户进行控制。打开“Rhino选项”对话框,左侧选择“网格”选项,即可在右侧窗口中设置渲染网格品质的参数,如图2.13所示。

图2.13 渲染网格的调整参数

这些参数用于控制曲面在计算机屏幕上显示网格的精度。此外,在将模型输出成3DS、STL等格式的文件时,也会弹出该设置对话框。

(1)渲染网格品质

选中“粗糙、较快”单选按钮,可按照既定参数产生粗略的渲染网格,速度较快;选中“平滑、较慢”单选按钮,可产生较精细的网格;选中“自定义”单选按钮,可通过设置7个参数,自行调整网格的品质。

(2)密度

密度是一个综合参数,介于0~1之间。其值越大,网格越密。

(3)最大角度

最大角度用于控制两个相邻网格面法线之间的夹角。

如图2.14所示,用多边形来表示曲面,左图中多边形相邻网格面法线之间的夹角是30°,右图中相邻网格面法线之间的夹角是18°,显而易见,右边的网格更密集,更逼近于曲面。因此,该数值越小,网格越密。

图2.14 最大角度

在一个造型不规则的网格上,相邻网格面法线之间的夹角各不相同,但其最大夹角不能大于设置的参数,否则程序会继续细化网格,直到满足条件为止。Rhino中,推荐参数取值在5~90之间。

(4)最大长宽比

初始的网格一般会以四边形的网格面开始,然后再以此为基础,逐渐细分网格。该参数用来设置初始四边形网格的长宽比。

如图2.15所示的榨汁机模型中,左图的最大长宽比为0,即将该参数关闭后的网格;右图是将该参数设置为1后的网格。可以看出,左边的网格没有长宽比参数限制,程序会根据模型的形状自动调整网格的长宽比,如果模型比较细长,将生成细长的网格来适应模型的形状。右边的模型强制性地将网格长宽比设置为1,从图中可以看出右边模型的网格都接近于长宽相等的方形,网格更加细密。左边模型的网格数量约为6万多个,右边模型网格数量超过14万个。可见,右边的网格细密得多。

图2.15 最大长宽比参数

细密的网格能带来更加精细的模型,但同时也会使得模型数据量增大。如果模型上细长或平坦的面比较多,那么将这个参数设置为0比较合适。设计师可根据模型质量的需要,来决定长宽比参数的大小。

(5)最小边缘长度

最小边缘长度是指所形成的网格边缘的长度。在由NURBS曲面转换成网格的过程中,是由程序控制的算法来自动生成网格,根据模型造型的转折,网格大小各不相同,这个参数用来控制起始四边网格面的边缘的最小长度,在网格不断细分的过程中,当细分后网格的最小边缘长度小于设置的数值时,将停止计算。这个参数预设的值是0.0001,其单位是模型文件中设置的单位。数值设置越大,网格越粗略,计算速度越快。这个参数与模型大小有关,如果模型尺寸非常大,这个数值也要相应地调大一些。如果设置为0,则这个选项不起作用。

(6)最大边缘长度

最大边缘长度用来控制四边网面边缘的最大长度。只要整个网格系统中有网格边缘长度大于这个数值,就会进一步细化网格,直到所有网格边缘长度都小于这个值为止。如果设置这个参数,它和“最小边缘长度”参数同时起作用,最终所有网格的边缘长度会介于最小边缘长度和最大边缘长度两个数值之间。如果设置为0,则这个选项不起作用。如图2.16所示,左边的图形是将最大边缘长度设置为0时的网格,程序自动决定网格的最大边缘长度;右边的图形中将此参数设置为10,则程序会不断细化网格,直到网格的最大边缘小于10个单位为止。从图中标出的网格大致尺寸对比,可以观察到网格的大小,右边的网格要细密得多。最大边缘长度这个选项与模型尺寸相关,大尺寸模型这个数值设置得要大一些,小尺寸模型这个数值要小一些,具体数值的大小可根据模型的用途来灵活确定。

图2.16 最大边缘长度参数

(7)边缘至曲面的最大距离

边缘至曲面的最大距离用来控制网格边缘的中点与曲面之间的距离,可以用它来控制转换后的网格和原来曲面之间的误差大小。如图2.17所示,左边的图形是将此参数设置为0,网格转换精度由其他的参数控制;右边的图形是将此参数设置为0.5,则转换时网格会不断细化,直到网格边缘(黄色线框)至曲面(红色线框)之间的距离小于0.5为止。可以看到,右边的网格比左边的网格细密很多。

图2.17 边缘至曲面的最大距离

(8)起始四角网格面的最小数目

起始四角网格面的最小数目用来设置各个曲面初始网格的最小数目,预设值是16个,Rhino建议值为0~10000。如图2.18所示,左边的模型转换成网格,起始网格面的最小数目是500,右边的数目是2000,则右边模型的初始网格比左边的模型多4倍,在此基础上再细分网格,右边的网格会比左边的网格细密很多。

图2.18 起始四角网格面的最小数目

(9)精细网格

选中该复选框后,Rhino会从初始网格开始,不断细化网格,直到满足前述的所有7个参数的要求以后,才会停止计算。只要有一个条件不满足,就会持续细化网格。

(10)不对齐接缝顶点

NURBS模型通常是由多片四边曲面组合拼接而成的,且通常要使曲面之间的拼接缝隙小于预设的系统公差,形成水密的(Water Tight)曲面。在将这些拼接的曲面转换成网格面时,如果选中该复选框,则形成的网格面之间的间隙也会小于系统公差,形成水密的网格。如果不选中该复选框,则不同曲面转换的网格面之间会形成间隙。如图2.19所示,这个模型的局部是榨汁机腿和机身之间的衔接部分,在建模时已经将曲面衔接成水密的曲面。在将曲面转换成网格时,如果不选中该复选框,则程序会自动细化网格,使相邻网格面之间具有共同的边缘,边缘之间的间隙小于系统公差,形成水密的网格,如左边图形所示;如果选中不对齐接缝顶点,则转换后不同的网格面之间会产生间隙,如右边图形所示。有缝隙的网格只用在一些要求不高的场合,而对于将曲面输出成网格进行快速成形或者有限元分析等用途的场合,则必须是水密的网格。

图2.19 是否对齐接缝顶点的不同效果

(11)平面最简化

选中该复选框时,平面的网格转换除了不对齐接缝顶点选项以外,其他所有选项都会被忽略,并以最少的网格面转换平面。