effectropy

vfx and that other thing


Leave a comment

Nuke – Retouching Setups

What is retouching in vfx? A vfx producer might think of it as the entry on top of his to do list. A director might know it as a synonym for “fix it in post”. And the film audience might not even think of it at all. So, is retouching just some compositing magic to pop unwanted objects out of the frame? Well… no, I’d say.

Actually, in most cases retouching is not even about removing at all. Much rather it is the task of placing something into the picture to cover up a certain feature. Classifying retouching as a low tier vfx task is in many cases at least questionable. In fact, retouching is very unforgiving. When a 3d objects gets thrown into a scene, there is always room for discussion on how it should look like. When retouching needs to be done, there is not. If your covering patch is not integrated perfectly, expect some heavy kickbacks from left, right and centre. Since errors are easy to detect, even producers might like to show off their awesome vfx supervising skills.

For a compositor the usual dilemma with invisible effects shows. Do it right, nobody will notice. Fu** up, get f***ed up. …and good luck thinking about how to put these shots (you might have spent the most time on) into your reel and end up not doing it. right?

retouching_overview
Alright, enough sarcasm and back to nuke… At the Filmercamp 2011 I gave a workshop on retouching in nuke. I finally decided to update the material and turn it into a blog post.
Here is a list of fundamental retouching setups you can use to get your clean up work done fast. You can copy paste the setups directly into nuke:

  • 2d patch
set cut_paste_input [stack 0]
version 6.3 v1
push $cut_paste_input
RotoPaint {
cliptype none
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {selectAll {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 tt 7 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {320 240}
colorOverlay 0
lifetime_type "all frames"
lifetime_start 100
lifetime_end 100
view {}
motionblur_on true
motionblur_shutter_offset_type centred
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name patch_mask_
selected true
xpos -4048
ypos 1243
}
Input {
inputs 0
name Input1
selected true
xpos -3706
ypos 1110
number 2
}
Dot {
name Dot1
selected true
xpos -3672
ypos 1165
}
set N1ef05880 [stack 0]
Dot {
name Dot25
selected true
xpos -3880
ypos 1165
}
ShuffleCopy {
inputs 2
name ShuffleCopy6
selected true
xpos -3914
ypos 1243
}
Transform {
center {640 360}
name Transform4
selected true
xpos -3914
ypos 1267
}
Premult {
name Premult6
selected true
xpos -3914
ypos 1308
}
push $N1ef05880
Merge2 {
inputs 2
name Merge1
selected true
xpos -3706
ypos 1308
}

  • 2d patch – one point tracking
set cut_paste_input [stack 0]
version 6.3 v1
push $cut_paste_input
RotoPaint {
cliptype none
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {selectAll {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 tt 7 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {320 240}
colorOverlay 0
lifetime_type "all frames"
lifetime_start 100
lifetime_end 100
view {}
motionblur_on true
motionblur_shutter_offset_type centred
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name patch_mask_1
selected true
xpos -3146
ypos 1231
}
Input {
inputs 0
name Input2
selected true
xpos -2805
ypos 1105
number 3
}
Dot {
name Dot26
selected true
xpos -2771
ypos 1175
}
set N1efdcd70 [stack 0]
Dot {
name Dot27
selected true
xpos -2874
ypos 1175
}
set N1efdd0a0 [stack 0]
Dot {
name Dot28
selected true
xpos -2979
ypos 1175
}
FrameHold {
name FrameHold1
selected true
xpos -3013
ypos 1193
}
ShuffleCopy {
inputs 2
name ShuffleCopy7
selected true
xpos -3013
ypos 1231
}
Transform {
center {640 360}
name Transform_offset_
selected true
xpos -3013
ypos 1255
}
Transform {
translate {{parent.Tracker5.translate i} {parent.Tracker5.translate i}}
center {640 360}
name Transform_matchmoving_1
selected true
xpos -3013
ypos 1279
}
Premult {
name Premult7
selected true
xpos -3013
ypos 1318
}
push $N1efdcd70
Merge2 {
inputs 2
name Merge2
selected true
xpos -2805
ypos 1318
}
push $N1efdd0a0
Tracker3 {
track1 {576 296}
offset1 {0 0}
pattern1 {-20 -20 20 20}
search1 {-14 -14 14 14}
track2 {704 296}
offset2 {0 0}
pattern2 {-20 -20 20 20}
search2 {-14 -14 14 14}
track3 {704 424}
offset3 {0 0}
pattern3 {-20 -20 20 20}
search3 {-14 -14 14 14}
track4 {576 424}
offset4 {0 0}
pattern4 {-20 -20 20 20}
search4 {-14 -14 14 14}
center {640 360}
name Tracker5
selected true
xpos -2908
ypos 1278
}

  • 2d patch – four point tracking
set cut_paste_input [stack 0]
version 6.3 v1
CheckerBoard2 {
inputs 0
name CheckerBoard1
selected true
xpos -2178
ypos 1171
}
Transform {
center {640 360}
name Transform_offset_2
selected true
xpos -2178
ypos 1251
}
Tracker3 {
track1 {576 296}
offset1 {0 0}
pattern1 {-20 -20 20 20}
search1 {-14 -14 14 14}
track2 {704 296}
offset2 {0 0}
pattern2 {-20 -20 20 20}
search2 {-14 -14 14 14}
track3 {704 424}
offset3 {0 0}
pattern3 {-20 -20 20 20}
search3 {-14 -14 14 14}
track4 {576 424}
offset4 {0 0}
pattern4 {-20 -20 20 20}
search4 {-14 -14 14 14}
transform match-move
center {640 360}
name Tracker_matchmove_
selected true
xpos -2178
ypos 1328
}
Input {
inputs 0
name Input3
selected true
xpos -2027
ypos 1058
number 4
}
Dot {
name Dot29
selected true
xpos -1993
ypos 1185
}
Merge2 {
inputs 2
name Merge3
selected true
xpos -2027
ypos 1328
}

  • 2d patch – corner pin
set cut_paste_input [stack 0]
version 6.3 v1
CheckerBoard2 {
inputs 0
name CheckerBoard5
selected true
xpos -1826
ypos 1168
}
CornerPin2D {
to1 {{parent.Tracker_matchmove_.track1 i} {parent.Tracker_matchmove_.track1 i}}
to2 {{parent.Tracker_matchmove_.track2 i} {parent.Tracker_matchmove_.track2 i}}
to3 {{parent.Tracker_matchmove_.track3 i} {parent.Tracker_matchmove_.track3 i}}
to4 {{parent.Tracker_matchmove_.track4 i} {parent.Tracker_matchmove_.track4 i}}
invert false
from1 {0 0}
from2 {1280 0}
from3 {1280 720}
from4 {0 720}
name CornerPin2D3
selected true
xpos -1826
ypos 1327
}
Input {
inputs 0
name Input4
selected true
xpos -1716
ypos 1061
number 5
}
Merge2 {
inputs 2
name Merge13
selected true
xpos -1716
ypos 1327
}
push $cut_paste_input
Tracker3 {
track1 {576 296}
offset1 {0 0}
pattern1 {-20 -20 20 20}
search1 {-14 -14 14 14}
track2 {704 296}
offset2 {0 0}
pattern2 {-20 -20 20 20}
search2 {-14 -14 14 14}
track3 {704 424}
offset3 {0 0}
pattern3 {-20 -20 20 20}
search3 {-14 -14 14 14}
track4 {576 424}
offset4 {0 0}
pattern4 {-20 -20 20 20}
search4 {-14 -14 14 14}
transform match-move
center {640 360}
name Tracker_matchmove_
selected true
xpos -2178
ypos 1328
}

  • 2d patch – blur feature
set cut_paste_input [stack 0]
version 6.3 v1
push $cut_paste_input
RotoPaint {
cliptype none
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {selectAll {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 tt 7 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {320 240}
colorOverlay 0
lifetime_type "all frames"
lifetime_start 100
lifetime_end 100
view {}
motionblur_on true
motionblur_shutter_offset_type centred
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name patch_mask_2
selected true
xpos -1438
ypos 1238
}
Blur {
name Blur1
selected true
xpos -1438
ypos 1262
}
Tracker3 {
track1 {576 296}
offset1 {0 0}
pattern1 {-20 -20 20 20}
search1 {-14 -14 14 14}
track2 {704 296}
offset2 {0 0}
pattern2 {-20 -20 20 20}
search2 {-14 -14 14 14}
track3 {704 424}
offset3 {0 0}
pattern3 {-20 -20 20 20}
search3 {-14 -14 14 14}
track4 {576 424}
offset4 {0 0}
pattern4 {-20 -20 20 20}
search4 {-14 -14 14 14}
transform match-move
center {640 360}
name Tracker_matchmove_1
selected true
xpos -1438
ypos 1322
}
Input {
inputs 0
name Input5
selected true
xpos -1287
ypos 1053
number 6
}
Blur {
inputs 1+1
name Blur7
selected true
xpos -1287
ypos 1316
}

  • 2d track stabilizing – paint over
set cut_paste_input [stack 0]
version 6.3 v1
Input {
inputs 0
name Input6
selected true
xpos -365
ypos 1059
number 7
}
Dot {
name Dot30
selected true
xpos -331
ypos 1140
}
set N22322320 [stack 0]
Tracker3 {
track1 {576 296}
offset1 {0 0}
pattern1 {-20 -20 20 20}
search1 {-14 -14 14 14}
track2 {704 296}
offset2 {0 0}
pattern2 {-20 -20 20 20}
search2 {-14 -14 14 14}
track3 {704 424}
offset3 {0 0}
pattern3 {-20 -20 20 20}
search3 {-14 -14 14 14}
track4 {576 424}
offset4 {0 0}
pattern4 {-20 -20 20 20}
search4 {-14 -14 14 14}
transform stabilize
center {640 360}
name Tracker_stabilizeFootage_
selected true
xpos -539
ypos 1137
}
RotoPaint {
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {brush {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 }
{ brush r 0.137833 g 0.14312 b 0.131449 ssx 1 ssy 1 sf 1 sb 1 ltn 157 ltm 157 ltt 0 tt 14 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_paint_color {0.1378329992 0.1431200057 0.131448999 1}
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_lifetime_start 157
toolbar_lifetime_end 157
toolbar_source_transform_scale {1 1}
color {0.08667500317 0.09000000358 0.08266030252 1}
lifetime_type "all frames"
lifetime_start 157
lifetime_end 157
view {}
motionblur_on true
brush_spacing 0.05000000075
brush_hardness 0.200000003
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name RotoPaint_on_stabilized_footage1
selected true
xpos -539
ypos 1240
}
Tracker3 {
track1 {576 296}
offset1 {0 0}
pattern1 {-20 -20 20 20}
search1 {-14 -14 14 14}
track2 {704 296}
offset2 {0 0}
pattern2 {-20 -20 20 20}
search2 {-14 -14 14 14}
track3 {704 424}
offset3 {0 0}
pattern3 {-20 -20 20 20}
search3 {-14 -14 14 14}
track4 {576 424}
offset4 {0 0}
pattern4 {-20 -20 20 20}
search4 {-14 -14 14 14}
transform match-move
center {640 360}
name copy_of_Tracker_stabilizeFootage_set_to_matchmove_
selected true
xpos -539
ypos 1322
}
push $N22322320
Merge2 {
inputs 2
name Merge14
selected true
xpos -365
ypos 1322
}
push $cut_paste_input
Transform {
translate {{Tracker_stabilizeFootage_.translate i} {Tracker_stabilizeFootage_.translate i}}
rotate {{Tracker_stabilizeFootage_.rotate i}}
scale {{1+(1-parent.Tracker_stabilizeFootage_.scale) i}}
center {640 360}
name Transform_reMM_
label "centre set to value of tracker ref frame\n"
selected true
xpos -667
ypos 1289
}

  • 2d patch – planar track
set cut_paste_input [stack 0]
version 6.3 v1
Input {
inputs 0
name Input7
selected true
xpos 380
ypos 1069
number 8
}
Dot {
name Dot31
selected true
xpos 414
ypos 1139
}
set N22323640 [stack 0]
Dot {
name Dot32
selected true
xpos 146
ypos 1139
}
Roto {
output {rgba.alpha none none mask_planartrack.a}
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 512
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 1
Node: {
NodeName: "PlanarTrackLayer1" {
Flag: 64
NodeType: 1
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 2
}
NumOfChildren: 0
}
}
}
}
toolbox {createBezier {
{ createBezier ssx 1 ssy 1 sf 1 sb 1 tt 4 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {640 360}
view {}
motionblur_on true
trackLayerUUID 2
createNewTrack {{2} "-1\t(none)\t-1" "2\tPlanarTrackLayer1\t2" "1000\tNew Track Layer\t1000"}
name Roto3
selected true
xpos 112
ypos 1242
}
PlanarTracker1_0 {
serializeKnob "22 serialization::archive 5 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0"
createPinOptions "CornerPin2D (absolute)"
ignoreMaskId 2
rotoTrackLayer Roto3.2.PlanarTrackLayer1
name PlanarTracker3
label PlanarTrackLayer1
selected true
xpos 112
ypos 1314
}
CheckerBoard2 {
inputs 0
name CheckerBoard6
selected true
xpos 232
ypos 1218
}
CornerPin2D {
to1 {{PlanarTracker3.outputBottomLeft.x} {PlanarTracker3.outputBottomLeft.y}}
to2 {{PlanarTracker3.outputBottomRight.x} {PlanarTracker3.outputBottomRight.y}}
to3 {{PlanarTracker3.outputTopRight.x} {PlanarTracker3.outputTopRight.y}}
to4 {{PlanarTracker3.outputTopLeft.x} {PlanarTracker3.outputTopLeft.y}}
invert false
from1 {0 0}
from2 {1280 0}
from3 {1280 720}
from4 {0 720}
name CornerPin2D5
label absolute
selected true
xpos 232
ypos 1315
}
push $N22323640
Merge2 {
inputs 2
name Merge15
selected true
xpos 380
ypos 1321
}

  • 3d patch – textured card
set cut_paste_input [stack 0]
version 6.3 v1
StickyNote {
inputs 0
name StickyNote28
label "render with moving \nmm camera"
selected true
xpos 1348
ypos 1479
}
push $cut_paste_input
Camera2 {
name animated_mm_CameraX_
selected true
xpos 1149
ypos 1485
}
set N212d3aa0 [stack 0]
RotoPaint {
inputs 0
cliptype none
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {selectAll {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 tt 7 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {320 240}
colorOverlay 0
lifetime_type "all frames"
lifetime_start 100
lifetime_end 100
view {}
motionblur_on true
motionblur_shutter_offset_type centred
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name patch_mask_3
selected true
xpos 1122
ypos 1248
}
Blur {
name Blur8
selected true
xpos 1122
ypos 1272
}
Input {
inputs 0
name Input8
selected true
xpos 1440
ypos 1099
number 9
}
Dot {
name Dot33
selected true
xpos 1474
ypos 1164
}
set N2288f2a0 [stack 0]
Dot {
name Dot34
selected true
xpos 1295
ypos 1164
}
FrameHold {
name FrameHold_Frame_Z_
selected true
xpos 1261
ypos 1202
}
ShuffleCopy {
inputs 2
name ShuffleCopy8
selected true
xpos 1261
ypos 1278
}
Transform {
center {640 360}
name Transform_offset_3
selected true
xpos 1261
ypos 1312
}
Card2 {
control_points {3 3 3 6

1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0}
1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0}
1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0}
1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0}
1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0}
1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0}
1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0}
1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0}
1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} }
name Card3
selected true
xpos 1261
ypos 1354
}
push $N212d3aa0
Scene {
inputs 2
name Scene1
selected true
xpos 1271
ypos 1395
}
push 0
ScanlineRender {
inputs 3
output_motion_vectors_type accurate
name ScanlineRender1
selected true
xpos 1261
ypos 1506
}
Premult {
name Premult8
selected true
xpos 1261
ypos 1530
}
push $N2288f2a0
Merge2 {
inputs 2
name Merge16
selected true
xpos 1440
ypos 1530
}

  • 3d patch – project on matchmove geometry
set cut_paste_input [stack 0]
version 6.3 v1
push $cut_paste_input
Camera2 {
name animated_mm_CameraX_1
selected true
xpos 1926
ypos 1475
}
set N223b8b80 [stack 0]
Camera2 {
inputs 0
name mm_CameraX_frozen_on_frame_Z
selected true
xpos 1924
ypos 1309
}
RotoPaint {
inputs 0
cliptype none
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {selectAll {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 tt 7 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {320 240}
colorOverlay 0
lifetime_type "all frames"
lifetime_start 100
lifetime_end 100
view {}
motionblur_on true
motionblur_shutter_offset_type centred
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name patch_mask_4
selected true
xpos 1939
ypos 1228
}
Blur {
name Blur9
selected true
xpos 1939
ypos 1252
}
Input {
inputs 0
name Input9
selected true
xpos 2338
ypos 1077
number 10
}
Dot {
name Dot35
selected true
xpos 2372
ypos 1136
}
set N21b18360 [stack 0]
Dot {
name Dot36
selected true
xpos 2083
ypos 1136
}
FrameHold {
name FrameHold_Frame_Z_1
selected true
xpos 2049
ypos 1159
}
RotoPaint {
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {clone {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone ro 0 go 0 bo 0 ao 0 bs 98.5 src 1 stx -485.5 sty 34 ssx 1 ssy 1 sf 1 sb 1 ltn 151 ltm 151 ltt 0 tt 16 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_size 98.5
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_lifetime_start 151
toolbar_lifetime_end 151
toolbar_paint_source fg
toolbar_source_transform_translate {-485.5 34}
toolbar_source_transform_scale {1 1}
colorOverlay 0
paint_source foreground
lifetime_type "all frames"
lifetime_start 151
lifetime_end 151
view {}
motionblur_on true
brush_size 98.5
brush_spacing 0.05000000075
brush_hardness 0.200000003
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name PaintOut_Unwanted_object_1
selected true
xpos 2049
ypos 1195
}
ShuffleCopy {
inputs 2
name ShuffleCopy9
selected true
xpos 2049
ypos 1258
}
Project3D {
inputs 2
name Project3D4
selected true
xpos 2049
ypos 1330
}
Card2 {
translate {-0.6780407429 0.07299287617 -0.8900554776}
rotate {5.89504111 -14.13582439 -0.1332708645}
uniform_scale 1.75
control_points {3 3 3 6

1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0}
1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0}
1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0}
1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0}
1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0}
1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0}
1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0}
1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0}
1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} }
name matchmove_geometry_3
selected true
xpos 2049
ypos 1366
}
push $N223b8b80
Scene {
inputs 2
name Scene6
selected true
xpos 2059
ypos 1390
}
push 0
ScanlineRender {
inputs 3
output_motion_vectors_type accurate
name ScanlineRender6
selected true
xpos 2049
ypos 1496
}
Premult {
name Premult9
selected true
xpos 2049
ypos 1520
}
push $N21b18360
Merge2 {
inputs 2
name Merge17
selected true
xpos 2338
ypos 1520
}
StickyNote {
inputs 0
name StickyNote25
label "project with frozen\nmm camera"
selected true
xpos 2153
ypos 1322
}
StickyNote {
inputs 0
name StickyNote27
label "render with moving \nmm camera"
selected true
xpos 2152
ypos 1484
}

  • 3d stabilized projection
