To complement last article about the Vector tools, I’m going to post 4 mini-tutorials to inspire possible uses for these Tools.

1 – Heat Haze

Quite frequently I’ve had to add heat haze into a shot. Whether it’s for a fire, a plane’s jet engine or just a hot weather, that’s a common effect to do.

While I could use a noise node as a base for the effect, I’m going to use particles here (textured with a noise) as a starting point. Nothing fancy, just a bit of spread and random velocity.

2016-04-15_13h32_29 2016-04-15_13h31_39

Then using the Luma_to_Normals tool, I extract some Normals from that. As I don’t need perfect 3D normals for relighting but just 2D vectors for distortion, I can turn off “Legalize” and don’t need to worry about the blue channel:

2016-04-15_13h42_52

Finally, I need to copy these Red and Green Channels into the image I want to distort, and use an iDistort node.

2016-04-15_13h47_13 2016-04-15_13h47_22

Here’s the full script:

set cut_paste_input [stack 0]
version 9.0 v8
Camera2 {
inputs 0
translate {20.2948761 12.54060268 24.43356323}
rotate {-11.27799897 41.19998453 0}
name Camera1
selected true
xpos -207
ypos 78
}
push $cut_paste_input
Reformat {
format "1024 1024 0 0 1024 1024 1 square_1K"
name Reformat1
selected true
xpos 39
ypos -109
}
set N38d2800 [stack 0]
Noise {
center {512 512}
name Noise1
selected true
xpos 39
ypos -61
}
push $N38d2800
Radial {
area {4 -6 1016 1020}
name Radial1
selected true
xpos 135
ypos -62
}
Merge2 {
inputs 2
operation multiply
name Merge1
selected true
xpos 39
ypos 5
}
push 0
push 0
ParticleEmitter {
inputs 3
rate 30
rate_variation 0.15
velocity_variation 0.415
rotation_velocity 0.062
size 2
spread 0.16
name ParticleEmitter1
selected true
xpos -71
ypos 5
}
push 0
ScanlineRender {
inputs 3
conservative_shader_sampling false
motion_vectors_type distance
name ScanlineRender1
selected true
xpos -71
ypos 98
}
Dot {
name Dot2
selected true
xpos -36
ypos 171
}
set N191f800 [stack 0]
Group {
name Luma_to_Normals
help "Performs a Sobel filter on the Luminance channel of an image to extract an approximation of a Normal map.\n\nFor a mathematical conversion of a displacement map to normals, do not use Details separation."
selected true
xpos -70
ypos 199
addUserKnob {20 luma_to_normals l "Luma to Normals"}
addUserKnob {26 div_pre l Pre-Process}
addUserKnob {7 blur R 0 10}
addUserKnob {7 gain}
gain 15
addUserKnob {26 div_details l "Details Separation"}
addUserKnob {7 size t "Bigger sizes will separate high and low frequencies more." R 0 100}
size 34.5
addUserKnob {7 details_weight t "How much the details affect the final output"}
details_weight 0.765
addUserKnob {26 div_out l Output}
addUserKnob {4 value_check t "Some big values might create impossible normals. Use gain and Blur to ensure there are no error values.\n\nValues in red on error check represent a vertical normal (parallel to the camera) which would not normally be visible to the camera." M {Result "Check Errors" "" "" "" ""}}
addUserKnob {6 normalize t "Switch between -1 to 1 range or 0 to 1 range" +STARTLINE}
addUserKnob {6 legalize t "Normal maps should generally be represented with a vector magnitude of 1.\nTurning on legalization will scale all vectors to ensure they all have a magnitude of 1.\n\nYou may want to disable it for more interesting effects when generating normals for a fake refraction through an iDistort, where having vectors of different length adds depth." -STARTLINE}
addUserKnob {26 ""}
addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.1 - Part of VectorTools by Erwan Leroy"}
}
Input {
inputs 0
name Input1
xpos -576
ypos -296
}
Saturation {
saturation 0
name Saturation1
xpos -576
ypos -237
}
Blur {
size {{parent.blur}}
name Blur2
xpos -576
ypos -196
}
Multiply {
value {{0.5*parent.gain}}
name Multiply1
xpos -576
ypos -134
}
set Nee7f5c00 [stack 0]
Blur {
size {{parent.size}}
name Blur1
xpos -576
ypos -83
}
Dot {
name Dot2
xpos -542
ypos -45
}
set Nee7f5400 [stack 0]
Matrix {
matrix {
{2 0 -2}
{1 0 -1}
{2 0 -2}
}
name Matrix1
xpos -576
ypos 38
}
push $Nee7f5400
Dot {
name Dot3
xpos -432
ypos -45
}
set Nee7f4c00 [stack 0]
Matrix {
matrix {
{-2 -1 -2}
{0 0 0}
{2 1 2}
}
name Matrix2
xpos -466
ypos 37
}
Dot {
name Dot4
xpos -432
ypos 92
}
ShuffleCopy {
inputs 2
red red
blue black
alpha black
name ShuffleCopy1
xpos -575
ypos 88
}
Multiply {
value {{(1-parent.details_weight)*(parent.size/10+1)}}
name Multiply2
xpos -577
ypos 128
}
push $Nee7f4c00
push $Nee7f5c00
Dot {
name Dot1
xpos -319
ypos -124
}
Merge2 {
inputs 2
operation from
name Merge1
xpos -353
ypos -49
}
Dot {
name Dot5
xpos -319
ypos -23
}
set N25731000 [stack 0]
Matrix {
matrix {
{2 0 -2}
{1 0 -1}
{2 0 -2}
}
name Matrix3
xpos -353
ypos 31
}
push $N25731000
Dot {
name Dot6
xpos -181
ypos -23
}
Matrix {
matrix {
{-2 -1 -2}
{0 0 0}
{2 1 2}
}
name Matrix4
xpos -215
ypos 33
}
Dot {
name Dot7
xpos -181
ypos 87
}
ShuffleCopy {
inputs 2
red red
blue black
alpha black
name ShuffleCopy2
xpos -353
ypos 83
}
Multiply {
value {{parent.details_weight}}
name Multiply3
xpos -353
ypos 119
}
Dot {
name Dot8
xpos -319
ypos 188
}
Merge2 {
inputs 2
operation plus
name Merge2
xpos -577
ypos 184
}
Expression {
temp_name0 mag
temp_expr0 sqrt(pow(r,2)+pow(g,2)+pow(b,2))
expr0 mag>1?r/mag:r
expr1 mag>1?g/mag:g
name Expression3
xpos -577
ypos 221
disable {{1-parent.legalize}}
}
set N268ccc00 [stack 0]
Dot {
name Dot9
xpos -400
ypos 225
}
Remove {
operation keep
channels rgb
name Remove2
xpos -434
ypos 271
}
Expression {
temp_name0 facing
temp_expr0 sqrt(-pow(r,2)-pow(g,2)+1)
expr0 isnan(facing)?1:0
expr1 0
name Expression1
xpos -434
ypos 314
}
Dot {
name Dot10
xpos -400
ypos 378
}
push $N268ccc00
Expression {
temp_name0 facing
temp_expr0 sqrt(-pow(r,2)-pow(g,2)+1)
expr2 isnan(facing)?0:facing
name Expression2
xpos -577
ypos 247
}
Remove {
operation keep
channels rgb
name Remove1
selected true
xpos -577
ypos 273
}
Grade {
white 0.5
add 0.5
name Grade1
xpos -577
ypos 313
disable {{1-parent.normalize}}
}
Switch {
inputs 2
which {{parent.value_check}}
name Switch1
xpos -576
ypos 374
}
Output {
name Output1
xpos -577
ypos 418
}
end_group
Blur {
size 0.2
name Blur1
selected true
xpos -70
ypos 239
}
Dot {
name Dot1
selected true
xpos -37
ypos 297
}
push $N191f800
CheckerBoard2 {
inputs 0
name CheckerBoard1
selected true
xpos 253
ypos -127
}
Blur {
inputs 1+1
size 9
name Blur2
selected true
xpos 253
ypos 161
}
Copy {
inputs 2
from0 rgba.red
to0 forward.u
from1 rgba.green
to1 forward.v
name Copy1
selected true
xpos 253
ypos 280
}
IDistort {
uv motion
uv_scale 25
name IDistort1
selected true
xpos 253
ypos 357
}

2 – Relaxing SplineWarps

Another way I use these tools is to relax SplineWarps.

relax_0001

