ScanlineRender wrapper with GUI vs render samples and scale, dynamic overscan, deep holdout soft expand, and optional shader vector AOVs.
Scanline Render Advanced packages Nuke’s ScanlineRender with separate GUI and render sample counts and scales, dynamic overscan, and a deep holdout path. Wire scene, camera, and optional deep holdout; set the output format from the built-in Constant.
set cut_paste_input [stack 0]
version 12.1 v4
push $cut_paste_input
Group {
name scanlineRenderAdvanced
onCreate "import nuke\n\n#zz = nuke.FrameRange('100-200')\n#print zz.frames()\n\nff = nuke.Root().firstFrame()\nlf = nuke.Root().lastFrame()\n\nnuke.thisNode().knob('fr').setValue('\{\}-\{\}'.format(ff, lf))\n\n\n\n"
tile_color 0x421010ff
label "\[value gui_samples] : \[value render_samples] - \[value overscan_dynamic]"
addUserKnob {20 User l ScanlineRender}
addUserKnob {41 format T Constant1.format}
addUserKnob {1 fr l "frame range" -STARTLINE}
fr 1-100
addUserKnob {41 overscan_dynamic l overscan T ScanlineRender1.overscan_dynamic}
addUserKnob {41 filter l "sample filter" T ScanlineRender1.filter}
addUserKnob {41 antialiasing -STARTLINE T ScanlineRender1.antialiasing}
addUserKnob {41 zblend_mode l "Z-blend mode" -STARTLINE T ScanlineRender1.zblend_mode}
addUserKnob {41 shutter T ScanlineRender1.shutter}
addUserKnob {41 gui_samples l "gui samples" T ScanlineRender1.gui_samples}
addUserKnob {7 gui_scale l "gui scale" -STARTLINE R 0.1 1}
gui_scale 1
addUserKnob {41 render_samples l "render samples" T ScanlineRender1.render_samples}
addUserKnob {7 render_scale l "render scale" -STARTLINE R 1 10}
render_scale 1
addUserKnob {41 filter_1 l "uprez filter" T Reformat2.filter}
addUserKnob {41 expand l "deep soft expand" T DeepExpression1.expand}
addUserKnob {26 ""}
addUserKnob {26 lbl l "" t "July 12, 2019- added overscan\nJuly 19, 2019 - added soft deep and dynamic scale 1.2\nJuly 24, 2019 - added deep proxy scale 1.3" +STARTLINE T "ScanlineRender Advanced v1.3"}
addUserKnob {22 btn l DerekVFX.ca T "nuke.tcl('start', 'https://derekvfx.ca')" +STARTLINE}
addUserKnob {20 aov l AOV}
addUserKnob {41 output_shader_vectors l "output vectors" T ScanlineRender1.output_shader_vectors}
addUserKnob {41 P_channel l "surface point" T ScanlineRender1.P_channel}
addUserKnob {41 N_channel l "surface normal" T ScanlineRender1.N_channel}
}
Constant {
inputs 0
name Constant1
xpos 684
ypos 245
}
set Ndd11400 [stack 0]
Dot {
name Dot5
note_font_size 40
xpos 888
ypos 272
}
Dot {
name Dot4
note_font_size 40
xpos 888
ypos 741
}
Input {
inputs 0
name deepHoldout
xpos 84
ypos 245
number 2
}
DeepReformat {
format {{{parent.Constant1.format}}}
resize none
pbb true
name DeepReformat1
xpos 84
ypos 271
}
set Ndd10400 [stack 0]
DeepReformat {
type scale
scale {{parent.guiScale.scale}}
pbb true
name deepReformatGUI
xpos -41
ypos 346
}
push $Ndd10400
DeepReformat {
type scale
scale {{parent.renderScale.scale}}
pbb true
name deepReformatRender
xpos 84
ypos 346
}
Switch {
inputs 2
which {{"\$gui"}}
name Switch1
label "\[value which]"
xpos 84
ypos 412
}
set Cdd37800 [stack 0]
Dot {
name Dot3
note_font_size 40
xpos 118
ypos 611
}
Input {
inputs 0
name cam
xpos 284
ypos 245
number 1
}
Dot {
name Dot2
note_font_size 40
xpos 318
ypos 502
}
Input {
inputs 0
name scene
xpos 484
ypos 245
}
push $Ndd11400
Reformat {
type scale
scale {{gui_scale}}
name guiScale
xpos 559
ypos 346
}
push $Ndd11400
Reformat {
type scale
scale {{render_scale}}
name renderScale
xpos 684
ypos 346
}
clone $Cdd37800 {
inputs 2
xpos 684
ypos 412
selected false
}
Dot {
name Dot1
note_font_size 40
xpos 718
ypos 502
}
ScanlineRender {
inputs 3
conservative_shader_sampling false
antialiasing high
overscan {{"\$gui ? overscan_dynamic*guiScale.scale : overscan_dynamic*renderScale.scale"}}
samples {{"\$gui ? gui_samples : render_samples"}}
shutteroffset centred
motion_vectors_type distance
name ScanlineRender1
label "\[value samples]"
xpos 484
ypos 492
addUserKnob {20 User}
addUserKnob {3 gui_samples}
gui_samples 1
addUserKnob {3 render_samples}
render_samples 5
addUserKnob {7 overscan_dynamic R 0 100}
overscan_dynamic 32.8
}
DeepExpression {
chans1 deep
deep.front "deep.front - \[value expand]"
deep.back "deep.back + \[value expand]"
name DeepExpression1
xpos 484
ypos 551
disable {{"expand == 0"}}
addUserKnob {20 User}
addUserKnob {7 expand R 0 100}
expand 30.4
}
DeepHoldout2 {
inputs 2
name DeepHoldout1
xpos 484
ypos 607
}
Reformat {
format {{{parent.Constant1.format}}}
pbb true
name Reformat2
xpos 484
ypos 676
}
Switch {
inputs 2
name Switch2
xpos 484
ypos 737
disable true
}
Output {
name Output1
xpos 484
ypos 785
}
end_group