Пример #1
0
    def __init__(self, mainSkinGeo, muscleGeo, muscleList=pm.ls('*_MUS'), rigModelGrp=None):
        if mainSkinGeo and muscleGeo:
            self.mainSkinGeo = pm.ls(mainSkinGeo)[0]
            self.mainMuscleGeo = pm.ls(muscleGeo)[0]
        else:
            print 'No valid Geo!'

        # apply Muscle Deformer
        self.cMuscleDeformer = deform.cMuscleSystemDeformer(self.mainMuscleGeo)

        # connect muscle
        deform.cMuscleConnectMuscle(self.mainMuscleGeo, muscleList)

        # duplicate Main Body
        muscleSkinBSGeo = pm.duplicate(self.mainSkinGeo, n='body_wrapped_GEO')
        # group and parent muscle mesh
        self.muscleDeformGrp = pm.group(self.mainMuscleGeo, muscleSkinBSGeo, n='muscleDeform_GRP', p=rigModelGrp)
        # Wrap main body with Muscle Body
        deform.wrapDeformer(muscleSkinBSGeo, self.mainMuscleGeo)

        # apply BlendShape
        deform.blendShapeDeformer(self.mainSkinGeo, muscleSkinBSGeo, 'muscleBS', frontOfChain=False)

        # set Attr for Muscle Deformer
        self.cMuscleDeformer.enableSmooth.set(1)
        self.cMuscleDeformer.smoothStrength.set(0)
        self.cMuscleDeformer.smoothExpand.set(10)
        self.cMuscleDeformer.smoothCompress.set(10)
        self.cMuscleDeformer.smoothHold.set(1)
Пример #2
0
def controlShapeAdaptive(controlList, geoList, ctrlSmooth=6, scaleConstant=1.5, rebuildCV=32):
    adaptiveShapeBuildGrp = pm.group(n='daptiveShapeBuild_GRP', em=True)
    geoList = pm.ls(geoList)
    dupliGeo = pm.duplicate(geoList)
    geoCombined = pm.polyUnite(dupliGeo, ch=False, name='tmpAdaptiveRef_GEO')[0]
    pm.parent(geoCombined, adaptiveShapeBuildGrp)

    ctrlList = pm.ls(controlList)
    for ctrl in ctrlList:
        ctrlShapeBuildGrp = pm.group(n=ctrl.name() + '_GRP', em=True, p=adaptiveShapeBuildGrp)

        dupliCtrl = pm.duplicate(ctrl, n='tmpCtrl')[0]
        pm.delete(pm.ls(dupliCtrl, dagObjects=True, exactType='transform')[1:])
        pm.rebuildCurve(dupliCtrl, ch=False, s=rebuildCV)
        pm.parent(dupliCtrl, ctrlShapeBuildGrp)

        # extrusion
        extrudeCircle = pm.circle(r=0.1, ch=0)[0]
        pm.parent(extrudeCircle, ctrlShapeBuildGrp)
        motionPathNode = \
            pm.ls(pm.pathAnimation(extrudeCircle, curve=dupliCtrl, fractionMode=True, follow=True, followAxis='z',
                                   upAxis='y', worldUpType='vector', worldUpVector=[0, 1, 0], inverseUp=False,
                                   inverseFront=False, bank=False))[0]

        pm.disconnectAttr(extrudeCircle.tx)
        pm.disconnectAttr(extrudeCircle.ty)
        pm.disconnectAttr(extrudeCircle.tz)
        pm.disconnectAttr(extrudeCircle.rx)
        pm.disconnectAttr(extrudeCircle.ry)
        pm.disconnectAttr(extrudeCircle.rz)
        pm.disconnectAttr(motionPathNode.u)
        pm.delete(motionPathNode)

        extrudedSurface = \
            pm.extrude(extrudeCircle, dupliCtrl, ch=False, rn=False, po=0, et=2, ucp=0, fpt=1, upn=0, rotation=0,
                       scale=1,
                       rsp=1)[0]
        pm.parent(extrudedSurface, ctrlShapeBuildGrp)
        nurbsToPoly = pm.nurbsToPoly(extrudedSurface, ch=False, polygonType=1, chr=0.9)
        pm.parent(nurbsToPoly, ctrlShapeBuildGrp)

        # add deformer
        wrapNode = deform.wrapDeformer(dupliCtrl, nurbsToPoly)
        shrinkWrapNode = deform.shrinkWrapDeformer(nurbsToPoly, geoCombined)

        shrinkWrapNode.projection.set(4)
        shrinkWrapNode.targetSmoothLevel.set(ctrlSmooth)

        # delete history
        common.deleteHistory(nurbsToPoly)
        common.deleteHistory(dupliCtrl)
        pm.scale(dupliCtrl.cv[:], [scaleConstant, scaleConstant, scaleConstant])

        copyShape(dupliCtrl, ctrl)

    pm.delete(adaptiveShapeBuildGrp)
Пример #3
0
    def __init__(self,
                 mainSkinGeo,
                 mainClothGeo,
                 proxySkinGeo='',
                 proxyClothGeo='',
                 rigModelGrp=None):
        """
        Setup Sliding Cloth deformation
        :param mainSkinGeo: str
        :param mainClothGeo: str
        :param proxySkinGeo: str
        :param proxyClothGeo: str
        """
        if mainSkinGeo and mainClothGeo:
            self.mainSkinGeo = pm.ls(mainSkinGeo)[0]
            self.mainClothGeo = pm.ls(mainClothGeo)[0]
        else:
            print 'No valid Geo!'

        if proxySkinGeo:
            self.proxySkinGeo = pm.ls(proxySkinGeo)[0]
        else:
            self.proxySkinGeo = self.makeProxyGeo(self.mainSkinGeo)

        if proxyClothGeo:
            self.proxyClothGeo = pm.ls(proxyClothGeo)[0]
        else:
            self.proxyClothGeo = self.makeProxyGeo(self.mainClothGeo)

        # setup skin proxy geo
        skin.copyBind(self.mainSkinGeo, self.proxySkinGeo)

        # setup cloth proxy geo
        skin.copyBind(self.mainSkinGeo, self.proxyClothGeo)

        cMuscleDeformer = deform.cMuscleSystemDeformer(self.proxyClothGeo)
        cMuscleDeformer.enableRelax.set(1)
        cMuscleDeformer.relaxCompress.set(10)
        cMuscleDeformer.enableSmooth.set(1)

        shrinkWrapDeformer = deform.shrinkWrapDeformer(self.proxyClothGeo,
                                                       self.proxySkinGeo)
        shrinkWrapDeformer.shapePreservationEnable.set(1)
        shrinkWrapDeformer.projection.set(4)
        shrinkWrapDeformer.targetInflation.set(0.01)

        polySmoothDeformer = pm.polySmooth(self.proxyClothGeo)[0]

        # wrap main Cloth Geo
        wrapDeformer = deform.wrapDeformer(self.mainClothGeo,
                                           self.proxyClothGeo)
        baseObj = pm.listConnections(wrapDeformer.basePoints, source=True)[0]

        # regroup
        grpName = name.removeSuffix(self.mainClothGeo.name()) + 'Cloth_GRP'
        clothGrp = pm.group(self.proxySkinGeo,
                            self.proxyClothGeo,
                            baseObj,
                            n=grpName)
        if rigModelGrp:
            pm.parent(clothGrp, rigModelGrp)

        # save attribute
        self.baseObj = baseObj
        self.wrapDeformer = wrapDeformer
        self.shrinkWrapDeformer = shrinkWrapDeformer
        self.cMuscleDeformer = cMuscleDeformer