Maya:第七周

image.png

image.png

OpenMaya 對比 cmds優(yōu)勢:
1.適合插件的開發(fā),因?yàn)閾碛衏mds未公開的功能
2.由于是Maya C++ API的Python庫,速度上也會(huì)比cmds來的更快
3.在組件級別的對象(點(diǎn)邊面),處理的效率會(huì)大幅度超越cmds

image.png

測試環(huán)境:
對場景中的10000 polyCube 做位置 旋轉(zhuǎn) 隨機(jī),縮放統(tǒng)一設(shè)置 0.2,并改名字:


image.png

image.png
import maya.cmds as cmds

for i in xrange(0, 10000):
    cmds.polyCube(ch=False)[0]

Mel:


image.png
$sel = `ls -tr "pCube*" `;
$start_time =  `about -ct`;
for ($x=0; $x<size($sel); $x++)
{
    float $x_v=rand(-12.0,12.0);
    float $y_v=rand(-12.0,12.0);
    float $z_v=rand(-12.0,12.0);
//    string $new_name ="AAAA_" + ($x+1);
    setAttr ($sel[$x] + ".translate") -type "double3" $x_v $y_v $z_v;
    setAttr ($sel[$x] + ".rotate") -type "double3" $x_v $y_v $z_v;
    setAttr ($sel[$x] + ".scale") -type "double3" 0.2 0.2 0.2;
    rename($sel[$x], "AAAAA");
}
$end_time =  `about -ct`;

由于用的是about -ct 來看的系統(tǒng)時(shí)間,可以看到大約是1秒的間隔

Cmds:


image.png
# coding=utf8
import time

time_start = time.time()
sel = cmds.ls('pCube*', tr=True)
for obj in sel:
    x_val = random.uniform(-12, 12)
    y_val = random.uniform(-12, 12)
    z_val = random.uniform(-12, 12)
    cmds.setAttr('{}.t'.format(obj), x_val, y_val, z_val)
    cmds.setAttr('{}.r'.format(obj), x_val, y_val, z_val)
    cmds.setAttr('{}.s'.format(obj), 0.2, 0.2, 0.2)
    cmds.rename(obj, 'bbbbb')
time_end = time.time()

print(u'time:', time_end - time_start)

耗時(shí)大約2.01秒

Python Api:


image.png
# coding=utf8
import maya.OpenMaya as om

time_start = time.time()
original_sel = om.MSelectionList()
sel = cmds.ls('pCube*', tr=True)
for item in sel:
    original_sel.add(item)

mob = om.MObject()
mTransform = om.MFnTransform()

api_lit_iter = om.MItSelectionList(original_sel)
while not api_lit_iter.isDone():
    # random values
    x_val = random.uniform(-12, 12)
    y_val = random.uniform(-12, 12)
    z_val = random.uniform(-12, 12)
    api_lit_iter.getDependNode(mob)
    mTransform = om.MFnTransform(mob)
    for attr in ['translate', 'rotate', 'scale']:
        plug = mTransform.findPlug(attr)
        if attr == 'scale':
            x_val, y_val, z_val = [0.2, 0.2, 0.2]
        for index, val in enumerate([x_val, y_val, z_val]):
            child_plug = plug.child(index)
            t_attr_val = plug.asDouble()
            child_plug.setDouble(val)
    mTransform.setName('ccccc')
    api_lit_iter.next()
    
time_end = time.time()

print(u'time:', time_end - time_start)

大約是2.39秒

結(jié)論是看得出常規(guī)操作中PythonApi并沒有什么優(yōu)勢,
PythonApi。。。未完待續(xù)。。。。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容