Evaluating Content

From RMIT Visual Effects
Jump to: navigation, search

Evaluating Picture values

The picture values of an image are not as available as its color values. Nonetheless, it is possible to make them more apparent with a few choice nodes.

Mirror the image

Artists have been looking at their work in the mirror for centuries. By using the flop parameter of Reformat it is possible to do the same: to flip the image 'mirror wise'. I would go so far as to say that if you have not done this at least once then you have not finished the script, especially if it is a composite.

Ranges (in the ColorCorrect node)

It is always important to know the tone ranges of an image: its light, middle and dark. The Grade node is a powerful compound color node that is covered elsewhere. Its ‘Ranges’ tab give a preview of the low, middle and high light values of an image. Low is rendered as black, middle as grey and high as white. Cusp areas are rendered as greens and pinks. The default defines these ranges according to a perceptually biased model (i.e. a wider range of dark values than light). This range can be edited using the curves in the tab. The ClipTest node is also useful for tone range evaluation.

Viewing the RGB and luminance in the Viewer window

Back to the channels management of the Viewer window: its R, G and B key can be pressed to see the red, green and blue channel respectively (the cursor must be hovering over the Viewer window as this is done). In the evaluation of the picture values of an image a press of the Y key will reveal the luminance (lightness) values of the image (below). This is referenced when we are making lightness adjustment changes to our image and don’t want to be distracted by the hue.

The RGB of an image, in the viewer.
The luminence of an image, in the viewer (press the 'Y' key).

Saturation map using a ColorSpace node

Saturation is an important atribute of an image. By using the ColorSpace node the image may be converted to any of the color spaces that store saturation as an independent channel. The channel may be duplicated into the other channels to produce a grey scale map of the saturation values of an image. In the image below the saturated red of the bow stands out as a vivid point of attention against the more evenly distributed lightness values. Saturation map ColorNode snippet is below.

The saturation, RGB and luminance of an image.

Press 'Expand' and select and copy everything below this line, then paste into the Nuke node graph.

set cut_paste_input [stack 0]
version 9.0 v7
push $cut_paste_input
Group {
 name ColorComponents
 tile_color 0xb4ffaaff
 gl_color 0xdfff00ff
 selected true
 xpos -45
 ypos 715
 addUserKnob {20 User}
 addUserKnob {41 dividers T Master.dividers}
 addUserKnob {41 textsize l "text size" T Master.textsize}
 addUserKnob {26 "" +STARTLINE}
 addUserKnob {26 intro l "" +STARTLINE T "This is a simple group of nodes designed to seperete the color \ncompoents of an image into their three perceptual values: Hue, \nSaturation and Lightness. It is good for aesthetically evaluating \nan image. To use, simply feed an image into it and view the\nresults. For more info on color, come to me. \n\nMartin"}
}
 BackdropNode {
  inputs 0
  name HUE
  tile_color 0x87854701
  gl_color 0x87854701
  label HUE
  note_font "Arial Black"
  note_font_size 20
  xpos 293
  ypos 293
  bdwidth 478
  bdheight 333
 }
 BackdropNode {
  inputs 0
  name LUMINANCE
  tile_color 0x87854701
  gl_color 0x87854701
  label LUMINANCE
  note_font "Arial Black"
  note_font_size 20
  xpos 1512
  ypos 303
  bdwidth 435
  bdheight 350
 }
 BackdropNode {
  inputs 0
  name LUMINANCE1
  tile_color 0x87854701
  gl_color 0x87854701
  label RGB
  note_font "Arial Black"
  note_font_size 20
  xpos 2027
  ypos 322
  bdwidth 398
  bdheight 354
 }
 BackdropNode {
  inputs 0
  name SATURATION
  tile_color 0x87854701
  gl_color 0x87854701
  label SATURATION
  note_font "Arial Black"
  note_font_size 20
  xpos 802
  ypos 299
  bdwidth 527
  bdheight 336
 }
 Input {
  inputs 0
  name Input1
  xpos 881
  ypos 216
 }
 Dot {
  name Dot1
  xpos 915
  ypos 256
 }
set Nf3a68f30 [stack 0]
 Dot {
  name Dot11
  xpos 915
  ypos 354
 }
set N83544bb0 [stack 0]
 Dot {
  name Dot12
  xpos 1052
  ypos 354
 }
set N83548f90 [stack 0]
 Dot {
  name Dot13
  xpos 1166
  ypos 354
 }