set cut_paste_input [stack 0]
version 6.3 v1
push $cut_paste_input
Camera2 {
name animated_mm_CameraX_2
selected true
xpos 2955
ypos 1220
}
set N223b9b70 [stack 0]
Dot {
name Dot37
selected true
xpos 2979
ypos 1785
}
set N21b1a9a0 [stack 0]
Dot {
name Dot38
selected true
xpos 2979
ypos 1870
}
Camera2 {
inputs 0
name mm_CameraX_frozen_on_frame_Z_1
selected true
xpos 2875
ypos 1360
}
set N212d2de0 [stack 0]
Dot {
name Dot39
selected true
xpos 2899
ypos 1469
}
set N218ab370 [stack 0]
Dot {
name Dot40
selected true
xpos 2899
ypos 1645
}
RotoPaint {
inputs 0
cliptype none
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {selectAll {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 tt 7 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {320 240}
colorOverlay 0
lifetime_type "all frames"
lifetime_start 100
lifetime_end 100
view {}
motionblur_on true
motionblur_shutter_offset_type centred
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name patch_mask_6
selected true
xpos 2998
ypos 1561
}
Blur {
name Blur10
selected true
xpos 2998
ypos 1585
}
push $N218ab370
push $N223b9b70
Input {
inputs 0
name Input10
selected true
xpos 3336
ypos 1079
number 11
}
Dot {
name Dot41
selected true
xpos 3370
ypos 1128
}
set N218ac030 [stack 0]
Dot {
name Dot42
selected true
xpos 3142
ypos 1128
}
Project3D {
inputs 2
crop false
name Project3D5
selected true
xpos 3108
ypos 1241
}
Card2 {
translate {-0.6780407429 0.07299287617 -0.8900554776}
rotate {5.89504111 -14.13582439 -0.1332708645}
uniform_scale 100
control_points {3 3 3 6

1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0}
1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0}
1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0}
1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0}
1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0}
1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0}
1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0}
1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0}
1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} }
name matchmove_geometry_4
selected true
xpos 3108
ypos 1305
}
push $N212d2de0
Scene {
inputs 2
name Scene7
selected true
xpos 3118
ypos 1360
}
push 0
ScanlineRender {
inputs 3
overscan 2300
output_motion_vectors_type accurate
name ScanlineRender7
selected true
xpos 3108
ypos 1466
}
RotoPaint {
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 576
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 640 S 0 360
NumOfAttributes: 11
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "pt" S 0 0
}
NumOfChildren: 0
}
}
}
toolbox {brush {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 }
{ brush r 0.155106 g 0.162127 b 0.14713 ssx 1 ssy 1 sf 1 sb 1 ltn 128 ltm 128 ltt 0 tt 14 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_autokey false
toolbar_paint_color {0.1551059932 0.1621270031 0.1471299976 1}
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_lifetime_start 128
toolbar_lifetime_end 128
toolbar_source_transform_scale {1 1}
color {0.1551059932 0.1621270031 0.1471299976 1}
lifetime_type "all frames"
lifetime_start 128
lifetime_end 128
view {}
motionblur_on true
brush_spacing 0.05000000075
brush_hardness 0.200000003
source_black_outside true
createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
name RotoPaint_over_stabilized_footage_1
selected true
xpos 3108
ypos 1526
}
ShuffleCopy {
inputs 2
name ShuffleCopy10
selected true
xpos 3108
ypos 1591
}
Project3D {
inputs 2
crop false
name Project3D6
selected true
xpos 3108
ypos 1642
}
Card2 {
translate {-0.6780407429 0.07299287617 -0.8900554776}
rotate {5.89504111 -14.13582439 -0.1332708645}
uniform_scale 100
control_points {3 3 3 6

1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0}
1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0}
1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0}
1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0}
1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0}
1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0}
1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0}
1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0}
1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} }
name matchmove_geometry_5
selected true
xpos 3108
ypos 1706
}
push $N21b1a9a0
Scene {
inputs 2
name Scene8
selected true
xpos 3118
ypos 1761
}
push 0
ScanlineRender {
inputs 3
output_motion_vectors_type accurate
name ScanlineRender8
selected true
xpos 3108
ypos 1867
}
Premult {
name Premult10
selected true
xpos 3108
ypos 1891
}
push $N218ac030
Merge2 {
inputs 2
name Merge18
selected true
xpos 3336
ypos 1891
}
StickyNote {
inputs 0
name StickyNote22
label "project with frozen\nmm camera"
selected true
xpos 3202
ypos 1635
}
StickyNote {
inputs 0
name StickyNote23
label "mm geomertry\ninstead of card"
selected true
xpos 3215
ypos 1298
}
StickyNote {
inputs 0
name StickyNote24
label "project with moving \nmm camera"
selected true
xpos 3202
ypos 1235
}
StickyNote {
inputs 0
name StickyNote26
label "render with moving \nmm camera"
selected true
xpos 3195
ypos 1857
}
StickyNote {
inputs 0
name StickyNote29
label "render with frozen\nmm camera"
selected true
xpos 3206
ypos 1457
}

 

