近期热门
粉丝0
关注 2
获赞 17
自己绑定的一个机甲模型带动作

自己绑定的一个机甲模型带动作

[复制链接]
5429 2 1 2 5年前 举报
CG模型下载
CG模型种类: 机械载具机甲
CG模型风格: 写实
CG模型类别: 科幻
是否有动画: 包含动画
CG模型格式: max(*.max )
游客,本付费内容需要支付 50张CG券 才能下载支付


机甲1.jpg

机甲1.jpg
1
点赞
0
打赏
2
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论2
您需要登录后才可以回帖 登录

//***********************************************//
//                                               //
//           Overlapper release 1.1              //
//    Tool for creating overlapping action       //
//      copyright Dmitrii Kolpakov 2018          //
//                                               //
//    intro: https://vimeo.com/286860063         //
//   purchase: https://gumroad.com/l/overlaper   //
//                                               //
//                                               //
//***********************************************//


global proc OverlapperRelease()
{
        optionVar -intValue animBlendingOpt 1;
        if ((`window -ex OverlapperPanel`)==true)
        deleteUI OverlapperPanel;
       
        CleanUpProc;
       
        string $window = `window  -title "Overlapper 1.1"
               -toolbox 1
               -s 1
               -menuBar 1
               -widthHeight 172 133
                OverlapperPanel`;

    menu  -l "Advanced" -to 0 aboutMenu;
    menuItem  -l "Debug mode" -cb 0 -ann "Don't delete Overlapping offset controls. Expert mode. Be careful"  debMode;
    menuItem  -l "Bake on anim layer" -cb 0 -ann "Each new overlapping animation will be baked on new animation layer"  onLayerMode;
        menuItem  -l "Adaptive scale" -cb 1 -ann "Overlap Scale parameter automaticly changes for distance between selected controls" adScaleMode;
        menuItem  -l "Create selection set" -cb 1 -ann "Create selection set of overlapped controls for last overlapper session" ovCrSelSet;
        menuItem  -l "CleanUp" -ann "Delete all Oveplapper stuff" -c CleanUpProc;   
   
    menu -l "Help" -to 0 helpMenu;
    menuItem -l "Intro"  -c hIntro;
    menuItem -l "Tutorial"  -c hTutorial;

        columnLayout;   
    rowColumnLayout -nc 2 ;
    text -label "     Softness    " -align "center" -ann "More animation velocity, less softness";
    floatField -v 3 -w 10 -precision 2 timeShift;
    text -label "     Scale    " -align "center" -ann "More Scale, more overlap apmlitude";
    floatField -v 1.0 -w 10 -precision 2 globalScale;
        rowColumnLayout -nc 1;
    rowColumnLayout -nc 1;
    checkBox -ann "Add wind animation on overlapped controls" -label " Wind" -v 0 -h 18  WindCheckBox;
    setParent..;
    setParent..;
    rowColumnLayout -nc 2;
    text  -label " Scale" -align "center" -ann "More Scale, more wind apmlitude";
    floatField -v 1 -w 48 -bgc 0.45 0.52 0.57  -precision 2 windScale;
    text -label " Speed " -align "center"  -ann "More Speed, more wind frequence";
    floatField -v 1 -w 20 -precision 2 -bgc 0.45 0.52 0.57 windSpeed;
    setParent..;     setParent..; setParent..;
    rowColumnLayout -nc 1;
    string $theLayout =`frameLayout -cc OverlapperPanelBig -ec OverlapperPanelSmall -collapsable 1 - collapse 1 -l "Options"`;

    checkBox -l "Don't use first controls" -v 0 -ann "Don't use first controls in selected sequence of controls" firstCtrl;
    checkBox -l "Add translate" -v 0 -ann "Add translate overlap for selected controls" IKmode;
    checkBox  -l "Hierarchy" -v 0 -ann "Add all controls below the hierarchy. Works with Advanced Skeleton rigs" HierarchyCheckBox;
    checkBox  -l "Cycle" -v 0 -ann "Create seamless overlapping action for cycle animation. The first and the last keys on timeline must be the same" CycleCheckBox;

    setParent..;

        button  -w 160 -label "Overlap" -bgc 0.85 0.85 0.85 -command "OverlapperStarter";
        showWindow $window;
        window -edit -widthHeight 163 163 OverlapperPanel;
}

global proc OverlapperPanelBig()
{window -edit -widthHeight 163 163 OverlapperPanel;}

global proc OverlapperPanelSmall()
{window -edit -widthHeight 163 236 OverlapperPanel;}

proc hIntro()
{launch -web "https://vimeo.com/286860063";}

proc hTutorial()
{launch -web "https://vimeo.com/287771379";}

global proc CleanUpProc()
{
if(`objExists "*_OverlapJoint*"`)                         {delete "*_OverlapJoint*";}
if(`objExists "*:*_OverlapJoint*"`)                 {delete "*:*_OverlapJoint*";}
if(`objExists "*:*:*_OverlapJoint*"`)       {delete "*:*:*_OverlapJoint*";}
if(`objExists "*overlapOffsetLocator*"`)    {delete "*overlapOffsetLocator*";}
if(`objExists "overlapResultLocatorOut*"`)  {delete "overlapResultLocatorOut*";}
if(`objExists "TEMP_Offset_locator*"`)           {delete ("TEMP_Offset_locator*");}
if(`objExists "*overlapOffsetIKLocator*"`)  {delete "*overlapOffsetIKLocator*";}
if(`objExists "OverlapperSet"`)             {delete "OverlapperSet";}
if(`objExists "OverlapperWorkSet"`)         {delete "OverlapperWorkSet";}

progressWindow -endProgress;

}

global proc OverlapperStarter()
{
        if(`objExists "OverlapperWorkSet"`){delete "OverlapperWorkSet";}

        //time range
        global string $gPlayBackSlider;
        global float $timeStart, $timeEnd;
        global float $timeStartGlobal, $timeEndGlobal;
        float $RangeStart, $Range[];
        $Range = `timeControl -q -ra $gPlayBackSlider`;
        $RangeStart = $Range[1] - $Range[0];
       
        if($RangeStart == 1)
                {$timeStartGlobal = `playbackOptions -q -min`; $timeEndGlobal = `playbackOptions -q -max`;}
        else
                {$timeStartGlobal = $Range[0]; $timeEndGlobal = $Range[1];}
       
                        string $ctrlsAmount[] = `ls -sl`;
                       
                        // MANY CONTROLS
                        if(`size($ctrlsAmount)`>1)
                                {
                                                // some ctrls with hierarchy DONE!!!!!!
                                        if (`checkBox -q -v HierarchyCheckBox`==1)
                                                {
                                                        for ($SelCtrl in $ctrlsAmount)
                                                        {
                                                                select -r $SelCtrl; progressWindow -endProgress; OverlapperWithHierarchy; CycleFinal;
                                                        }
                                                }
       
                                                // some ctrls without hierarchy DONE!!!!!!
                                        else
                                                {
                                                        Overlapper; CycleFinal;
                                                }
                                }
                        // ONE CONTROLS       
                        else {

                                        // with hierarchy DONE!!!!!!
                                        if (`checkBox -q -v HierarchyCheckBox`==1)
                                                {
                                                        progressWindow -endProgress; OverlapperWithHierarchy; CycleFinal;
                                                }
       
                                        // without hierarchy
                                        else
                                                {
                                                        confirmDialog  -b "Ok" -t "Oooops.." -m "For correct work you should select more than one control \n            or switch on Hierarchy mode in Options \n\nIf you want overlap one control: \n    1. select two neighboring controls \n    2. check  `Don't use first control`  in Options ";
                                                }
                               
                                }
}

////////////////// Hierarchy work //////////////////////

