Last active
August 29, 2015 13:56
-
-
Save draconiansolo/9136639 to your computer and use it in GitHub Desktop.
PxFck_IErode, A little hack based on PxF_IDefocus to make selective eroding possible.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
set cut_paste_input [stack 0] | |
version 9.0 v3 | |
push 0 | |
push $cut_paste_input | |
Group { | |
inputs 2 | |
name PxFck_IErode | |
help "Variable erode based on a control channel." | |
knobChanged "\nm = nuke.thisNode() # grabs current node\nkc = nuke.thisKnob() #node that is being changed\n\nif kc.name() in \[\"filter\", \"slices\"]: #if changed knob is filer or slices\n i = nuke.toNode('img') \n i2 = nuke.toNode('Shuffle1')\n o = nuke.toNode('Output1')\n \n for n in nuke.allNodes():\n if \"static\" not in n\['label'].getValue():\n nuke.delete(n)\n \n slices = int(m\['slices'].value())\n step = 1\n ii = i\n for x in range(1,slices+step,step):\n \n k = nuke.nodes.Keyer()\n k.setInput(0, i2)\n k\['operation'].setValue(\"red keyer\")\n k\['range'].setExpression(\"(1/parent.slices*\" + str(x) +\")-1/parent.slices\", 0)\n k\['range'].setExpression(\"(1/parent.slices*\" + str(x-1) + \") + (1/parent.slices*parent.overlap)\", 1)\n k\['range'].setValue(1.0, 2)\n k\['range'].setValue(1.0, 3)\n \n f = m\['filter'].value()\n if f in \[\"box\", \"triangle\", \"quadratic\", \"gaussian\"]:\n d = nuke.nodes.FilterErode()\n d.setInput(0, i)\n d\['channels'].setValue(\"alpha\")\n d\['size'].setSingleValue(False)\n d\['size'].setExpression('parent.size/parent.slices*' + str(x) + \"*parent.aspect\", 0 )\n d\['size'].setExpression('parent.size/parent.slices*' + str(x), 1)\n d\['filter'].setValue(m\['filter'].value())\n\n km = nuke.nodes.Keymix()\n km.setInput(0, ii)\n km.setInput(1, d)\n km.setInput(2, k)\n km\['bbox'].setValue(\"A side\")\n \n ii = km\n \n o.setInput(0, ii)\n\n" | |
tile_color 0xd6a000ff | |
selected true | |
xpos -21856 | |
ypos 3470 | |
mapsize {0.3694810225 1} | |
addUserKnob {20 IDefocus} | |
addUserKnob {4 filter t "box, triangle, quadratic, gaussian = Erode filter type" M {box triangle quadratic gaussian "" "" "" ""}} | |
addUserKnob {7 size t "Maximum amount of defocus (when the control channel is white)." R 0 100} | |
size -4 | |
addUserKnob {7 aspect t "Aspect ratio of the kernel. Use this to simulate 'oval' bokeh from an anamorphic lens." R 0 4} | |
aspect 1 | |
addUserKnob {4 controlChannel t "Which channel of the 'map' input used to drive the defocus." M {red green blue alpha "" ""}} | |
controlChannel alpha | |
addUserKnob {3 slices t "How many slices are generated from the 'map' image. More slices are more precise, but slower."} | |
slices 10 | |
addUserKnob {7 overlap t "Normalized overlap between slices. An overlap of 0 means hard slices with no soft transition. "} | |
overlap 0.5 | |
addUserKnob {7 min t "Minimum value of the control channel. Values lower than this will be clamped to 0." R 0 10} | |
addUserKnob {7 max t "Maximum value of the control channel. Values above this will be clamped to 1." R 0 10} | |
max 1 | |
addUserKnob {26 ""} | |
addUserKnob {26 t l "" +STARTLINE T "PxFck_IErode--- A friendly mod of PxF_IDefocus 1.0.2"} | |
} | |
Input { | |
inputs 0 | |
name map | |
label static | |
xpos 3093 | |
ypos -899 | |
number 1 | |
} | |
Grade { | |
channels rgba | |
blackpoint {{parent.min i}} | |
whitepoint {{parent.max i}} | |
white_clamp true | |
name Grade1 | |
label static | |
xpos 3093 | |
ypos -802 | |
} | |
Shuffle { | |
red {{parent.controlChannel+1 i}} | |
green black | |
blue black | |
alpha black | |
name Shuffle1 | |
label static | |
xpos 3093 | |
ypos -738 | |
} | |
set N15b8f040 [stack 0] | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*10)-1/parent.slices} {"(1/parent.slices*9) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer10 | |
xpos 3861 | |
ypos -700 | |
} | |
Input { | |
inputs 0 | |
name img | |
label static | |
xpos 3416 | |
ypos -1096 | |
} | |
set N3ad0e4e0 [stack 0] | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*10*parent.aspect} {parent.size/parent.slices*10}} | |
name FilterErode10 | |
xpos 3848 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*9)-1/parent.slices} {"(1/parent.slices*8) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer9 | |
xpos 3813 | |
ypos -700 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*9*parent.aspect} {parent.size/parent.slices*9}} | |
name FilterErode9 | |
xpos 3800 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*8)-1/parent.slices} {"(1/parent.slices*7) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer8 | |
xpos 3765 | |
ypos -700 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*8*parent.aspect} {parent.size/parent.slices*8}} | |
name FilterErode8 | |
xpos 3752 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*7)-1/parent.slices} {"(1/parent.slices*6) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer7 | |
xpos 3717 | |
ypos -700 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*7*parent.aspect} {parent.size/parent.slices*7}} | |
name FilterErode7 | |
xpos 3704 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*6)-1/parent.slices} {"(1/parent.slices*5) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer6 | |
xpos 3333 | |
ypos -700 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*6*parent.aspect} {parent.size/parent.slices*6}} | |
name FilterErode6 | |
xpos 3656 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*5)-1/parent.slices} {"(1/parent.slices*4) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer5 | |
xpos 3285 | |
ypos -700 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*5*parent.aspect} {parent.size/parent.slices*5}} | |
name FilterErode5 | |
xpos 3608 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*4)-1/parent.slices} {"(1/parent.slices*3) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer4 | |
xpos 3237 | |
ypos -700 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*4*parent.aspect} {parent.size/parent.slices*4}} | |
name FilterErode4 | |
xpos 3560 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*3)-1/parent.slices} {"(1/parent.slices*2) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer3 | |
xpos 3189 | |
ypos -700 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*3*parent.aspect} {parent.size/parent.slices*3}} | |
name FilterErode3 | |
xpos 3512 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*2)-1/parent.slices} {"(1/parent.slices*1) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer2 | |
xpos 3141 | |
ypos -700 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*2*parent.aspect} {parent.size/parent.slices*2}} | |
name FilterErode2 | |
xpos 3464 | |
ypos -1058 | |
} | |
push $N15b8f040 | |
Keyer { | |
operation "red keyer" | |
range {{(1/parent.slices*1)-1/parent.slices} {"(1/parent.slices*0) + (1/parent.slices*parent.overlap)"} 1 1} | |
name Keyer1 | |
xpos 3093 | |
ypos -694 | |
} | |
push $N3ad0e4e0 | |
FilterErode { | |
channels alpha | |
size {{parent.size/parent.slices*1*parent.aspect} {parent.size/parent.slices*1}} | |
name FilterErode1 | |
xpos 3416 | |
ypos -1058 | |
} | |
push $N3ad0e4e0 | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix1 | |
xpos 3416 | |
ypos -694 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix2 | |
xpos 3464 | |
ypos -694 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix3 | |
xpos 3512 | |
ypos -694 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix4 | |
xpos 3560 | |
ypos -694 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix5 | |
xpos 3608 | |
ypos -694 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix6 | |
xpos 3656 | |
ypos -694 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix7 | |
xpos 3717 | |
ypos -674 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix8 | |
xpos 3765 | |
ypos -674 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix9 | |
xpos 3813 | |
ypos -674 | |
} | |
Keymix { | |
inputs 3 | |
bbox A | |
name Keymix10 | |
xpos 3861 | |
ypos -674 | |
} | |
Output { | |
name Output1 | |
label static | |
xpos 3871 | |
ypos 87 | |
} | |
end_group |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
string=""" | |
m = nuke.thisNode() # grabs current node | |
kc = nuke.thisKnob() #node that is being changed | |
if kc.name() in ["filter", "slices"]: #if changed knob is filer or slices | |
i = nuke.toNode('img') | |
i2 = nuke.toNode('Shuffle1') | |
o = nuke.toNode('Output1') | |
for n in nuke.allNodes(): | |
if "static" not in n['label'].getValue(): | |
nuke.delete(n) | |
slices = m['slices'].value() | |
step = 1 | |
ii = i | |
for x in range(1,slices+step,step): | |
k = nuke.nodes.Keyer() | |
k.setInput(0, i2) | |
k['operation'].setValue("red keyer") | |
k['range'].setExpression("(1/parent.slices*" + str(x) +")-1/parent.slices", 0) | |
k['range'].setExpression("(1/parent.slices*" + str(x-1) + ") + (1/parent.slices*parent.overlap)", 1) | |
k['range'].setValue(1.0, 2) | |
k['range'].setValue(1.0, 3) | |
f = m['filter'].value() | |
if f in ["box", "triangle", "quadratic", "gaussian"]: | |
d = nuke.nodes.FilterErode() | |
d.setInput(0, i) | |
d['channels'].setValue("alpha") | |
d['size'].setSingleValue(False) | |
d['size'].setExpression('parent.size/parent.slices*' + str(x) + "*parent.aspect", 0 ) | |
d['size'].setExpression('parent.size/parent.slices*' + str(x), 1) | |
d['filter'].setValue(m['filter'].value()) | |
km = nuke.nodes.Keymix() | |
km.setInput(0, ii) | |
km.setInput(1, d) | |
km.setInput(2, k) | |
km['bbox'].setValue("A side") | |
ii = km | |
o.setInput(0, ii) | |
""" | |
node["knobChanged"].setValue(string) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment