Quality

Pick one of three presets with quality. When a preset is not enough, advanced changes single settings, such as the number of samples or light shining through glass.

Pick a preset

await render({ quality: 'preview' });
preview
A quick look at roughly how the render will turn out. Fast and cheap, but grainy. Up to 32 samples, 1024px by default.
studio
The default, and the one the pricing page quotes. Good for product images, including glass, metal and glossy surfaces. Up to 256 samples, 2048px by default.
ultra
For the large hero image on your homepage. Takes around six times as long as studio. Up to 2048 samples, 4096px by default.

What each preset sets

previewstudioultra
Max samples322562048
Adaptive threshold0.080.020.005
Max bounces4816
Diffuse / glossy / transmission2 / 4 / 43 / 8 / 86 / 16 / 16
Default size, long edge1024 px2048 px4096 px
Quick preview firstnoyes, 24 samplesyes, 32 samples
Denoisednoyesyes

samples is the most any pixel can get. A pixel stops earlier, as soon as it is clean enough, and adaptiveThreshold sets how clean that is.

Advanced settings

Most scenes never need advanced. Every field is optional and overrides the preset for that render.

await render({ quality: 'studio', advanced: { samples: 512, caustics: 'sharp' } });
FieldWhat it does
samplesThe most samples a pixel can get. The estimate prices it.
adaptiveThresholdHow clean a pixel has to be before it stops.
maxBounces, diffuseBounces, glossyBounces, transmissionBouncesHow many times light may bounce.
denoise, denoiserTurn denoising on or off, and pick the denoiser. The estimate prices it. A denoised preview is the cheapest clean image there is, a little over a plain one.
lightTreeFaster sampling for scenes with many lights. Chosen for you when unset.
lightScaleOne multiplier over every light in the scene. See Which lights render.
causticsLight shining through glass. See below.
clampIndirectA limit on how bright one indirect sample may be. Not set by default. See caustics in a video.
shadowCatcher, shadowPadThe ground shadow under a product on a transparent background.
viewTransform, toneCurveEmulationColor management. See Environment & lighting.
timeoutSecondsStop the render after this long, so it is never charged past it.

Light shining through glass

Caustics are the light that reaches a surface through glass: the bright pool under a tumbler, or the ripples below a bottle. They are off by default. Without them glass casts a solid shadow, the same as in your Three.js viewport.

Three.js
Rendered, caustics: 'soft'
Three.jsRendered, caustics: 'soft'

The viewport draws a pale solid and a black shadow. The trace follows the lamp through all fifty-seven facets and lays what comes out across the marble in front of the stone. Nothing in the scene says where that light should land. It is one setting: caustics: 'soft'.

1024×870·ultra preset·caustics: soft

await render({ advanced: { caustics: 'soft' } });
ValueWhat you get
not setA solid shadow under glass. Fastest, and the same as your viewport.
'soft'Works for any shape and any light. It is slow to clean up: where the light comes to a focus it can still be blotchy at studio samples.
'sharp'A clean pool of light where 'soft' leaves blotches, at two to four times the render time. It only covers light that goes from a lamp straight through smooth glass. Everything else still goes the 'soft' way.

One glass sphere over a marble floor, rendered three times. Only advanced.caustics differs.

not setnot set

1024×870·studio preset

caustics: 'soft'caustics: 'soft'

1024×870·studio preset·caustics: soft

caustics: 'sharp'caustics: 'sharp'

1024×870·studio preset·caustics: sharp

Which one to choose

  • 'sharp' for smooth glass under a small or distant lamp: a bottle, a tumbler, a lens, a sphere.
  • 'soft' for a cut stone. Under 'sharp' a diamond comes back with no caustic at all, because the light bounces around inside the stone before it leaves. The diamond above is 'soft' at 3072 samples.
  • 'soft' first when a large lamp stands close to a small object. It cleans up on its own there.
  • Light from an HDRI or from a glowing mesh always goes the 'soft' way, so a scene lit only by an environment gets the slow, grainy kind.
  • The rainbow a prism throws stays noisy with either value.

Set up the scene for a good caustic

Light the glass from behind or from the side. Glass throws its light forward, so a lamp next to the camera puts the caustic behind the product, where you cannot see it.

Give the light a surface to land on. On a transparent background there is no floor to brighten, and the light that lands inside the shadow stays grainy. Add a floor mesh to your scene, or use a color or environment background.

Caustics in a video

A caustic that looks fine in one image can flicker in a clip. More samples barely help. Two other things do:

await renderVideo({
  timeline,
  width: 1920,
  height: 1080, // render at twice the size you will publish, then scale down
  advanced: { caustics: 'soft', samples: 64, clampIndirect: 30 },
});
ChangeWhat it did
clampIndirect: 30Removes the rare, very bright hits that cause the flicker. Free. At 10 the clip is calmer still, and the pools of light are visibly dimmer.
Render larger, scale downThe biggest gain. 1920 wide at 64 samples costs about what 960 wide at 256 does, and is far steadier.
More samplesAlmost nothing. Spend the budget on size instead.

For the last of the flicker, run a temporal filter over the video before you scale it down. It averages each pixel with the same pixel in the frames around it, only where they barely differ, so moving edges stay sharp. With ffmpeg:

ffmpeg -i master.mp4 -an \
  -vf "atadenoise=0a=0.06:0b=0.12:1a=0.06:1b=0.12:2a=0.06:2b=0.12:s=9,scale=1280:720:flags=lanczos,format=yuv420p" \
  -c:v libx264 -preset slow -crf 20 -movflags +faststart clip.mp4

For a clip that loops, wrap it first so the filter can see across the seam. The looping caustics tutorial shows how.

Leave clampIndirect unset for a single image. There the caustic should be as bright as it really is.