By adding a UV map into one of the layers passing through the SplineWarp, I’m able to obtain a dirtorted UV map. By applying this UV map to the original footage would give me the exact same result as what is coming out of the SplineWarp.
However, I’m also able to convert this distorted UV map to Vectors. Once in vector format, we are free to do whatever we want with it, notably relaxing it (by blurring) or reducing its intensity (by multiplying down).
It can then be re-applied with an iDistort, or converted back to UVs and applied as STMap.

Here’s the full script:

set cut_paste_input [stack 0]
version 9.0 v8
CheckerBoard2 {
 inputs 0
 name CheckerBoard1
 selected true
 xpos 926
 ypos -179
}
Dot {
 name Dot4
 selected true
 xpos 960
 ypos -83
}
set Nace2c400 [stack 0]
Dot {
 name Dot3
 selected true
 xpos 822
 ypos -83
}
Group {
 name UV_Map_Layer
 selected true
 xpos 788
 ypos -34
 addUserKnob {20 UVMap l "UV Map"}
 addUserKnob {41 out l UV_Layer T ShuffleCopy1.out}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Input1
 xpos 555
 ypos 346
 }
set N191ec00 [stack 0]
 Expression {
 expr0 (x+0.5)/width
 channel1 {-rgba.red rgba.green -rgba.blue none}
 expr1 (y+.5)/height
 channel2 {-rgba.red -rgba.green rgba.blue none}
 name Expression1
 xpos 672
 ypos 424
 }
push $N191ec00
 ShuffleCopy {
 inputs 2
 in2 none
 red red
 green green
 alpha black
 out motion
 name ShuffleCopy1
 xpos 555
 ypos 427
 }
 Output {
 name Output1
 xpos 555
 ypos 511
 }
end_group
SplineWarp3 {
 colorOverlay {0 0 0 0}
 curves {{{v x3f99999a}
 {f 0}
 {n
 {layer Root
 {f 2097152}
 {t x44700000 x44070000}
 {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}
 {cubiccurve Bezier3 0 bezier
 {cc
 {f 8224}
 {px x41400000
 {xc3280000 xc2c40000}
 {x43f50000 x43ca0000}
 {x43280000 x42c40000}
 {xc2380000 x42900000}
 {x445b0000 x43e10000}
 {x42380000 xc2900000}
 {xc2d00000 0}
 {x448ec000 x44070000}
 {x42d00000 0}
 {xc2840000 xc2000000}
 {x44afc000 x43ae0000}
 {x42840000 x42000000}
 {x40800000 xc0000000}
 {x44dfc000 x442b8000}
 {xc0800000 x40000000}}}
 {tx x41400000 0}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x41400000 ltm x41400000 pt 0 ab 1}}
 {cubiccurve Bezier2 512 bezier
 {cc
 {f 8224}
 {px x41400000
 {xc3280000 xc2c40000}
 {x43f50000 x43ca0000}
 {x43280000 x42c40000}
 {xc2380000 x42900000}
 {x445b0000 x43e10000}
 {x42380000 xc2900000}
 {xc2d00000 0}
 {x44834000 x43920000}
 {x42d00000 0}
 {xc2840000 xc2000000}
 {x44afc000 x43ae0000}
 {x42840000 x42000000}
 {x40800000 xc0000000}
 {x44dfc000 x442b8000}
 {xc0800000 x40000000}}}
 {tx x41400000 x448c4ccd x43da0000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x41400000 ltm x41400000 pt 0 ab 1}}
 {cubiccurve Bezier4 512 bezier
 {cc
 {f 8224}
 {px x41400000
 {0 0}
 {x43f90000 x43fd0000}
 {0 0}
 {xc1000000 xc0000000}
 {x44310000 x442d0000}
 {x41000000 x40000000}
 {xc1200000 x41000000}
 {x44934000 x440a0000}
 {x41200000 xc1000000}
 {xc2780000 xc1d00000}
 {x44a70000 x43d20000}
 {x42780000 x41d00000}
 {0 0}
 {x44c5c000 x44308000}
 {0 0}}}
 {tx x41400000 x44848ccd x440fcccd}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x41400000 ltm x41400000 pt 0 ab 1}}
 {cubiccurve Bezier1 512 bezier
 {cc
 {f 8224}
 {px x41400000
 {0 0}
 {x43f90000 x43fd0000}
 {0 0}
 {xc1000000 xc0000000}
 {x44310000 x442d0000}
 {x41000000 x40000000}
 {xc1200000 x41000000}
 {x44c8ffff x444cffff}
 {x41200000 xc1000000}
 {xc2780000 xc1d00000}
 {x44a70000 x43d20000}
 {x42780000 x41d00000}
 {0 0}
 {x44c5c000 x44308000}
 {0 0}}}
 {tx x41400000 x44848ccd x440fcccd}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 ltn x41400000 ltm x41400000 pt 0 ab 1}}}}
 {edge Bezier2 Bezier3
 {cp x40800000 x40800000 0 0 0
 {{{{x41400000 0}}
 {{x41400000 0}}}
 {{{x41400000 x3faaaaab}}
 {{x41400000 x3faaaaab}}}
 {{{x41400000 x402aaaab}}
 {{x41400000 x402aaaab}}}
 {{{x41400000 x40800000}}
 {{x41400000 x40800000}}}}}
 {a}}
 {edge Bezier1 Bezier4
 {cp x40800000 x40800000 0 0 0
 {{{{x41400000 0}}
 {{x41400000 0}}}
 {{{x41400000 x3faaaaab}}
 {{x41400000 x3faaaaab}}}
 {{{x41400000 x402aaaab}}
 {{x41400000 x402aaaab}}}
 {{{x41400000 x40800000}}
 {{x41400000 x40800000}}}}}
 {a}}}}
 toolbar_preview_mode "persistent preview"
 name SplineWarp3_1
 selected true
 xpos 788
 ypos 20
}
Group {
 name UV_to_Vectors
 help "Transforms a distorted UV Map to Motion Vectors corresponding to the distortion."
 selected true
 xpos 788
 ypos 88
 addUserKnob {20 UV_to_Vectors}
 addUserKnob {41 in l UV_Layer t "Select the layer containing your UV_map" T UV_Channel.in}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Input1
 xpos -291
 ypos -63
 }
set N8b7bb800 [stack 0]
 Shuffle {
 in motion
 name UV_Channel
 selected true
 xpos -151
 ypos -17
 }
 Expression {
 expr0 -x+r*width-0.5
 expr1 -y+g*height-0.5
 channel2 {-rgba.red -rgba.green -rgba.blue none}
 channel3 {none none none -rgba.alpha}
 name UV_to_Vectors1
 selected true
 xpos -151
 ypos 97
 }
push $N8b7bb800
 ShuffleCopy {
 inputs 2
 in2 none
 red red
 green green
 alpha black
 out {{{parent.UV_Channel.in}}}
 name ShuffleCopy1
 selected true
 xpos -291
 ypos 97
 }
 Output {
 name Output1
 xpos -291
 ypos 167
 }
end_group
Blur {
 size {{curve x1 0 x5 150 x8 500}}
 name Blur3
 selected true
 xpos 788
 ypos 135
}
set Nace2cc00 [stack 0]
Group {
 name Vectors_to_UV
 selected true
 xpos 788
 ypos 197
 addUserKnob {20 User}
 addUserKnob {41 in l Vector_Layer t "Pick the layer containing your motion vectors." T UV_Channel.in}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Input1
 xpos -303
 ypos 114
 }
set Nb9b27c00 [stack 0]
 Shuffle {
 in motion
 name UV_Channel
 xpos -163
 ypos 114
 }
 Expression {
 expr0 (r+x+0.5)/width
 expr1 (g+y+0.5)/height
 channel2 {-rgba.red -rgba.green -rgba.blue none}
 channel3 {none none none -rgba.alpha}
 name Vectors_to_UV
 xpos -163
 ypos 228
 }
push $Nb9b27c00
 ShuffleCopy {
 inputs 2
 in2 none
 red red
 green green
 alpha black
 out {{{parent.UV_Channel.in}}}
 name ShuffleCopy1
 selected true
 xpos -303
 ypos 228
 }
 Output {
 name Output1
 xpos -303
 ypos 299
 }
