2017年4月26日 星期三
2016年6月22日 星期三
如何把一個 transform 裡存在多個 shapes 的物件獨立出來 (how to separate multiple shapes inside one transform node)
有些工具或外掛會產生出向這種一個 transform 裡存在多個 shapes 的物件。這可能是為了效能關係或其他因素,不過就可能會造成其他一些軟體,工具,或 renderer 無法正常運作。
以下這段小程式可以幫你把這些shapes 拆成"正常"獨立的物件。
2016年6月7日 星期二
切換邊界線的顯示 ( toggle border edges )
以下的 python script 可以切換邊界線 (border edge) 在 viewport 上的的顯示:
import maya.mel as mm
borderSize = 8
mm.eval("ToggleBorderEdges")
mm.eval("polyOptions -activeObjects -sizeBorder {}".format(borderSize))
若要直接選邊界線的話則是執行以下這幾行程式:
import maya.cmds as mc
mc.softSelect(softSelectEnabled=0)
mc.polySelectConstraint(mode=3,type=0x8000,where=1)
mc.polySelectConstraint(disable=1)
2015年3月19日 星期四
Necklace 外掛 (Maya python plugin) : 在曲線上產生以及編輯多個物件的動態。
Necklace 是我最近發布的一套open source Maya python plug-in, 可以幫助我們簡單快速得在曲線上產生多個物件,並且可以控制物件的軸向還有動態。參考影片:
1. 套件下載完之後放到某個目錄,例如 C:\plug-ins\necklace
2. 打開 necklace.mod, 並且修改檔案裡的路徑,改為你的安裝路徑, e.g : C:\plug-ins\necklace
3. 編輯 maya 設定目錄裡的 maya.env (e.g : C:\users\rainmaker\documents\maya\2015-x64\maya.env),加上這個變數 : MAYA_MODULE_PATH = C:\plug-ins\necklace;4.開啟 maya,然後執行以下這一行 mel: source "necklaceSetup.mel";necklaceSetup(); shelf 上會增加一個 icon, 按下那個 icon 就可以使用簡易介面產生 necklace 物件。如果要進行細調,可以到 channel box 或 scriptEditor 找 testNecklace 的 node 調整裏頭的參數。
2. 打開 necklace.mod, 並且修改檔案裡的路徑,改為你的安裝路徑, e.g : C:\plug-ins\necklace
3. 編輯 maya 設定目錄裡的 maya.env (e.g : C:\users\rainmaker\documents\maya\2015-x64\maya.env),加上這個變數 : MAYA_MODULE_PATH = C:\plug-ins\necklace;4.開啟 maya,然後執行以下這一行 mel: source "necklaceSetup.mel";necklaceSetup(); shelf 上會增加一個 icon, 按下那個 icon 就可以使用簡易介面產生 necklace 物件。如果要進行細調,可以到 channel box 或 scriptEditor 找 testNecklace 的 node 調整裏頭的參數。
2015年1月17日 星期六
python 小程式 : 使用一圈的線 + 一個點來選取一群面。
當我們需要選取某一塊模型面時都會常常遇到不小心選錯或漏選一些面的這種問題,尤其是像以上這種結構比較複雜的模型特別容易發生。
以下這個程式可以幫助我們快速選取 edge loop 裡的面,只要選取一圈的線加上一個圈裡的點 就可以轉換成那一圈裏的面了。
(由於程式有點長 所以放到 github gist 方便大家瀏覽 + copy paste)
打開連結後按下右邊的 RAW 按鈕就可以把程式複製貼到 maya script editor 裡執行 (或做成 shelf 按鈕 或 快速鍵)
2015年1月8日 星期四
python 小程式 : 安全複製模型面 不影響原本模型的 history 或 名稱
Maya 的 duplicate face 工能雖然不錯用,但複製完模型面之後原本的模型不管是名稱或是 history 都會受影響。名稱會變成 polySurface* ,node history 也同樣會加上polyChipOff,polySeparate 這種 node, 對有rigging 過或 reference 進來的模型都是一種困擾。因此,我前陣子寫下了以下這個小程 (python) 式可以避免這種副作用,複製後遠本那個模型不會受任何影響 !
import pymel.core as pm
import re
def getComponentId(component):
"""get id number from a component (i.e. pCube.vtx[12]) , and return as int (i.e. 12 ) ."""
tokens = re.split('[\[\]]',str(component))
try:
return int(tokens[1])
except (ValueError,IndexError):
return -1
faces = pm.filterExpand(ex=True,sm=34)
meshNode = pm.ls(faces,o=1)[0]
dupNode = pm.duplicate(meshNode)[0]
idList = [getComponentId(fc) for fc in faces]
pm.select("%s.f[*]"%str(dupNode),r=1)
preStr = str(dupNode)+".f[%d]"
pm.select([preStr%eachId for eachId in idList],d=1)
pm.delete()
2013年9月11日 星期三
把物件軸心移到原點 (0,0,0) 的位子
MEL:
{
string $sel[]=`ls -sl`;
for($each in $sel)
xform -ws -piv 0 0 0 $each;
}
Pymel:
import pymel.core as pm
selected = pm.ls(sl=1)
for eachSel in selected:
pm.xform(eachSel,ws=True,pivots=[0,0,0])
2012年2月13日 星期一
把曲線 軸心 ( pivot ) 移動到 cv[0] 的位子
mel 程式碼:
{
string $selected[] = `ls -sl`;
for($each in $selected)
{
float $pos[] =`pointPosition ($each+".cv[0]")`;
xform -ws -piv $pos[0] $pos[1] $pos[2] $each;
}
}
這工具會用在哪呢 ? 例如編輯頭髮曲線時就有可能會用到,因為軸心若是設定在毛根的部位會比較方便做縮放或旋轉的動作。
2011年5月2日 星期一
Maya 2012 (MEL) 一大進步 : ls 終於可以取出 component 選取順序 (selection order) 了
之前不管你怎麼選, ls 都會傳回一個 從小到大排列的 選取順序給你。例如我們選完 pCube1.vtx[2] , pCube1.vtx[0], pCube1.vtx[1] 後執行 ls, 傳回來的排列是:
{"pCube1.vtx[0]","pCube1.vtx[1]","pCube1.vtx[2]"}
Maya 2012 加了一個 flag 叫 -orderedSelection. 使用這個 flag 就可以取到:
{"pCube1.vtx[2]","pCube1.vtx[0]","pCube1.vtx[1]"}
這又有什麼好處呢 ? 寫建模工具時好處可多了。例如 我們如果要把第一個選到的點移到第二個點的話,以前都得用一些 undo 的 hack 才可以做到,但現在就可以很輕鬆利用 ls -orderedSelection 得到 選取順序的訊息。
2011年4月19日 星期二
從多組模型線 (poly edges) 產生 相對的 曲線 (curves)

