- Geometry
- Render
Font
Purpose
Section titled “Purpose”Font turns text into geometry. Type a word, pick a font, and give the letters depth and a bevel. It also builds outlines, stroke centre lines and convex collider pieces. Switch Source to SVG to work with a logo or drawing instead.
Place Font under Render in the Geometry view of the Voro menu.
- Enter Text on the Font page. Use
\nfor a new line. - Pick an installed Font and Style, or leave Font empty for the bundled Roboto Flex. Font File loads a
.ttf,.otf,.ttcor.otcand overrides those menus. - Set Size on the Layout page, then adjust Depth and Bevel Width on Solid.
- Wire
meshinto Geometry, give it a Material, and add the Geometry to your Scene.
For separate letters, wire glyphs into Place’s geometry input and rows into its rows input. Place spells the text with one copy per character. Edit the rows to move, turn or scale the letters independently.
For longer text, use Text DAT. A nonempty DAT replaces Text and preserves its line breaks. Pulse Reload after editing the DAT. Text itself updates as you type.
For a drawing, set Source to SVG and choose SVG File. Font reads shapes, transforms, fill rules and strokes. Size becomes the drawing’s height, centred on the origin. SVG colours do not carry over; give the mesh a Material.
Inputs and outputs
Section titled “Inputs and outputs”Font has no inputs and six outputs.
meshis the solid text or drawing, already laid out.glyphsholds each distinct glyph once, centred on its pivot, for Place.rowsholds one point per character, with its position and thevariantthat picks its glyph.outlinegives line segments around each filled boundary.uruns from 0 to 1 around each ring.skeletonfollows the centre of each stroke.widthgives the local stroke width;drawruns from 0 to 1 through each glyph in pen order for draw-on effects.collidersgives closed convex prisms.bodygroups pieces by character;piecenumbers them.
The solid mesh carries line, word, order and ramp attributes for looks and material selection. To colour words separately, set Geometry’s Attribute to word and add Matched Materials rows.
Controls
Section titled “Controls”Layout sets spacing, wrapping and alignment. Box Width wraps the text. Fit Width sizes the whole block to its widest line, Box fits wrapped text inside Box Width and Box Height, and Lines sizes each line separately for a poster stack.
Variable changes a variable font’s Weight, Width, Slant and Optical Size. Variations accepts other axes by tag, such as GRAD=50. Ramp varies axes across characters, words or lines. Choose Wave and animate Phase to send the change through the text.
Solid shapes the mesh. Depth adds thickness; Bevel rounds or chamfers the edges. Inflate puffs the faces instead of bevelling them. Stroke makes hollow letters with a band around the outline. Depth, bevel and stroke widths are fractions of the text’s em size.
Detail controls curve accuracy and the extra outputs. Raise Tolerance for fewer points. Turn off Build Colliders and Build Skeleton when you do not use them, especially while animating font axes.
- Font keeps the face’s kerning and ligatures. Features accepts OpenType tags such as
tnumfor even-width digits or-ligato disable ligatures. Fallback supplies missing characters; Direction sets the paragraph’s reading direction. - Font builds in the background. In TouchDesigner, the outputs can update on different frames after an edit.
- Collider pieces span the full depth and ignore the bevel. They describe the shape; using them in physics also depends on the solver’s mesh-collider support.
- Skeletons work best on letter strokes. A filled square gets a diagonal centre line.
Inputs
None
Outputs
-
meshmesh -
glyphsmesh -
rowsmesh -
outlinemesh -
skeletonmesh -
collidersmesh
Parameters
Section titled “Parameters”Font
op('font').par.Text What to write. \n starts a new line. Changes rebuild only the glyphs not yet seen.
- Default:
voro
op('font').par.Textdat A DAT whose text, when it has any, replaces Text: several lines as typed. Reload reads an edited DAT.
- Default:
"" (Empty String)
op('font').par.Font An installed font family. Empty uses Roboto Flex, the face Voro ships.
- Default:
"" (Empty String)
op('font').par.Style The family's style: Regular, Medium, Bold Italic, ...
- Default:
"" (Empty String)
op('font').par.Fontfile A .ttf, .otf, .ttc or .otc file; overrides Font and Style.
- Default:
"" (Empty String)
op('font').par.Svgfile An SVG file: paths, rects, circles, polygons; transforms, fill rules and strokes.
- Default:
"" (Empty String)
op('font').par.Reload Read the font, SVG file or Text DAT again.
- Default:
None
op('font').par.Fallback Families, separated by commas, for characters the font lacks. Empty: the system's; none: off.
- Default:
"" (Empty String)
op('font').par.Features OpenType features: ss01, tnum (even digits), smcp, -liga, ...
- Default:
"" (Empty String)
Layout
op('font').par.Size The em size of text, or the height of an SVG drawing, in world units. Depth, bevel and tolerances are in these units' fractions.
- Default:
1- Range:
- 0.0001 to 1000
op('font').par.Tracking Extra space after each glyph, in em.
- Default:
0- Range:
- -1 to 2
op('font').par.Linespacing A multiple of the face's own line height.
- Default:
1- Range:
- 0.1 to 5
op('font').par.Boxwidth Wrap lines at this width, in world units. Zero: lines break only at new lines.
- Default:
0- Range:
- 0 to 1000
op('font').par.Boxheight The box's height, in world units, for Fit.
- Default:
0- Range:
- 0 to 1000
Variable
op('font').par.Weight The wght axis of a variable font. Zero: the face's own.
- Default:
0- Range:
- 0 to 1000
op('font').par.Axiswidth The wdth axis, percent of normal. Zero: the face's own.
- Default:
0- Range:
- 0 to 200
op('font').par.Slant The slnt axis, degrees.
- Default:
0- Range:
- -20 to 20
op('font').par.Opticalsize The opsz axis. Zero: the face's own.
- Default:
0- Range:
- 0 to 144
op('font').par.Variations Other axes by tag: GRAD=50 XTRA=400. The font's axes are listed in status.
- Default:
"" (Empty String)
op('font').par.Rampweight Weight at the ramp's far end. Zero: weight does not ramp.
- Default:
0- Range:
- 0 to 1000
op('font').par.Rampwidth Width at the ramp's far end. Zero: width does not ramp.
- Default:
0- Range:
- 0 to 200
op('font').par.Rampslant Slant at the ramp's far end. Zero: slant does not ramp.
- Default:
0- Range:
- -20 to 20
op('font').par.Rampvariations Other axes at the ramp's far end, by tag.
- Default:
"" (Empty String)
op('font').par.Rampfrequency Wave: cycles across the text.
- Default:
1- Range:
- 0 to 10
op('font').par.Rampphase Wave: offset in cycles.
- Default:
0- Range:
- -10 to 10
Solid
op('font').par.Depth Front to back, bevels included, in em. Zero gives a flat double-sided face.
- Default:
0.2- Range:
- 0 to 10
op('font').par.Bevelwidth How far the face is inset from the outline, in em. Limited per point to under half the stroke.
- Default:
0.02- Range:
- 0 to 0.5
op('font').par.Beveldepth How far the bevel reaches along the depth on each side, in em.
- Default:
0.02- Range:
- 0 to 1
op('font').par.Bevelsegments - Default:
3- Range:
- 1 to 16
op('font').par.Inflate Puff the faces into rounded pillows this high, in em. Replaces the bevel.
- Default:
0- Range:
- 0 to 2
op('font').par.Inflateradius Distance from the edge at which the puff is full, in em. Zero: the shape's widest point.
- Default:
0- Range:
- 0 to 2
op('font').par.Smoothangle Side-wall corners sharper than this keep a crisp edge.
- Default:
30- Range:
- 0 to 180
op('font').par.Stroke Outline the letters with a band this wide, in em, instead of filling them. Zero: filled.
- Default:
0- Range:
- 0 to 0.5
op('font').par.Front - Default:
On- Options:
- Off, On
op('font').par.Back - Default:
On- Options:
- Off, On
Detail
op('font').par.Tolerance Curve accuracy: the largest gap between curve and mesh, in em.
- Default:
0.001- Range:
- 0.00001 to 0.05
op('font').par.Collidertolerance How far a collider piece may stand off the shape, in em. Zero gives exact convex pieces, more of them.
- Default:
0.01- Range:
- 0 to 0.5
op('font').par.Skeletonprune Drops skeleton spurs shorter than this many stroke widths.
- Default:
1- Range:
- 0 to 10
op('font').par.Buildcolliders Off skips the convex pieces: faster rebuilds while axes animate.
- Default:
On- Options:
- Off, On
op('font').par.Buildskeleton Off skips the stroke skeleton: faster rebuilds while axes animate.
- Default:
On- Options:
- Off, On