end_group
Shuffle {
 in motion
 name Shuffle1
 label "\[value in]"
 selected true
 xpos 788
 ypos 231
}
push $Nace2c400
STMap {
 inputs 2
 uv rgba
 name STMap1
 selected true
 xpos 926
 ypos 231
}
push $Nace2cc00
push $Nace2c400
Dot {
 name Dot5
 selected true
 xpos 1161
 ypos -83
}
Copy {
 inputs 2
 from0 forward.u
 to0 forward.u
 from1 forward.v
 to1 forward.v
 name Copy2
 selected true
 xpos 1127
 ypos 128
}
IDistort {
 uv motion
 name IDistort2
 selected true
 xpos 1127
 ypos 233
}
StickyNote {
 inputs 0
 name StickyNote1
 label "STMap seems to have slightly nicer filtering,\nIDistort offers controls to the UV scale (which can still be controled \nby multiplying down the vectors before converting back to UVs)"
 selected true
 xpos 867
 ypos 295
}

3 – Background distortion

When working with refractive objects on green-screen, it’s common that the object would just refract green, which as a result would make the object purely transparent. An easy fix can be to generate just one frame of refractive distortion (through grid/spline warps, transforms, or a render from CG) then animate that “distortion shape”.

A manually generated distortion map

A manually generated distortion map

By converting the UV map to Vectors, like we did before for the relax, we are able to manipulate the distortion map, and on top of blurring or grading it like we did previously, we are also able to transform them. While a normal transform would give some results, the rotation wouldn’t act as expected. However, using the “VectorTransform” node, we are able to apply a proper transformation to the vectors.bottle

Here’s the full script:

