CompStart

ProLessonsCoursesElementsSoftware

CompStart

Master visual effects with cutting-edge techniques.

Learning

CoursesLessonsPro FeaturesAssetsSoftware

Tools

Tech CheckDisplay CheckMotion BlurCIE 1931PhysLightNuke Tools

Company

InstructorMissionImpressumPrivacyTerms

Projects

Moray RenderEXR ConverterOCIO.ccNuke ToolsDerekVFX

Follow

YouTubeInstagramTikTokThreadsContact

© 2026 CompStart. All rights reserved.

Normal Light

ToolSets / Draw
Draw

2026-09-07

ToolSets/draw/normalLight.nk

normals
lighting
draw
utility
relight
axis
colormatrix
View on GitHub

Rotate a normal pass with an Axis and output a clamped grayscale light response for simple normal-based shading in Nuke.

Normal Light takes a chosen normal layer, applies the world matrix of a linked Axis as a ColorMatrix, then keeps the red channel as RGB (and alpha) and clamps it. The result is a grayscale image driven by the rotated normals.

Use it when you need a quick directional light or shading cue from an existing normal pass without a full 3D light setup. Point the Axis rotate control to change light direction; pick the normal layer on the gizmo.

In the node graph it sits on a beauty or utility branch: feed normals in, rotate, and merge or grade the output as a light wrap, fill, or isolation matte. Behavior is fully 2D after the matrix step—no camera or geometry required beyond the normal data you supply.

Script code

set cut_paste_input [stack 0]
version 12.1 v5
push $cut_paste_input
Group {
name normalLight
tile_color 0x421010ff
selected true
xpos -14855
ypos 33563
addUserKnob {20 User l normalLight}
addUserKnob {41 in l "normal layer" T Shuffle18.in}
addUserKnob {41 rotate T Axis1.rotate}
addUserKnob {26 ""}
addUserKnob {26 lbl l "" +STARTLINE T "Normal Light v1.0"}
addUserKnob {22 btn l DerekVFX.ca T "nuke.tcl('start', 'https://derekvfx.ca')" +STARTLINE}
}
Axis2 {
inputs 0
rotate {0 229 0}
name Axis1
xpos 612
ypos 316
}
Input {
inputs 0
name Input
xpos 447
ypos 61
}
Shuffle {
name Shuffle18
label "\[value in]"
selected true
xpos 447
ypos 328
}
ColorMatrix {
matrix {
    {{parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix}}
    {{parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix}}
    {{parent.Axis1.world_matrix} {parent.Axis1.world_matrix} {parent.Axis1.world_matrix}}
  }
name ColorMatrix1
xpos 447
ypos 403
}
Shuffle {
green red
blue red
alpha red
name Shuffle1
label "\[value in]"
xpos 447
ypos 429
}
Clamp {
channels rgb
name Clamp1
xpos 447
ypos 479
}
Output {
name Output1
xpos 447
ypos 1055
}
end_group