因為目前 Maya 的 edge 轉 curve 功能只能針對 一組相連的 edges 來做轉換,所以寫了一個 maya mel 程式來處理多組相連edges 的 case 。
下載 : www.brainyart.me/tools/scripts/files/rainCurvesFromEdges1.0.zip
安裝:
1. 把 rainCurvesFromEdges.mel 放到 maya script 資料夾裡。
2. 重開 Maya。
用法:
1. 選取一組或多組 poly 線。
2. 執行這一行程式碼 : source "rainCurvesFromEdges.mel";rainCurvesFromEdges();
2010年11月20日 星期六
Maya 2011 新功能 : Point on Poly Constraint

Point on Poly Constraint 可以把 一個物件緊貼 (constrain) 在另外一個 polygon模型的點、線、或面上。 一但constraint 成功之後 這物件就會一直黏貼在主物件的身上,不管它怎麼甩、怎麼動都OK。這新功能可以說是部分取代了以前常用的 rivet tool (或是 maya hair follicle ) constraint 的做法。
Constraint 使用方法 : 先選取 poly模型上的一個點、線、或面,然後再加選一個要被 constraint的物件。選完再執行 Animation Menu 裡的 Constrain -> Point on Poly。

Point on Poly Constraint 效果可以參考以下的影片:
2010年4月17日 星期六
把曲線貼到模型表面上( attach curve to surface )