set cut_paste_input [stack 0]
version 9.0 v8
push $cut_paste_input
Roto {
 output alpha
 curves {{{v x3f99999a}
 {f 0}
 {n
 {layer Root
 {f 2097152}
 {t x44700000 x44070000}
 {a fx xc2ac0000 fy xc2ac0000 pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}
 {curvegroup BSpline4 512 bspline
 {{cc
 {f 8192}
 {px 1
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x448a0000 x422f3f84}
 {{a t
 {{1 x3f810625}} rp
 {{1 1}} te
 {{1 x40800000}}} x4488c000 x43048000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44860000 x437077cf}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44874000 x43a86f1a}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44884000 x43cb2353}
 {{a t
 {{1 x3f810625}} rp
 {{1 1}} te
 {{1 x40800000}}} x44884000 x43e52a7e}
 {{a t
 {{1 x3f818937}} rp
 {{1 1}} te
 {{1 x40800000}}} x44848000 x43f1b2af}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44814000 x43e14f5b}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44814000 x43b7dba5}
 {{a t
 {{1 x3f7ef9db}} rp
 {{1 1}} te
 {{1 x40800000}}} x44820000 x438e67ef}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x4482c000 x43460d50}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44828000 x42d6df3b}
 {{a t
 {{1 x3f78d4fe}} rp
 {{1 1}} te
 {{1 x40800000}}} x44834000 x41e31a9f}}} idem}
 {tx 1 x44526276 x438ad89e}
 {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x40c00000}}
 {curvegroup BSpline3 512 bspline
 {{cc
 {f 8192}
 {px 1
 {{a t
 {{1 x3f7be76d}} rp
 {{1 1}} te
 {{1 x40800000}}} x4473fffe x43f1b2ae}
 {{a t
 {{1 x3f7ef9db}} rp
 {{1 1}} te
 {{1 x40800000}}} x447d0000 x43e80ed8}
 {{a t
 {{1 x3f810625}} rp
 {{1 1}} te
 {{1 x40800000}}} x447f8000 x43d2d999}
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x447d0000 x43a77851}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x447e8000 x4349e872}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44808000 x42c3978d}
 {{a t
 {{1 x3f839581}} rp
 {{1 1}} te
 {{1 x40800000}}} x4480c000 x421fd2f1}
 {{a t
 {{1 x3f820c4a}} rp
 {{1 1}} te
 {{1 x40800000}}} x44758000 x41b4d4fd}
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x44708000 x4289c083}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44710000 x43235916}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44710002 x43782e13}
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x44720000 x43aa5caa}
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x446efffe x43db86a6}}} idem}
 {tx 1 x44641d8a x43810000}
 {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x40c00000}}
 {curvegroup BSpline2 512 bspline
 {{cc
 {f 8192}
 {px 1
 {{a t
 {{1 x3f7be76d}} rp
 {{1 1}} te
 {{1 x40800000}}} x44688002 x43f7ffff}
 {{a t
 {{1 x3f7ef9db}} rp
 {{1 1}} te
 {{1 x40800000}}} x445f8000 x43ee0000}
 {{a t
 {{1 x3f810625}} rp
 {{1 1}} te
 {{1 x40800000}}} x445d0000 x43d80000}
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x445f8000 x43ab0000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x445e0000 x434c0000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x445b8000 x42c00000}
 {{a t
 {{1 x3f839581}} rp
 {{1 1}} te
 {{1 x40800000}}} x445b0000 x42100000}
 {{a t
 {{1 x3f820c4a}} rp
 {{1 1}} te
 {{1 x40800000}}} x44670000 x41900000}
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x446c0000 x42840000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x446b8000 x43240000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x446b7ffe x437bffff}
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x446a8000 x43adffff}
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x446d8002 x43e0ffff}}} idem}
 {tx 1 x44641d8a x43810000}
 {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x40c00000}}
 {curvegroup BSpline1 512 bspline
 {{cc
 {f 8192}
 {px 1
 {{a t
 {{1 x3f808312}} rp
 {{1 1}} te
 {{1 x40800000}}} x44488000 x42200008}
 {{a t
 {{1 x3f810625}} rp
 {{1 1}} te
 {{1 x40800000}}} x444b0000 x43040000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44508000 x43740000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x444e0000 x43ac0000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x444c0000 x43d00000}
 {{a t
 {{1 x3f810625}} rp
 {{1 1}} te
 {{1 x40800000}}} x444c0000 x43eb0000}
 {{a t
 {{1 x3f818937}} rp
 {{1 1}} te
 {{1 x40800000}}} x44538000 x43f80000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x445a0000 x43e70000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x445a0000 x43bc0000}
 {{a t
 {{1 x3f7ef9db}} rp
 {{1 1}} te
 {{1 x40800000}}} x44588000 x43910000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44570000 x43480000}
 {{a t
 {{1 1}} rp
 {{1 1}} te
 {{1 x40800000}}} x44578000 x42d40000}
 {{a t
 {{1 x3f78d4fe}} rp
 {{1 1}} te
 {{1 x40800000}}} x44560000 x41c00000}}} idem}
 {tx 1 x44526276 x438ad89e}
 {a osw x41200000 osf 0 str 1 spx x44700000 spy x44070000 sb 1 tt x40c00000}}}}}}
 toolbox {selectAll {
 { selectAll str 1 ssx 1 ssy 1 sf 1 }
 { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 }
 { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 }
 { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 tt 9 }
 { brush str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
 toolbar_brush_hardness 0.200000003
 toolbar_source_transform_scale {1 1}
 toolbar_source_transform_center {960 540}
 colorOverlay {0 0 0 0}
 lifetime_type "all frames"
 motionblur_shutter_offset_type centred
 source_black_outside true
 name Roto1
 selected true
 xpos 1505
 ypos -2
}
RotoPaint {
 output alpha
 curves {{{v x3f99999a}
 {f 0}
 {n
 {layer Root
 {f 2097152}
 {t x44700000 x44070000}
 {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}
 {cubiccurve Brush8 512 catmullrom
 {cc
 {f 2080}
 {px 1
 {x4489c000 x44074000 1}
 {x4489e000 x4406c000 1}
 {x448a6000 x44058000 x3ed5b56d}
 {x448aa000 x4404c000 x3eea3a8f}
 {x448b4000 x4403c000 x3f07a1e8}
 {x448b8000 x44034000 x3f0721c8}
 {x448bc000 x44034000 x3f022088}
 {x448bc000 x4402c000 x3e7f3fd0}}}
 {tx 1 x448adc00 x4404a800}
 {a ro 0 go 0 bo 0 ao 0 opc x3df1a9fc bu 1 str 1 spx x44700000 spy x44070000 sb 1 tt x41880000}}
 {cubiccurve Brush7 512 catmullrom
 {cc
 {f 2080}
 {px 1
 {x44898000 x44064000 1}
 {x44898000 x44070000 x3e9b26ca}
 {x4489a000 x4408c000 x3ea6a9aa}
 {x4489e000 x440a8000 x3eb5ad6b}
 {x448a6000 x440d0000 x3ed5354d}
 {x448ae000 x440fc000 x3eeb3acf}
 {x448be000 x44144000 x3ef43d0f}
 {x448c0000 x44148000 x3edc370e}
 {x448be000 x4413c000 x3e9e278a}
 {x448b8000 x4412c000 0}}}
 {tx 1 x448ab333 x440e0ccd}
 {a ro 0 go 0 bo 0 ao 0 opc x3df1a9fc bu 1 str 1 spx x44700000 spy x44070000 sb 1 tt x41880000}}
 {cubiccurve Brush6 512 catmullrom
 {cc
 {f 2080}
 {px 1
 {x4485c000 x441c8000 x3e9b26ca}
 {x4485c000 x441c0000 1}
 {x44860000 x44190000 x3ea729ca}
 {x44866000 x44174000 x3eb22c8b}
 {x4486e000 x44138000 x3ecd334d}
 {x4487e000 x440c8000 x3f012048}
 {x44884000 x44084000 x3f0ea3a9}
 {x44894000 x44008000 x3f18a62a}
 {x4489c000 x43fb8000 x3f19264a}
 {x448a2000 x43f70000 x3f16e5b9}
 {x448ac000 x43f20000 x3f0ea3a9}
 {x448ac000 x43f08000 x3ebe2f8c}
 {x448aa000 x43f10000 0}}}
 {tx 1 x4488513b x4408f627}
 {a ro 0 go 0 bo 0 ao 0 opc x3df1a9fc bu 1 str 1 spx x44700000 spy x44070000 sb 1 tt x41880000}}
 {cubiccurve Brush5 512 catmullrom
 {cc
 {f 2080}
 {px 1
 {x44830000 x44008000 1}
 {x44832000 x43ff0000 1}
 {x4483c000 x43f80000 x3e9d274a}
 {x4483e000 x43f68000 x3ea729ca}
 {x4483e000 x43f58000 x3ec1b06c}
 {x4483e000 x43f40000 x3ed2b4ad}
 {x44834000 x43f80000 x3ed8360e}
 {x44830000 x43fc8000 x3ed7b5ed}
 {x4482c000 x44014000 x3ed6b5ad}
 {x4482e000 x44078000 x3ed5b56d}
 {x44834000 x44090000 x3ed6b5ad}
 {x4483e000 x4409c000 x3ed9364e}
 {x44856000 x44094000 x3eea3a8f}
 {x4485e000 x44078000 x3ef13c4f}
 {x44866000 x44058000 x3ef6bdaf}
 {x4486e000 x4400c000 x3f0ca329}
 {x44870000 x43fe0000 x3f166599}
 {x44870000 x43fb8000 x3f19665a}
 {x4486e000 x43fc0000 x3de4390e}}}
 {tx 1 x4484850d x440106bd}
 {a ro 0 go 0 bo 0 ao 0 opc x3df1a9fc bu 1 str 1 spx x44700000 spy x44070000 sb 1 tt x41880000}}
 {cubiccurve Brush4 512 catmullrom
 {cc
 {f 2080}
 {px 1
 {x447c0000 x44110000 1}
 {x447c4000 x4410c000 x3ef5bd6f}
 {x447cc000 x440f8000 x3e372dcb}}}
 {tx 1 x447c5555 x44106aab}
 {a ro 0 go 0 bo 0 ao 0 opc x3df1a9fc bu 1 str 1 spx x44700000 spy x44070000 sb 1 tt x41880000}}
 {cubiccurve Brush3 512 catmullrom
 {cc
 {f 2080}
 {px 1
 {x447ec000 x44034000 1}
 {x447ec000 x44030000 x3e9ba6ea}
 {x447ec000 x44018000 x3ee9ba6f}
 {x447f0000 x44010000 x3efb3ed0}
 {x447f4000 x44000000 x3f08a229}
 {x447fc000 x43fd8000 x3f0ca329}
 {x44800000 x43fb8000 x3f0ce339}
 {x44800000 x43fb0000 0}}}
 {tx 1 x447f4800 x44005800}
 {a ro 0 go 0 bo 0 ao 0 opc x3df1a9fc bu 1 str 1 spx x44700000 spy x44070000 sb 1 tt x41880000}}
 {cubiccurve Brush2 512 catmullrom
 {cc
 {f 2080}
 {px 1
 {x44728000 x43fa8000 1}
 {x44728000 x43f98000 1}
 {x4472c000 x43f80000 x3e743d0f}
 {x4472c000 x43f88000 x3ed6b5ad}
 {x44728000 x43f90000 x3ed9364e}
 {x44720000 x43fb8000 x3eddb76e}
 {x44718000 x43fd8000 x3ee1b86e}
 {x44710000 x44004000 x3ee7b9ee}
 {x44708000 x44018000 x3ee9ba6f}
 {x44710000 x44048000 x3ee6b9ae}
 {x4471c000 x44058000 x3ee5b96e}
 {x44730000 x44064000 x3ee83a0f}
 {x4476c000 x44068000 x3eea3a8f}
 {x44780000 x44070000 x3eeabaaf}
 {x4478c000 x44074000 x3ee739ce}
 {x447a4000 x44074000 0}}}
 {tx 1 x44739800 x44019400}
 {a ro 0 go 0 bo 0 ao 0 opc x3df1a9fc bu 1 str 1 spx x44700000 spy x44070000 sb 1 tt x41880000}}
 {cubiccurve Brush1 512 catmullrom
 {cc
 {f 2080}
 {px 1
 {x44584000 x441bc000 1}
 {x44584000 x441b8000 x3e4e338d}
 {x44584000 x441b0000 x3e5d374e}
 {x44584000 x441a0000 x3e95a569}
 {x44584000 x44194000 x3e9aa6aa}
 {x44584000 x4417c000 x3ea8aa2b}
 {x44584000 x4413c000 x3eb02c0b}
 {x44584000 x44118000 x3eb12c4b}
 {x44584000 x440dc000 x3eb8ae2c}
 {x44578000 x44090000 x3ebc2f0c}
 {x44574000 x44068000 x3ebcaf2c}
 {x4456c000 x44044000 x3eba2e8c}
 {x4455c000 x44014000 x3eaeabab}
 {x4453c000 x43fc0000 x3e9da76a}
 {x44524000 x43f90000 x3e912449}
 {x44514000 x43f70000 x3e6c3b0f}
 {x444e0000 x43f58000 x3e5735cd}
 {x444d4000 x43f60000 x3e59364e}
 {x444c8000 x43f78000 x3e5735cd}
 {x444c4000 x43fb8000 x3e64390e}
 {x444c4000 x43fc8000 x3e61384e}
 {x444c8000 x43fd0000 x3e64390e}
 {x444e8000 x43fd8000 x3e902409}
 {x44500000 x43fd8000 x3e9ba6ea}
 {x44518000 x43fd8000 x3ea328ca}
 {x44550000 x43fc0000 x3eb22c8b}
 {x44568000 x43fb0000 x3eba2e8c}
 {x44578000 x43f98000 x3ec1304c}
 {x445b4000 x43f88000 x3ec4b12c}
 {x445cc000 x43f80000 x3ec5b16c}
 {x445e4000 x43f78000 x3ec5b16c}
 {x44610000 x43f68000 x3ed334cd}
 {x44624000 x43f60000 x3ed6b5ad}
 {x4463c000 x43f68000 x3edab6ae}
 {x44680000 x43fc0000 x3edfb7ee}
 {x4469c000 x43fe8000 x3ee0380e}
 {x446b8000 x4400c000 x3ee0b82e}
 {x446dc000 x4403c000 x3ee8ba2f}
 {x446f0000 x44064000 x3ee9ba6f}
 {x446f4000 x44084000 x3ee8ba2f}
 {x446f0000 x440c8000 x3ee4b92e}
 {x446e8000 x440e8000 x3ee4390e}
 {x446d8000 x4411c000 x3ee1b86e}
 {x446c4000 x44158000 x3ed1b46d}
 {x446ac000 x44174000 x3ecc330d}
 {x44694000 x44184000 x3ec731cc}
 {x4464c000 x441a4000 x3ed6358d}
 {x44638000 x441ac000 x3ede378e}
 {x44620000 x441b0000 x3ee3b8ee}
 {x445f4000 x441b8000 x3ee6b9ae}
 {x445e0000 x441b8000 x3ee6b9ae}
 {x445b8000 x441bc000 x3ee5394e}
 {x44584000 x441bc000 x3edeb7ae}
 {x4456c000 x441b0000 x3ee5394e}
 {x4455c000 x441ac000 x3ee6b9ae}
 {x4452c000 x44194000 x3edd374e}
 {x44518000 x44180000 x3edc370e}
 {x44504000 x4416c000 x3ed6358d}
 {x444dc000 x44140000 x3ecbb2ed}
 {x444c8000 x44134000 x3e98260a}
 {x444c0000 x4412c000 0}}}
 {tx 1 x445ac432 x440ae8eb}
 {a ro 0 go 0 bo 0 ao 0 opc x3df1a9fc bu 1 str 1 spx x44700000 spy x44070000 sb 1 tt x41880000}}}}}}
 toolbox {brush {
 { selectAll str 1 ssx 1 ssy 1 sf 1 }
 { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { brush str 1 ssx 1 ssy 1 sf 1 sb 1 tt 17 }
 { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
 { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
 toolbar_brush_hardness 0.200000003
 toolbar_lifetime_type single
 toolbar_source_transform_scale {1 1}
 toolbar_source_transform_center {960 540}
 colorOverlay {0 0 0 0}
 opacity 0.1180000007
 lifetime_type "all frames"
 brush_spacing 0.05000000075
 brush_hardness 0.200000003
 source_black_outside true
 name RotoPaint1
 selected true
 xpos 1505
 ypos 46
}
Shuffle {
 red alpha
 green alpha
 blue alpha
 name Shuffle3
 selected true
 xpos 1505
 ypos 84
}
CheckerBoard2 {
 inputs 0
 name CheckerBoard2
 selected true
 xpos 1832
 ypos -227
}
Dot {
 name Dot6
 selected true
 xpos 1866
 ypos -120
}
set Nbca57400 [stack 0]
Group {
 name UV_Map_Layer1
 selected true
 xpos 1628
 ypos -124
 addUserKnob {20 UVMap l "UV Map"}
 addUserKnob {41 out l UV_Layer T ShuffleCopy1.out}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Input1
 xpos 555
 ypos 346
 }
set Nbd957000 [stack 0]
 Expression {
 expr0 (x+0.5)/width
 channel1 {-rgba.red rgba.green -rgba.blue none}
 expr1 (y+.5)/height
 channel2 {-rgba.red -rgba.green rgba.blue none}
 name Expression1
 xpos 672
 ypos 424
 }
push $Nbd957000
 ShuffleCopy {
 inputs 2
 in2 none
 red red
 green green
 alpha black
 out motion
 name ShuffleCopy1
 xpos 555
 ypos 427
 }
 Output {
 name Output1
 xpos 555
 ypos 511
 }
end_group
GridWarp3 {
 toolbar_visibility_src false
 source_grid_col {
 1 5 5 4 1 0
 {default }
 {
 { {1 {curve L x1 369.6594849} {curve L x1 2.16003418}} { {1 {curve L x1 0} {curve L x1 89.63999939}} {1 {curve L x1 0} {curve L x1 -89.63999939}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 664.8297119} {curve L x1 2.16003418}} { {1 {curve L x1 0} {curve L x1 89.63999939}} {1 {curve L x1 0} {curve L x1 -89.63999939}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 960} {curve L x1 2.16003418}} { {1 {curve L x1 0} {curve L x1 89.63999939}} {1 {curve L x1 0} {curve L x1 -89.63999939}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 1255.170166} {curve L x1 2.16003418}} { {1 {curve L x1 0} {curve L x1 89.63999939}} {1 {curve L x1 0} {curve L x1 -89.63999939}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 1550.340576} {curve L x1 2.16003418}} { {1 {curve L x1 0} {curve L x1 89.63999939}} {1 {curve L x1 0} {curve L x1 -89.63999939}} {1 {curve L x1 98.38989258} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 369.6594849} {curve L x1 271.0800171}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 664.8297119} {curve L x1 271.0800171}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 960} {curve L x1 271.0800171}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 1255.170166} {curve L x1 271.0800171}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 1550.340576} {curve L x1 271.0800171}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.38989258} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 369.6594849} {curve L x1 540}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 664.8297119} {curve L x1 540}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 960} {curve L x1 540}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 1255.170166} {curve L x1 540}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 1550.340576} {curve L x1 540}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63998413}} {1 {curve L x1 98.38989258} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 369.6594849} {curve L x1 808.9200439}} { {1 {curve L x1 0} {curve L x1 89.63995361}} {1 {curve L x1 0} {curve L x1 -89.64001465}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 664.8297119} {curve L x1 808.9200439}} { {1 {curve L x1 0} {curve L x1 89.63995361}} {1 {curve L x1 0} {curve L x1 -89.64001465}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 960} {curve L x1 808.9200439}} { {1 {curve L x1 0} {curve L x1 89.63995361}} {1 {curve L x1 0} {curve L x1 -89.64001465}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 1255.170166} {curve L x1 808.9200439}} { {1 {curve L x1 0} {curve L x1 89.63995361}} {1 {curve L x1 0} {curve L x1 -89.64001465}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 1550.340576} {curve L x1 808.9200439}} { {1 {curve L x1 0} {curve L x1 89.63995361}} {1 {curve L x1 0} {curve L x1 -89.64001465}} {1 {curve L x1 98.38989258} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 369.6594849} {curve L x1 1077.839966}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63995361}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 664.8297119} {curve L x1 1077.839966}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63995361}} {1 {curve L x1 98.39007568} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 960} {curve L x1 1077.839966}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63995361}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39007568} {curve L x1 0}} } } 
 { {1 {curve L x1 1255.170166} {curve L x1 1077.839966}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63995361}} {1 {curve L x1 98.39013672} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 { {1 {curve L x1 1550.340576} {curve L x1 1077.839966}} { {1 {curve L x1 0} {curve L x1 89.64001465}} {1 {curve L x1 0} {curve L x1 -89.63995361}} {1 {curve L x1 98.38989258} {curve L x1 0}} {1 {curve L x1 -98.39013672} {curve L x1 0}} } } 
 }
 }
 destination_grid_col {
 1 5 5 4 1 0
 {default }
 {
 { {1 {curve L x1 787} {curve L x1 41}} { {1 {curve L x1 0} {curve L x1 84.78513336}} {1 {curve L x1 0} {curve L x1 -84.78514099}} {1 {curve L x1 7.320007324} {curve L x1 10}} {1 {curve L x1 -26.39874268} {curve L x1 -36.0487175}} } } 
 { {1 {curve L x1 833} {curve L x1 10}} { {1 {curve L x1 3} {curve L x1 29}} {1 {curve L x1 -8.724304199} {curve L x1 -84.33507538}} {1 {curve L x1 29.512146} {curve L x1 0}} {1 {curve L x1 -29.51220703} {curve L x1 0}} } } 
 { {1 {curve L x1 961} {curve L x1 4}} { {1 {curve L x1 -3} {curve L x1 23}} {1 {curve L x1 11.08258057} {curve L x1 -84.05770111}} {1 {curve L x1 29.51220703} {curve L x1 0}} {1 {curve L x1 -29.512146} {curve L x1 0}} } } 
 { {1 {curve L x1 1074} {curve L x1 18}} { {1 {curve L x1 -7} {curve L x1 37}} {1 {curve L x1 15.80749512} {curve L x1 -83.2984848}} {1 {curve L x1 24} {curve L x1 8}} {1 {curve L x1 -27.99780273} {curve L x1 -9.332665443}} } } 
 { {1 {curve L x1 1114} {curve L x1 41}} { {1 {curve L x1 0} {curve L x1 84.78513336}} {1 {curve L x1 0} {curve L x1 -84.78514099}} {1 {curve L x1 29.29199219} {curve L x1 -9.829267502}} {1 {curve L x1 -9.079223633} {curve L x1 3.035463333}} } } 
 { {1 {curve L x1 812.4295044} {curve L x1 294.740509}} { {1 {curve L x1 0} {curve L x1 84.78512573}} {1 {curve L x1 0} {curve L x1 -84.78514099}} {1 {curve L x1 4.086120605} {curve L x1 -1.740509033}} {1 {curve L x1 -29.16442871} {curve L x1 12.34146118}} } } 
 { {1 {curve L x1 846.1616211} {curve L x1 280}} { {1 {curve L x1 0} {curve L x1 84.78515625}} {1 {curve L x1 0} {curve L x1 -84.78512573}} {1 {curve L x1 29.51220703} {curve L x1 0}} {1 {curve L x1 -29.51220703} {curve L x1 0}} } } 
 { {1 {curve L x1 961} {curve L x1 278}} { {1 {curve L x1 0} {curve L x1 84.78512573}} {1 {curve L x1 0} {curve L x1 -84.78514099}} {1 {curve L x1 29.51220703} {curve L x1 0}} {1 {curve L x1 -29.51220703} {curve L x1 0}} } } 
 { {1 {curve L x1 1062.101563} {curve L x1 276}} { {1 {curve L x1 0} {curve L x1 84.78509521}} {1 {curve L x1 0} {curve L x1 -84.78514099}} {1 {curve L x1 29.51220703} {curve L x1 0}} {1 {curve L x1 -29.51220703} {curve L x1 0}} } } 
 { {1 {curve L x1 1097.237549} {curve L x1 271}} { {1 {curve L x1 0} {curve L x1 84.78509521}} {1 {curve L x1 0} {curve L x1 -84.78515625}} {1 {curve L x1 29.5123291} {curve L x1 0.01159667969}} {1 {curve L x1 -9.149902344} {curve L x1 0}} } } 
 { {1 {curve L x1 792.906189} {curve L x1 537.8319702}} { {1 {curve L x1 0} {curve L x1 99.0289917}} {1 {curve L x1 0} {curve L x1 -99.02905273}} {1 {curve L x1 3.093078613} {curve L x1 -3.503967285}} {1 {curve L x1 -26.28997803} {curve L x1 29.78088379}} } } 
 { {1 {curve L x1 824.8679199} {curve L x1 540.1679688}} { {1 {curve L x1 0} {curve L x1 99.0289917}} {1 {curve L x1 0} {curve L x1 -99.02905273}} {1 {curve L x1 27.71191406} {curve L x1 0}} {1 {curve L x1 -27.7119751} {curve L x1 0}} } } 
 { {1 {curve L x1 959.5880737} {curve L x1 539.7888184}} { {1 {curve L x1 0} {curve L x1 99.0289917}} {1 {curve L x1 0} {curve L x1 -99.02905273}} {1 {curve L x1 27.7119751} {curve L x1 0}} {1 {curve L x1 -27.71191406} {curve L x1 0}} } } 
 { {1 {curve L x1 1088.122192} {curve L x1 540.1679688}} { {1 {curve L x1 0} {curve L x1 99.0289917}} {1 {curve L x1 0} {curve L x1 -99.02905273}} {1 {curve L x1 27.71191406} {curve L x1 0}} {1 {curve L x1 -27.71203613} {curve L x1 0}} } } 
 { {1 {curve L x1 1125.238892} {curve L x1 540.1679688}} { {1 {curve L x1 0} {curve L x1 99.0289917}} {1 {curve L x1 0} {curve L x1 -99.02905273}} {1 {curve L x1 27.53100586} {curve L x1 -10.74963379}} {1 {curve L x1 -8.935424805} {curve L x1 3.50402832}} } } 
 { {1 {curve L x1 884.5} {curve L x1 802.5}} { {1 {curve L x1 0} {curve L x1 77.74786377}} {1 {curve L x1 0} {curve L x1 -77.74804688}} {1 {curve L x1 14.57897949} {curve L x1 0}} {1 {curve L x1 -14.57904053} {curve L x1 0}} } } 
 { {1 {curve L x1 915.8845215} {curve L x1 804.5865479}} { {1 {curve L x1 0} {curve L x1 77.74786377}} {1 {curve L x1 0} {curve L x1 -77.74804688}} {1 {curve L x1 14.57897949} {curve L x1 0}} {1 {curve L x1 -14.57904053} {curve L x1 0}} } } 
 { {1 {curve L x1 959.621582} {curve L x1 804.5865479}} { {1 {curve L x1 0} {curve L x1 77.74786377}} {1 {curve L x1 0} {curve L x1 -77.74804688}} {1 {curve L x1 14.57904053} {curve L x1 0}} {1 {curve L x1 -14.57904053} {curve L x1 0}} } } 
 { {1 {curve L x1 1015.253601} {curve L x1 802}} { {1 {curve L x1 0} {curve L x1 77.74786377}} {1 {curve L x1 0} {curve L x1 -77.74804688}} {1 {curve L x1 14.57891846} {curve L x1 0}} {1 {curve L x1 -14.57904053} {curve L x1 0}} } } 
 { {1 {curve L x1 1032.5} {curve L x1 801}} { {1 {curve L x1 0} {curve L x1 77.74786377}} {1 {curve L x1 0} {curve L x1 -77.74804688}} {1 {curve L x1 14.46630859} {curve L x1 -4.940673828}} {1 {curve L x1 -8.784057617} {curve L x1 3}} } } 
 { {1 {curve L x1 872.5258789} {curve L x1 905}} { {1 {curve L x1 0} {curve L x1 77.74804688}} {1 {curve L x1 0} {curve L x1 -77.7479248}} {1 {curve L x1 14.57897949} {curve L x1 0}} {1 {curve L x1 -14.57904053} {curve L x1 0}} } } 
 { {1 {curve L x1 916.2629395} {curve L x1 905}} { {1 {curve L x1 0} {curve L x1 77.74804688}} {1 {curve L x1 0} {curve L x1 -77.7479248}} {1 {curve L x1 14.57897949} {curve L x1 0}} {1 {curve L x1 -14.57904053} {curve L x1 0}} } } 
 { {1 {curve L x1 960} {curve L x1 905}} { {1 {curve L x1 0} {curve L x1 77.74804688}} {1 {curve L x1 0} {curve L x1 -77.7479248}} {1 {curve L x1 14.57904053} {curve L x1 0}} {1 {curve L x1 -14.57904053} {curve L x1 0}} } } 
 { {1 {curve L x1 1015.632019} {curve L x1 906.1696777}} { {1 {curve L x1 0} {curve L x1 77.74804688}} {1 {curve L x1 0} {curve L x1 -77.7479248}} {1 {curve L x1 14.57891846} {curve L x1 0}} {1 {curve L x1 -14.57904053} {curve L x1 0}} } } 
 { {1 {curve L x1 1048.572021} {curve L x1 905.1696777}} { {1 {curve L x1 0} {curve L x1 77.74804688}} {1 {curve L x1 0} {curve L x1 -77.7479248}} {1 {curve L x1 14.47912598} {curve L x1 -4.652832031}} {1 {curve L x1 -6.222045898} {curve L x1 2}} } } 
 }
 }
 grids_manually_moved true
 source_grid_transform_center {960 540}
 destination_grid_transform_center {960 540}
 name GridWarp3_1
 selected true
 xpos 1628
 ypos -79
}
Group {
 name UV_to_Vectors1
 help "Transforms a distorted UV Map to Motion Vectors corresponding to the distortion."
 selected true
 xpos 1628
 ypos -15
 addUserKnob {20 UV_to_Vectors}
 addUserKnob {41 in l UV_Layer t "Select the layer containing your UV_map" T UV_Channel.in}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Input1
 xpos -291
 ypos -63
 }
