Three Area Light
Soft shadows and window highlights, no path tracing needed
- object
A point light is the pinprick in the dark - hard shadows, a hot little highlight, nothing like the light coming through an actual window. Three Area Light is the fix: it lights the scene from a panel with a real size, so shadows soften as you widen it and highlights read as a window or a softbox instead of a specular dot. If you've ever looked at a Three.js product render and thought "that light looks like it came from a flashlight," this is the node you were missing.
It behaves exactly like a real soft source. The panel's width and height are the shadow-softener: 0.2 throws a hard shadow, 2.0 a soft one, 8.0 an almost shadowless wash. intensity is spread over the whole face, so a wider panel at the same number lights no harder - think brightness per square metre, not total output. 5.0 is a decent key light two units across; a small bright panel wants something like 40.0. shape flips between rectangle and disc (the disc is there for the round highlight a ring light leaves; the regular renderer draws both as a rectangle, only a path-traced render rounds it off).
Positioning is explicit rather than wired: position_x/y/z (defaults of 0, 4, 2 put it up and in front of the origin) and target_x/y/z aim the face - the panel throws light from the one side facing the target. The object output wires into Three Group or straight to Three Scene's root, just like a mesh.
Two things are easy to trip on. First, the light panel doesn't appear in the picture itself (a mirror will reflect it, so don't be surprised to see it there) - if the actual fitting has to be visible, pair it with an emissive Three Standard Material so there's a physical thing to look at. Second, what it can do depends on which renderer you're feeding. In the regular Three Render, it lights Three Standard Material and Three Physical Material but casts no shadow from itself; the path tracer (Three Path Trace Render) shadows and shapes it in full. If your goal is soft, correct shadowing out of the box, the traced render is where this light shows its whole hand.
Installing it
It's part of WAS Node Suite v3. ComfyUI Manager: search WAS Node Suite v3, or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
Restart. Needs ComfyUI 0.14.0+ / Python 3.10+, and installs nothing - v3 ships dependency-free and three.js is bundled. Missing from the menu? Flip features.threejs to true in <ComfyUI user dir>/was-node-suite/config.yaml.
If your shadows aren't showing
Work down the chain: shadows need to be on in Three App, on the meshes (cast_shadow/receive_shadow on Three Mesh), and the light has to be big enough to be worth it - a 0.2 panel casting a soft shadow is a contradiction. And remember the regular renderer won't shadow from an area light at all; for that you want the path tracer.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| color | STRING | #ffffff | Colour of the light as hexadecimal. `#ffffff` is white, `#ffd9a0` tungsten. |
| intensity | FLOAT | 5.00–10000 | How brightly the panel gives off light. It is spread over the whole face, so a wider panel at the same number lights no harder. 5.0 is a key light two units across, 40.0 a small bright one. |
| width | FLOAT | 2.00.001–1000 | How wide the panel is, in scene units. 0.2 throws a hard shadow, 2.0 a soft one, 8.0 an almost shadowless wash. |
| height | FLOAT | 2.00.001–1000 | How tall the panel is. 2.0 with a 2.0 width is square; 0.1 by 4.0 is a strip light. |
| shape | COMBO | rectangle | `rectangle` fills the whole width by height. `disc` rounds it off, for the round highlight a dish or a ring light leaves. Three Render draws both as a rectangle; only a traced render rounds it. |
| position_x | FLOAT | 0.0-10000–10000 | Where the panel sits, across. 0.0 is the middle, 3.0 off to one side. |
| position_y | FLOAT | 4.0-10000–10000 | How high the panel sits. 4.0 is above a subject standing at 0.0. |
| position_z | FLOAT | 2.0-10000–10000 | How far forward the panel sits. 2.0 is between the camera and the subject. |
| target_x | FLOAT | 0.0-10000–10000 | Where the face points, across. 0.0 aims at the middle of the scene. |
| target_y | FLOAT | 0.0-10000–10000 | The height it aims at. 0.0 is the floor, 1.5 the head of a figure. |
| target_z | FLOAT | 0.0-10000–10000 | The depth it aims at. 0.0 aims at the middle of the scene. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| object | THREE_OBJECT | The light, for Three Group or Three Scene. |