These techniques can not only be uses for retouching, but for all kinds of tracking an element into the picture tasks.
There are certain technical issues you should always keep in mind, when utilizing patches. I didn’t include those in the copy & paste setups, because they depend on the specific shot too much.

Here is a scheme, that a typical patch for retouching should follow:

retouching_diagram_v002

 

colour correction
Match the colours of the BG. Animate cc (with masks) in case of moving reflections/ changes in lighting/ moving shadows.

grain and regrain
Always regrain translated, resized, resampled or frozen in time patches. Regrain just before putting the patch over the BG. Avoid grain falloff on soft edges of the patch.

lens distortion
Work with the undistorted plate to create your patch. Redistort before putting it over the original BG.

chromatic aberration & lens vignetting
Match the chroma shift and darkening of the lens, considering the radial increase towards the edges of the frame.

motion blur
Match the motion of objects and the camera movement. With extremely shaky shots consider using rolling footage patches (not frozen in time, no time shift) to get the camera motion blur for free.

limits of perspective changes
Before starting your retouching, take a look on how much the perspective changes. In case the perspective shift becomes too extreme (limit maybe ~ 10° – 35°), a frozen in time patch will fall apart due to resampling, resolution and distortion issues. Possible solutions: blend several patches, create (hi-res) texture and use proxy geo