set Na637f000 [stack 0]
 Shuffle {
 in motion
 name UV_Channel
 selected true
 xpos -151
 ypos -17
 }
 Expression {
 expr0 -x+r*width-0.5
 expr1 -y+g*height-0.5
 channel2 {-rgba.red -rgba.green -rgba.blue none}
 channel3 {none none none -rgba.alpha}
 name UV_to_Vectors1
 selected true
 xpos -151
 ypos 97
 }
push $Na637f000
 ShuffleCopy {
 inputs 2
 in2 none
 red red
 green green
 alpha black
 out {{{parent.UV_Channel.in}}}
 name ShuffleCopy1
 selected true
 xpos -291
 ypos 97
 }
 Output {
 name Output1
 xpos -291
 ypos 167
 }
end_group
Shuffle {
 in motion
 name Shuffle2
 label "\[value in]"
 selected true
 xpos 1628
 ypos 33
}
Grade {
 inputs 1+1
 white 5
 black_clamp false
 name Grade1
 selected true
 xpos 1628
 ypos 84
}
Group {
 name VectorTransform
 help "Transforms an image assuming it is a motion vector in RGBA.\nCompared to a regular transform, this will edit the pixel colors to compensate for vector direction and magnitude."
 selected true
 xpos 1628
 ypos 123
 addUserKnob {20 transform l "Transform Vectors"}
 addUserKnob {41 matrix T Transform1.matrix}
 addUserKnob {41 translate T Transform1.translate}
 addUserKnob {41 rotate T Transform1.rotate}
 addUserKnob {41 scale T Transform1.scale}
 addUserKnob {41 skewX l "skew X" T Transform1.skewX}
 addUserKnob {41 skewY l "skew Y" T Transform1.skewY}
 addUserKnob {41 skew_order l "skew order" T Transform1.skew_order}
 addUserKnob {41 center T Transform1.center}
 addUserKnob {41 invert_matrix l invert T Transform1.invert_matrix}
 addUserKnob {41 filter T Transform1.filter}
 addUserKnob {41 clamp -STARTLINE T Transform1.clamp}
 addUserKnob {41 black_outside l "black outside" -STARTLINE T Transform1.black_outside}
 addUserKnob {41 motionblur T Transform1.motionblur}
 addUserKnob {41 shutter T Transform1.shutter}
 addUserKnob {41 shutteroffset l "shutter offset" T Transform1.shutteroffset}
 addUserKnob {41 shuttercustomoffset l "" -STARTLINE T Transform1.shuttercustomoffset}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Vectors
 xpos -482
 ypos -5
 }
 Expression {
 expr0 r*Transform1.scale.w
 expr1 g*Transform1.scale.h
 name Magnitude
 selected true
 xpos -482
 ypos 35
 }
 Expression {
 temp_name0 angleRad
 temp_expr0 radians(Transform1.rotate)
 expr0 "r * cos(angleRad) - g * sin(angleRad)"
 expr1 "r * sin(angleRad) + g * cos(angleRad)"
 name Direction
 selected true
 xpos -482
 ypos 62
 }
 Transform {
 translate {{curve x1 -626 x10 -550} {curve x1 -104 x10 -24}}
 rotate {{curve x1 0 x10 -82.11540222}}
 scale 0.6949999928
 center {1480 472}
 name Transform1
 xpos -482
 ypos 96
 }
 Output {
 name Output1
 xpos -482
 ypos 196
 }