proc OverlapperWithHierarchy()
{   
                string $ArraySecondGuys[];
                string $parentArray[];
                string $nodesArray[];
                string $Chain[];        
                string $lastElement;
                string $allSceneNurbes[];
                string $currentShapeType;
                string $CtrlByHierarchy[];
                string $TypeOfObject;
                int $ClearElemwnts;
               
                $ClearElemwnts = `size($allSceneNurbes)`; for ($s=0; $s<$ClearElemwnts; ++$s ){stringArrayRemoveAtIndex(0, $allSceneNurbes);}
               
                // find type of selection
                string $currentCtrls[] = `ls -sl`;
                select -r $currentCtrls[0];
                pickWalk -d down;
                string $currentShape[] = `ls -sl`;
                $currentShapeType = `objectType $currentShape[0]`;
               
                select -r $currentCtrls; select -hi;
                $currentCtrls = `ls -sl`;
               
                if( `objExists "*Root_M"`||`objExists "*:Root_M"`||`objExists "*DeformationSystem"`||`objExists "*:DeformationSystem"`||`objExists "*MotionSystem"`||`objExists "*:MotionSystem"`||`objExists "*FitSkeleton"`||`objExists "*:FitSkeleton"`)
                         {$currentShapeType = "nurbsCurve";}
               
                $allSceneNurbes = `listTransforms ("-type "+$currentShapeType)`;
               
                string $Stuff[] = stringArrayRemove($allSceneNurbes, $currentCtrls);
                $CtrlByHierarchy = stringArrayRemove($Stuff, $currentCtrls);
                select -r $CtrlByHierarchy;
               
                int $amountOfAllCtrls = `size($CtrlByHierarchy)`;
                string $LastCtrlInHierarchy = $CtrlByHierarchy[(`size($CtrlByHierarchy)`)-1];
               
                $ClearElemwnts = `size($Chain)`; for ($s=0; $s<$ClearElemwnts; ++$s ){stringArrayRemoveAtIndex(0, $Chain);}
               
                for ($i=0; $i<$amountOfAllCtrls; ++$i )
                {       
                        select -r $CtrlByHierarchy[$i];
                        select -hi;
                        string $currentCtrls[] = `ls -sl`;
                        string $Stuff[] = stringArrayRemove($allSceneNurbes, $currentCtrls);
                        string $CurrentCtrlByHierarchy[] = stringArrayRemove($Stuff, $currentCtrls);
                               
                        if ($CtrlByHierarchy[$i+1]==$CurrentCtrlByHierarchy[1]&&$CurrentCtrlByHierarchy[0]!=$LastCtrlInHierarchy)
                        {
                            stringArrayInsertAtIndex(100, $Chain, $CurrentCtrlByHierarchy[0]);
                                        select -r $CurrentCtrlByHierarchy[0];
                        }
                        else
                        {       
                                        stringArrayInsertAtIndex(100, $Chain, $CurrentCtrlByHierarchy[0]);
                                select -r $Chain;
                                Overlapper;
                                string $CtrlByHierarchy[] = stringArrayRemove($Chain, $CtrlByHierarchy);
                                int $ClearElemwnts = `size($Chain)`;for ($s=0; $s<$ClearElemwnts; ++$s ){stringArrayRemoveAtIndex(0, $Chain);}
                        }
                        
                        int $amountOfAllCtrls = `size($CtrlByHierarchy)`;      
                }
}

///////////// Overlapper /////////////