check frame edges
When a patch reaches the edge of the frame, problems like black outlines often occur. Possible causes: patch uses out of frame footage, resizing, redistortion, cropped masks, cropped projections, cropped scannlineRenderer images, projection geometry is too small

cropping
Keep your script fast. Make sure, that out of frame patches don’t extend nukes calculation area to an unhealthy size.

 

Example Project
Let’s say you are working on a science fiction movie. The director asks you to make some changes to a shot. He thinks an outdated system of measurement should not exist on a modern space ship. I put the scripts from above into action and made some modifications to this footage of the ISS.

retouching_example_fin_0151

The download contains a jpeg sequence and a nuke script with examples for all mentioned retouching techniques.


Leave a comment

Nuke Script – Multy Knob Changer

Oftentimes the sheer quantity of nodes in a Nuke script explodes more violently than New York City in your favourite Hollywood blockbuster. So it’s never a bad idea to have the right script at hand, to help you deal with ground zero (or hopefully a lovely organized script).

The Multy Knob Changer is a simple script, that lets you change several same knobs in a selection of nodes.

how to use:

Let’s say you want to set the ‘size’ knob of all blur nodes in the script to ’42’.

  • copy paste the script code into your nuke script editor and run it
  • enter the node class name, knob name and select the knob type (e.g. text field, drop down menu, check box)
  • check ‘only selected nodes’, if you don’t want to set the knob values for all nodes in the script
  • hit the start button

