Skip to content

Nodes · Off-shelf

BS_Relight

Off-shelfv3coreNeeds full inputForge

Overview

Relights a plate from its own passes: screen-space lights (a directional sun by azimuth/elevation, or a point light at a pixel with depth) shaded against the ingested normal/roughness/basecolor, with real Light3Ds usable through lights. Chain several in add mode to build a key/fill/rim. Needs a PBRIngest upstream — it says so when it has nothing to shade.

Inputs

InputWhat it takes
inthe image this node works on

Outputs

OutputType
outImage

Parameters

ParameterTypeDefaultWhat it does
slotInt0Not documented yet.
lightsTextString::new(The NAME of a Light3D node (or a Merge3D combining several). The same lights that shade the 3D viewport shade this plate — move the light, the relight follows.
cameraTextString::new(The render camera's Camera3D node name — speculars need to know where the eye is. Empty = camera at the world origin (fine for camera-at-origin renders, approximate otherwise).
normal_layerText"normal".into(The layer carrying world-space normals. 'N' in most CG EXRs.
position_layerText"P".into(The layer carrying world-space positions. 'P' in most CG EXRs.
basecolor_layerText"basecolor".into(The un-lit surface colour pass (scene-linear). PBRIngest produces it; missing = albedo, then the beauty.
albedo_layerText"albedo".into(The un-lit surface colour pass. Missing = the beauty is relit instead, which double-counts the original lighting — fine for a quick augment, wrong for a true relight.
roughness_layerText"roughness".into(Per-pixel roughness pass (white = rough). Missing = the roughness knob value everywhere.
specular_layerText"specular".into(Dielectric reflectance pass: F0 = 0.08 × specular. Missing = 0.5.
metallic_layerText"metallic".into(Metalness pass — metal kills diffuse and tints the specular with the basecolor. Missing = 0.
depth_layerText"depth".into(Not documented yet.
roughnessFloat0.4Microfacet roughness for the GGX specular: low = tight hot highlights, high = broad soft sheen.
sl_typeChoicenoneThe built-in screen-space light — needs no 3D scene at all. directional: a sun set by azimuth/elevation. point: a bulb at pixel-XY plus a −5…5 depth. Stack more lights by chaining BS_Relight nodes in add mode, or wire real Light3Ds via lights.
sl_azimuthFloat0Screen light: degrees around the vertical — 0 lights from straight ahead, 90 from screen right.
sl_elevationFloat45Screen light: degrees above the horizon — 90 is straight down from above.
sl_colorColor[1.0, 1.0, 1.0, 1.0]Not documented yet.
sl_intensityFloat1Not documented yet.
sl_xFloat0.5Not documented yet.
sl_yFloat0.5Not documented yet.
sl_depthFloat2Screen point light: how far off the image plane, −5 (behind the scene) to 5 (toward camera). Inverse-square falloff in the same units.
env_fileTextString::new(A latlong HDRI to light with — image-based lighting, and often the whole setup on its own. Prefiltered once per file (blurred for diffuse, roughness-blurred for reflections) and cached, so scrubbing costs nothing after the first frame. Its contribution comes out as the relight.environment layer.
env_intensityFloat0How bright the environment is. 0 turns it off entirely — no load, no work, no layer.
env_rotationFloat0Spin the environment around the vertical, in degrees. The way to line an HDRI's sun up with the plate without re-exporting it.
modeChoicereplacereplace rebuilds lighting from albedo × the new lights; add layers the new lights onto the existing beauty.
mixFloat1Dissolves the effect back toward the input. 0 = off (bit-identical), 1 = full effect.
shadowsBooltrueNot documented yet.