Site Tools


MeshToNurb 指令

摘要: 这是一个非常的具有争论且技术支持电话中多次被问及的指令。写这篇文章主要尝试解释这个指令常被人所误解的正确功能与用法,寄望能提供更多的用法。

MeshToNurb:什么是Mesh, 什么是Nurbs

为了全面了解如何使用这个指令,首先必须要了解一些基础的3D 构成几何例如Mesh与NURBS 对象。下面的内容将会简单的介绍一下这两种对象的特征。.

Meshes与NURBS

为了了解MeshToNurb指令如何作业, 首先必须明白Mesh模型与NURBS曲面模型的本质区别, 虽然很多时候他们都可以在计算机中来描绘一个3D物体,其实他们完全是使用不同的方法。

Mesh是由一系列的离散平面来描绘一个3D曲面, 非常类似使用一系列像素点来描绘一张图片。如果平面/像素点非常的小,那这个物体/图片看起来就非常的“顺滑”。如果我们把它数倍的放大,我们仍然能能够看到“像素块”或颗粒事实上这个物体并不是局部顺滑且连续的。

NURBS曲面是曲线与曲面数学表达式。它可以无损的表达任自由造型曲面且保证绝对顺滑,且当造型修改的时候仍然能维持其顺滑性。没有和Mesh一样的“像素块”或颗粒。因此它比相同像素图片中真人的脸更加具象。

要特提到一点:NURBS可以非常容易的转换为Mesh,就好象你可以使用相机轻易的获取到人脸的数码照片一样。反过来将Mesh转换为NURBS是非常困难的,就好象你要使用一张数码照片去构造一个人脸模型,这样有难度而且还没有自动执行的方法。  

本文中Mesh相关知识

Mesh是由一些平直面来描叙2D与3D的曲面。Rhino中既有3边的Mesh面也有4边的独立Mesh面。在Wireframe显示模式下Mesh显示为一些连接的线段;在Shaded显示模式下每个面都会给去一个直观显示的“曲面”。 Mesh面角落的点称之为顶点(Vertices)。多个面组合在一起就组成了一个Mesh对象。

重点提示: 虽然Mesh面通常都认为总是平直面, 但实际上并非如此。仅仅是三角形的Mesh面才能保证所有的面都为平直面。四边面可能会是一个平直面,但不能保证全部如此,非共面的四点会在空中描叙一个弯曲的区域。

文中NURBS相关知识識

NURBS中包含着丰富的信息,它是一个非常复杂的对象,本文介于篇幅有限不能详叙。NURBS是基于数学运算的曲线。NURBS曲面由一系列的两个方向(UV)上的曲线交织而成。我们将要讨论最简单的NURBS曲面-称之为“双直线(bilinear)”曲面,曲面UV方向的阶数都为1(例如直线),MeshToNurbs所创建的就是这样的曲面。当所有创建曲面的边缘线与曲面原始边缘一致我们称之为未剪切曲面(untrimmed),如果曲面被一条曲线或曲面边缘裁剪过,称之为剪切过曲面(trimmed)。

OK, 相关知识介绍到此为止,下面开始正题

MeshToNurb指令 - 能做什么?

限制:

首先要提到的是MeshToNurb指令并不能自动方式对Mesh物体执行“逆向工程”然后转换为顺滑的NURBS曲面对象。抱歉,这里没有奇迹。一旦一个3D物体转换为mesh模式,它就很难再转换为顺滑的NURBS物体。逆向工程是一件比较复杂的工程;这里有一篇介绍于Rhino内建工具进行逆向工程的文章。也有一些能自动处理的逆向工程软件,但软件的价格都很贵,有些专业的软件特别的贵。Rhino平台也有一些第三方开发的逆向插件(都是收费插件)。

作用与用途:

MeshToNurb能将一个(平直的)mesh结构的模型转换为(平直的)NURBS结构。它会在原始物体上的每一个Mesh面上创建一个NURBS曲面然后将其组合成一个复合曲面(如果原始的Mesh物体面数大于1)。

使用方法:

Mesh Quads都能转换为阶数为1的非剪切4边NURBS曲面。重申一下,“非剪切”意味着曲面的“原始”边缘与其外轮廓边缘相同且没有被剪切过。因此,转换后曲面的边缘会与Mesh的边缘线一致。这意味着:如果被转换的Mesh面为4边,且都在同一个平面上,则转换后的NURBS曲面也会是平直面。如果被转换的Mesh面的顶点不在同一个平面,则转换后的曲面也将是弯曲。这种曲面也叫“直纹曲面”。

Mesh Triangles 三角形Mesh都会是平直面。MeshtoNurb会把三角形Mesh转换为平直的被剪切过的NURBS曲面。这些被剪切过的NURBS曲面和四边面一样UV阶数都为1,且刚好是被四边形的对角线剪切成为三角形。

由此可知MeshToNurb所得到的都会是与原始Mesh边缘完全吻合的多重曲面(Polysurface),曲面的UV阶数都为1. 三角形曲面都会是平直的且是被剪切过的, 四边面将会是非剪切面,但不一定都是平直面。

重要提示: MeshToNurb指令在执行过程中并不能将四边面细分为三角平直曲面。

特别注意事项:

内存的使用与文件大小

一个Mesh物体可能包含成千上万甚至上亿的多边形。Mesh面是一种非常紧凑的存储格式。NURBS曲面的定义不会这么紧凑,由MeshToNurb转换一个Mesh对象为NURBS曲面很容易就会运行上百次的数据转换。应此在MeshToNurb指令处理成千上万的三角面时会让你的电脑内存溢出且会产生一个比较大的文件。如果你有一台最近购买的电脑,且有好的CPU与足够大的内存,且运行的是64为系统,这样的问题会遇到的少一些。

进一步的操作

如果你现在有一个由MeshToNurb指令所生成的NURBS对象,这个对象包括成千上万的极小NURBS曲面(就和被处理的Mesh一样)你将要做什么用呢?不仅如此-很多时候这个操作还会失败—因此你需要问你自己为何需要这么做

几何因素

了解这种几何类型的处理是至关重要的。上面有讲,四边Mesh一般都不会是平直的,且由MeshToNurb所得到的NURBS曲面也将会是弯曲的。他们并不能无收缩的被展开。如果是你对这些NURBS多重曲面使用UnrollSrf指令所得到的结果可能会不成功或是错误的。为了确保得到完全平直曲面且能正确的展开,在运行MeshToNurb指令之前请将所有的Mesh变成三角形,或是检所有的Mesh面是是否是平直的(会需要一段脚本来处理, Rhino现在并没有直接指令来处理)

限制…这个指令的用途

转换低多边形模型

MeshToNurb 对于转换低多边形模型很有用,通常转换为平直的NURBS曲面在Rhino中能做进一步的细化。例如你输入一个由SketchUp或者是其他类似的Mesh工具所创建的建筑模型,这些模型都会包含较大的平直Mesh面。使用MeshToNurb将其转为NURBS曲面,然后使用其他的一些指令例如MergeAllFaces, 你在Rhino中就能很快的得到一个简洁的NURBS模型且能进一步进行后续的工作。

展开对象

因为你没有办法展开Mesh物体,所以你可以使用MeshToNurb指令,然后可以展开所得到的多重曲面。注意前面提及的一些注意事项,文件尺寸与弯曲几何等。

将Mesh输出到不支持Mesh的程序

再次提醒,注意文件尺寸,虽然你有一个完全平直的模型但偶尔你也会遇到一些小麻烦。。

WIP msh 13.04.2011

zh/rhino/meshtonurb.txt · Last modified: 2015/09/14 (external edit)