打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
样条曲线伴随CAD发展的60年
userphoto

2023.07.05 上海

关注

序言

样条曲线,CAD的重要组成部分。同时,也是助推CAD发展的源动力之一。本文将叙述样条曲线的技术迭代伴随CAD发展的60年历史,以此致敬过去、现在及将来所有为CAD技术的建立与发展做出贡献的研发人员们!

“女神”

故事从一个汽车品牌说起,法国雪铁龙DS。目前市面上的DS汽车属于法国PSA集团在2009年(当时还属于“标致”集团旗下)时创立的豪华品牌,而真正的血脉来源于雪铁龙1955年至1975年推出的同名车系。

与国内谐音词“屌丝”相反的是,DS在法语中与deesse的发音(意为“女神”)相同,所以可以称为“女神”牌汽车。

在1955年的巴黎车展上,雪铁龙DS横空出世,在10天之内就收到80000份订金,这一记录一直保持了60多年,直到2016年由Tesla Model3亮相首日的180000份订金才被打破。

(Citroen DS 与 Tesla Model3)

在当时,设计如此优美曲线的汽车需要先进的数控机器,而数控机器依靠的是扎实的几何曲线技术。支撑雪铁龙DS制造的就是工程师Paul de Casteljau所发明的一种贝塞尔(Bezier)曲线的计算方法:De Casteljau算法。

(谍战悬疑电影《锅匠,裁缝,士兵,间谍》

中的雪铁龙DS)

你的曲线,我的算法

什么是Bezier曲线呢?

给定曲线的两个端点P0与P1。想象这两个点之间的第三个点P,P的位置可以使用参数t来表示,t在0到1之间。当t等于0时,P在P0处;当t等于1时,P在P1处。以t为参数的点P可以表示为:

P = lerp(P0, P1, t) //线性差值函数  = P0 + (P1-P0) * t

我们以二次贝塞尔曲线为例,Q0(t)是P0与P1之间的线性差值;Q1(t)是P1与P2之间的线性差值;二次贝塞尔曲线B(t)为Q0(t)与Q1(t)的线性差值。

高次贝塞尔曲线以此类推,这里也可以观察到 n次(degree) 的贝塞尔曲线是由 n+1个 控制点来定义的样条曲线。

本文注明:本文中degree译为“次”,order译为“阶”。在其它文献中,有把degree译为“度”或者“阶”,order译为“次”。无论中文翻译是什么形式,不变的是degree = order - 1

贝塞尔曲线的可以表示为:

其中下式被称为n次Bernstein基多项式:

其中:

这样的递归数值表示法被称为De Castelijau算法。

De Castelijau为什么会给非自己命名的曲线定义表达式呢?其原因是贝塞尔在1960’年代(1962年发表文章)广泛宣贯这种曲线并将其应用于雷诺汽车设计,大家也以贝塞尔的名字来命名该曲线,而早在1959年时De Castelijau就发明了贝塞尔曲线的表达算法,直到1980年才发表专利。

(上面的说法较为委婉,真实的情况是雪铁龙一开始反对Castelijau提出的曲线技术,但后来Castelijau以扎实的理论知识说服了雪铁龙使用该曲线。雪铁龙也将该技术进行严格保密。但天下没有不透风的墙,隔壁的雷诺得知了这种曲线的特性,并随即展开跟踪研究,贝塞尔带领团队最后也研发出了该曲线并应用于雷诺汽车设计。)

(左为Bezier,右为De Castelijau)

那么贝塞尔曲线的意义及其缺陷是什么呢?首先,它为计算机图形奠定了基础,我们可以根据参数表达式在计算机上绘制出曲线以服务于制造业。但贝塞尔曲线也有它的不足之处,曲线次数越高越不容易控制其形状,一般不超过四次;修改任意一个控制点都会造成整个曲线的走形,而非只影响局部;无法绘制精确圆形,一般通过4条三次贝塞尔曲线近似绘制(多条n次会增加控制难度)。

Approximate a circle with cubic Bézier curveshttps://spencermortensen.com/articles/bezier-circle/

为了克服贝塞尔曲线难控制以及不能绘制精准圆形的缺陷,B样条曲线出现了,B代表的是Basis的意思。