end_group
Group {
 name Vectors_to_UV1
 selected true
 xpos 1628
 ypos 156
 addUserKnob {20 User}
 addUserKnob {41 in l Vector_Layer t "Pick the layer containing your motion vectors." T UV_Channel.in}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Input1
 xpos -303
 ypos 114
 }
set Na70bfc00 [stack 0]
 Shuffle {
 name UV_Channel
 xpos -163
 ypos 114
 }
 Expression {
 expr0 (r+x+0.5)/width
 expr1 (g+y+0.5)/height
 channel2 {-rgba.red -rgba.green -rgba.blue none}
 channel3 {none none none -rgba.alpha}
 name Vectors_to_UV
 xpos -163
 ypos 228
 }
push $Na70bfc00
 ShuffleCopy {
 inputs 2
 in2 none
 red red
 green green
 alpha black
 out {{{parent.UV_Channel.in}}}
 name ShuffleCopy1
 selected true
 xpos -303
 ypos 228
 }
 Output {
 name Output1
 xpos -303
 ypos 299
 }
end_group
Dot {
 name Dot7
 selected true
 xpos 1662
 ypos 197
}
push $Nbca57400
STMap {
 inputs 2
 uv rgba
 name STMap2
 selected true
 xpos 1832
 ypos 187
}