MKC_UI_01

  • enter your new value, press ok. Et voilà, all your blur nodes were updated.

MKC_UI_02

Get the script here.

If you want to add the script to your nuke menu and toolbar, place the multyKnobChanger.py in your .nuke folder and add the following lines to your menu.py. Don’t forget to comment out the last line (‘mainFunction()’) in the script.
For more details on custom menues check out this Nukepedia article.

import multyKnobChanger
effectropyTools = nuke.menu('Nodes').addMenu('effectropyTools')
effectropyTools.addCommand('multyKnobChanger', 'multyKnobChanger.mainFunction()')

menuBar = nuke.menu('Nuke')
menuBar.addCommand('Edit/multyKnobChanger', 'multyKnobChanger.mainFunction()')


Leave a comment

how to photograph lightning – easy mode

It is summer. It is hot. It is thunderstorm season! Time to grab the camera and hunt some lightning! Here is an easy method, how to capture lightning during nighttime without using any fancy equipment. All you need is a camera with bulb exposure mode, some patience and of course your favourite thunderstorm.blitze_000The problem with capturing lightning is, that you never know when and where it will appear. When you see the flash it is already too late to pull the trigger (That is, unless your name is Lucky Luke). The idea of the technique described here, is to capture a large area of the sky almost constantly, to not miss a single thunderbolt.

Camera settings
lens: the widest angle you can find (the settings I used with the Nikon D 90 in () | 18 mm lens)
ISO: lowest setting possible (~ ISO 100)
aperture: close your shutter depending on how much environmental light you want to capture (4.0 – 8.0)
focus: set to manual, infinite focus distance or focused on foreground object (almost infinite)
white balance: depending on your environmental light (auto WB)
quality: raw format is strongly recommended. The lightning will almost certainly produce clipped color values. The two or three stops of extra dynamic range might save your ass in a few shots. (fine jpg + raw)
shutter speed: bulb – expose as long as you pull the shutter (bulb)

blitze_003

getting the shot. First decide on what your foreground motive shall be. I took these pictures from the balcony on the first floor. Since the most exciting objects around are some rooftops and trees (boooring…), I chose to have as little sharp foreground elements as possible. Much rather I wanted to create some spooky effects.
Next get yourself a drink and turn up your music good! I recommend a melodramatic soundtrack, worthy of underlaying the raw powers of nature. In either case don’t forget to tell your neighbour to complain to their favourite god, for having the nerve of being thundering loud at night.
Allright. Camera is set. Mood is set. Time to get some shots! Point the camera towards the horizon. (A wild Mr. Obvious appears and mentions: “It is more likely for a lightning to appear in the distance than directly above you. And if it did, you would be toast anyway. Ha ha h…” nobody laughs as Mr. O. disappears in the dark corner of shame.) Start exposing and move the camera around freely, scanning the sky. If there are no light sources in your near environment, everything will become motion blurred. The foreground objects will only show through the light of the flash. Release the trigger shortly after you have seen a thunderbolt or if the exposure time gets too long.

blitze_001

exposure. In this shot (~ 10 sec exposure) you can see the lightning having a little fight with our neighbours garden lamp. Choose a darker location, if you don’t want the city lights to take over the show.
Test how long you can expose, without having the picture lit up too much by the ambient light. You can close the shutter even more or go for shorter exposure times to allow the pictures to be darker. I ended up using aperture 8.0 and about 10 seconds exposure time.

blitze_002

keep shooting. The movement of the camera and several lightnings in a row produce some creepy multiple exposure effects. You will notice that the longer you expose, the longer it will take your camera to process the picture. This means waiting time, before you can get the next shot. Most likely the coolest lightning will appear shortly after releasing the trigger. If you don’t belive in Murphy’s law, try this, and let natures striking random generator teach you a facepalming lesson.
However there is a trick to avoid long processing times. Directly after an uneventful exposure switch the camera off an on a again (sounds familiar?). You are back in the game in only half a second. This makes it possible to expose almost constantly and miss no nothing.

blitze_004

side effects. The long time exposure on an almost black photo, will as well reveal some unpleasant sides of your camera. Check out the constant noise the sensor produces. You might find some hot pixels as well. By turning the camera off, during image processing the hot pixels seem to show up even more. Here is my theory (prove my wrong!). The automatic hot pixel correction, seems to be one of the last steps of image processing. Shutting the camera down aborts the process. The correction is not run and the file gets written as seen by the sensor. The picture above is a 100 % crop showing the effect.

blitze_006

statistics. To conclude this, here is some data of my successful (? what do you think?) shoot.

shooting time: 1 h
pictures taken: 81
lightnings captured: 22
totally burned out shots: 5
times water on lense: 2
beer: 1

blitze_008

Let me know, if you give it a try. I would love to see some of your results!
…and what is your thunderstorm soundtrack?

image license  Creative Commons Lizenzvertrag


Leave a comment

Nuke copy pasta #001 : custom light wrap

Nuke is the compositing software we all use and love. The nuke copy pasta series is a collection of useful, every day setups. Copy, paste, have fun! Let’s start with a simple light wrap.

teapot_lw_compare

