# Supported nodes

> Which shader nodes convert exactly, which are approximated, and how to get the closest match to Blender.

Blender to TSL docs · https://tools.ashthornton.dev/blender-to-tsl/docs/nodes/

The converter rebuilds the node graph in TSL node for node. Node groups are inlined, and every output gets a named constant, so you can trace any line of the module back to Blender. Where Blender's two renderers disagree, it follows **EEVEE**, since that's what a real-time three.js scene is closest to.

Each node is tested on its own: Blender renders it, three.js renders the exported module, and the two images are compared. The tests run on Blender 5.0 and 5.2 whenever the converter changes.

## Supported

These convert directly to TSL. A few have small differences from Blender in edge cases (Refraction, for example, comes out a little brighter on a sphere); when one applies, the export notes say so.

### Shaders
Principled BSDF, Diffuse, Glossy, Metallic, Glass, Refraction, Sheen, Specular (EEVEE), Emission, Transparent, Holdout, Mix Shader, Add Shader, Shader to RGB.

### Textures
Image Texture, Noise, Wave, Gradient, Checker, White Noise, Brick, Magic, and Voronoi (see below).

### Colour and maths
Math, Vector Math, Mix (every blend mode), Color Ramp (every interpolation), RGB Curves, Float Curve, Vector Curves, Map Range, Clamp, Invert, Gamma, Bright/Contrast, Hue/Saturation/Value, RGB to BW, Blackbody, Wavelength, and all the Separate / Combine nodes (XYZ, Color, RGB, HSV, HSL).

### Vectors
Mapping, Vector Rotate, Vector Transform, Normal Map (tangent, object and world space, OpenGL and DirectX), Bump, Displacement, Vector Displacement.

### Inputs
Value, RGB, Attribute, Color Attribute, UV Map, Texture Coordinate, Geometry, Tangent, Object Info, Camera Data, Light Path (as seen from the camera), Normal, Fresnel, Layer Weight.

### Keyframes
Keyframed input values, including inside node groups, become curves driven by a `frame` uniform. Linear and constant keys are exact. See [Uniforms](https://tools.ashthornton.dev/blender-to-tsl/docs/threejs.md#uniforms).

## Approximated

These convert to the nearest thing three.js has, and the export notes name each one:

| Node or feature | What you get |
|---|---|
| Translucent, Subsurface Scattering, hair BSDFs | A diffuse shader of the same colour |
| Toon BSDF | Diffuse, or glossy with roughness = Size |
| Ray Portal | Transparent |
| Shader to RGB | A simple light from three uniforms ([details](https://tools.ashthornton.dev/blender-to-tsl/docs/threejs.md#shader-to-rgb-lighting)) |
| Ambient Occlusion | AO = 1, colour passed through (real-time AO is a post-process in three.js) |
| Bevel | The unbevelled normal |
| Hair / Particle / Point / Volume Info | 0, as on a mesh surface in Cycles |
| Noise: 2D, 4D and non-fBm types | 3D fBm noise |
| Voronoi: 2D, 4D, F2, distance to edge, n-sphere, Detail above 0 | One octave of three.js' Voronoi |
| Eased keyframes | Linear between keys |
| F-curve modifiers | Ignored |
| Subsurface, coat tint, volume | Ignored |
| Vertex displacement | Bumps the normal instead of recomputing it; detail depends on mesh density |
| Filmic and other view transforms | No three.js tone mapping matches them |

**Any node not listed** becomes a constant 0.5 and gets a note, so the module still compiles.

## Voronoi

Blender's Voronoi and three.js' built-in one have the same scale and range, but different cells. Turn on **Match Blender Voronoi Exactly** in the panel to include a port of Blender's Voronoi in the module, so cells land exactly where Blender puts them. It costs some extra code.

A material that needs something three.js' Voronoi doesn't have (Smooth F1, the Color or Position outputs, or a distance other than Euclidean) always uses the port for all its Voronoi nodes, so cells stay shared between them.

## Getting the closest match

- **Use EEVEE in Blender** when you compare. three.js is a real-time renderer, and the converter targets EEVEE where it and Cycles differ.
- **Set three's tone mapping** to match your view transform. See [Matching Blender's colours](https://tools.ashthornton.dev/blender-to-tsl/docs/threejs.md#matching-blenders-colours).
- **Leave Match Blender Highlights on**, unless highlights shimmer on small, moving objects.
- **Export tangents** with meshes that use tangent-space normal maps.
- **Compare from the same camera.** An agent can render Blender's viewport and screenshot your page for you.

> **Note**
>
> Found a node that converts wrong, or one you'd like supported? [Report it](https://tools.ashthornton.dev/blender-to-tsl/docs/support.md) with a small .blend that shows it.
