Blender to TSL docsSupported nodes

Blender to TSL/Reference

Supported nodes

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

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.

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)
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.
  • 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.