你的曲线,也是我的曲线

在1972年,De Boor的文章“On calculating with B-Splines与Cox的文章 “The numerical evaluation of B-Splines”同年发表。

(左为Carl De Boor (同时也是Matlab SplineToolBox开发者),右为M.G. Cox)


什么是B样条曲线呢?

比较好理解的一种方式是,B样条曲线其实是一组首尾衔接的贝塞尔曲线组成的。一个 k次(degree) 的B样条曲线由 n+1个 控制点的 n-k+1条 贝塞尔曲线组成。但即使这样也不代表B样条曲线同样会采用Bernstein基多项式,B样条曲线的表达式如下:


基函数可以使用Cox-de Boor递归公式表示:

t是从哪里来的呢?t被称为节点,它的取值来自一组被称为节点向量的集合:

其中 m = k + n +1。

简单的理解为什么B样条曲线会比贝塞尔曲线易于控制,公式的核心是控制点与基函数相乘,在支撑区间内乘积是有效的,而在支撑区间外乘积就是零,完全不起作用,这样达到了局部控制的作用,而非贝塞尔曲线牵一点而动全身。

局部控制的问题是解决了,但绘制精确的圆形还是不够。举世闻名的NURBS要出现了。

(不同次数的B样条曲线,绘制圆形依然吃力)


等我当老板就开干

纽约雪城大学博士生Ken Versprille在1975年发表了NURBS的论文。毕业后不久,Versprille就被Computervision公司聘为高级程序员,在CADD3中开发3D建模功能。NURBS一直是Versprille的兴趣所在,但他的老板坚持使用贝塞尔曲线,不愿意在日常开发中使用Versprille提出的NURBS。

若干年后,Versprille担任了Computervision公司的CTO。上台之后,NURBS开始被应用于CAD软件开发,Versprille主导了CADD4的架构工作。

(左为壮年时期的Versprille,右为现在的Versprille。眼神中充满睿智。)


NURBS能被广泛推广还得感谢波音的贡献。波音自己也在开发CAD/CAM软件,名为TIGER。开发人员的预研工作之一就是研究各种类型的曲线,他们也希望有一种可以表示所有类型曲线的通用方法。波音一开始没看过Versprille的论文,直到若干年后才提议将NURBS纳入IGES格式,并准备了充分地技术文档予以支撑这个提议。

在嗅到了波音准备使用NURBS的消息之后,美国结构动力学研究公司(简称SDRC)开始在软件中应用NURBS技术,算法的主要开发者是Wayne Tiller,他也是“The NURBS Book”一书的联合作者。

(图为Wayne Tiller)


Wayne Tiller在随后根据其经验开发出了NURBS库NLib。3D建模软件Rhino使用的NURBS库GSLib也是基于NLib衍生而来的。

NURBS比B样条曲线强在哪儿呢?那当然是NURBS可以表示圆形啦:

Representing a Circle or a Sphere with NURBShttps://www.geometrictools.com/Documentation/NURBSCircleSphere.pdf

NURBS全称非均匀有理B样条曲线。所谓非均匀是指节点向量中的节点值是不等差的。而有理的意思是表示该曲线的控制点都拥有不同的权重值,但这也不是说NURBS就一定是不同权重的,它表示的是这种曲线具有有理的可能性。实际上,大多数NURBS曲线是非有理曲线,在表示椭圆时(圆也是一种椭圆)才是有理曲线。

NURBS曲线表达式为下式:

这里k是控制点个数,n为次数(degree),节点数等于k+n-1。

w则为权重。NURBS相比B样条曲线增加了权重这个因子。

虽然NURBS比贝塞尔曲线、B样条曲线更具有灵活性,但NURBS也并非完美,我们来看下面这张图:

(左侧为NURBS绘制的人体头部模型,使用了4712个点。)

在实际生产(工业,影视特效等等)中,人们发现使用NURBS需要大量的控制点来支撑精确建模,无形中增加了计算机处理的负担,同时所产生的曲面的自然过渡也不尽如人意,皮克斯动画工作室甚至被逼上了使用SubD(细分建模)来绘制动画短片《棋逢对手》。针对NURBS的缺陷,另一项样条技术被发掘,那就是T-splines。

