// Shave and a Haircut // (c) 2019 Epic Games // US Patent 6720962 global string $AEshaveNodeTemplate_fileVersion = "$Revision$"; global proc AEshaveNodeDimControls(string $node) { int $isInstanced = getAttr($node + ".instancingStatus"); if ($isInstanced) editorTemplate -dimControl $node "overrideGeomShader" true; else editorTemplate -dimControl $node "overrideGeomShader" false; } global proc AEshaveNodeTemplate( string $nodeName ) { // Put our attributes into a scrolled layout field editorTemplate -beginScrollLayout; editorTemplate -beginLayout "General Properties" -collapse false; editorTemplate -addControl "hairCount"; editorTemplate -addControl "hairSegments"; editorTemplate -addControl "hairPasses"; editorTemplate -callCustom "AEshaveCutTexParmNew" "AEshaveCutTexParmReplace" "shaveTex[29]"; editorTemplate -callCustom "AEshaveDensityTexParmNew" "AEshaveDensityTexParmReplace" "shaveTex[28]"; AEshaveSpacer(); editorTemplate -addControl "scale"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[41]"; AEshaveSpacer(); editorTemplate -addControl "randScale"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[36]"; AEshaveSpacer(); editorTemplate -addControl "rootThickness"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[20]"; AEshaveSpacer(); editorTemplate -addControl "tipThickness"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[37]"; AEshaveSpacer(); editorTemplate -addControl "displacement"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[43]"; AEshaveSpacer(); editorTemplate -addControl "active"; editorTemplate -label "Use Instance Obj" -addControl "instancingStatus" "AEshaveNodeDimControls"; editorTemplate -addControl "interpolateGuides"; editorTemplate -endLayout; editorTemplate -beginLayout "Material Properties" -collapse false; editorTemplate -addControl "selfShadow"; editorTemplate -addControl "geomShadow"; AEshaveSpacer(); editorTemplate -addControl "specular"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[4]"; AEshaveSpacer(); editorTemplate -addControl "gloss"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[5]"; AEshaveSpacer(); editorTemplate -addControl "amb/diff"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[6]"; AEshaveSpacer(); editorTemplate -callCustom "AEshaveColourNew" "AEshaveColourReplace" "hairColor"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "hairColorTexture"; AEshaveSpacer(); editorTemplate -addControl "hueVariation"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[12]"; AEshaveSpacer(); editorTemplate -addControl "valueVariation"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[39]"; AEshaveSpacer(); editorTemplate -callCustom "AEshaveColourNew" "AEshaveColourReplace" "rootColor"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "rootHairColorTexture"; AEshaveSpacer(); editorTemplate -callCustom "AEshaveColourNew" "AEshaveColourReplace" "mutantHairColor"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "mutantHairColorTexture"; AEshaveSpacer(); editorTemplate -addControl "percentMutantHairs"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[16]"; AEshaveSpacer(); editorTemplate -addControl "overrideGeomShader"; editorTemplate -endLayout; editorTemplate -beginLayout "Flyaway Hairs" -collapse false; editorTemplate -addControl "flyawayPerc"; editorTemplate -addControl "flyawayStren"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "flyawayStrenTexture"; editorTemplate -addControl "messStren"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "messStrenTexture"; editorTemplate -endLayout; editorTemplate -beginLayout "Clumping" -collapse false; editorTemplate -addControl "clumps"; editorTemplate -addControl "clumpsStrength"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[49]"; editorTemplate -addControl "clumpsScruffle"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[55]"; editorTemplate -addControl "clumpsRotStren"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[50]"; editorTemplate -addControl "clumpsColStren"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[51]"; editorTemplate -addControl "clumpsRotOffset"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[52]"; editorTemplate -endLayout; editorTemplate -beginLayout "Frizz Properties" -collapse true; editorTemplate -addControl "rootFrizz"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[0]"; AEshaveSpacer(); editorTemplate -addControl "tipFrizz"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[24]"; AEshaveSpacer(); editorTemplate -addControl "frizzXFrequency"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[1]"; AEshaveSpacer(); editorTemplate -addControl "frizzYFrequency"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[30]"; AEshaveSpacer(); editorTemplate -addControl "frizzZFrequency"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[31]"; AEshaveSpacer(); editorTemplate -addControl "frizzAnim"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[32]"; AEshaveSpacer(); editorTemplate -addControl "animSpeed"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[33]"; AEshaveSpacer(); editorTemplate -addControl "frizzAnimDir"; editorTemplate -endLayout; editorTemplate -beginLayout "Kink Properties" -collapse true; editorTemplate -addControl "rootKink"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[38]"; AEshaveSpacer(); editorTemplate -addControl "tipKink"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[2]"; AEshaveSpacer(); editorTemplate -addControl "kinkXFrequency"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[3]"; AEshaveSpacer(); editorTemplate -addControl "kinkYFrequency"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[34]"; AEshaveSpacer(); editorTemplate -addControl "kinkZFrequency"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[35]"; editorTemplate -endLayout; editorTemplate -beginLayout "Multi Strand Properties" -collapse true; editorTemplate -addControl "multiStrandCount"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[25]"; AEshaveSpacer(); editorTemplate -addControl "rootSplay"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[26]"; AEshaveSpacer(); editorTemplate -addControl "tipSplay"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[27]"; AEshaveSpacer(); editorTemplate -label "Twist" -addControl "multAsp"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[44]"; AEshaveSpacer(); editorTemplate -label "Randomize" -addControl "randomizeMulti"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[42]"; editorTemplate -endLayout; editorTemplate -beginLayout "Dynamics Properties" -collapse true; editorTemplate -addControl "enableCollision"; editorTemplate -addControl "disableDynamics"; AEshaveSpacer(); editorTemplate -addControl "stiffness"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[8]"; AEshaveSpacer(); editorTemplate -label "Root Hold" -addControl "rootStiffness"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[21]"; AEshaveSpacer(); editorTemplate -label "Dampen" -addControl "dampening"; editorTemplate -callCustom "AEshaveTexParmNew" "AEshaveTexParmReplace" "shaveTex[40]"; editorTemplate -endLayout; editorTemplate -beginLayout "Rib Properties" -collapse true; editorTemplate -addControl "ribStuff"; editorTemplate -endLayout; editorTemplate -beginLayout "Nurbs Tesselation Properties" -collapse true; editorTemplate -addControl "uSubdivisions"; editorTemplate -addControl "vSubdivisions"; editorTemplate -endLayout; editorTemplate -beginLayout "Hair Display" -collapse true; editorTemplate -addControl "displayAs"; // editorTemplate -l "Display/Actual Ratio" -addControl "displayHairRatio"; editorTemplate -l "Max To Display" -addControl "displayHairMax"; editorTemplate -endLayout; // // Handle the standard node attributes. // AEdependNodeTemplate $nodeName; // // Display any dynamically added attributes. // editorTemplate -addExtraControls; // // We don't want to see these. // editorTemplate -suppress "hairColor"; editorTemplate -suppress "hairColorTexture"; editorTemplate -suppress "hairColorTextureR"; editorTemplate -suppress "hairColorTextureG"; editorTemplate -suppress "hairColorTextureB"; editorTemplate -suppress "instanceSource"; editorTemplate -suppress "mutantHairColor"; editorTemplate -suppress "mutantHairColorTexture"; editorTemplate -suppress "rootHairColorTexture"; editorTemplate -suppress "rootColor"; editorTemplate -suppress "rootColor"; editorTemplate -suppress "shaveIsShadows"; editorTemplate -suppress "shaveTex"; editorTemplate -endScrollLayout; AEshaveNodeDimControls($nodeName); } global proc AEshaveSpacer() { editorTemplate -callCustom "AEshaveSeparator" "AEshaveDummy"; } global proc AEshaveSeparator() { separator -style "none"; } global proc AEshaveDummy() { } global proc AEshaveColourNew(string $attrName) { string $tokens[]; int $numTokens = tokenize($attrName, ".", $tokens); string $sliderName = $tokens[$numTokens - 1] + "_slider"; attrColorSliderGrp -showButton no $sliderName; AEshaveColourReplace($attrName); } global proc AEshaveColourReplace(string $attrName) { string $tokens[]; int $numTokens = tokenize($attrName, ".", $tokens); string $attrPortion = $tokens[$numTokens-1]; string $sliderName = $attrPortion + "_slider"; string $label = $attrPortion; if ($attrPortion == "hairColor") $label = "Tip Color"; else $label = interToUI($attrPortion); attrColorSliderGrp -e -l $label -at $attrName $sliderName; } global proc AEshaveTexParmNew (string $attrName) { string $buffer[]; int $numTokens = `tokenize $attrName "[" $buffer`; string $grpnam; if($numTokens > 1) { int $numTokens = `tokenize $buffer[0] "." $buffer`; $grpnam = $buffer[1]; int $numTokens = `tokenize $attrName "[" $buffer`; int $numTokens = `tokenize $buffer[1] "]" $buffer`; $grpnam = $grpnam + $buffer[0]; } else { int $numTokens = `tokenize $buffer[0] "." $buffer`; $grpnam = $buffer[1]; $grpnam = $grpnam + "Grp"; } attrNavigationControlGrp -l "" -at $attrName -ce ("shavePadCmd AEshaveParmConnect 3 " + $attrName) $grpnam; } // // Procedure Name: // AEshaderBumpReplace // global proc AEshaveTexParmReplace (string $attrName) { string $buffer[]; int $numTokens = `tokenize $attrName "[" $buffer`; string $grpnam; if($numTokens > 1) { int $numTokens = `tokenize $buffer[0] "." $buffer`; $grpnam = $buffer[1]; int $numTokens = `tokenize $attrName "[" $buffer`; int $numTokens = `tokenize $buffer[1] "]" $buffer`; $grpnam = $grpnam + $buffer[0]; } else { int $numTokens = `tokenize $buffer[0] "." $buffer`; $grpnam = $buffer[1]; $grpnam = $grpnam + "Grp"; } attrNavigationControlGrp -edit -at $attrName -ce ("shavePadCmd AEshaveParmConnect 3 " + $attrName) $grpnam; } global proc AEshaveDensityTexParmNew (string $attrName) { attrNavigationControlGrp -l "Density Map" -at $attrName -ce ("shavePadCmd AEshaveParmConnect 3 " + $attrName) "densityGrp"; } // // Procedure Name: // AEshaderBumpReplace // global proc AEshaveDensityTexParmReplace (string $attrName) { attrNavigationControlGrp -edit -at $attrName -ce ("shavePadCmd AEshaveParmConnect 3 " + $attrName) "densityGrp"; } global proc AEshaveCutTexParmNew (string $attrName) { attrNavigationControlGrp -l "Cut Map" -at $attrName -ce ("shavePadCmd AEshaveParmConnect 3 " + $attrName) "cutGrp"; ; } // // Procedure Name: // AEshaderBumpReplace // global proc AEshaveCutTexParmReplace (string $attrName) { attrNavigationControlGrp -edit -at $attrName -ce ("shavePadCmd AEshaveParmConnect 3 " + $attrName) "cutGrp"; } global proc AEshaveParmConnect(string $dest, string $dummy, string $src) { if ($src == "") { string $conns[] = `listConnections -p yes -s yes -d no $dest`; if (size($conns) > 0) disconnectAttr $conns[0] $dest; } else { defaultNavigation -ce -d $dest -s $src; } }