虚幻4渲染编程(DCC工具篇---Maya)【Maya Python Scripting(3)】

MY BLOG DIRECTORY:

YivanLee:专题概述及目录

INTRODUCTION:

第一卷是细碎的各种命令,第二卷是小功能组合,这一卷试一下写几个插件并且把插件做的功能能导入引擎里做效果,这也是弄脚本的核心目的。脚本工具适合做量大的,精度要求比较高的操作。


MAIN CONTENT:

【1】Simple UV Operator

v2-487f51d752f141f1862b9ea423a47c75_b.jpg
        import maya.cmds as cmd

def EditPolyUVData():
    SelectMeshList = cmd.ls(selection = True, flatten = True)
    
    if len(SelectMeshList) > 0:
        MeshToModify = SelectMeshList[0]

        MeshUVArray = cmd.ls("{}.map[0:]".format(MeshToModify), flatten = True)

        for UV in MeshUVArray:
            cmd.select(UV)
            UScale = cmds.floatField('pUScale', q = True, value = True)
            VScale = cmds.floatField('pVScale', q = True, value = True)
            cmd.polyEditUV(scaleU = UScale)
            cmd.polyEditUV(scaleV = VScale)
            
        cmd.select(clear = True)
        cmd.select(MeshToModify)


def createWindow(pWindowTitle):
    
    windowID = 'myWindowID'
    
    if cmd.window(windowID, exists = True):
        cmd.deleteUI(windowID)
        
    cmd.window(windowID, title = pWindowTitle, sizeable = False, resizeToFitChildren = True)
    cmd.rowColumnLayout()
    
    cmds.floatField('pUScale')
    cmds.floatField('pVScale')
    cmds.button(label = 'ModifyPolyUVData', command = 'EditPolyUVData()')
    cmd.showWindow()
    
    
createWindow('MyWindow')
      

这里做了个简单的工具实例,主要是为了说明插件中数据的交换方法。我们把数据输入到窗口里,然后要使用的时候用query标志来申请从UI中拿到数据。


【2】Arrange mesh array's uv data

v2-3a1a676143fd76359652293fb08f6f08_b.jpg
        import maya.cmds as cmd

def EditPolyUVData():
    
    MeshList = []
    MeshNunber = cmds.intField('SphereNumber', q = True, value = True)
    for i in range(0, MeshNunber, 1):
        NewSphere = cmd.polySphere(sx = 10, sy = 10, r = 5, name = 'mySphere' + str(i))
        MeshList.append(NewSphere[0])
        cmd.move(i * 10 , 0, 0, NewSphere)
    
    index = 0
    for MeshToModify in MeshList:
            
        MeshUVArray = cmd.ls("{}.map[0:]".format(MeshToModify), flatten = True)

        for UV in MeshUVArray:
            cmd.select(UV)
            cmd.polyEditUV(relative = True, uValue = index, vValue = 0)
            
        cmd.select(clear = True)
        cmd.select(MeshToModify)
        index += 1

def createWindow(pWindowTitle):
    
    windowID = 'myWindowID'
    
    if cmd.window(windowID, exists = True):
        cmd.deleteUI(windowID)
        
    cmd.window(windowID, title = pWindowTitle, sizeable = False, resizeToFitChildren = True)
    cmd.rowColumnLayout()
    
    cmds.text(label = 'Number:')
    cmds.intField('SphereNumber')
    cmds.button(label = 'ModifyPolyUVData', command = 'EditPolyUVData()')
    cmd.showWindow()
    
    
createWindow('MyWindow')
      

UV数据也可以作为有效数据,虽然采图的时候超过0-1是重复的,但是如果我们不用uv数据采图,这些数据是有效的

然后把它导入引擎做如下材质即可得到一个不知道什么效果的效果。似乎可以用来做霓虹灯灯泡。

v2-7f83222a9d433e4e34cffa9b530dbe8c_b.jpg
v2-71e733d550980f4e9989501070062000_b.gif



SUMMARY AND OUTLOOK:

我本来只是想研究下动画的,结果我发现绑定动画需要用到脚本然后就研究了下脚本,然后。。。就踏上了maya脚本的踩坑路。Maya里面用脚本操作这些东西虽然已经很方便了,但是相比于在Houdini里做这些还是麻烦许多,而且那些API真心难找,不过写游戏相关的脚本大部分要用到的我都总结了一遍。

enjoy it



NEXT:

todo... maybe never...

发布了384 篇原创文章 · 获赞 4 · 访问量 8053

猜你喜欢

转载自blog.csdn.net/cpongo10/article/details/100745181