CompStart

ProLessonsCoursesElementsSoftware

CompStart

Learn visual effects with cutting-edge techniques.

Learning

CoursesLessonsPro FeaturesAssetsSoftware

Tools

Tech CheckDisplay CheckMotion BlurPhysLightNuke Tools

Company

InstructorMissionSitemapPrivacyTerms

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
relight
utility
normal pass
View on GitHub

Builds a simple directional light response from a normal layer, aimed with an Axis rotate control.

Normal Light turns an incoming normal pass into a basic lighting response. Select the normal layer, then use the linked Axis rotate control to change light direction.

Inside the group, the chosen normals are shuffled in and multiplied by the Axis world matrix through a ColorMatrix. The result is reduced to a single-channel RGB image and clamped.

Use it for quick directional lighting, fill guides, or light-wrap reference from normals when a full 3D light setup is unnecessary.

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