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