使用方法: 先選 curve, 再選模型,然後執行以下程式既可把curve 貼到模型表面上.
MEL:
{
string $selected[]=`ls -sl`;
if(size($selected)>1)
{
string $curve = $selected[0];
string $obj = $selected[1];
string $allCVs[] = `ls -fl ($curve+".cv[*]")`;
for($cv in $allCVs)
{
float $oriPos[] =`pointPosition -w $cv`;
string $newLoc[]=`spaceLocator -p $oriPos[0] $oriPos[1] $oriPos[2]`;
CenterPivot;
select -r $obj;
select -add $newLoc[0];
geometryConstraint -w 1;
float $newPos[]=`pointPosition -w $newLoc[0]`;
move -a $newPos[0] $newPos[1] $newPos[2] $cv;
delete $newLoc;
}
}
select -r $selected;
}
Pymel 1.0 :
from pymel.core import *
def curveToSurface():
selection = ls(sl=1)
currCurve = selection[0]
currObject = selection[1]
for each in currCurve.cv:
pos = each.getPosition(space='world')
newLoc = spaceLocator(p=pos)
mel.eval('CenterPivot')
select(currObject,r=1)
select(newLoc,add=1)
geometryConstraint(w=1)
locPos = pointPosition(newLoc,w=1)
each.setPosition(locPos,space='world')
delete(newLoc)

為何會想到要寫這工具呢?因為有時候要做配件(prop)模型時,會需要把物件與角色位子對齊(例如把戒指對到手指大小). 利用這工具就可以先建一些 curve, 然後使用 extrude/loft 把戒子生出來.
2010年1月26日 星期二
Maya bonus tools 功能之一: 在畫面上顯示模型線之長度 (edge length HUD)
Alias/Autodesk 從早期到現在都會把 Maya 一些額外的功能包成一組叫做 Bonus tools 的工具. 每一個Maya版本都會出一組 Bonus tools. 這些是 Maya 團隊從各處收納下來的功能,可是又不想把它放進官方版裡的menu (管理,版權等等的原因), 所以才叫 "Bonus".
Maya Bonus tools 官方下載網站是在: http://area.autodesk.com/bonus_tools
下載&安裝完之後重開Maya通常Bonus Tools 就會出現在 Menu 上了 . 若沒出現的話,執行以下這幾行即可:
Bonus Tools 裡其實有蠻多實用的功能,其中之一就是顯示模型線之長度 (edge length HUD). 切換這功能的開關是在 Bonus Tools->Modeling->Toggle Edge Length HUD.

這功能還可以顯示多條線的總長度呢!
Maya Bonus tools 官方下載網站是在: http://area.autodesk.com/bonus_tools
下載&安裝完之後重開Maya通常Bonus Tools 就會出現在 Menu 上了 . 若沒出現的話,執行以下這幾行即可:
{
scriptJob
-permanent
-event "MenuModeChanged" "bonusToolsMenu";
bonusToolsMenu;
}
Bonus Tools 裡其實有蠻多實用的功能,其中之一就是顯示模型線之長度 (edge length HUD). 切換這功能的開關是在 Bonus Tools->Modeling->Toggle Edge Length HUD.

