Toolsets

Mo_PtoAxis WIP

Very useful handy tool for placing axis or card on the 3d scene using the position pass

set cut_paste_input [stack 0]

version 10.0 v3

push $cut_paste_input

NoOp {

 name MO_PtoAxis

 label "The Axis maker"

 selected true

 xpos 557

 ypos 496

 addUserKnob {20 PosToAxis}

 addUserKnob {22 masterScript l INVISIBLE +INVISIBLE T "import re\nimport nuke \ndef listPtoAKnobs(node):\n    pattern = re.compile(r'^PtoA')\n    PtoAKnobList = \[]\n    for knob in node.knobs(): \n        if pattern.match(knob):\n            PtoAKnobList.append(knob)\n    return PtoAKnobList\n\ndef addCoordsKnob(node,knobName):\n    coordsKnob = nuke.XY_Knob(knobName)\n    node.addKnob(coordsKnob)\n    return coordsKnob\n\ndef removeCoordsKnob(node,knobName):\n    node.removeKnob(knobName)\n    print knobName\n    return \n\ndef addPosSampling(node,p):\n    newTab=nuke.Tab_Knob('M_tab') \n    newKnob=nuke.Color_Knob(\"sampledPos\",\"sampledPos\")\n    node.addKnob(newTab)\n    node.addKnob(newKnob)\n    node\['sampledPos'].setValue(p)\n    node\['translate'].setExpression(\"sampledPos\")\n\ndef sampleFromCoords(node,posKnob):\n    posKnob = node\[posKnob]\n    sampleX = posKnob.getValue()\[0]\n    sampleY = posKnob.getValue()\[1]\n    posX = node.sample(\"P.red\",sampleX,sampleY)\n    posY = node.sample(\"P.green\",sampleX,sampleY)\n    posZ = node.sample(\"P.blue\",sampleX,sampleY)\n    P = \[posX,posY,posZ]\n    return P\n\ndef getPointToRemove(node):\n    PtoAKnobsList = listPtoAKnobs(node)\n    PtoAKnobs = ' '.join(map(str, PtoAKnobsList))\n\n    pan = nuke.Panel(\"selectPoints\")\n    pan.addEnumerationPulldown(\"selectPointToDelete\",PtoAKnobs)\n    pan.show()\n    print pan.value(\"selectPointToDelete\") \n    return pan.value(\"selectPointToDelete\") \n\ndef createScene(node):\n    nodePtoA = node \n    scene = nuke.nodes.Scene()\n    inum = 0\n    PtoAKnobsList = listPtoAKnobs(node)\n    for knob in PtoAKnobsList: \n        pos  = sampleFromCoords(nodePtoA,knob)\n        axis = nuke.nodes.Axis()\n        transGeo = nuke.nodes.TransformGeo()\n        moCard = nuke.nodes.Card()\n        axis\['label'].setValue(knob)\n        transGeo.setInput(1,axis)\n        transGeo.setInput(0,moCard)\n        addPosSampling(axis,pos)\n        scene.setInput(inum,transGeo)\n        inum += 1 \n\ndef createAxis(node):\n    nodePtoA = node \n    inum = 0\n    PtoAKnobsList = listPtoAKnobs(node)\n    for knob in PtoAKnobsList: \n        pos  = sampleFromCoords(nodePtoA,knob)\n        axis = nuke.nodes.Axis()\n        axis\['label'].setValue(knob)\n        addPosSampling(axis,pos)\n        inum += 1 \n\n\ndef countPtoAKnobs(node):\n    return len(listPtoAKnobs(node))\n\ndef executer(node):\n    if node\[\"chooseFunc\"].getValue()==0:\n       \n        PtoAKnobsList = listPtoAKnobs(node) \n        PtoAKnobNamesList = \[]\n        for knob in PtoAKnobsList:\n            PtoAKnobNamesList.append(knob.name()) \n        \n        PtoAName = \"PtoA0\"\n        i = 0\n        while (\"PtoA%i\" %i) in PtoAKnobNamesList:   \n            i += 1\n            PtoAName = (\"PtoA%i\" %i)\n            PtoAKnobNamesList = PtoAKnobsList.append(PtoAName)\n\n        knobName = PtoAName\n        addCoordsKnob(node,knobName)\n\n\n    if node\[\"chooseFunc\"].getValue()==1:\n        count = countPtoAKnobs(node)\n        if count > 1:\n            removeCoordsKnob(node,node\[getPointToRemove(node)])\n        else:\n            \"you should have atleast 1 point, cannot remove everything sorry :)\"\n        print \"removed\"\n\n    if node\[\"chooseFunc\"].getValue()==2:\n        createScene(node)\n    if node\[\"chooseFunc\"].getValue()==3:\n        createAxis(node)\n        print \"removed\"\n    \nexecuter(nuke.thisNode())" +STARTLINE}

 addUserKnob {4 chooseFunc l INVISIBLE -STARTLINE +INVISIBLE M {addCoordsKnob removeCoordsKnob createScene createAxis "" "" "" ""}}

 addUserKnob {22 addPoint T "node = nuke.thisNode()\nnode\[\"chooseFunc\"].setValue(0)\nprint node\[\"chooseFunc\"].getValue()\nnode\[\"masterScript\"].execute()" +STARTLINE}

 addUserKnob {22 removePoint -STARTLINE T "node = nuke.thisNode()\nnode\[\"chooseFunc\"].setValue(\"removePoints\")\nnode\[\"masterScript\"].execute()"}

 addUserKnob {26 divider1 l " "}

 addUserKnob {22 createScene t "Creates cards , transform geos and axis for each cards to set them on the selected postition and also add color picker to the axis nodes to move them based the color you pick from the position pass" T "node = nuke.thisNode()\nnode\[\"chooseFunc\"].setValue(2)\nnode\[\"masterScript\"].execute()" +STARTLINE}

 addUserKnob {22 createAxis t "Creates axis and set them on the selected postition and also add color picker to the axis nodes to move them based the color you pick from the position pass" -STARTLINE T "node = nuke.thisNode()\nnode\[\"chooseFunc\"].setValue(3)\nnode\[\"masterScript\"].execute()"}

 addUserKnob {26 divider2 l " "}

 addUserKnob {12 PtoA1}

}

