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年8月5日 星期三

使用 dgProfiler 來檢測 rigging 的瓶頸

動畫師永遠會抱怨你的 rig 太慢, fps 只有 99.9999 等等的問題 ,所以很多時候你就得找個辦法加速你的 rig 了。首先最快的解決方法當然是直接出錢幫你的動畫師升級電腦,其次是找這位大神幫你加速:
如果這兩個辦法你都辦不到的話 那就只好自己乖乖想辦法加速了。其中一個方法就是透過 dgProfiler 檢測 rigging 的瓶頸到底在哪。 dgProfiler 是 maya 近年來(沒記錯的話是 2014 或 2015)增加的一個功能。首先要透過 plug-in manager 把 dgProfiler plugin  load 起來。




接下來你要準備一個角色有被keyframe 過的檔案,大概 50-60 frame 就夠了,不過記得盡量要全身都有動作的檔案會比較理想。 (以下這測試角色是 Mathilda Rig )



然後大開 DG Profiler 的 ui, 也不需要調整太多參數,大概只要把Number of Runs 改為 2~3 就好了(目的是要讓這程式重複跑個幾遍避免一些誤差)。按下 Profile! 這工具就會開始 playback 你的場景,跑 n 次(number of runs) 之後會顯示出一些數據。





你可以把這數據導出成一個 cvs 檔,再用 excel 或 openoffice 或 LibreOffice這類的 spreadsheet editor 來顯示以及編輯這個檔案,找出整個 rig 的瓶頸。



以這個測試rig來說,主要的兇手大概就是CT_headLattice_dfm (lattice) 還有一些 skinCluster. 如果有辦法加速這幾個 nodes 的話,就可以讓整個 rig 的數度再提升一些。不過說實話啦,有時候真的升級電腦是個快速又省時間(也等於省錢)的方法!

2015年7月13日 星期一

Maya 2015 的 ui mixin class 讓你可以很輕鬆把一個 ui widget 變成 maya 介面的 dockable item

現在在 maya 裡寫 python 的 qt ui 比以前方便多了。2014版本開始把 pyside 完全包在 maya 裡,2015 版本更是加了一些 mixin class 讓寫 pyside ui 簡單許多,其中一個 mixin 就是 MayaQWidgetDockableMixin . 這個 mixin class 讓你繼承他之後可以 生成一個 widget 然後直接用 .show(dockable=True) 讓它顯示成 maya ui 的 dockable item.


簡單的 UI 範例 :
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
from PySide import QtCore, QtGui

class MyWidget(MayaQWidgetDockableMixin,QtGui.QWidget):
    def __init__(self,parent=None):
        super(MyWidget, self).__init__(parent=parent)
        
        self.setWindowTitle("my widget")
        
        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)
        
        btn1 = QtGui.QPushButton("run this")
        layout.addWidget(btn1)
        
        btn2 = QtGui.QPushButton("run that")
        layout.addWidget(btn2)
        
        spacer = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        layout.addSpacerItem(spacer)


newWidget = MyWidget()
newWidget.show(dockable=True)
        
        


效果:



Maya PySide UI 參考資料:




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 調整裏頭的參數。







2015年1月17日 星期六

python 小程式 : 使用一圈的線 + 一個點來選取一群面。





當我們需要選取某一塊模型面時都會常常遇到不小心選錯或漏選一些面的這種問題,尤其是像以上這種結構比較複雜的模型特別容易發生。
以下這個程式可以幫助我們快速選取 edge loop 裡的面,只要選取一圈的線加上一個圈裡的點 就可以轉換成那一圈裏的面了。

 (由於程式有點長 所以放到 github gist 方便大家瀏覽 + copy paste)

程式連結






打開連結後按下右邊的 RAW 按鈕就可以把程式複製貼到 maya script editor 裡執行 (或做成 shelf 按鈕 或 快速鍵)