2009年4月27日 星期一

何謂 non-manifold 問題

簡單來說,一個模型被稱為 non-manifold 如果它不能被攤開成一片連續的2D 平面.


2-manifold geometry :可以攤開成一片連續的2D 平面



non-manifold geometry : 必須攤開多片連續的2D 平面


non-manifold 的模型通常會造成後續的許多麻煩,例如 bevel無效,subdivision 失敗, render 錯誤等等的問題,所以建模時必須注意並且盡量避免做出non-manifold模型.

基本上一個non-manifold 模型會有至少以下三個因素之一:

non-manifold edge : 一個線(edge) 連到三個以上的面



non-manifold vertex :
  • 兩個以上的面分享一個點卻沒分享任何線, 或
  • 造成 non-manifold edge 的點



lamina face : 兩個以上的面分享共同的點和線



如何用 mel 程式來偵測non-manifold問題.

non-manifold vertex:
{
string $selected[]=`ls -sl`;
string $nmv[] = `polyInfo -nmv $selected`;
if(size($nmv)>0)
{
select -r $nmv;
warning("polygon has non-manifold vertices");
}
};


non-manifold edges :
{
string $selected[]=`ls -sl`;
string $nme[] = `polyInfo -nme $selected`;
if(size($nme)>0)
{
select -r $nme;
warning("polygon has non-manifold edges");
}
};


lamina faces:
{
string $selected[]=`ls -sl`;
string $lf[] = `polyInfo -lf $selected`;
if(size($lf)>0)
{
select -r $lf;
warning("polygon has lamina faces");
}
};


Maya 的 cleanup 功能 (Mesh->Cleanup...) 可以自動幫你移除掉 non-manifold / lamina faces ,可是出來的結果可能不是你預期的,所以還是建議手動把這些問題解決.

5 則留言:

  1. 假設你文章是強調 2-manifold 的話,那麼 non-manifold edge 就是指一個 edge 連接的 face != 2 的情況才是。

    回覆刪除
  2. 阿對,我有打錯.....
    原本我是寫 ->
    non-manifold edge :一個線(edge) 連到兩個以上的面.
    應該是 : 一個線(edge) 連到三個以上的面

    只連到一個面(face)的線(edge) = 邊線(border edge), 還是屬於 2-manifold, 因為 2-manifold 可以是 closed manifold 或 2-manifold with boundary.

    回覆刪除
  3. 看了半天才發現是葉教授你啊~

    回覆刪除