4 – Custom Motion Blur

Finally, another useful way to use these tools is to create a custom motion blur.

By drawing the movement as a splineWarp, I’m able to once again convert the distortion to Vectors, which will then be used for VectorBlur.

I added some pins to reduce the area affected by the distortion

I added some pins to reduce the area affected by the distortion

2016-04-25_14h47_38

Source Image: https://pixabay.com/en/baseball-man-player-male-sport-731103/

Here’s the full script:

set cut_paste_input [stack 0]
version 9.0 v8
Read {
 inputs 0
 file F:/test_footage/baseball-731103_960_720.jpg
 format "941 720 0 0 941 720 1 "
 origset true
 name Read1
 selected true
 xpos 2246
 ypos -173
}
Dot {
 name Dot8
 selected true
 xpos 2280
 ypos -87
}
set Na0ca7000 [stack 0]
Group {
 name UV_Map_Layer2
 selected true
 xpos 2246
 ypos -46
 addUserKnob {20 UVMap l "UV Map"}
 addUserKnob {41 out l UV_Layer T ShuffleCopy1.out}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Input1
 xpos 555
 ypos 346
 }
set Na27e5000 [stack 0]
 Expression {
 expr0 (x+0.5)/width
 channel1 {-rgba.red rgba.green -rgba.blue none}
 expr1 (y+.5)/height
 channel2 {-rgba.red -rgba.green rgba.blue none}
 name Expression1
 xpos 672
 ypos 424
 }
push $Na27e5000
 ShuffleCopy {
 inputs 2
 in2 none
 red red
 green green
 alpha black
 out motion
 name ShuffleCopy1
 xpos 555
 ypos 427
 }
 Output {
 name Output1
 xpos 555
 ypos 511
 }