set N8354d340 [stack 0]
 NoOp {
  name Master
  xpos 1213
  ypos 443
  addUserKnob {20 User}
  addUserKnob {7 dividers R 0 10}
  dividers 1.45
  addUserKnob {7 textsize l "text size" R 0 3}
  textsize 2
 }
push $Nf3a68f30
 Dot {
  name Dot3
  xpos 1585
  ypos 256
 }
set Nf3a4cce0 [stack 0]
 Dot {
  name Dot6
  xpos 2123
  ypos 246
 }
 Dot {
  name Dot19
  xpos 2123
  ypos 352
 }
set Nf3ae7aa0 [stack 0]
 Dot {
  name Dot17
  xpos 2248
  ypos 352
 }
set Nf3a2cbd0 [stack 0]
 Dot {
  name Dot18
  xpos 2339
  ypos 352
 }
 Text2 {
  font_size_toolbar 50
  font_width_toolbar 100
  font_height_toolbar 100
  message RGB
  old_message {{82 71 66}
    }
  box {14.5 1636.5 {"\[value input.format.r]"} {"\[value input.format.t]"}}
  transforms {{0 2}
    }
  font_size_values {{0 50 1 50 2 50 0 50}
    }
  cursor_position 3
  font {{ Helvetica : Regular : Helvetica.dfont : 4 }}
  global_font_scale {{Master.textsize}}
  font_size 50
  scale {1 1}
  cursor_initialised true
  autofit_bbox false
  initial_cursor_position {{14.5 1687.5}
    }
  group_animations {{0} imported: 0 selected: items: "root transform/"}
  animation_layers {{1 11 410 275 0 0 1 1 0 0 0 0}
    }
  name Text1
  xpos 2305
  ypos 577
 }
 Premult {
  name Premult4
  xpos 2305
  ypos 601
 }
push $Nf3a2cbd0
 Text2 {
  font_size_toolbar 50
  font_width_toolbar 100
  font_height_toolbar 100
  message RGB
  old_message {{82 71 66}
    }
  box {14.5 1636.5 {"\[value input.format.r]"} {"\[value input.format.t]"}}
  transforms {{0 2}
    }
  font_size_values {{0 50 1 50 2 50 0 50}
    }
  cursor_position 3
  font {{ Helvetica : Regular : Helvetica.dfont : 4 }}
  global_font_scale {{Master.textsize}}
  font_size 50
  scale {1 1}
  cursor_initialised true
  autofit_bbox false
  initial_cursor_position {{14.5 1687.5}
    }
  group_animations {{0} imported: 0 selected: items: "root transform/"}
  animation_layers {{1 11 410 275 0 0 1 1 0 0 0 0}
    }
  name Text4
  xpos 2214
  ypos 435
 }
 Erode {
  size -4.5
  name Erode1
  xpos 2214
  ypos 459
 }
 Blur {
  size 6.8
  name Blur1
  xpos 2214
  ypos 491
 }
push $Nf3ae7aa0
 Multiply {
  inputs 1+1
  value 0.035
  name Multiply1
  xpos 2089
  ypos 491
 }
 Merge2 {
  inputs 2
  name Merge4
  xpos 2089
  ypos 601
 }
 Dot {
  name Dot7
  xpos 2123
  ypos 667
 }
push $Nf3a4cce0
 Dot {
  name Dot8
  xpos 1585
  ypos 349
 }
set Nf3a34510 [stack 0]
 Dot {
  name Dot9
  xpos 1695
  ypos 349
 }
set Nf3a94ac0 [stack 0]
 Dot {
  name Dot10
  xpos 1790
  ypos 349
 }
 Text2 {
  font_size_toolbar 50
  font_width_toolbar 100
  font_height_toolbar 100
  message LUMINANCE
  old_message {{76 85 77 73 78 65 78 67 69}
    }
  box {14.5 1636.5 {"\[value input.format.r]"} {"\[value input.format.t]"}}
  transforms {{0 2}
    }
  font_size_values {{0 50 1 50 2 50 3 50 4 50 5 50 6 50 7 50 8 50 0 50}
    }
  cursor_position 9
  font {{ Helvetica : Regular : Helvetica.dfont : 4 }}
  global_font_scale {{Master.textsize}}
  font_size 50
  scale {1 1}
  cursor_initialised true
  autofit_bbox false
  initial_cursor_position {{14.5 1687.5}
    }
  group_animations {{0} imported: 0 selected: items: "root transform/"}
  animation_layers {{1 11 410 275 0 0 1 1 0 0 0 0}
    }
  name Text3
  xpos 1752
  ypos 581
 }
 Premult {
  name Premult1
  xpos 1752
  ypos 605
 }
