- Geometry
- Render
Surface Renderer
Purpose
Section titled “Purpose”Surface Renderer draws a Scene with the graphics card’s rasteriser instead of tracing rays. The picture has no grain, needs no accumulation and no Reconstruct, and the same input gives the same frame every time. Lights cast shadows from shadow maps. Ambient occlusion and short contact shadows darken creases. An optional procedural sky or solid colour replaces the flat ambient, and one layer of glass renders over the opaque frame.
It does not trace light between surfaces. There is no indirect bounce, no reflection of other objects and no caustics. For that, use Realtime Trace. Pick Surface Renderer for speed, for a clean base to build graphic looks on downstream, and for passes to composite with. Its misses stay transparent, and it can publish surface ids, uv, rest position and other passes the path tracers do not have.
Place Surface Renderer from the Geometry view of the Voro menu, under Render. On its Scene page, set Scene to a Scene and Scene Mode to Scene, as on the other renderers.
Set the render size in Resolution1 and Resolution2 on the Renderer page. It opens at 1920 by 1080. Surface Renderer has no Preset menu.
It publishes beauty alone at first. To add passes, open the AOVs page and add rows to Outputs. Each row picks one Pass, and each pass gets its own output connector, named after it. Choose each pass once. Changing the pass in a row that is already wired keeps the wire and sends the new pass down it. Removing a row whose output is wired is refused until you disconnect it.
Inputs and outputs
Section titled “Inputs and outputs”scene takes the collected scene. The generated table below lists beauty only, because the other outputs come from your choice on the AOVs page:
beautyandcoverage. Beauty’s alpha is the pixel’s coverage, so misses are transparent.- Lighting layers:
base_color,emission,diffuse,specular,lightingandshadow.lightingis the light arriving at the surface before its colour.shadowis direct-light visibility, 1 where no direct light falls. - Surface guides:
depth,geometric_normal,normalwith roughness in its fourth channel,uv,restandtangent. - Identity:
object_id,material_idandsurface_id. They carry exact integers and never blend at an edge. - History:
motion, andvalidity, which holds each pixel’s coverage and whether its uv, its rest position and its match with last frame are valid.
Every pass is a GPU float32 image with the bottom row first. Colours are linear with straight alpha. A miss reads zero, except depth, which reads 1e30. Only the passes you select cost memory and time. Selecting only guides skips the lighting and shadow work.
Controls
Section titled “Controls”The Renderer page shows the controls under their plain names, such as Cutdistance and Shadowextent.
- Resolution1 and Resolution2 set the render size, up to 8192 on each axis.
- Exposure multiplies the linear image. Ambient is the flat fill light used while the environment is off.
- Shadows is 1 for on and 0 for off. Shadowsize sets the shadow map’s resolution, from 256 to 4096. Shadowextent is the size of the world the shadows cover, in world units, and it must fit the scene. Shadowbias moves the shadow test off the surface along its normal, in world units.
- Aoradius and Aostrength set how far ambient occlusion looks and how dark it gets. Contactlength is the length of the short contact shadow traced toward each light.
- Coveragesamples is 1 or 4. 4 smooths edges. 2 and 3 are reported as invalid. Ids stay whole at 4, one surface per pixel.
- Pointradius and Tuberadius are the radii for points and lines that carry no radius of their own.
- Cutdistance is how far the camera can move in one frame before Surface Renderer treats it as a cut and drops last frame’s match from
motionandvalidity. A turn over 45 degrees, a lens change and a change of topology do the same. Reset drops it by hand. - A Sky selected on the Scene or the renderer supplies environment light, taking precedence over the fallback controls below. Its sun casts shadows like a distant light.
- Envenabled 1 replaces Ambient with the fallback environment when no Sky is selected. Envmodel 0 is the procedural sky and 2 a solid colour. 1, HDR, falls back to Ambient with a warning. Use a Sky with its
hdrinput for HDR lighting. Envcolor, Envintensity, Sundir, Sunintensity, Skyintensity, Turbidity and Groundalbedo shape the fallback environment. - Aovs is the stored list the AOVs page writes. It is read only in TouchDesigner.
Surface Renderer draws a Material’s colour, metalness, roughness, specular, IOR, emission and all five image maps, as the path tracers do. It swaps in a neutral grey for an authored look, thin film, coat, fuzz and the Emissive model. It skips authored Light programs and Unified Volume volumes, and ignores per-point roughness and metallic sources. Each substitution or skip is a warning that names the Material, light or object, and everything else still draws. It only checks Materials that something visible uses.
A Voro Light preset that runs a light program is skipped too. For a light here, use a native TouchDesigner Light COMP, or clear the Light’s Source and pulse Reload.
Glass renders as one layer. Glass behind glass shows only the nearest, refraction bends only what is on screen, and every pass except beauty shows the opaque surface behind. Glass tints the shadows it casts.
With no lights and no environment, a default directional light keeps the scene visible. The environment lights surfaces but is not drawn behind them.
Lights use the same unit as in the path tracers. A light that makes a facing white surface read 1.0 there makes it read 1.0 here, though the whole picture differs because nothing bounces. The Rays page on Geometry and Place does nothing here.
With no camera selected, nothing falls back to a default. A missing camera, an invalid size or invalid scene data stops the render with an error, because no trustworthy frame can be made.
Inputs
-
scenescene required
Outputs
-
beautyimage required
Parameters
Section titled “Parameters”Renderer
op('surface_render').par.Resolution1 - Default:
1920- Range:
- 1 to 8192
op('surface_render').par.Resolution2 - Default:
1080- Range:
- 1 to 8192
op('surface_render').par.Cutdistance - Default:
5- Range:
- 0.01 to 10000
op('surface_render').par.Coveragesamples - Default:
1- Range:
- 1 to 4
op('surface_render').par.Shadows - Default:
1- Range:
- 0 to 1
op('surface_render').par.Reset - Default:
None
op('surface_render').par.Exposure - Default:
1- Range:
- 0 to 100
op('surface_render').par.Ambient - Default:
0.08- Range:
- 0 to 10
op('surface_render').par.Shadowextent - Default:
20- Range:
- 0.01 to 10000
op('surface_render').par.Shadowbias - Default:
0.001- Range:
- 0 to 0.1
op('surface_render').par.Aoradius - Default:
0.35- Range:
- 0 to 100
op('surface_render').par.Aostrength - Default:
1- Range:
- 0 to 2
op('surface_render').par.Contactlength - Default:
0.3- Range:
- 0 to 100
op('surface_render').par.Shadowsize - Default:
2048- Range:
- 256 to 4096
op('surface_render').par.Pointradius - Default:
0.02- Range:
- 0 to 100
op('surface_render').par.Tuberadius - Default:
0.01- Range:
- 0 to 100
op('surface_render').par.Envenabled - Default:
0- Range:
- 0 to 1
op('surface_render').par.Envmodel - Default:
0- Range:
- 0 to 2
op('surface_render').par.Envcolorr - Default:
0.5- Range:
- 0 to 1
op('surface_render').par.Envcolorg - Default:
0.5- Range:
- 0 to 1
op('surface_render').par.Envcolorb - Default:
0.5- Range:
- 0 to 1
op('surface_render').par.Envintensity - Default:
1- Range:
- 0 to 4
op('surface_render').par.Sundirx - Default:
0.2- Range:
- -1 to 1
op('surface_render').par.Sundiry - Default:
0.5- Range:
- -1 to 1
op('surface_render').par.Sundirz - Default:
0.4- Range:
- -1 to 1
op('surface_render').par.Sunintensity - Default:
1- Range:
- 0 to 20
op('surface_render').par.Skyintensity - Default:
1- Range:
- 0 to 4
op('surface_render').par.Turbidity - Default:
2.5- Range:
- 1 to 10
op('surface_render').par.Groundalbedo - Default:
0.1- Range:
- 0 to 1
AOVs
op('surface_render').par.Aovs - Default:
["beauty"]