proc Overlapper()
{
        cycleCheck -e off;
        global float $timeStartGlobal, $timeEndGlobal;
        global float $timeStart, $timeEnd;
        $timeStart = $timeStartGlobal;
        $timeEnd = $timeEndGlobal;
        int $ClearElemwnts;
               
        float $OverTimeShift = `floatField -q -v timeShift`;
        float $OverGlobalScale = `floatField -q -v globalScale`; if($OverGlobalScale<=0){$OverGlobalScale=0.001;}
        float $windScaleValue = `floatField -q -v windScale`;
        float $windSpeedValue = `floatField -q -v windSpeed`;
       

        int $deBugMode = `menuItem -query -cb  debMode`;
        int $onLayerSwitch = `menuItem -query -cb  onLayerMode`;
        int $adptScale = `menuItem -query -cb  adScaleMode`;
        int $OvSelectionSet = `menuItem -query -cb  ovCrSelSet`;

       
        int $TRANSLATEmode = `checkBox -q -v IKmode`;
        int $useFirstCtrl = `checkBox -q -v firstCtrl`;
        int $WindSwitch = `checkBox -q -v WindCheckBox`;
        int $CycleCheckBox = `checkBox -q -v CycleCheckBox`;
       
       
        float $timeShift = $OverTimeShift;
        float $overlapIntensity = $OverGlobalScale;

        float $scaleModulator = 5;
        string $overlapJointsArray[];
        float $overlapJointsLenghtArray[];
        float $averageLenghtJoints;
        global float $sumLenghtJoints;
        string $ControlName[];
        float $cycleLenghts;
        string $SelectedControlsClearNameSpaces[];
        string $SelectedControls[];
        global string $eulerFilterCurves[];       
       
        $ClearElemwnts = `size($overlapJointsArray)`; for ($i=0; $i<$ClearElemwnts; ++$i ){stringArrayRemoveAtIndex(0, $overlapJointsArray);}       
        $ClearElemwnts = `size($overlapJointsLenghtArray)`; for ($i=0; $i<$ClearElemwnts; ++$i ) {floatArrayRemoveAtIndex(0, $overlapJointsLenghtArray);}
        $ClearElemwnts = `size($SelectedControls)`; for ($i=0; $i<$ClearElemwnts; ++$i ) {stringArrayRemoveAtIndex(0, $SelectedControls);}       
        $ClearElemwnts = `size($SelectedControlsClearNameSpaces)`; for ($i=0; $i<$ClearElemwnts; ++$i ) {stringArrayRemoveAtIndex(0, $SelectedControlsClearNameSpaces);}       
       

        //time range
        float $currentTime =`currentTime -query`;
       
        //set frame
        currentTime - e $timeStart;
       
        $SelectedControls = `ls -sl`;
        int $iLoop = `size($SelectedControls)`;

        $DividedName = `tokenize $SelectedControls[0] ":" $ControlName`;
        if ($DividedName>1)
        {
                for ($i=0; $i<$iLoop; ++$i)
                        {       
                                $DividedNameCurve = `tokenize $SelectedControls[$i] ":" $ControlName`;
                                $ClearNameCtrl = $ControlName[($DividedNameCurve-1)];
                                stringArrayInsertAtIndex(100, $SelectedControlsClearNameSpaces, $ClearNameCtrl);       
                        }
        }
        else {$SelectedControlsClearNameSpaces=$SelectedControls;}
       
        select -cl;

        //progressBar
    int $amount = 0;
    float $prAmount = 100/$iLoop;

     progressWindow
         -title "progress..."
         -progress $amount
         -status "Progress: 0%"
         -isInterruptable true;

        // create locators for Joints
        for ($i=0; $i<$iLoop; ++$i)
                {       
                        spaceLocator -n ("TEMP_Offset_locator"+$i);
                    select -r $SelectedControls[$i] ("TEMP_Offset_locator"+$i);
                        parentConstraint -weight 1;
                }
                        select -cl;

        // create Joints
       
        for ($i=0; $i<$iLoop; ++$i )
                {       
                        float $WorldTr[] = `xform -q -ws -t ("TEMP_Offset_locator"+$i)`;
                        joint -rad 1 -n ($SelectedControls[$i]+"_OverlapJoint") -p $WorldTr[0] $WorldTr[1] $WorldTr[2];

                                if ($i>0)
                                {
                                        joint -e -zso -oj xyz -sao yup ($SelectedControls[$i-1]+"_OverlapJoint");
                                }
                               
                        stringArrayInsertAtIndex( 100, $overlapJointsArray, ($SelectedControls[$i]+"_OverlapJoint") );
                }
               
        delete ("TEMP_Offset_locator*");

        int $overlapJointsAnmount = `size($SelectedControls)`;
    select -r ($overlapJointsArray[$overlapJointsAnmount-1]);
               
        duplicate -rr;
        string $LastOrientJoints[] = `ls -sl`;
        move -r -ls -wd 2 0 0 ;
        float $WorldLastTr[] = `xform -q -ws -t $LastOrientJoints[0]`;
        select -r ($SelectedControls[$i-1]+"_OverlapJoint");
        joint -rad 1 -n ($SelectedControls[$i-1]+"LastOrientJoint") -p $WorldLastTr[0] $WorldLastTr[1] $WorldLastTr[2];
        joint -e -zso -oj xyz -sao yup ($SelectedControls[$i-1]+"_OverlapJoint");
        delete $LastOrientJoints;
        $LastOrientJoints = `ls -sl`;
        stringArrayInsertAtIndex( 100, $overlapJointsArray, $LastOrientJoints[0]);
        select -r $overlapJointsArray;
        joint -e  -oj xyz -secondaryAxisOrient zup -ch -zso;

       
        $ClearElemwnts = `size($overlapJointsLenghtArray)`; for ($s=0; $s<$ClearElemwnts; ++$s ){floatArrayRemoveAtIndex(0, $overlapJointsLenghtArray);}

        //joints lengths
        for ($i=1; $i<($iLoop+1); ++$i )
                {       
                        float $DistanceBetween = `getAttr ($overlapJointsArray[$i]+".translateX")`;
                        floatArrayInsertAtIndex( 100, $overlapJointsLenghtArray, $DistanceBetween);
                }
       
        //average
        int $JointsLentghtsAmount = `size($overlapJointsLenghtArray)`;
       
        $sumLenghtJoints = 0;
        for ($i=0; $i<($JointsLentghtsAmount); ++$i )
                {       
                        $sumLenghtJoints = $sumLenghtJoints + $overlapJointsLenghtArray[$i];
                }
                               
        $averageLenghtJoints = ($sumLenghtJoints-2)/$JointsLentghtsAmount;
        setAttr ($SelectedControls[$i-1]+"LastOrientJoint.translateX") $averageLenghtJoints;
       
        // constrain joint to controls
        for ($i=0; $i<$iLoop; ++$i )
                {       
                        select -r $SelectedControls[$i] ($SelectedControls[$i]+"_OverlapJoint");
                        pointConstraint  -weight 1 -mo;
                        orientConstraint -weight 1 -mo;
                }

        // bake jonts
        select -r $overlapJointsArray;
        bakeResults
                -simulation 0
            -t ($timeStart+":"+$timeEnd)
            -sampleBy 1
            -disableImplicitControl 1
            -preserveOutsideKeys 1
            -sparseAnimCurveBake 1
            -bakeOnOverrideLayer 0
            -minimizeRotation 0
            $overlapJointsArray;
        delete -constraints;

        // Cycling (copy curves, add time)
        if ($CycleCheckBox == 1)
        {
                        for ($i=0; $i<($iLoop-1); ++$i )
                    {
                            selectKey -r -k -t ($timeStart+":"+$timeEnd) ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_translateX")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_translateY")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_translateZ")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_rotateX")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_rotateY")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_rotateZ");                  
                            copyKey;
                                pasteKey -time $timeEnd -float $timeEnd -option insert -copies 2 -connect 0 -timeOffset 0 -floatOffset 0 -valueOffset 0;
                                select -cl  ;                    
                    }
        $cycleLenghts = $timeEnd-$timeStart;
        $timeEnd = $timeEnd+2*$cycleLenghts;
        }

        // Overlaping
        for ($i=0; $i<$iLoop; ++$i )
                {
                         //progressBar       
                        $amount += $prAmount;               
                        progressWindow -edit
                        -progress $amount
                        -status ("Progress: "+$amount+"%");
       
                        //create locator
                        spaceLocator -n ("overlapOffsetLocator"+$i);
                        select -r $overlapJointsArray[$i] ("overlapOffsetLocator"+$i);
                        string $temps[] = `pointConstraint -offset 0 0 0 -weight 1`;
                        delete $temps;
                        $temps = `orientConstraint -offset 0 0 0 -weight 1`;
                        delete $temps;
                       
                        //create IK locator
                        spaceLocator -n ("overlapOffsetIKLocator"+$i);
                        select -r $overlapJointsArray[$i] ("overlapOffsetIKLocator"+$i);
                        $temps = `pointConstraint -offset 0 0 0 -weight 1`;
                        delete $temps;
                        $temps = `orientConstraint -offset 0 0 0 -weight 1`;
                        delete $temps;
                       
                        select -r ("overlapOffsetLocator"+$i);
                        if ($adptScale==1){$scaleModulator = $averageLenghtJoints;}
                        float $overlapIntensityMult = $averageLenghtJoints/$overlapIntensity*5;
                        move  -r -os -ls $overlapIntensityMult 0 0 ;
                        select -r $overlapJointsArray[$i] ("overlapOffsetLocator"+$i);
                        parentConstraint -mo -weight 1;
                       
                        select -r $overlapJointsArray[$i] ("overlapOffsetIKLocator"+$i);
                        parentConstraint -mo -weight 1;
       
                        bakeResults -simulation 0
                            -t ($timeStart+":"+$timeEnd)
                            -sampleBy 1
                            -disableImplicitControl 1
                            -preserveOutsideKeys 1
                            -sparseAnimCurveBake 0
                            -removeBakedAttributeFromLayer 0
                            -removeBakedAnimFromLayer 0
                            -bakeOnOverrideLayer 0     
                            -minimizeRotation 0
                            -controlPoints 0
                            -shape 1
                            ("overlapOffsetLocator"+$i) ("overlapOffsetIKLocator"+$i);   
                            
                        filterCurve ("overlapOffsetLocator"+$i+"_rotateX")("overlapOffsetLocator"+$i+"_rotateY")("overlapOffsetLocator"+$i+"_rotateZ");       
                        spaceLocator -n ("overlapOffsetLocatorWind"+$i);
                        parent ("overlapOffsetLocatorWind"+$i) ("overlapOffsetLocator"+$i);
                        makeIdentity -apply false -t 1 -r 1 -s 1;
       
                        float $timeShiftNeg = -1*$timeShift;
                        float $timeShiftCurrent = $timeShift+1;
                               
                    keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_translateX");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_translateY");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_translateZ");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetIKLocator"+$i+"_translateX");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetIKLocator"+$i+"_translateY");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetIKLocator"+$i+"_translateZ");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_rotateX");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_rotateY");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_rotateZ");
       
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_translateX");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_translateY");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_translateZ");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetIKLocator"+$i+"_translateX");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetIKLocator"+$i+"_translateY");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetIKLocator"+$i+"_translateZ");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_rotateX");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_rotateY");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_rotateZ");
                               
                        keyframe -animation keys -option over -relative -timeChange $timeShiftNeg;
                       
                        spaceLocator -n ("overlapInLocator_first_"+$i);
                        spaceLocator -n ("overlapInLocator_second_"+$i);
                        spaceLocator -n ("overlapResultLocator_"+$i);
                        select -r ("overlapInLocator_first_"+$i) ($SelectedControls[$i]+"_OverlapJoint");
                        Parent;
                        select -r ("overlapInLocator_second_"+$i) ($SelectedControls[$i]+"_OverlapJoint");
                        Parent;
                        select -r ("overlapResultLocator_"+$i) ($SelectedControls[$i]+"_OverlapJoint");
                        Parent;
                        select -r ("overlapInLocator_first_"+$i) ("overlapInLocator_second_"+$i) ("overlapResultLocator_"+$i);
                        makeIdentity -apply false -t 1 -r 1 -s 1;
                        select -r("overlapInLocator_second_"+$i);
                        move  -r -os -ls $overlapIntensityMult 0 0 ;               
                        select -r ("overlapInLocator_first_"+$i);
                        group -n ("overlapInLocator_first_"+$i+"grp");
               
                        // IK mode
                        if($TRANSLATEmode==1)
                        {
                                select -r ("overlapOffsetIKLocator"+$i) ("overlapInLocator_first_"+$i+"grp");
                                pointConstraint -mo -weight 1;
                        }
                       
                        select -r ("overlapOffsetLocatorWind"+$i) ("overlapInLocator_second_"+$i);
                        parentConstraint -mo -weight 1;
                       
                        select -r ("overlapInLocator_second_"+$i) ("overlapInLocator_first_"+$i+"grp");
                        aimConstraint -mo -weight 1 -aimVector 1 0 0 -upVector 0 1 0 -worldUpType "object" -worldUpObject ("overlapInLocator_second_"+$i);
                        select -r ("overlapInLocator_second_"+$i) ("overlapInLocator_first_"+$i);
                        orientConstraint -mo -skip y -skip z -weight 1;
                        select -r  ("overlapInLocator_first_"+$i) ("overlapResultLocator_"+$i);
                        parentConstraint -mo -weight 1;
               
                        ///Wind
                        if($i<1&&$WindSwitch==1)
                        {
                            select -r overlapOffsetLocatorWind0;
                            string $WindFirstControl[] = `ls -sl`;
                           
                            float $windMultiply = 0.07*$overlapIntensityMult*$windScaleValue ;
                            float $speedMultiply = 20/$windSpeedValue;
                           
                            setKeyframe  -attribute "translateY" -attribute "translateZ" -t $timeStart overlapOffsetLocatorWind0;
                           
                            bakeResults
                                    -simulation 0
                                    -t ($timeStart+":"+($timeEnd+$speedMultiply))
                                    -sampleBy $speedMultiply
                                    -oversamplingRate 1
                                    -disableImplicitControl true
                                    -preserveOutsideKeys 1
                                    -sparseAnimCurveBake false
                                    -removeBakedAttributeFromLayer false
                                    -removeBakedAnimFromLayer false
                                    -bakeOnOverrideLayer false
                                    -minimizeRotation true
                                    -at "ty" -at "tz"
                                    overlapOffsetLocatorWind0;
                           
                                string $listAnimAttrs[] = `listAttr -k overlapOffsetLocatorWind0`;               
                                    for ($attr in $listAnimAttrs)
                                    {        
                                            // array of animated atributes
                                            string $animCurve[] = `listConnections -type "animCurve" ("overlapOffsetLocatorWind0."+$attr)`;
                                            for ($animCurveCurrent in $animCurve)
                                                    {
                                                            // array of keys
                                                            float $animCurveCurrentKeysTimeArray[] = `keyframe -time ($timeStart+":"+$timeEnd) -query -timeChange $animCurveCurrent`;
                           
                                                        // array of values
                                                                for ($animCurveCurrentKeysTime in $animCurveCurrentKeysTimeArray)
                                                                {
                                                                        float $animCurveCurrentKeysTimeArray[] = `keyframe -time $animCurveCurrentKeysTime -query -valueChange $animCurveCurrent`;
                                                                       
                                                                        //Randomazer
                                                                        float $RandomizerValue = `rand -1 1`;
                                                                        float $animCurveCurrentKeysValueArrayAddRandom = $animCurveCurrentKeysTimeArray[0]+$windMultiply*$RandomizerValue;
                                                                        keyframe -e -iub true -r -o over -vc $animCurveCurrentKeysValueArrayAddRandom -t $animCurveCurrentKeysTime $animCurveCurrent;
                                                            }
                                }
                                    }
                                keyframe -e -iub true -r -o over -tc ($speedMultiply/2) overlapOffsetLocatorWind0_translateY;
                                selectKey -add -k -t (($speedMultiply/2)+1) overlapOffsetLocatorWind0_translateY;
                            keyframe -animation keys -option over -relative -timeChange ($speedMultiply/-2);
                        }
                       
                        bakeResults -simulation 0
                                            -t ($timeStart+":"+$timeEnd)
                                            -sampleBy 1
                                            -disableImplicitControl 1
                                            -preserveOutsideKeys 1
                                            -sparseAnimCurveBake 0
                                            -removeBakedAttributeFromLayer 0
                                            -removeBakedAnimFromLayer 0
                                            -bakeOnOverrideLayer 0     
                                            -minimizeRotation 0
                                            -controlPoints 0
                                            -shape 1
                                            ("overlapResultLocator_"+$i);
                                            
                    if($deBugMode==0) {delete ("overlapInLocator_first_"+$i) ("overlapInLocator_first_"+$i+"grp") ("overlapOffsetLocator"+$i) ("overlapInLocator_second_"+$i);}
                    spaceLocator -n ("overlapResultLocatorOut_"+$i);
                             
                    if(`objExists "OverlapperOverlapResultLocatorSet"`) {sets -edit -forceElement OverlapperOverlapResultLocatorSet ("overlapResultLocatorOut_"+$i);}
                     else {$createSetResult = `sets -name "OverlapperOverlapResultLocatorSet"`;}
            
            
                    select -r  ("overlapResultLocator_"+$i) ("overlapResultLocatorOut_"+$i);
                    parentConstraint -weight 1;
                    bakeResults -simulation 0
                                            -t ($timeStart+":"+$timeEnd)
                                            -sampleBy 1
                                            -disableImplicitControl 1
                                            -preserveOutsideKeys 1
                                            -sparseAnimCurveBake 0
                                            -removeBakedAttributeFromLayer 0
                                            -removeBakedAnimFromLayer 0
                                            -bakeOnOverrideLayer 0     
                                            -minimizeRotation 0
                                            -controlPoints 0
                                            -shape 1
                                            ("overlapResultLocatorOut_"+$i);
                        if($deBugMode==0) {delete ("overlapResultLocator_"+$i);}
                    select -r ("overlapResultLocatorOut_"+$i) ($SelectedControls[$i]+"_OverlapJoint");
                    parentConstraint -weight 1 -mo;
        }
            

            
        // constrain controls back to joint
   
    if ($useFirstCtrl==1)
        {
            for ($i=1; $i<$iLoop; ++$i )
            {       
            //orient constraint
                    if (`getAttr -keyable ($SelectedControls[$i]+".rx")`==1&&`getAttr -lock ($SelectedControls[$i]+".rx")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".ry")`==1&&`getAttr -lock ($SelectedControls[$i]+".ry")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".rx")`==1&&`getAttr -lock ($SelectedControls[$i]+".rx")`==0)
                            {select -r ($SelectedControls[$i]+"_OverlapJoint") $SelectedControls[$i]; orientConstraint -mo -weight 1;}
                   
                    //point constraint
                    if (`getAttr -keyable ($SelectedControls[$i]+".tx")`==1&&`getAttr -lock ($SelectedControls[$i]+".tx")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".ty")`==1&&`getAttr -lock ($SelectedControls[$i]+".ty")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".tx")`==1&&`getAttr -lock ($SelectedControls[$i]+".tx")`==0)
                            {pointConstraint -mo -weight 1;}
            }
        }
        else
        {
            for ($i=0; $i<$iLoop; ++$i )
            {       
                    //orient constraint
                    if (`getAttr -keyable ($SelectedControls[$i]+".rx")`==1&&`getAttr -lock ($SelectedControls[$i]+".rx")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".ry")`==1&&`getAttr -lock ($SelectedControls[$i]+".ry")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".rx")`==1&&`getAttr -lock ($SelectedControls[$i]+".rx")`==0)
                            {select -r ($SelectedControls[$i]+"_OverlapJoint") $SelectedControls[$i]; orientConstraint -mo -weight 1;}
                   
                    //point constraint
                    if (`getAttr -keyable ($SelectedControls[$i]+".tx")`==1&&`getAttr -lock ($SelectedControls[$i]+".tx")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".ty")`==1&&`getAttr -lock ($SelectedControls[$i]+".ty")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".tx")`==1&&`getAttr -lock ($SelectedControls[$i]+".tx")`==0)
                            {pointConstraint -mo -weight 1;}
            }
        }
       
                                if ($CycleCheckBox == 1)
                        {       
               
                        $timeStart = `playbackOptions -q -min`;
                        $timeEnd = `playbackOptions -q -max`;
                        $cycleLenghts = $timeEnd-$timeStart;
       
                                select -r  OverlapperOverlapResultLocatorSet;
                                string $EulerArrays[] = `ls -sl`;
                               
                                for ($obj in $EulerArrays)
                                {
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts) ($obj+"_translateX");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts)        ($obj+"_translateY");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts) ($obj+"_translateZ");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts) ($obj+"_rotateX");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts)        ($obj+"_rotateY");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts) ($obj+"_rotateZ");
                                }            
                        }
       
        select -r $SelectedControls;       

        $timeStart = `playbackOptions -q -min`;
        $timeEnd = `playbackOptions -q -max`;

    bakeResults
            -simulation 0
            -t ($timeStart+":"+$timeEnd)
            -sampleBy 1
            -disableImplicitControl 1
            -preserveOutsideKeys 1
            -sparseAnimCurveBake 0
            -removeBakedAttributeFromLayer 0
            -removeBakedAnimFromLayer 0
            -bakeOnOverrideLayer $onLayerSwitch     
            -minimizeRotation 0
            -controlPoints 0
            -shape 1
            $SelectedControls;
              
        //create selection set
        if($OvSelectionSet==1)
        {       
            if(`objExists "OverlapperSet*"`) {sets -edit -forceElement OverlapperSet $SelectedControls;}
            else {$createSetResult = `sets -name "OverlapperSet"`;}
    }
            if(`objExists "OverlapperWorkSet*"`) {sets -edit -forceElement OverlapperWorkSet $SelectedControls;}
            else {$createSetResult = `sets -name "OverlapperWorkSet"`;}
            
    // finalization
        if($deBugMode==0) {delete $overlapJointsArray "overlapResultLocatorOut*" "*overlapOffsetIKLocator*";}
    currentTime - e $currentTime;
    select -r $SelectedControls;
    cycleCheck -e on;
        progressWindow -endProgress;
       
        // select ovelapped controls set
    if(`objExists "OverlapperSet"`) {select -r OverlapperSet;}
}