Mo_RainTool

For creating 2D rain effect (Its WIP )

set cut_paste_input [stack 0]

version 10.0 v3

push $cut_paste_input

Group {

 name mo_rain

 selected true

 xpos -136

 ypos -134

 addUserKnob {20 rainControls}

 addUserKnob {7 amount}

 amount 0.9

 addUserKnob {7 dropsSize R 0 5}

 dropsSize 1.04

 addUserKnob {7 dropTipMix}

 dropTipMix 0.63

 addUserKnob {26 "" +STARTLINE}

 addUserKnob {30 direction}

 direction {-1 -1}

 addUserKnob {3 speed}

 speed 12

 addUserKnob {26 "" +STARTLINE}

 addUserKnob {4 MotionBlurType M {AutoBlur ManualBlur}}

 MotionBlurType ManualBlur

 addUserKnob {7 motionBlurScale R 0 10}

 motionBlurScale 5.25

}

 Input {

  inputs 0

  name Reformat

  label "optional reformat. Wtill take the root size if not connected"

  xpos -24

  ypos -459

 }

 Noise {

  size 3

  zoffset 38

  octaves 4

  lacunarity 24

  gain {{amount}}

  gamma 0

  translate {{direction.u*speed*x} {direction.v*speed*x}}

  center {640 360}

  name Noise1

  xpos -24

  ypos -399

 }

 Transform {

  scale 1.1

  center {{width/2} {height/2}}

  name Transform1

  xpos -24

  ypos -321

 }

 Clamp {

  name Clamp1

  xpos -24

  ypos -269

 }

 Dilate {

  channels rgba

  size {{dropsSize-1}}

  name Dilate1

  xpos -24

  ypos -217

 }

 Clamp {

  name Clamp2

  xpos -24

  ypos -165

 }