push $Nf3a94ac0
 Text2 {
  font_size_toolbar 50
  font_width_toolbar 100
  font_height_toolbar 100
  message LUMINANCE
  old_message {{76 85 77 73 78 65 78 67 69}
    }
  box {14.5 1636.5 {"\[value input.format.r]"} {"\[value input.format.t]"}}
  transforms {{0 2}
    }
  font_size_values {{0 50 1 50 2 50 3 50 4 50 5 50 6 50 7 50 8 50 0 50}
    }
  cursor_position 9
  font {{ Helvetica : Regular : Helvetica.dfont : 4 }}
  global_font_scale {{Master.textsize}}
  font_size 50
  scale {1 1}
  cursor_initialised true
  autofit_bbox false
  initial_cursor_position {{14.5 1687.5}
    }
  group_animations {{0} imported: 0 selected: items: "root transform/"}
  animation_layers {{1 11 410 275 0 0 1 1 0 0 0 0}
    }
  name Text9
  xpos 1661
  ypos 432
 }
 Erode {
  size -4.5
  name Erode2
  xpos 1661
  ypos 456
 }
 Blur {
  size 6.8
  name Blur2
  xpos 1661
  ypos 488
 }
push $Nf3a34510
 Colorspace {
  colorspace_out CIE-Lab
  name Colorspace4
  xpos 1551
  ypos 426
 }
 Shuffle {
  green red
  blue red
  alpha red
  name Shuffle2
  xpos 1551
  ypos 450
 }
 Multiply {
  inputs 1+1
  value 0.035
  name Multiply2
  xpos 1551
  ypos 488
 }
 Merge2 {
  inputs 2
  name Merge1
  xpos 1551
  ypos 605
 }
push $N8354d340
 Text2 {
  font_size_toolbar 50
  font_width_toolbar 100
  font_height_toolbar 100
  message SATURATION
  old_message {{83 65 84 85 82 65 84 73 79 78}
    }
  box {14.5 1636.5 {"\[value input.format.r]"} {"\[value input.format.t]"}}
  transforms {{0 2}
    }
  font_size_values {{0 50 1 50 2 50 3 50 4 50 5 50 6 50 7 50 8 50 9 50 0 50}
    }
  cursor_position 10
  font {{ Helvetica : Regular : Helvetica.dfont : 4 }}
  global_font_scale {{Master.textsize}}
  font_size 50
  scale {1 1}
  cursor_initialised true
  autofit_bbox false
  initial_cursor_position {{14.5 1687.5}
    }
  group_animations {{0} imported: 0 selected: items: "root transform/"}
  animation_layers {{1 11 410 275 0 0 1 1 0 0 0 0}
    }
  name Text6
  xpos 1132
  ypos 563
 }
 Premult {
  name Premult2
  xpos 1132
  ypos 587
 }
push $N83548f90
 Text2 {
  font_size_toolbar 50
  font_width_toolbar 100
  font_height_toolbar 100
  message SATURATION
  old_message {{83 65 84 85 82 65 84 73 79 78}
    }
  box {14.5 1636.5 {"\[value input.format.r]"} {"\[value input.format.t]"}}
  transforms {{0 2}
    }
  font_size_values {{0 50 1 50 2 50 3 50 4 50 5 50 6 50 7 50 8 50 9 50 0 50}
    }
  cursor_position 10
  font {{ Helvetica : Regular : Helvetica.dfont : 4 }}
  global_font_scale {{Master.textsize}}
  font_size 50
  scale {1 1}
  cursor_initialised true
  autofit_bbox false
  initial_cursor_position {{14.5 1687.5}
    }
  group_animations {{0} imported: 0 selected: items: "root transform/"}
  animation_layers {{1 11 410 275 0 0 1 1 0 0 0 0}
    }
  name Text7
  xpos 1018
  ypos 443
 }
 Erode {
  size -4.5
  name Erode3
  xpos 1018
  ypos 467
 }
 Blur {
  size 6.8
  name Blur3
  xpos 1018
  ypos 499
 }
push $N83544bb0
 Colorspace {
  colorspace_out HSV
  name Colorspace1
  xpos 881
  ypos 377
 }
 Shuffle {
  red green
  blue green
  name Shuffle1
  xpos 881
  ypos 424
 }
 Multiply {
  inputs 1+1
  value 0.035
  name Multiply3
  xpos 881
  ypos 499
 }
 Merge2 {
  inputs 2
  name Merge2
  xpos 881
  ypos 587
 }