Nuke has a built in light wrap tool, which is quick and easy to use. However sometimes it is more convenient to built an own light wrap, giving a lot more flexibility.

Here is a basic setup:
custom_light_wrap_script

You can copy paste the code below, or download the nuke script (images included).

set cut_paste_input [stack 0]
version 6.3 v1
BackdropNode {
inputs 0
name BackdropNode1
label "light wrap"
note_font_size 33
selected true
xpos -1035
ypos -381
bdwidth 322
bdheight 484
}
push 0
NoOp {
label "FG\nwith alpha"
selected true
xpos -1139
ypos 32
}
Dot {
name Dot2
selected true
xpos -1009
ypos 41
}
set N5f520c0 [stack 0]
Dot {
name Dot12
selected true
xpos -1009
ypos 124
}
set N21fe6df0 [stack 0]
EdgeDetectWrapper {
channels alpha
erodesize 1
name EdgeDetectWrapper3
selected true
xpos -1043
ypos 194
}
push $N21fe6df0
Dot {
name Dot6
selected true
xpos -674
ypos 124
}
RotoPaint {
inputs 0
curves {AnimTree: "" {
Version: 1.2
Flag: 0
RootNode: 1
Node: {
NodeName: "Root" {
Flag: 512
NodeType: 1
Transform: 0 0 S 0 0 S 0 0 S 0 0 S 0 1 S 0 1 S 0 0 S 0 1024 S 0 778
NumOfAttributes: 10
"vis" S 0 1 "opc" S 0 1 "mbo" S 0 1 "mb" S 0 1 "mbs" S 0 0.5 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0
}
NumOfChildren: 1
Node: {
NodeName: "Rectangle1" {
Flag: 576
NodeType: 3
CurveGroup: "" {
Transform: 0 0 S 1 1 0 S 1 1 0 S 1 1 0 S 1 1 1 S 1 1 1 S 1 1 0 S 1 1 1094 S 1 1 349.5
Flag: 0
NumOfCubicCurves: 2
CubicCurve: "" {
Type: 0 Flag: 8192 Dim: 2
NumOfPoints: 12
1 S 1 1 0 S 1 1 -296.333 0 1 S 1 1 670 S 1 1 796.4 0 1 S 1 1 290.667 S 1 1 0 0 1 S 1 1 -290.667 S 1 1 0 0 1 S 1 1 1530 S 1 1 794 0 1 S 1 1 0 S 1 1 -296.333 0 1 S 1 1 0 S 1 1 296.333 0 1 S 1 1 1530 S 1 1 -95 0 1 S 1 1 -290.667 S 1 1 0 0 1 S 1 1 290.667 S 1 1 0 0 1 S 1 1 670 S 1 1 -92.6 0 1 S 1 1 0 S 1 1 296.333 0
}
CubicCurve: "" {
Type: 0 Flag: 8192 Dim: 2
NumOfPoints: 12
1 S 1 1 0 S 1 1 -296.333 0 1 S 1 1 0 S 1 1 0 0 1 S 1 1 290.667 S 1 1 0 0 1 S 1 1 -290.667 S 1 1 0 0 1 S 1 1 0 S 1 1 0 0 1 S 1 1 0 S 1 1 -296.333 0 1 S 1 1 0 S 1 1 296.333 0 1 S 1 1 0 S 1 1 0 0 1 S 1 1 -290.667 S 1 1 0 0 1 S 1 1 290.667 S 1 1 0 0 1 S 1 1 0 S 1 1 0 0 1 S 1 1 0 S 1 1 296.333 0
}
NumOfAttributes: 43
"vis" S 0 1 "r" S 0 1 "g" S 0 1 "b" S 0 1 "a" S 0 1 "ro" S 0 0 "go" S 0 0 "bo" S 0 0 "ao" S 0 0 "opc" S 0 1 "bm" S 0 0 "inv" S 0 0 "mbo" S 0 0 "mb" S 0 1 "mbs" S 0 0.5 "mbsot" S 0 0 "mbso" S 0 0 "fo" S 0 1 "fx" S 0 0 "fy" S 0 0 "ff" S 0 1 "ft" S 0 0 "src" S 0 0 "stx" S 0 0 "sty" S 0 0 "str" S 0 0 "sr" S 0 0 "ssx" S 0 1 "ssy" S 0 1 "ss" S 0 0 "spx" S 0 1024 "spy" S 0 778 "stot" S 0 0 "sto" S 0 0 "sv" S 0 0 "sf" S 0 1 "sb" S 0 1 "nv" S 0 1 "view1" S 0 1 "ltn" S 0 1 "ltm" S 0 1 "ltt" S 0 0 "tt" S 0 7
}
}
NumOfChildren: 0
}
}
}
}
toolbox {selectAll {
{ selectAll ssx 1 ssy 1 sf 1 }
{ createBezier ssx 1 ssy 1 sf 1 sb 1 tt 4 }
{ createBSpline ssx 1 ssy 1 sf 1 sb 1 }
{ createEllipse ssx 1 ssy 1 sf 1 sb 1 }
{ createRectangle ssx 1 ssy 1 sf 1 sb 1 tt 7 }
{ brush ssx 1 ssy 1 sf 1 sb 1 }
{ eraser src 2 ssx 1 ssy 1 sf 1 sb 1 }
{ clone src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ reveal src 3 ssx 1 ssy 1 sf 1 sb 1 }
{ dodge src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ burn src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ blur src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ sharpen src 1 ssx 1 ssy 1 sf 1 sb 1 }
{ smear src 1 ssx 1 ssy 1 sf 1 sb 1 }
} }
toolbar_brush_hardness 0.200000003
toolbar_lifetime_type all
toolbar_source_transform_scale {1 1}
toolbar_source_transform_center {320 240}
colorOverlay 0
lifetime_type "all frames"
motionblur_shutter_offset_type centred
source_black_outside true
name RotoPaint1
selected true
xpos -975
ypos -22
}
push $N5f520c0
Dot {
name Dot5
selected true
xpos -1009
ypos -114
}
set N5f523f0 [stack 0]
Keyer {
invert true
operation "luminance key"
range {0.01773313805 0.08494734981 1 1}
name Keyer1
selected true
xpos -975
ypos -124
}
Blur {
size 4.8
name Blur6
selected true
xpos -975
ypos -88
}
push $N5f523f0
Dot {
name Dot7
selected true
xpos -1009
ypos -226
}
set N5f52a50 [stack 0]
EdgeDetectWrapper {
channels alpha
erodesize 1.2
name EdgeDetectWrapper2
selected true
xpos -968
ypos -235
}
Blur {
size 8
name Blur3
selected true
xpos -968
ypos -198
}
Dot {
name Dot8
label "\n\nfine lw matte"
selected true
xpos -934
ypos -156
}
push $N5f52a50
Dot {
name Dot3
selected true
xpos -1009
ypos -302
}
EdgeDetectWrapper {
channels {-rgba.red -rgba.green -rgba.blue rgba.alpha}
erodesize -3
name EdgeDetectWrapper1
selected true
xpos -865
ypos -311
}
Blur {
size 16.4
name Blur2
selected true
xpos -865
ypos -273
}
Dot {
name Dot4
label "big lw matte"
selected true
xpos -831
ypos -233
}
Merge2 {
inputs 2
operation plus
mix 0.725
name Merge4
selected true
xpos -865
ypos -159
}
Grade {
inputs 1+1
channels alpha
white 0.63
name Grade1
selected true
xpos -865
ypos -88
}
set N16306f00 [stack 0]
Merge2 {
inputs 2
operation stencil
name Merge3
selected true
xpos -865
ypos -22
disable true
}
set N16307230 [stack 0]
push $cut_paste_input
NoOp {
label "BG\n"
selected true
xpos -514
ypos -317
}
Dot {
name Dot1
selected true
xpos -480
ypos -41
}
set N16307890 [stack 0]
Blur {
size 36.5
name Blur1
selected true
xpos -621
ypos -50
}
Dot {
name Dot11
label "blurred bg"
selected true
xpos -587
ypos -14
}
push $N5f520c0
Merge2 {
inputs 2+1
operation plus
mix 0.57
name Merge2
selected true
xpos -865
ypos 37
}
set N16307ef0 [stack 0]
ShuffleCopy {
inputs 2
name ShuffleCopy1
selected true
xpos -708
ypos 37
}
Premult {
name Premult2
selected true
xpos -611
ypos 37
}
push $N16307890
Merge2 {
inputs 2
name Merge1
selected true
xpos -514
ypos 37
}
set N16308ee0 [stack 0]
Blur {
inputs 1+1
size 2
mix 0.625
name Blur4
selected true
xpos -514
ypos 194
}
Dot {
name Dot13
label "slight edge blur\n(be careful with grain)"
selected true
xpos -415
ypos 203
}
push $N16308ee0
Dot {
name Dot14
label "fg over bg"
selected true
xpos -404
ypos 40
}
push $N16307ef0
Dot {
name Dot15
label "plus edge blur\nover fg"
selected true
xpos -831
ypos 76
}
push $N16307230
Dot {
name Dot10
label "mask out area"
selected true
xpos -762
ypos -19
}
push $N16306f00
Dot {
name Dot9
label "reduce lw in dark areas"
selected true
xpos -762
ypos -79
}