// Finalizing
global proc CycleFinal()
{

        string $SelectedControlsClearNameSpaces[];
        string $SelectedControls[];
        global string $eulerFilterCurves[];       
        string $ControlName[];
          float $cycleLenghts;
         
        // euler all anim curves       
        $ClearElemwnts = `size($eulerFilterCurves)`; for ($s=0; $s<$ClearElemwnts; ++$s ){stringArrayRemoveAtIndex(0, $eulerFilterCurves);}
        select -r OverlapperWorkSet;
        string $EulerArrays[] = `ls -sl`;
       
        for ($obj in $EulerArrays)
        {
                $listAnimAttrs = `listAttr -k $obj`;               
                for ($attr in $listAnimAttrs)
                {        
                        $animCurve = `listConnections -type "animCurve" ($obj+"."+$attr)`;
                        int $ClearElemwnts = `size($animCurve)`;
                        appendStringArray($eulerFilterCurves, $animCurve, $ClearElemwnts);
                }
        }
        filterCurve $eulerFilterCurves;               
        delete "OverlapperWorkSet";
}

OverlapperRelease;
59天前
回复

使用道具 举报

//***********************************************//
//                                               //
//           Overlapper release 1.1              //
//    Tool for creating overlapping action       //
//      copyright Dmitrii Kolpakov 2018          //
//                                               //
//    intro: https://vimeo.com/286860063         //
//   purchase: https://gumroad.com/l/overlaper   //
//                                               //
//                                               //
//***********************************************//


