NURBS全称是Non-UniformRationalB-Splines中文叫做非均匀有理B样条曲线,Rhinoceros中的模型曲线便是通过NRUBS曲线进行描述,曲面则是通过U和V两个方向的曲线集合来得到。Rhinoceros中不存在真正的实体,所谓实体即是通过表面封闭的曲面来得到。1NURBS概述在Rhinoceros中建模,理解NURBS的内在原理是建立良好模型的基础,在Rhinoceros中,有四个基本元素来定义一根NURBS曲线:阶(Degree)、控制点(ControlPoints)、节点(Knots)和评定规则(EvaluationRule),下面将配合使用Rhinoceros中的几何元素和分析工具来分别研究这些定义。在计算机图形学领域通常使用Gn连续评价来衡量曲面与曲面,曲线与曲线之间以及修补曲面或者修补曲线与原曲面曲线之间的连续方式以及平滑程度。Gn连续从连续的光滑程度分为G0连续(位置连续)、G1连续(切线连续)、G2连续(曲率连续)、G3连续(曲率变化连续)、G4连续(曲率变化率的变化率连续)甚至更高。在Rhinoceros中,用来评价曲线连续性的工具一般使用(CurvatureGraph)曲率图形工具,评价曲面的连续性一般使用(Zebra)斑马线曲率分析工具。这两者都位于建模工具栏中的分析工具集内。2几何学上的连续规则G0连续G0连续又称位置连续,是指两个对象(曲线或曲面)点点相接,相接处曲线无断点、曲面无漏缝。判断方法:当视觉上无法明显判断两个曲线或者曲面是否形成G0连续,可以使用工具检查,曲线使用曲率分析工具检查连续性,在GO转折处曲率的法线方向不重合,曲率图形相互分开。在Rhinoceros中,出现G0连续的曲线可以被连接成一条多重曲线G0连续出现G0连续的两个曲面在GO连续处斑马线出现错开的情况。G0连续转折处曲率变化细部。G1连续G1连续又称相切连续,发生G1连续的两个对象在相交处不仅点点连续,而且呈一阶导数的连续关系,也就是切线一致的关系。这种连续仅使其曲率图形在相交处的法线方向一致,而没有形成曲率连续关系,我们通常的对曲线进行导圆角即是这种情况。判断方法:曲线的曲率图形在交点处法线方向一致(代表切线方向一致),但半径不等,也就表现为曲率图形在相交处发生突变。G1连续曲面斑马线纹理连续但方向发生突变。在连续处的点和旁边两个控制点此3点位于同一条直线上,而且我们将①③点不论移动到哪个位置,只要位于该直线上(但相对②的位置方向不能发生变化),这两条曲线都将形成G1连续。我们可以通过这种方法来手动调节两条曲线形成G1连续。G2连续G2连续又称曲率连续,发生G2连续的两个对象在相交处点点连续,而且其曲率的切线方向和半径大小都一致。这种连续性的曲线其曲率图形会呈现一个G0连续的不发生间断的曲线形式,因此更高阶的连续其曲率图形也更加光滑。判断方法:曲线的曲率图形点点连续,不发生突变,在G2连续处曲率半径相等,且法线方向重合。G2连续曲面斑马线纹理连续且光滑。个人经验:在建筑学相关的建模当中,只要保证曲面转折处形成一个G1连续即可保证在后期渲染视图中达到一个光滑的转折效果。3NURBS深入理解前面提到:一根NURBS曲线包含以下四个概念:阶(Degree)、控制点(ControlPoints)、节点(Knots)和评定规则(EvaluationRule),下面来深入理解这几个概念的含义,以及“非均匀有理B样条曲线”得名的由来,理解相关概念会对进阶的Rhino建模会有很大帮助。3.1曲线的“阶”NURBS曲线的“阶”(Degree)即表示描述NURBS曲线的多项式次方,从几何学上可以知道y=Ax3+Bx2+Cx+D这类的多项式可以通过坐标系来描述一根曲线,在NURBS曲线的内在原理中,使用更为复杂的数学函数来表达一根曲线,但与以上数学方程式属于同一种逻辑。曲线的阶越高,代表曲线的光滑程度越高,但曲线的计算和储存消耗的资源也更多。曲线的阶是与曲线内部的连续性存在一定关系,2阶曲线只能达到G1的连续性,3阶曲线只能达到G2的连续性,4阶曲线只能达到G3的连续性,依次类推。3.2曲线的“控制点”控制点是通过类似于对曲线产生一个牵引力来影响曲线的造型,在NURBS曲线中,每个控制点的这个牵引力都有一个可变化的值,叫做“权重”(Weight)。NURBS曲线的规则当中,控制点数目的最小值等于Degree+1。在我们实际建模过程中,基本上都使用非有理曲线,只要不刻意改变曲线或曲面上控制点的权重值,权重的赋值都为1.0,但某些类型的曲线始终为有理曲线,例如圆和椭圆。有理与无理曲线3.3曲线的“节点”节点(Knot点)是NURBS曲线多项式中记录曲线参数值的点,也是NURBS中最难理解的概念。“节”(Knot):是一根B样条曲线的骨架,它是有一系列均匀赋值的区间构成,这一系列赋值叫做“节点矢量”。但注意节点矢量与几何学上的矢量有所不同,它不是一个三维空间的有向箭头,而是一系列数字。NURBS通过一个“代码规则”将这系列数值映射到坐标系上的点。一个标准的均匀赋值节点矢量以上节点矢量可以表示为{0,1,2,3,4,5,6,7},若此时恰好有7个控制点存在,一个简单的模型描述便是这7个控制点便通过其位置对这7个节点区间造成影响从而变化成一根曲线(实际规则要更加复杂)。NURBS曲线通过对B-样条曲线的均匀节点矢量进行扩展,允许节点矢量赋值不均匀,例如将以上节点矢量变为{0,1,2,3.3,4.67,5,6,7}那么就会由于某些控制点影响的区间发生变化,而造成形成与刚才均匀赋值下曲线形态不同的一根曲线。节点矢量赋值的规则:一、节点数字数目=阶数+控制点数-1;二、数字从前往后必须维持不变或者增大;三、节点值的重复数目必须小于等于阶数。因此对于一个3阶具有6个控制点的曲线来说:{0,0,0,1,2,3,3,3}是一个有效的节点列表,{0,0,0,3,2,4,4,4}则是一个无效的节点列表,因为出现了前面的数值大于后面的数值,{0,0,0,0,2,3,4,4}也是一个无效的节点列表,因为出现了四个重复节点值大于曲线的本身阶数3阶。节点矢量在出现重复的地方称为复节点-“MutilKnot”,重复数等于阶数的节点赋值又称为全复节点(Full-MultKnot)。NURBS一根曲线的节点赋值以全复节点开始,其中间全为单节点,最后以全复节点结束,而且节点值呈等差,那么这根NURBS曲线即为“均匀(Uniform)”的。对于3阶6个控制点的NURBS曲线而言{0,0,0,1,2,3,3,3}节点赋值即是一个均匀(Uniform)的节点赋值。反之,曲线则为不均匀。(Non-Uniform)的Grasshopper插件中提供了一个工具-“KnotsVector”可以得到任意阶数和控制点数量情况下均匀的节点矢量赋值。复节点若是出现在NURBS曲线内部,会导致降低曲线的连续性。重复一次,该处的连续性降低1,例如3阶曲线内部具有G2连续性,若是在内部出现一个全复节点,也就是节点赋值重复两次,那么在此点处将只具有G0的连续性,出现一个Kink锐角点。在Rhinoceros中,可以对曲线对象增加((InsertKnot))或者移除一个节点((RemoveKnot)),但无法对节点进行直接操作,可以通过插入锐角点命令在曲线内插入一个全复节点,并可炸开成为两条曲线。通常我们使用(Curve)以CV点建立曲线工具得到的曲线会是均匀曲线,而使用(InterpCrv)以内插点建立曲线工具得到的是不均匀的曲线(但可以设置子参数让其变为均匀)。3.4评定规则评定规则便是Rhinoceros使用的一套通过采集用户的输入行为来得到一个NURBS对象的计算机代码集合,这个规则集合包含了“阶”、“控制点”、“节点”、“B-样条曲线公式”、“坐标映射”等各种因素,通过采集用户的输入数据来得到一个NURBS对象,例如其最基础的一部分便是将节点矢量数值转换为坐标系上的点。3.5Rhinoceros中其他的一些概念编辑点(EditPoint)、锐角点(KinkPoint)、夹点(ClampedPoint)、焊接点(SeamPoint)及其他概念:•编辑点(EditPoint)编辑点也是可以用来直接进行拖动进行曲线造型的点,很容易误认为编辑点即曲线的节点。实际上编辑点虽然往往出现和节点重复的情况(在均匀曲线下),但编辑点只是由曲线节点平均值得到的点,编辑点的数量总是等于控制点。图3.*为同一NURBS曲线的节点(上)与编辑点(下)•夹点(ClampedPoint)我们随便建立一根不封闭的曲线,然后使用What命令检查这根曲线的详细信息,会发现“起点和终点为夹点”的描述,若是英文版,则描述为“Clampedatstartandend”。夹点可理解为曲线起始点处节点与控制点重合,因此所有的非封闭曲线都是夹点曲线,不包含锐角点的封闭曲线也都是夹点曲线仅有周期曲线为非夹点曲线(闭曲线)。当我们使用Join命令结合两根曲线时,被连接在一起的点便是一个焊接点(SeamPoint),焊接点的焊接对象都是夹点,也就是曲线的始末点。•焊接点(SeamPoint)结合在一起的两根曲线的连接点为焊接点•锐角点(KinkPoint)锐角点(KinkPoint)在Rhinoceros中指光滑曲线上发生G0连续的转折点。锐角点并非一种特殊类型点,而是由于以下两种情况的存在而出现锐角:一、当曲线内部出现复节点时,会导致曲线上产生锐角点。二、锐角点本身就是一个焊接点(SeamPoint),由于此点是同时属于两条直线的起始点或终点,因此导致锐角的出现。NURBS圆中含有复节点