Advertisement
jedypod

CornerPinOffset

Sep 16th, 2012
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.53 KB | None | 0 0
  1. Group {
  2. name CornerPinOffset2
  3. tile_color 0xaa55ffff
  4. addUserKnob {20 PinControl}
  5. addUserKnob {26 CornerPinControls l "" +STARTLINE T "<font size=5><b>Corner Pin Data</b></font>"}
  6. addUserKnob {20 CornerPinData l "" +STARTLINE n 1}
  7. addUserKnob {41 to1 T cpMaster.to1}
  8. addUserKnob {41 enable1 -STARTLINE T cpMaster.enable1}
  9. addUserKnob {41 to2 T cpMaster.to2}
  10. addUserKnob {41 enable2 -STARTLINE T cpMaster.enable2}
  11. addUserKnob {41 to3 T cpMaster.to3}
  12. addUserKnob {41 enable3 -STARTLINE T cpMaster.enable3}
  13. addUserKnob {41 to4 T cpMaster.to4}
  14. addUserKnob {41 enable4 -STARTLINE T cpMaster.enable4}
  15. addUserKnob {20 endGroup_1 l endGroup n -1}
  16. addUserKnob {41 invert T cpOutput.invert}
  17. addUserKnob {41 filter T cpOutput.filter}
  18. addUserKnob {41 black_outside l "black outside" T cpOutput.black_outside}
  19. addUserKnob {41 motionblur T cpOutput.motionblur}
  20. addUserKnob {41 shutter T cpOutput.shutter}
  21. addUserKnob {41 shutteroffset l "shutter offset" T cpOutput.shutteroffset}
  22. addUserKnob {41 shuttercustomoffset l "" -STARTLINE T cpOutput.shuttercustomoffset}
  23. addUserKnob {26 ""}
  24. addUserKnob {26 OffsetControls l "" +STARTLINE T "<font size=5><b>Offset Controls</b></font>"}
  25. addUserKnob {41 offsetto1 l "offset to1" T offset1.translate}
  26. addUserKnob {22 control1 t "Show the transform jack by opening the control panel of the grouped transform node" -STARTLINE T "nuke.show(nuke.thisGroup().node('offset1'), True)"}
  27. addUserKnob {22 hide1 t "Closes the panel if you don't feel like doing it yourself" -STARTLINE T nuke.thisGroup().node('offset1').hideControlPanel()}
  28. addUserKnob {41 offsetto2 l "offset to2" T offset2.translate}
  29. addUserKnob {22 control2 t "Show the transform jack by opening the control panel of the grouped transform node" -STARTLINE T "nuke.show(nuke.thisGroup().node('offset2'), True)"}
  30. addUserKnob {22 hide2 t "Closes the panel if you don't feel like doing it yourself" -STARTLINE T nuke.thisGroup().node('offset2').hideControlPanel()}
  31. addUserKnob {41 offsetto3 l "offset to3" T offset3.translate}
  32. addUserKnob {22 control3 t "Show the transform jack by opening the control panel of the grouped transform node" -STARTLINE T "nuke.show(nuke.thisGroup().node('offset3'), True)"}
  33. addUserKnob {22 hide3 t "Closes the panel if you don't feel like doing it yourself" -STARTLINE T nuke.thisGroup().node('offset3').hideControlPanel()}
  34. addUserKnob {41 offsetto4 l "offset to4" T offset4.translate}
  35. addUserKnob {22 control4 t "Show the transform jack by opening the control panel of the grouped transform node" -STARTLINE T "nuke.show(nuke.thisGroup().node('offset4'), True)"}
  36. addUserKnob {22 hide4 t "Closes the panel if you don't feel like doing it yourself" -STARTLINE T nuke.thisGroup().node('offset4').hideControlPanel()}
  37. addUserKnob {22 showRefLines l "Show Ref Lines" t "Show Lines between pins, for lining up occluded corners." T "nuke.show(nuke.thisGroup().node('Roto1'), True)" +STARTLINE}
  38. addUserKnob {26 div l "" +STARTLINE}
  39. addUserKnob {22 LoadMochaAE l "Load Mocha AE Track" T "import nuke, re\n# is a comment about what following code does\n#??? is an informational side note\n#!!! is something that needs to be fixed or extended\n\n# Creates a Nuke Panel for the user to paste tracking data into.\np = nuke.Panel('Get MochaAE Track')\np.addMultilineTextInput('Track Data', '''Paste corner pin data from Mocha AE here. \\nMust be the type that supports RG Warp and mochaImport''')\np.addBooleanCheckBox('Motionblur On', True)\np.addSingleLineInput('Frame Offset', 'Frame Offset (Default: 0)')\n\nif not p.show():\n\traise\nmochatrack = p.value('''Track Data''')\ntext = mochatrack.splitlines(True)\ntry:\n\tif p.value('Frame Offset') == 'Frame Offset (Default: 0)':\n\t\tframe_offset = 0 + int(nuke.root().knob(\"first_frame\").value())\n\telse:\n\t\tframe_offset = int(p.value('Frame Offset')) + int(nuke.root().knob(\"first_frame\").value())\nexcept:\n\tnuke.message(\"Error! Start Frame must be an integer.\")\n\traise\nmotionblur_on = p.value('Motionblur On')\n# Get width and height from mocha tracking data\ncomp_width = int(re.search(r'Source Width\\t\\b\\d+\\b', mochatrack).group().split('\\t')\[1])\ncomp_height = int(re.search(r'Source Height\\t\\b\\d+\\b', mochatrack).group().split('\\t')\[1])\n\n\n# Iterates through every match for frame xpos ypos. The regex searches for <tab><int><tab><float/int><tab><float/int>\n# The search also matches 'Pin-####'. When a match for pin is found, it gets the corner number, and then skips getting frame and xpos/ypos\n# Data is added to a 4-dimensional list called track_data\n# The track_data list has 4 lists, one for each corner. Each of these lists has a list for each frame with frame,xpos,ypos data. \n# Therefore, track_data\[0] is the list of all frames for corner 1, track_data\[1] is corner 2, etc.\n# track_data\[0]\[23] would return \[frame,xpos,ypos] for frame 23 of corner 1\n\n# Initialize vars for loop\t\ntrack_data = \[\[],\[],\[],\[]]\nlast_frame = 0\nfor match in re.finditer(r'\\b\\d+\\b\\t\[-+]?\\b\[0-9]*\\.?\[0-9]+\\b\\t\[-+]?\\b\[0-9]*\\.?\[0-9]+\\b|Pin-\\d*', mochatrack):\n\tif re.match(r'Pin*', match.group()):\n\t\tcorner = int( match.group().split('-')\[1] )-1\n\t\tcontinue\n\tframe \t= int(match.group().split('\\t')\[0])\n\txpos\t= float(match.group().split('\\t')\[1])\n\typos\t= float(match.group().split('\\t')\[2])\n\ttrack_data\[corner].append(\[frame, xpos, ypos])\n\tlast_frame = frame\n\n# Converts the track_data corner order from AE to Nuke, since our data is stored in AE's corner format\n# Nuke is 1=LL, 2=LR, 3=UR, 4=UL. AE is LL=2, LR=3, UR=1, UL=0\ntrack_data\[0], track_data\[1], track_data\[2], track_data\[3] = track_data\[2], track_data\[3], track_data\[1], track_data\[0]\n\n\n##########################\n# Create CornerPin Node\n##########################\ncp = nuke.thisGroup().node('cpMaster')\n#cp = nuke.createNode('CornerPin2D')\nif motionblur_on == True:\n\tcp.knob('shutteroffset').setValue('centred')\n\tcp.knob('motionblur').setValue(20)\nto_knobs = \[ cp.knob('to1'), cp.knob('to2'), cp.knob('to3'), cp.knob('to4') ]\ncorner = 0\n# For each 'to' knob in the CornerPin node, set it to be animated, and for every frame in the track, set a key for xpos and ypos\n# frame\[0] is the frame number, frame\[1] is the xpos, frame\[2] is the ypos\n# ypos must be inverted (height - ypos), to be right in nuke\nfor knob in to_knobs:\n\tknob.setAnimated()\n\tfor frame in track_data\[corner]:\n\t\tknob.setValueAt( frame\[1], frame\[0]+frame_offset, 0 )\n\t\tknob.setValueAt( (comp_height - frame\[2]), frame\[0]+frame_offset, 1 )\n\tcorner += 1" +STARTLINE}
  40. addUserKnob {20 OffsetCornerPinData n 1}
  41. OffsetCornerPinData 0
  42. addUserKnob {41 to1_1 l to1 T cpOutput.to1}
  43. addUserKnob {41 to2_1 l to2 T cpOutput.to2}
  44. addUserKnob {41 to3_1 l to3 T cpOutput.to3}
  45. addUserKnob {41 to4_1 l to4 T cpOutput.to4}
  46. addUserKnob {20 endGroup n -1}
  47. }
  48. Input {
  49. inputs 0
  50. name Input1
  51. xpos 704
  52. ypos -263
  53. }
  54. CornerPin2D {
  55. to1 {{cpMaster.to1+offset1.translate} {cpMaster.to1+offset1.translate}}
  56. to2 {{cpMaster.to2+offset2.translate} {cpMaster.to2+offset2.translate}}
  57. to3 {{cpMaster.to3+offset3.translate x1 1794} {cpMaster.to3+offset3.translate x1 1014}}
  58. to4 {{cpMaster.to4+offset4.translate} {cpMaster.to4+offset4.translate}}
  59. invert false
  60. shutteroffset centred
  61. from1 {0 0}
  62. from2 {{input.width i} 0}
  63. from3 {{input.width i} {input.height i}}
  64. from4 {0 {input.height i}}
  65. name cpOutput
  66. xpos 704
  67. ypos -157
  68. }
  69. Output {
  70. name Output1
  71. xpos 704
  72. ypos -28
  73. }
  74. Transform {
  75. inputs 0
  76. center {{cpMaster.to4 i x1 0 x64 0 x172 0 x189 0 x1475 0} {cpMaster.to4 i x1 0 x64 0 x172 0 x189 0 x1475 0}}
  77. name offset4
  78. xpos 450
  79. ypos -210
  80. }
  81. Transform {
  82. inputs 0
  83. scale {1 0.74}
  84. center {{cpMaster.to1 i x1 0 x64 0 x172 0 x189 0 x1475 0} {cpMaster.to1 i x1 0 x64 0 x172 0 x189 0 x1475 0}}
  85. name offset1
  86. xpos 445
  87. ypos -106
  88. }
  89. CornerPin2D {
  90. inputs 0
  91. to1 {0 0}
  92. to2 {1920 0}
  93. to3 {1920 1080}
  94. to4 {0 1080}
  95. invert false
  96. motionblur 20
  97. shutteroffset centred
  98. from1 {0 0}
  99. from2 {1920 0}
  100. from3 {1920 1080}
  101. from4 {0 1080}
  102. name cpMaster
  103. xpos 509
  104. ypos -157
  105. }
  106. Transform {
  107. inputs 0
  108. center {{cpMaster.to3 x1 0 x4 0 0 x64 0 x172 0 x189 0 x1475 0} {cpMaster.to3 x1 0 x4 0 0 x64 0 x172 0 x189 0 x1475 0}}
  109. name offset3
  110. xpos 561
  111. ypos -211
  112. }
  113. Transform {
  114. inputs 0
  115. center {{cpMaster.to2 x1 0 x64 0 x65 0 x172 0 x189 0 x295 0 x313 0 x1475 0} {cpMaster.to2 x1 0 x64 0 x65 0 x172 0 x189 0 x295 0 x313 0 x1475 0}}
  116. name offset2
  117. xpos 570
  118. ypos -108
  119. }
  120. Roto {
  121. inputs 0
  122. curves {{{v x3f99999a}
  123. {f 0}
  124. {n
  125. {layer Root
  126. {f 512}
  127. {t x44700000 x44070000}
  128. {a}
  129. {curvegroup Bezier1 512 bezier
  130. {{cc
  131. {f 8192}
  132. {p
  133. {}
  134. {{=cpOutput.to4 x43870000}
  135. {=cpOutput.to4 x441b8000}}
  136. {}
  137. {}
  138. {{=cpOutput.to3 x44358000}
  139. {=cpOutput.to3 x44410000}}
  140. {}
  141. {}
  142. {{=cpOutput.to2 x446e8000}
  143. {=cpOutput.to2 x43c50000}}
  144. {}
  145. {}
  146. {{=cpOutput.to1 x43d70000}
  147. {=cpOutput.to1 x43480000}}
  148. {}}}
  149. {cc
  150. {f 8192}
  151. {p
  152. {}
  153. {}
  154. {}
  155. {}
  156. {}
  157. {}
  158. {}
  159. {}
  160. {}
  161. {}
  162. {}
  163. {}}}}
  164. {t x4414c000 x43f88000}
  165. {a spx 0 spy 0 sb 1 tt x40800000}}}}}}
  166. toolbox {selectAll {
  167. { selectAll str 1 ssx 1 ssy 1 sf 1 }
  168. { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 }
  169. { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
  170. { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 }
  171. { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 }
  172. { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 }
  173. { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 }
  174. { brush str 1 ssx 1 ssy 1 sf 1 sb 1 }
  175. { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 }
  176. { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
  177. { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 }
  178. { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
  179. { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
  180. { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
  181. { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
  182. { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 }
  183. } }
  184. toolbar_autokey false
  185. toolbar_brush_hardness 0.200000003
  186. toolbar_source_transform_scale {1 1}
  187. toolbar_source_transform_center {320 240}
  188. colorOverlay 0
  189. lifetime_type "all frames"
  190. view {}
  191. motionblur_on true
  192. motionblur_shutter_offset_type centred
  193. source_translate_round false
  194. source_black_outside true
  195. createNewTrack {{-1} "-1\t(none)\t-1" "1000\tNew Track Layer\t1000"}
  196. name Roto1
  197. selected true
  198. xpos 860
  199. ypos -155
  200. }
  201. end_group
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement