X_distort
unknown
plain_text
2 years ago
15 kB
10
Indexable
Group {
name X_Distort1
help "Create distortion with great control and flexibility."
knobChanged "n = nuke.thisNode()\nif n.input(2):\n n\[\"mask\"].setEnabled(True)\nelse:\n n\[\"mask\"].setEnabled(False)\n \n \nif n\[\"distort_from\"].value() == \"Noise\":\n n\[\"noise_size\"].setVisible(True)\n n\[\"noise_z\"].setVisible(True)\nelse:\n n\[\"noise_size\"].setVisible(False)\n n\[\"noise_z\"].setVisible(False)\n\nif n\[\"enable_chroma\"].value() == 1:\n n\[\"aberration\"].setVisible(True)\n n\[\"blur_aberration\"].setVisible(True)\nelse:\n n\[\"aberration\"].setVisible(False)\n n\[\"blur_aberration\"].setVisible(False)\n \nn\[\"mix\"].setValue(min(max(0,n\[\"mix\"].value()),1))\nn\[\"blur_map\"].setValue(max(0,n\[\"blur_map\"].value()))\nn\[\"max_blur\"].setValue(max(0,n\[\"max_blur\"].value()))\n"
tile_color 0xa57aaaff
addUserKnob {20 X_Distort}
addUserKnob {41 "Local GPU: " T BlinkScript.gpuName}
addUserKnob {41 "Use GPU if Available" T BlinkScript.useGPUIfAvailable}
addUserKnob {26 ""}
addUserKnob {7 distort t "The amount of displacement going to be applied." R -100 100}
distort 25
addUserKnob {7 blur t "The amount of smoothing going to be applied." R -100 100}
addUserKnob {3 max_blur l max t "Limit the vector blur to this number of samples.\nVector Blur can be expensive, this limits the time it takes to render, but sometimes artifacts can appear.\n\nSetting this parameter to 0 will disable the limit." -STARTLINE}
max_blur 50
addUserKnob {7 direction t "The direction of the generated vector map:\n\n <b>At 0:</b> Pixels will be attracted to the brighter areas.\n <b>At 0.5:</b> Pixels will be attracted to the darker areas.\n <b>At 0.25 or .75:</b> Pixels will spin around the bright ans dark areas.\n\nThis pattern repeats, so a value of 1 will produce the same result as a value of 0 and a value of 0.5 will produce the same result as a value of 1.5."}
direction 0.25
addUserKnob {4 filter t "<b>impulse</b> very fast but can sometimes show pixelation or moire patterns.\n<b>bilinear</b> slower but smoothes out most artifacts or unwanted patterns." M {impulse bilinear}}
filter bilinear
addUserKnob {26 ""}
addUserKnob {4 distort_from l "distortion from" t "Choose where do you want to create the distortion map from:\n\n<b>· Auto</b> will look at the inputs of the node and decid which one to use.\n<b>· Source</b> will distort the image using the information on the original image.\n<b>· Dist Map</b> will distort the image using the information on the secondary input of this node.\n<b>· Noise</b> will generate an animated fractal that will be used to create the distortion map." M {Auto Source Map Noise "" ""}}
addUserKnob {6 use_all_channels l "use all channels" t "By default the distortion map will be generated from the average of the rgb channel. If this setting is enabled the channels will be paired up.\nThe red from the source will be distorted with the red from the map, the green with the green and so on. This allows you to have different distortion maps per each channel." -STARTLINE}
addUserKnob {7 noise_size l size t "The relative frequency of the turbulence pattern. Big values will generate low frequency distortion." +HIDDEN R 1 1000}
noise_size 150
addUserKnob {7 noise_z l z t "Use this to animate the noise pattern.\nFor instance you could try with the expression \"frame/100\".\n\nRight click --> Add expression" -STARTLINE +HIDDEN}
noise_z 4.815162342
addUserKnob {7 blur_map l "blur map" t "Filter the map to make it smoother and get rid of the high frequency distortions. Increase this value to make a smoother distortion." R 0 100}
blur_map 50
addUserKnob {6 fast_blur_map l fast t "Uses a multipass blur that, altough not as accurate as a bruteforce blur, gets rid of the artifacts at a reduced cost. It is recommended to keep this on." -STARTLINE}
fast_blur_map true
addUserKnob {26 ""}
addUserKnob {6 enable_chroma l "chromatic aberration" t "Enable per-channel control on the distortion." +STARTLINE}
addUserKnob {19 aberration l distort t "This is a multiplier on the distortion for every channel. Use this to simulate light frequencies being separated." +HIDDEN R -2 2}
aberration {1.2 1 0.8 1}
addUserKnob {19 blur_aberration l blur t "This is a multiplier on the blur for every channel. Use this to simulate light frequencies being separated." +HIDDEN}
blur_aberration {1 1 1 1}
addUserKnob {26 ""}
addUserKnob {4 output_form l output t "Choose what type of data you would like to output.\n\n<b>Result</b> will output the distorted and filtered input.\n<b>STMap</b> will output a UV map to be used in conjunction with the STMap node.\n<b>IDistort</b> will output a displacement map to be used in conjunction with the IDistort node." M {Result STMap IDistort ""}}
addUserKnob {41 mask l " mask" t "This will mask the distortion map before the effect. Use this to limit the influence of the distortion to certain areas." -STARTLINE T Mask.maskChannelMask}
addUserKnob {6 invert_mask l invert t "invert the effect of the mask" -STARTLINE}
addUserKnob {41 fringe t "Limits the effect on the edges of the mask." -STARTLINE T Mask.fringe}
addUserKnob {7 mix t "Blend between the original source and the applied effect."}
mix 1
addUserKnob {20 about l About}
addUserKnob {26 about_1 l "" t "A bunny:\n(\\(\\ \n( - -)\n((') (')" +STARTLINE T "<br>\n<b>Xavier Martín © 2017</b>"}
addUserKnob {26 ""}
addUserKnob {26 website l "" +STARTLINE T "<a href=\"http://www.xaviermartinvfx.com\"><span style=\"color:#C8C8C8;\">www.xaviermartinvfx.com</span></a>"}
addUserKnob {26 space4_1 l "" +STARTLINE T <br>}
addUserKnob {22 version l <center>version</center> T "nuke.message('X_Distort Gizmo <i>v4.4</i><br><b>Xavier Martín © 2017</b>')" +STARTLINE}
addUserKnob {22 help_documentation l <center>?</center> -STARTLINE T "nuke.message('You can find more documentation<br>on <a href=\"http://www.nukepedia.com/gizmos/transform/x_distort\"><span style=\"color:#BCBCBC;\">Nukepedia</span></a> or my <a href=\"http://www.xaviermartinvfx.com/x_distort/\"><span style=\"color:#BCBCBC;\">website</span></a>.')"}
}
Input {
inputs 0
name InputSrc
xpos -140
ypos -460
}
Dot {
name Dot3
xpos -106
ypos -406
}
set N11005000 [stack 0]
Dot {
name Dot2
xpos 94
ypos -406
}
set N11004c00 [stack 0]
Dot {
name Dot1
xpos 94
ypos -356
}
set N11004800 [stack 0]
Noise {
cliptype bbox
replace true
size {{parent.noise_size}}
zoffset {{parent.noise_z}}
gamma 1
center {1024 778}
name Noise1
xpos 60
ypos -310
}
Input {
inputs 0
name InputDist_Map
xpos 260
ypos -460
number 1
}
AdjBBox {
numpixels 1
name AdjBBox2
xpos 260
ypos -408
disable {{"\[exists parent.input1.disable]==0"}}
}
set N4aadf800 [stack 0]
push $N11004800
push $N4aadf800
push $N11004c00
Switch {
inputs 2
which {{"\[exists parent.input1.disable]==1"}}
name Auto
xpos 160
ypos -360
}
Switch {
inputs 4
which {{distort_from}}
name Switch1
xpos 260
ypos -310
}
Remove {
operation keep
channels rgba
name Remove1
xpos 260
ypos -258
}
Saturation {
saturation 0
mode Average
name Saturation1
xpos 260
ypos -210
disable {{use_all_channels}}
}
Remove {
operation keep
channels {rgba.red -rgba.green -rgba.blue -rgba.alpha}
name Remove2
xpos 260
ypos -160
disable {{use_all_channels}}
}
set N4aade400 [stack 0]
Dot {
name Dot6
xpos 194
ypos -156
}
Dot {
name Dot7
xpos 194
ypos 144
}
Input {
inputs 0
name Inputmask
xpos 460
ypos -10
number 2
}
Dot {
name Dot9
xpos 494
ypos 94
}
push $N4aade400
Blur {
size {{blur_map}}
quality {{parent.fast_blur_map?15:blur_map+1}}
crop false
name Blur1
xpos 260
ypos -116
disable {{size<1}}
}
Blur {
size {{blur_map/15}}
crop false
name Blur2
xpos 260
ypos -66
disable {{(size<1)+(1-parent.fast_blur_map)}}
}
Blur {
size {{blur_map/225}}
crop false
name Blur3
xpos 260
ypos -16
disable {{(size<1)+(1-parent.fast_blur_map)}}
}
Shuffle {
green red
blue red
alpha red
name Shuffle1
xpos 260
ypos 40
disable {{use_all_channels}}
}
Multiply {
inputs 1+1
value 0
invert_mask {{1-parent.invert_mask}}
name Mask
xpos 260
ypos 84
disable {{parent.inputs!=3}}
}
CopyBBox {
inputs 2
name CopyBBox1
xpos 260
ypos 140
}
Dot {
name Dot8
xpos 294
ypos 194
}
set N4a3df400 [stack 0]
BlinkScript {
ProgramGroup 1
KernelDescription "2 \"X_Distort\" iterate pixelWise c808228749d48a9f044958c8efc9a2b21aa668de9616076bf59cb1bcfcd28dcc 2 \"map\" Read Ranged2D \"dst\" Write Point 4 \"distortion\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"direction\" Float 1 AAAAAA== \"stmap\" Int 1 AAAAAA== \"format\" Int 2 AAAAAAAAAAA= 4 \"distortion\" 4 1 \"direction\" 1 1 \"stmap\" 1 1 \"format\" 2 1 4 \"maprangeMin\" Int 2 1 AAAAAAAAAAA= \"maprangeMax\" Int 2 1 AAAAAAAAAAA= \"mapconstEdgeColor\" Float 4 1 AAAAAAAAAAAAAAAAAAAAAA== \"rotate\" Float 2 1 AAAAAAAAAAA="
kernelSource "kernel X_Distort : ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessRanged2D, eEdgeConstant> map; // the distortion map image\n Image<eWrite> dst; // the output image\n\n param:\n float4 distortion;\n float direction;\n int stmap;\n int2 format;\n\n local:\n float2 rotate;\n\n void init() \{\n // Initialise trigonometric functions.\n rotate = float2(sin(direction*6.28318f),\n cos(direction*6.28318f));\n map.setRange(-1,-1,1,1);\n \}\n\n void process(int2 pos) \{\n\n // Sample gradient\n float2 distort;\n distort = float2(map(1,0,0)-map(-1,0,0),\n map(0,1,0)-map(0,-1,0));\n\n // Rotate vector\n distort = float2(distort.x*rotate.y+distort.y*rotate.x,\n -distort.x*rotate.x+distort.y*rotate.y);\n distort *= distortion.x;\n\n if(stmap==1)\n distort = (distort+float2(pos.x,pos.y))/float2(format.x,format.y);\n\n dst() = float4(distort.x,distort.y,0,0);\n \}\n\};\n"
useGPUIfAvailable {{parent.BlinkScript.useGPUIfAvailable}}
rebuild ""
X_Distort_distortion {{parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2}}
X_Distort_direction {{parent.direction+.5}}
X_Distort_stmap {{2-output_form}}
X_Distort_format {{width} {height}}
rebuild_finalise ""
name BlinkScript1
xpos 260
ypos 234
}
Dot {
name Dot11
xpos 294
ypos 344
}
push $N4a3df400
push $N11005000
AdjBBox {
numpixels 1
name AdjBBox1
xpos -140
ypos -360
disable {{"\[exists parent.input1.disable]==0"}}
}
Dot {
name Dot10
xpos -106
ypos 144
}
BlinkScript {
inputs 2
ProgramGroup 1
KernelDescription "1 \"X_Distort\" iterate componentWise b9627c0324b2a89d1b941c7c64b5afb3310f15cfcf6b1f077dd0574498415168 3 \"src\" Read Random \"map\" Read Ranged2D \"dst\" Write Point 5 \"distortion\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"vector_blur\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"direction\" Float 1 AAAAAA== \"filter\" Int 1 AAAAAA== \"max_steps\" Int 1 AAAAAA=="
kernelSource "kernel X_Distort : ImageComputationKernel<eComponentWise>\n\{\n Image<eRead, eAccessRandom, eEdgeClamped> src; // the input image\n Image<eRead, eAccessRanged2D, eEdgeClamped> map; // the distortion map image\n Image<eWrite> dst; // the output image\n\n param:\n float4 distortion;\n float4 vector_blur;\n float direction;\n int filter;\n int max_steps;\n\n local:\n float2 rotate;\n\n void init() \{\n // Initialise trigonometric functions.\n rotate = float2(sin(direction*6.28318f),\n cos(direction*6.28318f));\n map.setRange(-1,-1,1,1);\n \}\n\n void process(int3 pos) \{\n\n // Sample gradient\n float2 distort;\n distort = float2(map(1,0)-map(-1,0),\n map(0,1)-map(0,-1));\n\n // Rotate vector\n distort = float2(distort.x*rotate.y+distort.y*rotate.x,\n -distort.x*rotate.x+distort.y*rotate.y);\n\n // Sample source (no blur)\n if(fabs(vector_blur\[pos.z])<0.01)\{\n distort *= distortion\[pos.z];\n distort += float2(pos.x,pos.y);\n if(filter==0)\n dst() = src(int(distort.x),int(distort.y));\n else\n dst() = bilinear(src,distort.x,distort.y);\n \}\n\n else \{\n\n // If vector blur is enabled\n // Create vector blur final coordiantes\n float2 blur = distort;\n blur *= distortion\[pos.z]+vector_blur\[pos.z];\n blur += float2(pos.x,pos.y);\n distort *= distortion\[pos.z];\n distort += float2(pos.x,pos.y);\n\n // Calculate length of the blur\n int distance;\n distance = ceil(length(distort-blur));\n if(max_steps>0)\n distance = min(distance,max_steps);\n\n\n // Accumulate pixels through blur\n if(filter==0)\{\n float sum = src(int(distort.x),int(distort.y));\n float step = 0.0f;\n float2 dist_blur;\n for(int i = 0; i < distance; i++)\{\n step = float(i)/(distance);\n dist_blur = distort*step+blur*(1.0-step);\n sum += src(int(dist_blur.x),int(dist_blur.y));\n \}\n dst() = sum/(distance+1);\n \}\n\n else \{\n float sum = bilinear(src,distort.x,distort.y);\n float step = 0.0f;\n float2 dist_blur;\n for(int i = 0; i < distance; i++)\{\n step = float(i)/(distance);\n dist_blur = distort*step+blur*(1.0-step);\n sum += bilinear(src,dist_blur.x,dist_blur.y);\n \}\n dst() = sum/(distance+1);\n \}\n \}\n \}\n\};\n"
rebuild ""
X_Distort_distortion {{parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2} {parent.distort*(blur_map+1)*((aberration-1)*enable_chroma+1)*2}}
X_Distort_vector_blur {{parent.blur*(blur_map+1)*((blur_aberration-1)*enable_chroma+1)*2} {parent.blur*(blur_map+1)*((blur_aberration-1)*enable_chroma+1)*2} {parent.blur*(blur_map+1)*((blur_aberration-1)*enable_chroma+1)*2} {parent.blur*(blur_map+1)*((blur_aberration-1)*enable_chroma+1)*2}}
X_Distort_direction {{parent.direction+.5}}
X_Distort_filter {{filter}}
X_Distort_max_steps {{max_blur}}
rebuild_finalise ""
name BlinkScript
xpos -140
ypos 184
}
push $N11005000
Dot {
name Dot5
xpos -206
ypos -406
}
Dot {
name Dot4
xpos -206
ypos 294
}
Dissolve {
inputs 2
channels rgba
which {{parent.mix}}
name Dissolve1
xpos -140
ypos 290
}
Switch {
inputs 2
which {{output_form}}
name Switch3
xpos -140
ypos 340
}
Output {
name Output1
xpos -140
ypos 440
}
end_group
Editor is loading...
Leave a Comment