Site Tools


The MeshToNurb 指令

摘要: 此指令常在電話技術支援中被使用者提出疑問及爭議,因此篇文章將試著解釋一些有用卻常被誤解的功能,希望能提供使用者更多的使用方法。

MeshToNurb :什麼是網格(Mesh)? 什麼是NURBS?

為了能夠徹底了解如何操作此項指令,首先必須先了解一些基礎的3D結構幾何,例如網格Mesh 及NURBS的特徵物件,下面的內容將會簡單介紹這兩種物件的特徵。.

網格與NURBS

要了解MeshToNurb指令的操作使用,首先必須理解網格(Mesh)與NURBS曲面模型的本質差異,雖然這兩種物件都可在電腦中描繪出3D物件,但是在操作上卻是使用完全不同的方法。

網格是利用一系列的離散平面來繪製一個3D曲面,類似由像素點來組成的圖片,如果平面/像素點非常的小,那麼所組成的物件/圖片看起來就會非常的”平滑”;如果我們把物件或是圖片的倍數放大,事實上物件已經不再局部的平滑及連續,但是我們仍可看到其組成的”像素點(pixelization)”及顆粒。

NURBS曲面是曲線及平面精確的圖像,其可以繪製出複雜且型式自由的平滑曲面,且當編輯造型時,仍能維持其平滑性。沒有和Mesh一樣的”像素點(pixelization)”或是”顆粒”,因此Nurbs所呈現出來的人臉圖像更加具體。

特別值得一提的是: NURBS隨時可以簡單地轉換成網格,如同你可以輕易地利用數位相機拍攝而得到一張肖像數位相片;相反的,從網格轉換成NURBS卻是非常困難的,就像利用數位相片去建構出肖像的模型,此方式有其難度而且尚未有快速且自動的方法。  

本文中Mesh的相關知識

網格是由一些平直面來繪製出2D與3D的曲面,在Rhino裡面有獨立的3邊與四邊的網格面,在框架模式下,網格面會以一系列的連接線段顯示;在著色模式下,每個面都會以一個可視的曲面來顯示;網格面角落的的點稱為頂點(Vertices)。多個面組合在一起就稱之為網格物件。

重點提示: 雖然網格面常被認為是平直面,但事實上並非如此。只有三角形平面才能保證所有面皆為平直面,四邊面可能會是一個平直面,但不能保證全部如此,四個不共面的點在空間中會形成一個彎曲的區域。

本文中NURBS的相關知識

在NURBS中有很豐富的訊息,NURBS是一個極為複雜的主題,在本文中將不會探討細節的部分。NURBS是建構在數學運算曲面基礎下,NURBS曲面一般是由一系列的NURBS曲線在兩個方向(“U”&”V”)交織而成的曲面。這裡將具體討論最簡單的NURBS曲面,就是所謂的”雙直線(bilinear)”曲面,MeshToNurbs所創建的曲面就是UV方向degree 1×1的曲面,當所建立的NURBS曲面邊緣與原始面邊緣一致時,稱之為未剪裁曲面(untrimmed),如果曲面被一條曲線或曲面邊緣剪裁過,就稱之為剪裁過曲面(trimmed)。

OK,相關知識到此為止,以下將開始討論正題

MeshToNurb指令 - 能做甚麼?

限制:

如上所述,MeshToNurb 無法自動的執行”逆向工程”將網格物件轉換為平滑的NURBS曲面物件。因為系統限制,所以並不會有例外,一旦一個3D模型是以網格的形式呈現,那麼將很難將其轉化為平滑的NURBS物件。有很多關於逆向工程的資訊都顯示其為一個較為複雜的工程。這裡有一篇介紹關於Rhino內建工具進行逆向工程的文章。也有一些專業自動計算部分逆向工程的軟體,但價格都不便宜。也有一些外掛程式適用於Rhino(但都不是免費提供)。

作用與用途:

MeshToNurb 能夠將(平直的)網格架構轉化為(平直的)NURBS架構,MeshToNurb會在每一個網格面上建立一個NURBS曲面並將其結合為多重曲面polysurface(如果原始網格物件面數多於1個)

使用方法:

四角網格面(Mesh Quads)能轉換成4邊未經修剪degree 1 的NURBS曲面,這邊要別提醒,”未經修剪”意味著曲面的”原始”邊緣與其外圍輪廓相同且未經修剪過。因此在此案例中,轉換後NURBS曲面定義的邊緣會與網格面的邊緣線是一致的。這代表著兩點,如果原來的網格面由4個共平面點所組成,而所有的邊緣線都在同一平面上,那麼轉換後的NURBS曲面也會是平直面;相反的,如果網格面的4個點不在同一平面,轉換後的NURBS曲面也不會在同一平面而形成扭曲的曲面。這種類型的曲面稱為”直紋面”。

三角網格 三角形定義上是平面的。 MeshToNurb會將網格三角轉換成修剪過的NURBS曲面,或奇點未修剪NURBS曲面(一個邊緣摺疊到一個點),取決於是否設置指令列選項。TrimTriangularFacesYesNo。該選項只在下指令前不做預選網格的狀況下才成立。修剪過的NURBS曲面會是1×1曲面的四邊形,再修剪掉一半,形成一個三角形。

由以上可知,從MeshToNurb得到的多重曲面(polysurface)會與原始網格模型邊緣完全相同,而且轉換後的NURBS曲面都會是degree 1×1,三角形曲面都會是平直而且被剪裁過,四邊曲面會是未經修剪但不一定是平直面。

重要提示: MeshToNurb指令不會將四角網格面再細分為更多的三角網格面。

特別注意事項:

記憶體使用與文件大小

網格物件可能包含了成千上萬個多邊形,網格是一種非常緊密的儲存格式,而NURBS曲面則寬鬆許多,由MeshToNurb轉換一個網格物件成為NURBS曲面很容易產生上百次數據轉換。MeshToNurb在執行由成千上萬個三角形所組成的複雜網格面會使電腦的記憶體容量不足且產生很大的檔案。建議您的電腦最好有足夠的記憶體並使用64位元操作系統,這樣在程式運算過程中能夠較順暢也能減少運算過程中問題的產生。

進一步操作

如果你現在有一個由MeshToNurb指令執行產生的由成千上萬極微小的NURBS曲面組合而成的NURBS物件(就像是網格一樣),你可以用它來做甚麼?事實上是不會很多的,而且多數正常的操作可能會失敗,因此你在操作前必須想清楚為何你需要使用它

幾何因素

了解此幾何類型的處理過程是很重要的,如上所述,四邊網格面不保證是平直的,而由MeshToNurb轉換得到的NURBS曲面也一樣,展開時都無法避免不變形。其無法未經延展就被發展使用,以這樣的NURBS多重曲面執行UnrollSrf指令,結果可能會失真或是不正確。為了確保能平直且能正確的展開,在執行MeshToNurb指令之前請務必先將網格轉換為三角形或是確認所有面都為平直(需要一個script來處理,目前Rhino尚無此功能)

既然有這麼多限制...這個指令到底能有甚麼用途

轉換邊數較少的多邊形

MeshToNurb對於轉換邊數較少的多邊形模型很有用,通常轉換為平直的NURBS曲面在Rhino中能夠進行進一步的工作。例如:如果輸入一個以網格為基礎,由Sketchup或類似程式架構而成且包含了較大型的平直網格面的建築模型,MeshToNurb指令將其轉換為NURBS曲面,接著配合其他指令,例如MergeAllFaces,那麼在Rhino中很快就可以得到一個簡潔乾淨的NURBS模型進而下一步的工作。

展開物件

由於無法展開網格物件,我們可以利用MeshToNurb指令執行動作,而後可以展開所得到的多重曲面。須注意前述所提及的一些注意事項、文件尺寸以及幾何扭曲的問題。

將網格輸出至不支援網格的程式

必須再次提醒,在操作MeshToNurb指令時必須注意文件大小。即使你可能擁有一個有好品質的模型,但是在執行過程中仍有可能遇到一些小問題。

WIP msh 13.04.2011

zh-tw/rhino/meshtonurb.txt · Last modified: 2020/08/14 (external edit)