global proc OverlapperRelease()
{
        optionVar -intValue animBlendingOpt 1;
        if ((`window -ex OverlapperPanel`)==true)
        deleteUI OverlapperPanel;
       
        CleanUpProc;
       
        string $window = `window  -title "Overlapper 1.1"
               -toolbox 1
               -s 1
               -menuBar 1
               -widthHeight 172 133
                OverlapperPanel`;

    menu  -l "Advanced" -to 0 aboutMenu;
    menuItem  -l "Debug mode" -cb 0 -ann "Don't delete Overlapping offset controls. Expert mode. Be careful"  debMode;
    menuItem  -l "Bake on anim layer" -cb 0 -ann "Each new overlapping animation will be baked on new animation layer"  onLayerMode;
        menuItem  -l "Adaptive scale" -cb 1 -ann "Overlap Scale parameter automaticly changes for distance between selected controls" adScaleMode;
        menuItem  -l "Create selection set" -cb 1 -ann "Create selection set of overlapped controls for last overlapper session" ovCrSelSet;
        menuItem  -l "CleanUp" -ann "Delete all Oveplapper stuff" -c CleanUpProc;   
   
    menu -l "Help" -to 0 helpMenu;
    menuItem -l "Intro"  -c hIntro;
    menuItem -l "Tutorial"  -c hTutorial;

        columnLayout;   
    rowColumnLayout -nc 2 ;
    text -label "     Softness    " -align "center" -ann "More animation velocity, less softness";
    floatField -v 3 -w 10 -precision 2 timeShift;
    text -label "     Scale    " -align "center" -ann "More Scale, more overlap apmlitude";
    floatField -v 1.0 -w 10 -precision 2 globalScale;
        rowColumnLayout -nc 1;
    rowColumnLayout -nc 1;
    checkBox -ann "Add wind animation on overlapped controls" -label " Wind" -v 0 -h 18  WindCheckBox;
    setParent..;
    setParent..;
    rowColumnLayout -nc 2;
    text  -label " Scale" -align "center" -ann "More Scale, more wind apmlitude";
    floatField -v 1 -w 48 -bgc 0.45 0.52 0.57  -precision 2 windScale;
    text -label " Speed " -align "center"  -ann "More Speed, more wind frequence";
    floatField -v 1 -w 20 -precision 2 -bgc 0.45 0.52 0.57 windSpeed;
    setParent..;     setParent..; setParent..;
    rowColumnLayout -nc 1;
    string $theLayout =`frameLayout -cc OverlapperPanelBig -ec OverlapperPanelSmall -collapsable 1 - collapse 1 -l "Options"`;

    checkBox -l "Don't use first controls" -v 0 -ann "Don't use first controls in selected sequence of controls" firstCtrl;
    checkBox -l "Add translate" -v 0 -ann "Add translate overlap for selected controls" IKmode;
    checkBox  -l "Hierarchy" -v 0 -ann "Add all controls below the hierarchy. Works with Advanced Skeleton rigs" HierarchyCheckBox;
    checkBox  -l "Cycle" -v 0 -ann "Create seamless overlapping action for cycle animation. The first and the last keys on timeline must be the same" CycleCheckBox;

    setParent..;

        button  -w 160 -label "Overlap" -bgc 0.85 0.85 0.85 -command "OverlapperStarter";
        showWindow $window;
        window -edit -widthHeight 163 163 OverlapperPanel;
}

global proc OverlapperPanelBig()
{window -edit -widthHeight 163 163 OverlapperPanel;}

global proc OverlapperPanelSmall()
{window -edit -widthHeight 163 236 OverlapperPanel;}

proc hIntro()
{launch -web "https://vimeo.com/286860063";}

proc hTutorial()
{launch -web "https://vimeo.com/287771379";}

global proc CleanUpProc()
{
if(`objExists "*_OverlapJoint*"`)                         {delete "*_OverlapJoint*";}
if(`objExists "*:*_OverlapJoint*"`)                 {delete "*:*_OverlapJoint*";}
if(`objExists "*:*:*_OverlapJoint*"`)       {delete "*:*:*_OverlapJoint*";}
if(`objExists "*overlapOffsetLocator*"`)    {delete "*overlapOffsetLocator*";}
if(`objExists "overlapResultLocatorOut*"`)  {delete "overlapResultLocatorOut*";}
if(`objExists "TEMP_Offset_locator*"`)           {delete ("TEMP_Offset_locator*");}
if(`objExists "*overlapOffsetIKLocator*"`)  {delete "*overlapOffsetIKLocator*";}
if(`objExists "OverlapperSet"`)             {delete "OverlapperSet";}
if(`objExists "OverlapperWorkSet"`)         {delete "OverlapperWorkSet";}

progressWindow -endProgress;

}

global proc OverlapperStarter()
{
        if(`objExists "OverlapperWorkSet"`){delete "OverlapperWorkSet";}

        //time range
        global string $gPlayBackSlider;
        global float $timeStart, $timeEnd;
        global float $timeStartGlobal, $timeEndGlobal;
        float $RangeStart, $Range[];
        $Range = `timeControl -q -ra $gPlayBackSlider`;
        $RangeStart = $Range[1] - $Range[0];
       
        if($RangeStart == 1)
                {$timeStartGlobal = `playbackOptions -q -min`; $timeEndGlobal = `playbackOptions -q -max`;}
        else
                {$timeStartGlobal = $Range[0]; $timeEndGlobal = $Range[1];}
       
                        string $ctrlsAmount[] = `ls -sl`;
                       
                        // MANY CONTROLS
                        if(`size($ctrlsAmount)`>1)
                                {
                                                // some ctrls with hierarchy DONE!!!!!!
                                        if (`checkBox -q -v HierarchyCheckBox`==1)
                                                {
                                                        for ($SelCtrl in $ctrlsAmount)
                                                        {
                                                                select -r $SelCtrl; progressWindow -endProgress; OverlapperWithHierarchy; CycleFinal;
                                                        }
                                                }
       
                                                // some ctrls without hierarchy DONE!!!!!!
                                        else
                                                {
                                                        Overlapper; CycleFinal;
                                                }
                                }
                        // ONE CONTROLS       
                        else {

                                        // with hierarchy DONE!!!!!!
                                        if (`checkBox -q -v HierarchyCheckBox`==1)
                                                {
                                                        progressWindow -endProgress; OverlapperWithHierarchy; CycleFinal;
                                                }
       
                                        // without hierarchy
                                        else
                                                {
                                                        confirmDialog  -b "Ok" -t "Oooops.." -m "For correct work you should select more than one control \n            or switch on Hierarchy mode in Options \n\nIf you want overlap one control: \n    1. select two neighboring controls \n    2. check  `Don't use first control`  in Options ";
                                                }
                               
                                }
}

////////////////// Hierarchy work //////////////////////