end_group
SplineWarp3 {
 colorOverlay {0 0 0 0}
 curves {{{v x3f99999a}
 {f 0}
 {n
 {layer Root
 {f 2097152}
 {t x43eb4000 x43b40000}
 {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0}
 {cubiccurve Pin28 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x4419c000 x4423a000}
 {0 0}}}
 {tx 1 x4419c000 x4423a000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin27 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x4419c000 x4423a000}
 {0 0}}}
 {tx 1 x4419c000 x4423a000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin26 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44122000 x44200000}
 {0 0}}}
 {tx 1 x44122000 x44200000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin25 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44122000 x44200000}
 {0 0}}}
 {tx 1 x44122000 x44200000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin24 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x4410e000 x4415e000}
 {0 0}}}
 {tx 1 x4410e000 x4415e000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin23 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x4410e000 x4415e000}
 {0 0}}}
 {tx 1 x4410e000 x4415e000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin22 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44318000 x441c4000}
 {0 0}}}
 {tx 1 x44318000 x441c4000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin21 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44318000 x441c4000}
 {0 0}}}
 {tx 1 x44318000 x441c4000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin20 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x441ca000 x442aa000}
 {0 0}}}
 {tx 1 x441ca000 x442aa000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin19 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x441ca000 x442aa000}
 {0 0}}}
 {tx 1 x441ca000 x442aa000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin18 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44056000 x4413c000}
 {0 0}}}
 {tx 1 x44056000 x4413c000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin17 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44056000 x4413c000}
 {0 0}}}
 {tx 1 x44056000 x4413c000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin16 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44094000 x441f2000}
 {0 0}}}
 {tx 1 x44094000 x441f2000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin15 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44094000 x441f2000}
 {0 0}}}
 {tx 1 x44094000 x441f2000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin14 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44336000 x44092000}
 {0 0}}}
 {tx 1 x44336000 x44092000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin13 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44336000 x44092000}
 {0 0}}}
 {tx 1 x44336000 x44092000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin12 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44224000 x43d84000}
 {0 0}}}
 {tx 1 x44224000 x43d84000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin11 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44224000 x43d84000}
 {0 0}}}
 {tx 1 x44224000 x43d84000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin10 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x440f2000 x4382c000}
 {0 0}}}
 {tx 1 x440f2000 x4382c000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin9 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x440f2000 x4382c000}
 {0 0}}}
 {tx 1 x440f2000 x4382c000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin8 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44070000 x43ad4000}
 {0 0}}}
 {tx 1 x44070000 x43ad4000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin7 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44070000 x43ad4000}
 {0 0}}}
 {tx 1 x44070000 x43ad4000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin6 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44044000 x43e30000}
 {0 0}}}
 {tx 1 x44044000 x43e30000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin5 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x44044000 x43e30000}
 {0 0}}}
 {tx 1 x44044000 x43e30000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin4 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x4409e000 x440b2000}
 {0 0}}}
 {tx 1 x4409e000 x440b2000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin3 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x4409e000 x440b2000}
 {0 0}}}
 {tx 1 x4409e000 x440b2000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin2 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x43f8c000 x4419a000}
 {0 0}}}
 {tx 1 x43f8c000 x4419a000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Pin1 262656 bezier
 {cc
 {f 8224}
 {px 1
 {0 0}
 {x43f8c000 x4419a000}
 {0 0}}}
 {tx 1 x43f8c000 x4419a000}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Bezier2 0 bezier
 {cc
 {f 8224}
 {px 1
 {xc0a00000 xc0733300}
 {x4410e800 x4406b99a}
 {x40a00000 x40733300}
 {xc031d500 xc0991100}
 {x44143429 x440a7b5c}
 {x4031d400 x40991000}
 {xbf81cc00 xc00e2200}
 {x44172e13 x4411c53e}
 {x3f81ce00 x400e1e00}
 {x3e149000 xbf496000}
 {x4417d3f1 x4413c568}
 {xbe149000 x3f496800}
 {x3fe9e600 xbf8b1800}
 {x4414e982 x44158578}
 {xbfe9e800 x3f8b1800}
 {xbfaf8200 xc01f5c00}
 {x4414284f x4416db4c}
 {x3faf8200 x401f5c00}
 {x3e744000 xc0196200}
 {x4414efeb x4419cbfc}
 {xbe744000 x40196000}
 {xbf9da800 xbf853400}
 {x4416681c x441c4e0e}
 {x3f9daa00 x3f853400}
 {x3e949000 xbfc96800}
 {x44184868 x441d28ca}
 {xbe949000 x3fc96400}
 {xbfd1f800 xc0088200}
 {x44185b81 x441f8308}
 {x3fd1f800 x40088200}
 {xbf3c3000 x3f2d8800}
 {x441a2745 x44203ff4}
 {x3f3c3000 xbf2d9000}
 {xbf25b000 x3fa6f000}
 {x441af874 x441d3286}
 {x3f25b000 xbfa6f000}
 {xbfd75200 x3e998000}
 {x441c20ee x441d4228}
 {x3fd75600 xbe999000}
 {xbeb9b000 x3ffbc000}
 {x441d4c74 x441c26fa}
 {x3eb9b800 xbffbc000}
 {xbfd0ba00 x3f8fbc00}
 {x441e301d x441aa370}
 {x3fd0ba00 xbf8fbc00}
 {xbf306c00 x406f2c00}
 {x441ff01b x4418513a}
 {x3f306c00 xc06f2a00}
 {x401ea400 x40467600}
 {x44201514 x441439c4}
 {xc01ea400 xc0467600}
 {x3e788000 x40461a00}
 {x441e6a88 x4411ae68}
 {xbe787000 xc0461a00}
 {x4004be00 x40f00400}
 {x441c712f x4407b53a}
 {xc004be00 xc0f00400}
 {x408b9380 x41054460}
 {x44194e48 x43feb379}
 {xc08b9400 xc1054440}
 {x4091bd80 x4037e900}
 {x44167dcc x43f53693}
 {xc091bd80 xc037ea00}
 {x40999980 xbf199a00}
 {x4412553a x43f33652}
 {xc0999980 x3f199a00}}}
 {tx 1 0}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}
 {cubiccurve Bezier1 512 bezier
 {cc
 {f 8224}
 {px 1
 {xc0a00000 xc0733300}
 {x44120000 x4406199a}
 {x40a00000 x40733300}
 {xc0666600 xc0866680}
 {x44174ccd x440b3333}
 {x40666600 x40866680}
 {xbfb33200 xc0000000}
 {x441c0ccd x4411199a}
 {x3fb33200 x40000000}
 {0 xbf4ccc00}
 {x441d0ccd x4412f333}
 {0 x3f4ccc00}
 {x3fcccc00 xbfb33400}
 {x441a8000 x44153333}
 {xbfcccc00 x3fb33400}
 {xbfe66600 xc00ccd00}
 {x441a0000 x4416a666}
 {x3fe66600 x400ccd00}
 {xbe4cd000 xc0199a00}
 {x441b4ccd x44196666}
 {x3e4cd000 x40199a00}
 {xbfb33400 xbf4ccc00}
 {x441d3333 x441b999a}
 {x3fb33400 x3f4ccc00}
 {0 xbfcccc00}
 {x441f3333 x441c199a}
 {0 x3fcccc00}
 {xc0000000 xbfe66800}
 {x441fb333 x441e6666}
 {x40000000 x3fe66800}
 {xbf199800 x3f4ccc00}
 {x4421999a x441ecccd}
 {x3f199800 xbf4ccc00}
 {xbeccc800 x3fb33200}
 {x4421d99a x441ba666}
 {x3eccc800 xbfb33200}
 {xbfcccc00 x3f199800}
 {x44230000 x441b8000}
 {x3fcccc00 xbf199800}
 {0 x40000000}
 {x4423f333 x441a3333}
 {0 xc0000000}
 {xbfb33200 x3fb33400}
 {x44248ccd x44188ccd}
 {x3fb33200 xbfb33400}
 {0 x40733300}
 {x4425d99a x4415f333}
 {0 xc0733300}
 {x40400000 x40266600}
 {x44254000 x4411e666}
 {xc0400000 xc0266600}
 {x3f4ccc00 x40400000}
 {x44232666 x440fb333}
 {xbf4ccc00 xc0400000}
 {x40599900 x40e00000}
 {x441f6666 x44064000}
 {xc0599900 xc0e00000}
 {x40b99980 x40ecccc0}
 {x441acccd x43fd3333}
 {xc0b99980 xc0ecccc0}
 {x40a00000 x40000000}
 {x44172c05 x43f4e3e7}
 {xc0a00000 xc0000000}
 {x40999980 xbf199a00}
 {x4412553a x43f33652}
 {xc0999980 x3f199a00}}}
 {tx 1 x441dc833 x4411e6ff}
 {a ro 0 go 0 bo 0 ao 0 mbo 0 mb 1 mbs x3f000000 mbsot 0 mbso 0 fo 1 fx 0 fy 0 ff 1 ft 0 osw x41200000 osf 0 str 1 pt 0 ab 1}}}}
 {edge Pin28 Pin27
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin26 Pin25
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin24 Pin23
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin22 Pin21
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin20 Pin19
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin18 Pin17
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin16 Pin15
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin14 Pin13
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin12 Pin11
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin10 Pin9
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin8 Pin7
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin6 Pin5
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin4 Pin3
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Pin2 Pin1
 {cp 0 0 0 0 0
 {{{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}
 {{{1 x3f000000}}
 {{1 x3f000000}}}}}
 {a}}
 {edge Bezier1 Bezier2
 {cp x41a80000 x41a80000 0 0 0
 {{{{1 0}}
 {{1 0}}}
 {{{1 x40e00000}}
 {{1 x40e00000}}}
 {{{1 x41600000}}
 {{1 x41600000}}}
 {{{1 x41a80000}}
 {{1 x41a80000}}}}}
 {a}}}}
 toolbar_preview_mode "persistent preview"
 name SplineWarp3_2
 selected true
 xpos 2246
}
Group {
 name UV_to_Vectors2
 help "Transforms a distorted UV Map to Motion Vectors corresponding to the distortion."
 selected true
 xpos 2246
 ypos 64
 addUserKnob {20 UV_to_Vectors}
 addUserKnob {41 in l UV_Layer t "Select the layer containing your UV_map" T UV_Channel.in}
 addUserKnob {26 copyright l "" t www.erwanleroy.com +STARTLINE T "v1.0 - Part of VectorTools by Erwan Leroy - 2016"}
}
 Input {
 inputs 0
 name Input1
 xpos -291
 ypos -63
 }
set N7c6dbc00 [stack 0]
 Shuffle {
 in motion
 name UV_Channel
 selected true
 xpos -151
 ypos -17
 }
 Expression {
 expr0 -x+r*width-0.5
 expr1 -y+g*height-0.5
 channel2 {-rgba.red -rgba.green -rgba.blue none}
 channel3 {none none none -rgba.alpha}
 name UV_to_Vectors1
 selected true
 xpos -151
 ypos 97
 }
push $N7c6dbc00
 ShuffleCopy {
 inputs 2
 in2 none
 red red
 green green
 alpha black
 out {{{parent.UV_Channel.in}}}
 name ShuffleCopy1
 selected true
 xpos -291
 ypos 97
 }
 Output {
 name Output1
 xpos -291
 ypos 167
 }
end_group
push $Na0ca7000
Dot {
 name Dot9
 selected true
 xpos 2423
 ypos -87
}
Copy {
 inputs 2
 from0 forward.u
 to0 forward.u
 from1 forward.v
 to1 forward.v
 name Copy3
 selected true
 xpos 2389
 ypos 51
}
VectorBlur {
 uv motion
 name VectorBlur1
 selected true
 xpos 2389
 ypos 135
}