1 Comment

effectropy – let’s go!

Hello everybody and welcome to effectropy!

My new blog is finally online. So stay a while and listen, some cool content is about to come up here, soon! I will try to keep everything up to date and release new articles regularly (at least somewhat)!

What to expect? I’m currently working as a freelance compositor, so the main focus of this blog is going to be vfx. Projects, ideas, comments on the industry and technical stuff,… if it strikes me, I’ll let you know.
As a citizen of “Neuland” I am interested in web culture and like to share my thoughts with you. Even though the noise (ger: das Rauschen) of nonsense in the web is loud, some patterns might be found and explained. Denn der zunehmenden Fazialpalmierung muss Einhalt geboten werden!
If I should ever geek out too much, please let me know ;-)
At times I like to exchange my wacom pen with a camera and shoot whatever the lens is willing to capture. Which is (to be honest) light, straight from the sun, through the lens, onto the chip, through the web, to your monitor, into your eye, for your pleasure to watch.

As you might have noticed I tend to get over excited with the use of language. I think cultural references and a pinch of sarcasm doesn’t make a blog post uninteresting, so please take it with a pinch of salt. Some articles might be published in german as well (or even in denglish, which has proven as a formidable way of expression). I think language is purely about meaning. It doesn’t matter how something is expressed, as long as the meaning gets carried.

Some features of the blog are still under construction, but I am keen to get some content online first.

In this first post I tried to make sure not to scratch the limits of your attention span. So there might be a moment left to leave me a comment or even spread the word.
Tell me what you think and stay tuned!

Cheers,
Tobi

Follow

Get every new post delivered to your Inbox.