set N832d7000 [stack 0]

 Blur {

  size {{parent.Dilate1.size+1}}

  name Blur1

  xpos 191

  ypos -165

 }

 Multiply {

  value {{dropTipMix}}

  name Multiply2

  xpos 191

  ypos -48

 }

 Dot {

  name Dot3

  xpos 221

  ypos 139

 }

push $N832d7000

 Dot {

  name Dot5

  xpos -273

  ypos -158

 }

 VectorBlur {

  channels rgba

  constant {{direction.u} {direction.v}}

  scale {{motionBlurScale}}

  offset -1

  name VectorBlur2

  xpos -303

  ypos -6

 }

 Constant {

  inputs 0

  channels rgb

  color 1

  name Constant1

  xpos 182

  ypos -429

 }

 Multiply {

  channels rgba

  value {{"Noise1.translate.x(t)- Noise1.translate.x(t-1)"} {"Noise1.translate.y(t)- Noise1.translate.y(t-1)"} 0 1}

  name Multiply1

  xpos 182

  ypos -319

 }

push $N832d7000

 ShuffleCopy {

  inputs 2

  red red

  green green

  out forward

  name copymotionvector

  xpos -24

  ypos -76

 }

 VectorBlur {

  channels rgba

  uv forward

  offset -1

  name VectorBlur1

  xpos -24

 }

 Switch {

  inputs 2

  which {{MotionBlurType}}

  name Switch1

  xpos -24

  ypos 81

 }

 Merge2 {

  inputs 2

  name Merge1

  xpos -24

  ypos 228

 }

set N7ce57000 [stack 0]

 Output {

  name Output1

  xpos -24

  ypos 467

 }

push $N7ce57000

 Viewer {

  frame 23

  frame_range 1-100

  colour_sample_bbox {0.4187499881 0.412499994 0.420312494 0.4140625}

  samplepoints {{0.4187499881 0.412499994}

    }

  name Viewer1

  tile_color 0xdbff00

  selected true

  xpos 148

  ypos 361

 }

end_group

Mo_CurveTool

 Modified curve tool

 set cut_paste_input [stack 0]

version 10.0 v3

push $cut_paste_input