proc OverlapperWithHierarchy()
{   
                string $ArraySecondGuys[];
                string $parentArray[];
                string $nodesArray[];
                string $Chain[];        
                string $lastElement;
                string $allSceneNurbes[];
                string $currentShapeType;
                string $CtrlByHierarchy[];
                string $TypeOfObject;
                int $ClearElemwnts;
               
                $ClearElemwnts = `size($allSceneNurbes)`; for ($s=0; $s<$ClearElemwnts; ++$s ){stringArrayRemoveAtIndex(0, $allSceneNurbes);}
               
                // find type of selection
                string $currentCtrls[] = `ls -sl`;
                select -r $currentCtrls[0];
                pickWalk -d down;
                string $currentShape[] = `ls -sl`;
                $currentShapeType = `objectType $currentShape[0]`;
               
                select -r $currentCtrls; select -hi;
                $currentCtrls = `ls -sl`;
               
                if( `objExists "*Root_M"`||`objExists "*:Root_M"`||`objExists "*DeformationSystem"`||`objExists "*:DeformationSystem"`||`objExists "*MotionSystem"`||`objExists "*:MotionSystem"`||`objExists "*FitSkeleton"`||`objExists "*:FitSkeleton"`)
                         {$currentShapeType = "nurbsCurve";}
               
                $allSceneNurbes = `listTransforms ("-type "+$currentShapeType)`;
               
                string $Stuff[] = stringArrayRemove($allSceneNurbes, $currentCtrls);
                $CtrlByHierarchy = stringArrayRemove($Stuff, $currentCtrls);
                select -r $CtrlByHierarchy;
               
                int $amountOfAllCtrls = `size($CtrlByHierarchy)`;
                string $LastCtrlInHierarchy = $CtrlByHierarchy[(`size($CtrlByHierarchy)`)-1];
               
                $ClearElemwnts = `size($Chain)`; for ($s=0; $s<$ClearElemwnts; ++$s ){stringArrayRemoveAtIndex(0, $Chain);}
               
                for ($i=0; $i<$amountOfAllCtrls; ++$i )
                {       
                        select -r $CtrlByHierarchy[$i];
                        select -hi;
                        string $currentCtrls[] = `ls -sl`;
                        string $Stuff[] = stringArrayRemove($allSceneNurbes, $currentCtrls);
                        string $CurrentCtrlByHierarchy[] = stringArrayRemove($Stuff, $currentCtrls);
                               
                        if ($CtrlByHierarchy[$i+1]==$CurrentCtrlByHierarchy[1]&&$CurrentCtrlByHierarchy[0]!=$LastCtrlInHierarchy)
                        {
                            stringArrayInsertAtIndex(100, $Chain, $CurrentCtrlByHierarchy[0]);
                                        select -r $CurrentCtrlByHierarchy[0];
                        }
                        else
                        {       
                                        stringArrayInsertAtIndex(100, $Chain, $CurrentCtrlByHierarchy[0]);
                                select -r $Chain;
                                Overlapper;
                                string $CtrlByHierarchy[] = stringArrayRemove($Chain, $CtrlByHierarchy);
                                int $ClearElemwnts = `size($Chain)`;for ($s=0; $s<$ClearElemwnts; ++$s ){stringArrayRemoveAtIndex(0, $Chain);}
                        }
                        
                        int $amountOfAllCtrls = `size($CtrlByHierarchy)`;      
                }
}

///////////// Overlapper /////////////