push $Nf3a68f30
 Dot {
  name Dot2
  xpos 457
  ypos 256
 }
 Dot {
  name Dot14
  xpos 457
  ypos 329
 }
set N835dc750 [stack 0]
 Dot {
  name Dot15
  xpos 567
  ypos 329
 }
set N835e0a60 [stack 0]
 Dot {
  name Dot16
  xpos 675
  ypos 329
 }
 Text2 {
  font_size_toolbar 50
  font_width_toolbar 100
  font_height_toolbar 100
  message HUE
  old_message {{72 85 69}
    }
  box {14.5 1636.5 {"\[value input.format.r]"} {"\[value input.format.t]"}}
  transforms {{0 2}
    }
  font_size_values {{0 50 1 50 2 50 0 50}
    }
  cursor_position 3
  font {{ Helvetica : Regular : Helvetica.dfont : 4 }}
  global_font_scale {{Master.textsize}}
  font_size 50
  scale {1 1}
  cursor_initialised true
  autofit_bbox false
  initial_cursor_position {{14.5 1687.5}
    }
  group_animations {{0} imported: 0 selected: items: "root transform/"}
  animation_layers {{1 11 410 275 0 0 1 1 0 0 0 0}
    }
  name Text8
  xpos 641
  ypos 554
 }
 Premult {
  name Premult3
  xpos 641
  ypos 578
 }
push $N835e0a60
 Text2 {
  font_size_toolbar 50
  font_width_toolbar 100
  font_height_toolbar 100
  message HUE
  old_message {{72 85 69}
    }
  box {14.5 1636.5 {"\[value input.format.r]"} {"\[value input.format.t]"}}
  transforms {{0 2}
    }
  font_size_values {{0 50 1 50 2 50 0 50}
    }
  font {{ Helvetica : Regular : Helvetica.dfont : 4 }}
  global_font_scale {{Master.textsize}}
  font_size 50
  scale {1 1}
  cursor_initialised true
  autofit_bbox false
  initial_cursor_position {{14.5 1687.5}
    }
  group_animations {{0} imported: 0 selected: items: "root transform/"}
  animation_layers {{1 11 410 275 0 0 1 1 0 0 0 0}
    }
  name Text2
  xpos 535
  ypos 444
 }
 Erode {
  size -4.5
  name Erode4
  xpos 535
  ypos 468
 }
 Blur {
  size 6.8
  name Blur4
  xpos 535
  ypos 500
 }
 Constant {
  inputs 0
  channels rgb
  color 0.52
  name Constant1
  xpos 313
  ypos 398
 }
push $N835dc750
 Colorspace {
  colorspace_out HSV
  name Colorspace3
  xpos 423
  ypos 373
 }
 ShuffleCopy {
  inputs 2
  green white
  blue green
  name ShuffleCopy1
  xpos 423
  ypos 422
 }
 Colorspace {
  colorspace_in HSV
  name Colorspace2
  xpos 423
  ypos 460
 }
 Multiply {
  inputs 1+1
  value 0.035
  name Multiply4
  xpos 425
  ypos 500
 }
 Merge2 {
  inputs 2
  name Merge3
  xpos 425
  ypos 578
 }
 Dot {
  name Dot5
  xpos 459
  ypos 667
 }
 ContactSheet {
  inputs 4
  width {{"\[value input.format.r]*4"}}
  height {{"\[value input.format.t]"}}
  rows 1
  gap {{Master.dividers}}
  name ContactSheet1
  xpos 881
  ypos 664
 }
 Output {
  name Output1
  xpos 881
  ypos 764
 }
end_group

Evaluating Animation values

The animation of a script can be difficult to preview on anything but the most powerful computer. So...

FrameHold

A FrameHold will freeze any part of the script that precedes it. This will make it easier to preview animated portions of the script in isolation. A ContactSheet is useful for the same purposes.

Curve Editor

The Curve Editor is a good place to review the 'shape' of the animation.

Alpha

An animated matte can be effectively previewed in its alpha. Its positive and negative shape aspects can be more easily seen in black and white.

Increments in the Viewer timeline

The timeline in the Viewer window has a pair of 'frame increment' arrows that will step forward or backwards by whatever frame value is set in the 'increment' parameter. This is useful for scanning through the animation.The Keystroke: Shift right and left.

Render a proxy

Sooner or later it will be necessary to actually see the script rendered in motion. Nuke has a very effective preview system that will render out even heavy scripts at something close to real-time speed. However, sometimes a 'real' render is needed. Full rez renders can be heavy to preview, but the Write node can render out a half rez version.