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
| Input | What it takes |
|---|---|
| in | the image this node works on |
Outputs
| Output | Type |
|---|---|
| out | Image |
Parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
| slot | Int | 0 | Not documented yet. |
| lights | Text | String::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. |
| camera | Text | String::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_layer | Text | "normal".into( | The layer carrying world-space normals. 'N' in most CG EXRs. |
| position_layer | Text | "P".into( | The layer carrying world-space positions. 'P' in most CG EXRs. |
| basecolor_layer | Text | "basecolor".into( | The un-lit surface colour pass (scene-linear). PBRIngest produces it; missing = albedo, then the beauty. |
| albedo_layer | Text | "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_layer | Text | "roughness".into( | Per-pixel roughness pass (white = rough). Missing = the roughness knob value everywhere. |
| specular_layer | Text | "specular".into( | Dielectric reflectance pass: F0 = 0.08 × specular. Missing = 0.5. |
| metallic_layer | Text | "metallic".into( | Metalness pass — metal kills diffuse and tints the specular with the basecolor. Missing = 0. |
| depth_layer | Text | "depth".into( | Not documented yet. |
| roughness | Float | 0.4 | Microfacet roughness for the GGX specular: low = tight hot highlights, high = broad soft sheen. |
| sl_type | Choice | none | The 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_azimuth | Float | 0 | Screen light: degrees around the vertical — 0 lights from straight ahead, 90 from screen right. |
| sl_elevation | Float | 45 | Screen light: degrees above the horizon — 90 is straight down from above. |
| sl_color | Color | [1.0, 1.0, 1.0, 1.0] | Not documented yet. |
| sl_intensity | Float | 1 | Not documented yet. |
| sl_x | Float | 0.5 | Not documented yet. |
| sl_y | Float | 0.5 | Not documented yet. |
| sl_depth | Float | 2 | Screen point light: how far off the image plane, −5 (behind the scene) to 5 (toward camera). Inverse-square falloff in the same units. |
| env_file | Text | String::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_intensity | Float | 0 | How bright the environment is. 0 turns it off entirely — no load, no work, no layer. |
| env_rotation | Float | 0 | Spin the environment around the vertical, in degrees. The way to line an HDRI's sun up with the plate without re-exporting it. |
| mode | Choice | replace | replace rebuilds lighting from albedo × the new lights; add layers the new lights onto the existing beauty. |
| mix | Float | 1 | Dissolves the effect back toward the input. 0 = off (bit-identical), 1 = full effect. |
| shadows | Bool | true | Not documented yet. |