T-splines

T-splines最初出现于2003年,由杨百翰大学的Thomas W.Sederberg等人提出。2004年T-splines公司成立并开始商业化该技术,首先进入设计产品的就是Rhino与SolidWorks。在2007年,T-splines获批美国专利。

(Rhino T-splines 插件)


2011年,Autodesk收购了T-splines的专利技术并在之后几年融入到了Inventor和Fushion360中。

(Autodesk官网信息)

被Autodesk收购后,Rhino上的T-splines插件该怎么办呢?Autodesk的答复是:2017年1月7日起,Autodesk将不再为Rhino开发新版本或销售T样条、形状建模和实时渲染器插件。

Rhino也在使用SubD替换T-splines,目前Rhino支持将T-splines的导入物转换成SubD,NURBS,Mesh这三种形式。

国内也有从事T-splines技术开发的,如科大九韶团队:

(中国科学技术大学信息)

T-splines全称为T型连接非均匀有理B样条曲面技术。NURBS曲面展开是完整的矩形网格(此处可联想到Dynamo有一个API是获取NURBS曲面的U/V向等参曲线。如果需要做局部细化处理势必要同时增加网格的行数与列数,由此带来了性能负担。而T-splines则是通过算法找到T型点节点,允许对曲面进行局部细化(曲面更加光滑),相比NURBS曲面减少了控制点,从而提高几何处理性能。
《Comparison Between T-Spline Surface and NURBS Surface》https://www.iasj.net/iasj/pdf/75e98f97d052fa33

(左图是原始NURBS展开的网格,中图是NURBS曲面细化的网格,右图是T-splines细化的网格)


(左图为手部模型,中图是NURBS曲面应用效果,

右图是T-splines技术,解决了两个NURBS曲面在拼接时的缝隙)

(分别采用NURBS和T-splines针对自行车坐垫建模与水瓶建模的数据对比)

从上述图片及表格可知,T-splines对NURBS的提升是巨大的。有趣的是T-splines在研究之初同时得到了中美两国的国家自然科学基金的资助。

弯道在哪儿

最近有一个形容技术赶超的词特别火,叫“弯道超车”。尤其是以比亚迪为旗舰的我国新能源车对国外汽车形成的技术优势之后(此处指动力技术,不包含自动驾驶),这个词被用得更多了。我个人一直对这个词表示反感,事实上我们在新能源上的沉淀时间还是很久的,从一个个5号/7号小电池开始到刀片电池技术,这一路是克服了重重困难才走过来的。

回到基础软件,这一两年随着国产化基础软件的东风,似乎几何建模领域也刮起了一阵热潮。有点关系和能量的直接购买国外源代码,但这个源代码只是业务层的,底层Parasolid和ACIS内核源码怎么可能让我们打包带走。

《头文字D》的藤原拓海能成为车神,那是每天不论刮风下雨跑山路送豆腐练出来的。我们回头看样条技术发展的60多年,哪里有什么弯道,都是在不断实践与尝试中探寻新的方向。除了样条外,还有BRep,Mesh,约束求解器等等。

擦亮眼,醒醒脑,这条路依旧任重道远。

写在最

欢迎来我们的QQ群讨论。目前1,2,3,4群已接近饱和,所以
我们创建了5群,希望还没加入其它群的小伙伴能加入我们。虽然叫Revit二次开发群,但是其它的BIM开发技术我们也讨论 :)

QQ5群:210310256 (220/500)

QQ4群:894984932 (可加入)
QQ3群:1125105973
 (可加入)
QQ2群:326126195
QQ1群:480950299

QQ群总人数:~5220

公众号关注人数:~2000

公众号作者:梁裕卿
就职于广联达科技股份有限公司设计平台
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
曲面建模篇:如何构建一条高质量的曲线
贝塞尔曲线绘制原理
3Dmax高级建模方法总结2
贝塞尔曲线 总结
老师您好 能不能告诉我怎么求一条3次贝塞尔曲线的两个控制点
必学的犀牛Rhino建模技巧!太重要了!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服