昨晚抽空改了个相机抖动的插件。核心是给相机的shake节点加个noise:
代码:
//written by dango @ magic animation studio
//2018/5/4
global proc getName ()
//--------------------------------------------------------------------------------------
{
string $camSel[] = `ls -sl` ;
textField -e -tx $camSel[0] camNameField ;
//select $camSel[0];
//lookThroughModelPanel $camSel[0] modelPanel4;
}
//--------------------------------------------------------------------------------------
global proc addSomeNoise ()
//--------------------------------------------------------------------------------------
{
string $qCamName = `textField -q -tx camNameField`;
float $qHV1 = `floatSliderGrp -q -v value01H`;
float $qHV2 = `floatSliderGrp -q -v value02H`;
//string $qHV3 = `floatField -q -v value03H`;
float $qVV1 = `floatSliderGrp -q -v value01V`;
float $qVV2 = `floatSliderGrp -q -v value02V`;
string $qShake = `checkBox -q -v shakeEn`;
//string $qShakeOver = `checkBox -q -v overShakeEn`;
//print ($qCamName+"_shuiping_PinLv")
if(!(`objExists ($qCamName+".shuiping_PinLv")`)){addAttr -sn "shuiping_PinLv" -at "float" -dv 0.2 -min 0.00 -max 1 $qCamName;setAttr -k on ($qCamName+".shuiping_PinLv");}
if(!(`objExists ($qCamName+".shuzhi_PinLv")`)){addAttr -sn "shuzhi_PinLv" -at "float" -dv 0.2 -min 0.00 -max 1 $qCamName;setAttr -k on ($qCamName+".shuzhi_PinLv");}
if(!(`objExists ($qCamName+".shuiping_FuDu")`)){addAttr -sn "shuiping_FuDu" -at "float" -min 0.00 -max 30 -dv 5 $qCamName;setAttr -k on ($qCamName+".shuiping_FuDu");}
if(!(`objExists ($qCamName+".shuzhi_FuDu")`)){addAttr -sn "shuzhi_FuDu" -at "float" -min 0.00 -max 30 -dv 5 $qCamName;setAttr -k on ($qCamName+".shuzhi_FuDu");}
if(!(`objExists ($qCamName+".kaiguan")`)){addAttr -sn "kaiguan" -at "bool" -dv 1 $qCamName;setAttr -k on ($qCamName+".kaiguan");}
connectAttr ($qCamName+".kaiguan") ($qCamName+".shakeEnabled");
setAttr ($qCamName+".shuiping_PinLv") $qHV1;
setAttr ($qCamName+".shuzhi_PinLv") $qVV1;
setAttr ($qCamName+".shuiping_FuDu") $qHV2;
setAttr ($qCamName+".shuzhi_FuDu") $qVV2;
//float $qVV11 = `getAttr ($qCamName+".shuzhi_PinLv")`;
// float $qVV21 = `getAttr ($qCamName+".shuzhi_FuDu")`;
// float $qHV11 = `getAttr ($qCamName+".shuiping_PinLv")`;
// float $qHV21 = `getAttr ($qCamName+".shuiping_FuDu")`;
if(`objExists ($qCamName+"shakeVertical")`){
expression -e -s ($qCamName+".verticalShake=noise(frame*"+($qCamName+".shuzhi_PinLv")+")/"+"1000*"+($qCamName+".shuzhi_FuDu")) -o "" -ae 1 -uc all ($qCamName+"shakeVertical") ;
expression -e -s ($qCamName+".horizontalShake=noise((-frame)*"+ ($qCamName+".shuiping_PinLv")+")/"+"1000*"+($qCamName+".shuiping_FuDu")) -o "" -ae 1 -uc all ($qCamName+"shakeHorizontal") ;
}
else{
expression -s ($qCamName+".verticalShake=noise(frame*"+ ($qCamName+".shuzhi_PinLv")+")/"+"1000*"+($qCamName+".shuzhi_FuDu")) -n ($qCamName+"shakeVertical") -ae 1 -uc all ;
expression -s ($qCamName+".horizontalShake=noise((-frame)*"+($qCamName+".shuiping_PinLv")+")/"+"1000*"+($qCamName+".shuiping_FuDu")) -n ($qCamName+"shakeHorizontal") -ae 1 -uc all ;
}
//enableShakeOver;
enableShake;
deleteUI ShakeWindow;
}
//--------------------------------------------------------------------------------------
global proc enableShake ()
//--------------------------------------------------------------------------------------
{
string $qCamName = `textField -q -tx camNameField`;
string $shp[] = `listRelatives -shapes $qCamName`;
string $qShake = `checkBox -q -v shakeEn`;
if($qShake == "1"){
if(`objExists ($qCamName+".kaiguan")`)setAttr ($qCamName+".kaiguan") 1;
}
else{
if(`objExists ($qCamName+".kaiguan")`) setAttr ($qCamName+".kaiguan") 0;
}
}
/*
//--------------------------------------------------------------------------------------
global proc enableShakeOver ()
//--------------------------------------------------------------------------------------
{
string $qCamName = `textField -q -tx camNameField`;
// string $shp[] = `listRelatives -shapes $qCamName`;
string $qShakeOver = `checkBox -q -v overShakeEn`;
if($qShakeOver == "1"){
setAttr ($qCamName+".shakeOverscanEnabled") 1;
}
else{
setAttr ($qCamName+".shakeOverscanEnabled") 0;
}
}
*/
//--------------------------------------------------------------------------------------
global proc shakeWindowProc ()
//--------------------------------------------------------------------------------------
{
if (`window -q -ex ShakeWindow`) deleteUI ShakeWindow;
window -title "DH_PhoenixShakeCamTool " -w 400 -h 80 ShakeWindow;
columnLayout -cw 500 -adjustableColumn 1;
menuBarLayout;
menu -l "help" -pmc "authorWindow";
setParent ..;
separator -w 300 ;
columnLayout -adj 1 ;
//separator -w 400 -h 15;
text -al "left" "获取相机名字 ";
//separator -w 400 -h 15;
rowLayout -nc 4;// -cw4 60 60 50 50 ;
textField -w 110 -text "" -ed 0 camNameField ;
button -l "<<" -bgc .3 0.5 .1 -ann "选择相机然后点击按钮" -c getName;
checkBox -l "开/关Shake" -v 1 -cc enableShake shakeEn ;
//checkBox -l "Overscan" -v 1 -cc enableShakeOver overShakeEn ;
setParent..;
separator -w 300 -h 15;
text -fn "boldLabelFont" -bgc .1 .2 .3 -w 295 " ----- 调整数值 -----" ;
separator -w 300 -h 15;
columnLayout -adj 1;
text -al "left" " 频率 幅度";
rowColumnLayout -nc 3 ;
text -al "left" "水平振动:";
floatSliderGrp -pre 3 -field true -w 200 -min 0.01 -max 1 -value 0.2 value01H;
//text "" textB;
floatSliderGrp -pre 3 -field true -w 200 -min .1 -max 30 -value 5 value02H;
//floatField -w 70 -en 1 -v 200 value03H;
setParent..;
rowColumnLayout -nc 5 ;
text -al "left" "竖直振动:";
floatSliderGrp -pre 3 -field true -w 200 -min 0.01 -max 1 -value 0.2 value01V;
//text "" textA;
floatSliderGrp -pre 3 -field true -w 200 -min .1 -max 30 -value 5 value02V;
text " ";
setParent..;
columnLayout -adj 1 ;//-adj 1;
separator -w 300 -h 15;
button -w 295 -label "振动!" -ann ("增加振动") -c addSomeNoise -bgc .1 .7 .4 ;
setParent..;
//window -e -w 280 -h 70 ShakeWindow;
showWindow ;
}
global proc authorWindow(){
confirmDialog -title "help"
-message "author: wangdonghao @ magic animation\n分机号:Magic--004\nwechat: 18250844478"
-button "ok"
-defaultButton "ok"
-cancelButton "ok"
-dismissString "No";
}
shakeWindowProc;