proc Overlapper()
{
        cycleCheck -e off;
        global float $timeStartGlobal, $timeEndGlobal;
        global float $timeStart, $timeEnd;
        $timeStart = $timeStartGlobal;
        $timeEnd = $timeEndGlobal;
        int $ClearElemwnts;
               
        float $OverTimeShift = `floatField -q -v timeShift`;
        float $OverGlobalScale = `floatField -q -v globalScale`; if($OverGlobalScale<=0){$OverGlobalScale=0.001;}
        float $windScaleValue = `floatField -q -v windScale`;
        float $windSpeedValue = `floatField -q -v windSpeed`;
       

        int $deBugMode = `menuItem -query -cb  debMode`;
        int $onLayerSwitch = `menuItem -query -cb  onLayerMode`;
        int $adptScale = `menuItem -query -cb  adScaleMode`;
        int $OvSelectionSet = `menuItem -query -cb  ovCrSelSet`;

       
        int $TRANSLATEmode = `checkBox -q -v IKmode`;
        int $useFirstCtrl = `checkBox -q -v firstCtrl`;
        int $WindSwitch = `checkBox -q -v WindCheckBox`;
        int $CycleCheckBox = `checkBox -q -v CycleCheckBox`;
       
       
        float $timeShift = $OverTimeShift;
        float $overlapIntensity = $OverGlobalScale;

        float $scaleModulator = 5;
        string $overlapJointsArray[];
        float $overlapJointsLenghtArray[];
        float $averageLenghtJoints;
        global float $sumLenghtJoints;
        string $ControlName[];
        float $cycleLenghts;
        string $SelectedControlsClearNameSpaces[];
        string $SelectedControls[];
        global string $eulerFilterCurves[];       
       
        $ClearElemwnts = `size($overlapJointsArray)`; for ($i=0; $i<$ClearElemwnts; ++$i ){stringArrayRemoveAtIndex(0, $overlapJointsArray);}       
        $ClearElemwnts = `size($overlapJointsLenghtArray)`; for ($i=0; $i<$ClearElemwnts; ++$i ) {floatArrayRemoveAtIndex(0, $overlapJointsLenghtArray);}
        $ClearElemwnts = `size($SelectedControls)`; for ($i=0; $i<$ClearElemwnts; ++$i ) {stringArrayRemoveAtIndex(0, $SelectedControls);}       
        $ClearElemwnts = `size($SelectedControlsClearNameSpaces)`; for ($i=0; $i<$ClearElemwnts; ++$i ) {stringArrayRemoveAtIndex(0, $SelectedControlsClearNameSpaces);}       
       

        //time range
        float $currentTime =`currentTime -query`;
       
        //set frame
        currentTime - e $timeStart;
       
        $SelectedControls = `ls -sl`;
        int $iLoop = `size($SelectedControls)`;

        $DividedName = `tokenize $SelectedControls[0] ":" $ControlName`;
        if ($DividedName>1)
        {
                for ($i=0; $i<$iLoop; ++$i)
                        {       
                                $DividedNameCurve = `tokenize $SelectedControls[$i] ":" $ControlName`;
                                $ClearNameCtrl = $ControlName[($DividedNameCurve-1)];
                                stringArrayInsertAtIndex(100, $SelectedControlsClearNameSpaces, $ClearNameCtrl);       
                        }
        }
        else {$SelectedControlsClearNameSpaces=$SelectedControls;}
       
        select -cl;

        //progressBar
    int $amount = 0;
    float $prAmount = 100/$iLoop;

     progressWindow
         -title "progress..."
         -progress $amount
         -status "Progress: 0%"
         -isInterruptable true;

        // create locators for Joints
        for ($i=0; $i<$iLoop; ++$i)
                {       
                        spaceLocator -n ("TEMP_Offset_locator"+$i);
                    select -r $SelectedControls[$i] ("TEMP_Offset_locator"+$i);
                        parentConstraint -weight 1;
                }
                        select -cl;

        // create Joints
       
        for ($i=0; $i<$iLoop; ++$i )
                {       
                        float $WorldTr[] = `xform -q -ws -t ("TEMP_Offset_locator"+$i)`;
                        joint -rad 1 -n ($SelectedControls[$i]+"_OverlapJoint") -p $WorldTr[0] $WorldTr[1] $WorldTr[2];

                                if ($i>0)
                                {
                                        joint -e -zso -oj xyz -sao yup ($SelectedControls[$i-1]+"_OverlapJoint");
                                }
                               
                        stringArrayInsertAtIndex( 100, $overlapJointsArray, ($SelectedControls[$i]+"_OverlapJoint") );
                }
               
        delete ("TEMP_Offset_locator*");

        int $overlapJointsAnmount = `size($SelectedControls)`;
    select -r ($overlapJointsArray[$overlapJointsAnmount-1]);
               
        duplicate -rr;
        string $LastOrientJoints[] = `ls -sl`;
        move -r -ls -wd 2 0 0 ;
        float $WorldLastTr[] = `xform -q -ws -t $LastOrientJoints[0]`;
        select -r ($SelectedControls[$i-1]+"_OverlapJoint");
        joint -rad 1 -n ($SelectedControls[$i-1]+"LastOrientJoint") -p $WorldLastTr[0] $WorldLastTr[1] $WorldLastTr[2];
        joint -e -zso -oj xyz -sao yup ($SelectedControls[$i-1]+"_OverlapJoint");
        delete $LastOrientJoints;
        $LastOrientJoints = `ls -sl`;
        stringArrayInsertAtIndex( 100, $overlapJointsArray, $LastOrientJoints[0]);
        select -r $overlapJointsArray;
        joint -e  -oj xyz -secondaryAxisOrient zup -ch -zso;

       
        $ClearElemwnts = `size($overlapJointsLenghtArray)`; for ($s=0; $s<$ClearElemwnts; ++$s ){floatArrayRemoveAtIndex(0, $overlapJointsLenghtArray);}

        //joints lengths
        for ($i=1; $i<($iLoop+1); ++$i )
                {       
                        float $DistanceBetween = `getAttr ($overlapJointsArray[$i]+".translateX")`;
                        floatArrayInsertAtIndex( 100, $overlapJointsLenghtArray, $DistanceBetween);
                }
       
        //average
        int $JointsLentghtsAmount = `size($overlapJointsLenghtArray)`;
       
        $sumLenghtJoints = 0;
        for ($i=0; $i<($JointsLentghtsAmount); ++$i )
                {       
                        $sumLenghtJoints = $sumLenghtJoints + $overlapJointsLenghtArray[$i];
                }
                               
        $averageLenghtJoints = ($sumLenghtJoints-2)/$JointsLentghtsAmount;
        setAttr ($SelectedControls[$i-1]+"LastOrientJoint.translateX") $averageLenghtJoints;
       
        // constrain joint to controls
        for ($i=0; $i<$iLoop; ++$i )
                {       
                        select -r $SelectedControls[$i] ($SelectedControls[$i]+"_OverlapJoint");
                        pointConstraint  -weight 1 -mo;
                        orientConstraint -weight 1 -mo;
                }

        // bake jonts
        select -r $overlapJointsArray;
        bakeResults
                -simulation 0
            -t ($timeStart+":"+$timeEnd)
            -sampleBy 1
            -disableImplicitControl 1
            -preserveOutsideKeys 1
            -sparseAnimCurveBake 1
            -bakeOnOverrideLayer 0
            -minimizeRotation 0
            $overlapJointsArray;
        delete -constraints;

        // Cycling (copy curves, add time)
        if ($CycleCheckBox == 1)
        {
                        for ($i=0; $i<($iLoop-1); ++$i )
                    {
                            selectKey -r -k -t ($timeStart+":"+$timeEnd) ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_translateX")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_translateY")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_translateZ")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_rotateX")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_rotateY")
                                                                                                                      ($SelectedControlsClearNameSpaces[$i]+"_OverlapJoint_rotateZ");                  
                            copyKey;
                                pasteKey -time $timeEnd -float $timeEnd -option insert -copies 2 -connect 0 -timeOffset 0 -floatOffset 0 -valueOffset 0;
                                select -cl  ;                    
                    }
        $cycleLenghts = $timeEnd-$timeStart;
        $timeEnd = $timeEnd+2*$cycleLenghts;
        }

        // Overlaping
        for ($i=0; $i<$iLoop; ++$i )
                {
                         //progressBar       
                        $amount += $prAmount;               
                        progressWindow -edit
                        -progress $amount
                        -status ("Progress: "+$amount+"%");
       
                        //create locator
                        spaceLocator -n ("overlapOffsetLocator"+$i);
                        select -r $overlapJointsArray[$i] ("overlapOffsetLocator"+$i);
                        string $temps[] = `pointConstraint -offset 0 0 0 -weight 1`;
                        delete $temps;
                        $temps = `orientConstraint -offset 0 0 0 -weight 1`;
                        delete $temps;
                       
                        //create IK locator
                        spaceLocator -n ("overlapOffsetIKLocator"+$i);
                        select -r $overlapJointsArray[$i] ("overlapOffsetIKLocator"+$i);
                        $temps = `pointConstraint -offset 0 0 0 -weight 1`;
                        delete $temps;
                        $temps = `orientConstraint -offset 0 0 0 -weight 1`;
                        delete $temps;
                       
                        select -r ("overlapOffsetLocator"+$i);
                        if ($adptScale==1){$scaleModulator = $averageLenghtJoints;}
                        float $overlapIntensityMult = $averageLenghtJoints/$overlapIntensity*5;
                        move  -r -os -ls $overlapIntensityMult 0 0 ;
                        select -r $overlapJointsArray[$i] ("overlapOffsetLocator"+$i);
                        parentConstraint -mo -weight 1;
                       
                        select -r $overlapJointsArray[$i] ("overlapOffsetIKLocator"+$i);
                        parentConstraint -mo -weight 1;
       
                        bakeResults -simulation 0
                            -t ($timeStart+":"+$timeEnd)
                            -sampleBy 1
                            -disableImplicitControl 1
                            -preserveOutsideKeys 1
                            -sparseAnimCurveBake 0
                            -removeBakedAttributeFromLayer 0
                            -removeBakedAnimFromLayer 0
                            -bakeOnOverrideLayer 0     
                            -minimizeRotation 0
                            -controlPoints 0
                            -shape 1
                            ("overlapOffsetLocator"+$i) ("overlapOffsetIKLocator"+$i);   
                            
                        filterCurve ("overlapOffsetLocator"+$i+"_rotateX")("overlapOffsetLocator"+$i+"_rotateY")("overlapOffsetLocator"+$i+"_rotateZ");       
                        spaceLocator -n ("overlapOffsetLocatorWind"+$i);
                        parent ("overlapOffsetLocatorWind"+$i) ("overlapOffsetLocator"+$i);
                        makeIdentity -apply false -t 1 -r 1 -s 1;
       
                        float $timeShiftNeg = -1*$timeShift;
                        float $timeShiftCurrent = $timeShift+1;
                               
                    keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_translateX");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_translateY");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_translateZ");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetIKLocator"+$i+"_translateX");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetIKLocator"+$i+"_translateY");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetIKLocator"+$i+"_translateZ");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_rotateX");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_rotateY");
                        keyframe -e -iub true -r -o over -tc $timeShift ("overlapOffsetLocator"+$i+"_rotateZ");
       
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_translateX");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_translateY");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_translateZ");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetIKLocator"+$i+"_translateX");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetIKLocator"+$i+"_translateY");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetIKLocator"+$i+"_translateZ");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_rotateX");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_rotateY");
                        selectKey -add -k -t $timeShiftCurrent ("overlapOffsetLocator"+$i+"_rotateZ");
                               
                        keyframe -animation keys -option over -relative -timeChange $timeShiftNeg;
                       
                        spaceLocator -n ("overlapInLocator_first_"+$i);
                        spaceLocator -n ("overlapInLocator_second_"+$i);
                        spaceLocator -n ("overlapResultLocator_"+$i);
                        select -r ("overlapInLocator_first_"+$i) ($SelectedControls[$i]+"_OverlapJoint");
                        Parent;
                        select -r ("overlapInLocator_second_"+$i) ($SelectedControls[$i]+"_OverlapJoint");
                        Parent;
                        select -r ("overlapResultLocator_"+$i) ($SelectedControls[$i]+"_OverlapJoint");
                        Parent;
                        select -r ("overlapInLocator_first_"+$i) ("overlapInLocator_second_"+$i) ("overlapResultLocator_"+$i);
                        makeIdentity -apply false -t 1 -r 1 -s 1;
                        select -r("overlapInLocator_second_"+$i);
                        move  -r -os -ls $overlapIntensityMult 0 0 ;               
                        select -r ("overlapInLocator_first_"+$i);
                        group -n ("overlapInLocator_first_"+$i+"grp");
               
                        // IK mode
                        if($TRANSLATEmode==1)
                        {
                                select -r ("overlapOffsetIKLocator"+$i) ("overlapInLocator_first_"+$i+"grp");
                                pointConstraint -mo -weight 1;
                        }
                       
                        select -r ("overlapOffsetLocatorWind"+$i) ("overlapInLocator_second_"+$i);
                        parentConstraint -mo -weight 1;
                       
                        select -r ("overlapInLocator_second_"+$i) ("overlapInLocator_first_"+$i+"grp");
                        aimConstraint -mo -weight 1 -aimVector 1 0 0 -upVector 0 1 0 -worldUpType "object" -worldUpObject ("overlapInLocator_second_"+$i);
                        select -r ("overlapInLocator_second_"+$i) ("overlapInLocator_first_"+$i);
                        orientConstraint -mo -skip y -skip z -weight 1;
                        select -r  ("overlapInLocator_first_"+$i) ("overlapResultLocator_"+$i);
                        parentConstraint -mo -weight 1;
               
                        ///Wind
                        if($i<1&&$WindSwitch==1)
                        {
                            select -r overlapOffsetLocatorWind0;
                            string $WindFirstControl[] = `ls -sl`;
                           
                            float $windMultiply = 0.07*$overlapIntensityMult*$windScaleValue ;
                            float $speedMultiply = 20/$windSpeedValue;
                           
                            setKeyframe  -attribute "translateY" -attribute "translateZ" -t $timeStart overlapOffsetLocatorWind0;
                           
                            bakeResults
                                    -simulation 0
                                    -t ($timeStart+":"+($timeEnd+$speedMultiply))
                                    -sampleBy $speedMultiply
                                    -oversamplingRate 1
                                    -disableImplicitControl true
                                    -preserveOutsideKeys 1
                                    -sparseAnimCurveBake false
                                    -removeBakedAttributeFromLayer false
                                    -removeBakedAnimFromLayer false
                                    -bakeOnOverrideLayer false
                                    -minimizeRotation true
                                    -at "ty" -at "tz"
                                    overlapOffsetLocatorWind0;
                           
                                string $listAnimAttrs[] = `listAttr -k overlapOffsetLocatorWind0`;               
                                    for ($attr in $listAnimAttrs)
                                    {        
                                            // array of animated atributes
                                            string $animCurve[] = `listConnections -type "animCurve" ("overlapOffsetLocatorWind0."+$attr)`;
                                            for ($animCurveCurrent in $animCurve)
                                                    {
                                                            // array of keys
                                                            float $animCurveCurrentKeysTimeArray[] = `keyframe -time ($timeStart+":"+$timeEnd) -query -timeChange $animCurveCurrent`;
                           
                                                        // array of values
                                                                for ($animCurveCurrentKeysTime in $animCurveCurrentKeysTimeArray)
                                                                {
                                                                        float $animCurveCurrentKeysTimeArray[] = `keyframe -time $animCurveCurrentKeysTime -query -valueChange $animCurveCurrent`;
                                                                       
                                                                        //Randomazer
                                                                        float $RandomizerValue = `rand -1 1`;
                                                                        float $animCurveCurrentKeysValueArrayAddRandom = $animCurveCurrentKeysTimeArray[0]+$windMultiply*$RandomizerValue;
                                                                        keyframe -e -iub true -r -o over -vc $animCurveCurrentKeysValueArrayAddRandom -t $animCurveCurrentKeysTime $animCurveCurrent;
                                                            }
                                }
                                    }
                                keyframe -e -iub true -r -o over -tc ($speedMultiply/2) overlapOffsetLocatorWind0_translateY;
                                selectKey -add -k -t (($speedMultiply/2)+1) overlapOffsetLocatorWind0_translateY;
                            keyframe -animation keys -option over -relative -timeChange ($speedMultiply/-2);
                        }
                       
                        bakeResults -simulation 0
                                            -t ($timeStart+":"+$timeEnd)
                                            -sampleBy 1
                                            -disableImplicitControl 1
                                            -preserveOutsideKeys 1
                                            -sparseAnimCurveBake 0
                                            -removeBakedAttributeFromLayer 0
                                            -removeBakedAnimFromLayer 0
                                            -bakeOnOverrideLayer 0     
                                            -minimizeRotation 0
                                            -controlPoints 0
                                            -shape 1
                                            ("overlapResultLocator_"+$i);
                                            
                    if($deBugMode==0) {delete ("overlapInLocator_first_"+$i) ("overlapInLocator_first_"+$i+"grp") ("overlapOffsetLocator"+$i) ("overlapInLocator_second_"+$i);}
                    spaceLocator -n ("overlapResultLocatorOut_"+$i);
                             
                    if(`objExists "OverlapperOverlapResultLocatorSet"`) {sets -edit -forceElement OverlapperOverlapResultLocatorSet ("overlapResultLocatorOut_"+$i);}
                     else {$createSetResult = `sets -name "OverlapperOverlapResultLocatorSet"`;}
            
            
                    select -r  ("overlapResultLocator_"+$i) ("overlapResultLocatorOut_"+$i);
                    parentConstraint -weight 1;
                    bakeResults -simulation 0
                                            -t ($timeStart+":"+$timeEnd)
                                            -sampleBy 1
                                            -disableImplicitControl 1
                                            -preserveOutsideKeys 1
                                            -sparseAnimCurveBake 0
                                            -removeBakedAttributeFromLayer 0
                                            -removeBakedAnimFromLayer 0
                                            -bakeOnOverrideLayer 0     
                                            -minimizeRotation 0
                                            -controlPoints 0
                                            -shape 1
                                            ("overlapResultLocatorOut_"+$i);
                        if($deBugMode==0) {delete ("overlapResultLocator_"+$i);}
                    select -r ("overlapResultLocatorOut_"+$i) ($SelectedControls[$i]+"_OverlapJoint");
                    parentConstraint -weight 1 -mo;
        }
            

            
        // constrain controls back to joint
   
    if ($useFirstCtrl==1)
        {
            for ($i=1; $i<$iLoop; ++$i )
            {       
            //orient constraint
                    if (`getAttr -keyable ($SelectedControls[$i]+".rx")`==1&&`getAttr -lock ($SelectedControls[$i]+".rx")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".ry")`==1&&`getAttr -lock ($SelectedControls[$i]+".ry")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".rx")`==1&&`getAttr -lock ($SelectedControls[$i]+".rx")`==0)
                            {select -r ($SelectedControls[$i]+"_OverlapJoint") $SelectedControls[$i]; orientConstraint -mo -weight 1;}
                   
                    //point constraint
                    if (`getAttr -keyable ($SelectedControls[$i]+".tx")`==1&&`getAttr -lock ($SelectedControls[$i]+".tx")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".ty")`==1&&`getAttr -lock ($SelectedControls[$i]+".ty")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".tx")`==1&&`getAttr -lock ($SelectedControls[$i]+".tx")`==0)
                            {pointConstraint -mo -weight 1;}
            }
        }
        else
        {
            for ($i=0; $i<$iLoop; ++$i )
            {       
                    //orient constraint
                    if (`getAttr -keyable ($SelectedControls[$i]+".rx")`==1&&`getAttr -lock ($SelectedControls[$i]+".rx")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".ry")`==1&&`getAttr -lock ($SelectedControls[$i]+".ry")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".rx")`==1&&`getAttr -lock ($SelectedControls[$i]+".rx")`==0)
                            {select -r ($SelectedControls[$i]+"_OverlapJoint") $SelectedControls[$i]; orientConstraint -mo -weight 1;}
                   
                    //point constraint
                    if (`getAttr -keyable ($SelectedControls[$i]+".tx")`==1&&`getAttr -lock ($SelectedControls[$i]+".tx")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".ty")`==1&&`getAttr -lock ($SelectedControls[$i]+".ty")`==0&&
                        `getAttr -keyable ($SelectedControls[$i]+".tx")`==1&&`getAttr -lock ($SelectedControls[$i]+".tx")`==0)
                            {pointConstraint -mo -weight 1;}
            }
        }
       
                                if ($CycleCheckBox == 1)
                        {       
               
                        $timeStart = `playbackOptions -q -min`;
                        $timeEnd = `playbackOptions -q -max`;
                        $cycleLenghts = $timeEnd-$timeStart;
       
                                select -r  OverlapperOverlapResultLocatorSet;
                                string $EulerArrays[] = `ls -sl`;
                               
                                for ($obj in $EulerArrays)
                                {
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts) ($obj+"_translateX");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts)        ($obj+"_translateY");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts) ($obj+"_translateZ");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts) ($obj+"_rotateX");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts)        ($obj+"_rotateY");
                                        keyframe -e -iub true -r -o over -tc (-2*$cycleLenghts) ($obj+"_rotateZ");
                                }            
                        }
       
        select -r $SelectedControls;       

        $timeStart = `playbackOptions -q -min`;
        $timeEnd = `playbackOptions -q -max`;

    bakeResults
            -simulation 0
            -t ($timeStart+":"+$timeEnd)
            -sampleBy 1
            -disableImplicitControl 1
            -preserveOutsideKeys 1
            -sparseAnimCurveBake 0
            -removeBakedAttributeFromLayer 0
            -removeBakedAnimFromLayer 0
            -bakeOnOverrideLayer $onLayerSwitch     
            -minimizeRotation 0
            -controlPoints 0
            -shape 1
            $SelectedControls;
              
        //create selection set
        if($OvSelectionSet==1)
        {       
            if(`objExists "OverlapperSet*"`) {sets -edit -forceElement OverlapperSet $SelectedControls;}
            else {$createSetResult = `sets -name "OverlapperSet"`;}
    }
            if(`objExists "OverlapperWorkSet*"`) {sets -edit -forceElement OverlapperWorkSet $SelectedControls;}
            else {$createSetResult = `sets -name "OverlapperWorkSet"`;}
            
    // finalization
        if($deBugMode==0) {delete $overlapJointsArray "overlapResultLocatorOut*" "*overlapOffsetIKLocator*";}
    currentTime - e $currentTime;
    select -r $SelectedControls;
    cycleCheck -e on;
        progressWindow -endProgress;
       
        // select ovelapped controls set
    if(`objExists "OverlapperSet"`) {select -r OverlapperSet;}
}

// Finalizing
global proc CycleFinal()
{

        string $SelectedControlsClearNameSpaces[];
        string $SelectedControls[];
        global string $eulerFilterCurves[];       
        string $ControlName[];
          float $cycleLenghts;
         
        // euler all anim curves       
        $ClearElemwnts = `size($eulerFilterCurves)`; for ($s=0; $s<$ClearElemwnts; ++$s ){stringArrayRemoveAtIndex(0, $eulerFilterCurves);}
        select -r OverlapperWorkSet;
        string $EulerArrays[] = `ls -sl`;
       
        for ($obj in $EulerArrays)
        {
                $listAnimAttrs = `listAttr -k $obj`;               
                for ($attr in $listAnimAttrs)
                {        
                        $animCurve = `listConnections -type "animCurve" ($obj+"."+$attr)`;
                        int $ClearElemwnts = `size($animCurve)`;
                        appendStringArray($eulerFilterCurves, $animCurve, $ClearElemwnts);
                }
        }
        filterCurve $eulerFilterCurves;               
        delete "OverlapperWorkSet";
}

OverlapperRelease;
59天前
回复

使用道具 举报

您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器