CurveTool {

 ROI {14 562 184 708}

 autocropdata {480 270 1440 810}

 name Mo_CurveTool

 selected true

 xpos -214

 ypos 721

 addUserKnob {20 Mo_Tab l "Mo Tab"}

 addUserKnob {3 RefFrame l "Ref Frame"}

 RefFrame 60

 addUserKnob {22 stablizeColor l "Stablize Color" T "node = nuke.thisNode().name()\

nrefFrame = nuke.thisNode()\[\"RefFrame\"].getValue()\nsourceR=\"%s.intensitydata.r/%s.intensitydata.r(%s)\" % (node,node,refFrame)\nsourceG=\"%s.intensitydata.g/%s.intensitydata.g(%s)\" % (node,node,refFrame)\nsourceB=\"%s.intensitydata.b/%s.intensitydata.b(%s)\" % (node,node,refFrame)\nsourceA=\"%s.intensitydata.a/%s.intensitydata.a(%s)\" % (node,node,refFrame)\n\ng=nuke.createNode(\"Grade\")\ng\[\"white\"].setSingleValue(False)\ng\[\"white\"].setExpression(sourceR,0)\ng\[\"white\"].setExpression(sourceG,1)\ng\[\"white\"].setExpression(sourceB,2)\ng\[\"white\"].setExpression(sourceA,3)\ng\[\"reverse\"].setValue(True)\n\n" +STARTLINE}

 addUserKnob {22 matchColor l "Match Color" -STARTLINE T "node = nuke.thisNode().name()\nrefFrame = nuke.thisNode()\[\"RefFrame\"].getValue()\nsourceR=\"%s.intensitydata.r/%s.intensitydata.r(%s)\" % (node,node,refFrame)\nsourceG=\"%s.intensitydata.g/%s.intensitydata.g(%s)\" % (node,node,refFrame)\nsourceB=\"%s.intensitydata.b/%s.intensitydata.b(%s)\" % (node,node,refFrame)\nsourceA=\"%s.intensitydata.a/%s.intensitydata.a(%s)\" % (node,node,refFrame)\n\ng=nuke.createNode(\"Grade\")\ng\[\"white\"].setSingleValue(False)\ng\[\"white\"].setExpression(sourceR,0)\ng\[\"white\"].setExpression(sourceG,1)\ng\[\"white\"].setExpression(sourceB,2)\ng\[\"white\"].setExpression(sourceA,3)\n\n\n"}

}

Mo_RimLight

set cut_paste_input [stack 0]

version 10.0 v3

push $cut_paste_input

Group {

 name Group3

 selected true

 xpos 1751

 ypos 1017

 addUserKnob {20 User}

 addUserKnob {12 lightPos l "Light Direction" t "from which direction light should come"}

 lightPos {316 509}

 addUserKnob {7 maxDistance l "Max Distance" t "how deep light is should enter into the object" R 0 50}

 maxDistance 3.6

 addUserKnob {41 multiply l "Light Color" t "color of the light\n" T set_color_here.multiply}

 addUserKnob {41 size l "Light softness" t "softness of the light" T set_softness.size}

 addUserKnob {41 value l "Light Intensity" t "multiplier to the light color" T intensity.value}

}

 Input {

  inputs 0

  name Input1

  xpos 518

  ypos 98

 }

 Dot {

  name Dot3

  xpos 552

  ypos 228

 }

set Nbb1b5c00 [stack 0]

 Dot {

  name Dot1

  xpos 552

  ypos 745

 }

push $Nbb1b5c00

 Shuffle {

  red alpha

  green alpha

  blue alpha

  name Shuffle2

  xpos 122

  ypos 236

 }

 Dot {

  name Dot2

  xpos 152

  ypos 391

 }

set Nbab0f000 [stack 0]

 Transform {

  translate {{"clamp(1-((lightPos.x) - (width/2)),-maxDistance,maxDistance)"} {"clamp(1-((lightPos.y) - (height/2)),-maxDistance,maxDistance)"}}

  center {{width/2 x1303806 0} {height/2 x1303806 0}}

  name Transform1

  xpos 360

  ypos 391

 }

push $Nbab0f000

 Merge2 {

  inputs 2

  operation stencil

  name Merge7

  xpos 360

  ypos 482

 }

 Grade {

  multiply {0.7797850966 0.5048827529 0.2183837742 0}

  name set_color_here

  xpos 360

  ypos 534

 }

 Blur {

  size 18.5

  name set_softness

  xpos 360

  ypos 586

 }

 ColorLookup {

  lut {master {curve C 0 x0.4602272511 0.7982586622 x1 1}

    red {}

    green {}

    blue {}

    alpha {}}

  name ColorLookup1

  xpos 364

  ypos 624

 }

 Multiply {

  value 1.06

  name intensity

  xpos 360

  ypos 665

 }

 ChannelMerge {

  inputs 2

  operation in

  name ChannelMerge1

  xpos 360

  ypos 739

 }

 Premult {

  name Premult3

  selected true

  xpos 360

  ypos 791

 }

 Output {

  name Output1

  xpos 360

  ypos 934

 }

 Viewer {

  frame_range 1303794-1303851

  name Viewer1

  tile_color 0xdbff00

  xpos 34

  ypos 696

 }

end_group