這功能還可以顯示多條線的總長度呢!
2009年10月11日 星期日
CGSociety 免費模型下載 (obj,mb,xsi,lwo,3ds等格式)
CGSociety 有提共蠻多免費模型讓我們學習與參考. 由於CGSociety是個專業2D/3D artist討論區,他們提共的模型品質都還算不錯.
以下有五個下載點, 每個部份大概有 10-20個模型.要注意的是,這些模型都不能拿來賺錢用 :-]
Note that these models are for personal learning only and are NOT FOR COMMERCIAL USE. If any models found in these sets are used in a commercial setting, or without copyright given to the authors, you may be liable to pay licensing fees.
Part 1 : http://features.cgsociety.org/story_custom.php?story_id=580
Part2 : http://features.cgsociety.org/story_custom.php?story_id=619
Part 3 : http://features.cgsociety.org/story_custom.php?story_id=672
Part 4 : http://features.cgsociety.org/story_custom.php?story_id=728
Part 5 : http://features.cgsociety.org/story_custom.php?story_id=824
2009年9月28日 星期一
調整旋轉軸(rotation axis) 方向
有時候為了要讓物件可以旋轉得比較順,我們會想要調整該物件的 local 旋轉軸(local rotation axis)軸向. 調整方法如下:
- 切換到 component mode.
- 把問號 ( ? ) 這圖示打開.
- 選取我們想調整的物件,然後就可以開始把旋轉軸調到我們要的方向.
- 切換回 object mode. Local 旋轉軸已變成剛調好的軸向.
2009年9月10日 星期四
2009年8月31日 星期一
快速貼參考圖( reference image)
不管在建模或貼圖等等時,我們常常都需要把圖片引進/導入Maya,當參考也好或是當背景圖. 一般的做法是手動建立一個plane,然後貼一個 lambert shader, 然後把圖貼到lambert的color上,然後再調整長寬比率.這些步驟做多了就會覺得有點煩 , 於是我寫了一個程式來加速整個過程. 你只需要指定你要引進的圖片,它就可以幫你做以上的那些步驟. 多方便啊!
下載 : rainCreateRefPlane (最新更新: 2009-08-31)
安裝 :
下載 : rainCreateRefPlane (最新更新: 2009-08-31)
安裝 :
- 把 rainCreateRefPlaneSetup.mel 與及 rainCreateRefPlane.mel 放到 maya script 目錄底下.
- 打開 Maya, 然後執行 rainCreateRefPlaneSetup .
2009年7月5日 星期日
鏡射模型會遇到的問題之一 : normal 方向反了
當我們想把某一邊的模型鏡射 (mirror)到另一邊的時候, 一個很常見的做法就是使用 duplicate special , scaleX 或 scaleY或 scaleZ 設成 -1 . 要小心的是如果你把 scale -1 的模型做 freeze transformation 或 輸出成類似 obj 格式的話, 你所鏡射出來的模型normal方向會是反的.
2009年5月24日 星期日
快速 設定 Mental Ray Wireframe Render
建模師的作品集裡頭通常都會有所謂的 wireframe render,用來突顯該建模師的佈線控制能力. Maya 的 Mental Ray 有一個叫做 contour shader 功能可以用來 render 出 wireframe, 可是操作上對於不常用Mental Ray 的使用者來說可能不太直覺.
在這我介紹一個非商業免費使用的 Maya plugin 叫做 MultiTool, 裡面其中一個功能可以讓你輕鬆的把 Mental Ray Contour Shader 設定好,並且可以 render出 不錯的 wireframe render.
以下是 MultiTool 的 安裝與使用方法(針對 assign contour shader 功能):
在這我介紹一個非商業免費使用的 Maya plugin 叫做 MultiTool, 裡面其中一個功能可以讓你輕鬆的把 Mental Ray Contour Shader 設定好,並且可以 render出 不錯的 wireframe render.
以下是 MultiTool 的 安裝與使用方法(針對 assign contour shader 功能):
- 下載點 : http://www.ticket01.com/multitool/index.html (目前支援 Windows & Mac 版本).下載完你會得到安裝檔. 執行此安裝檔.
- 安裝完畢之後打開Maya,然後在 Windows->Settings/Preferences->Plug-in Manager 裡把 MultiTool 打勾.
- 在Maya Menu Bar 上將會出現 Ticket 這個 Menu.
- 點選你要render wireframe 的模型,然後執行 Ticket->MultiTool->Assign Contour Shader.
- 按下 render. 別忘了把 render 軟體設成 mental ray. 你會發現除了該有的 render結果之外還會加上 polygon 的佈線. 不錯吧!
2009年4月15日 星期三
模型 normal 被鎖著
訂閱:
文章 (Atom)






























