Text 3D

Read with AI
All docs in one file (llms-full.txt)
Text3D #3D #Node

Takes a string as contours, straight from the vector outlines of the typeface, extrudes it along Z, and outputs it as a Mesh. It is a sibling of Image Extrude, but because it does not pass through an image there is no resolution setting; the fineness of the curves is decided by Detail. Connect the Mesh to Mesh Renderer or CopyToPoints to draw it. The origin of the mesh is the center of the bounding box of the whole string, and the front face (the side facing the default camera) is on the negative z side.

The computation runs in the background without stalling the frame, and it rebakes only when the body text, the font or a parameter changes (there is no Live/Bake switch). Besides the Text port, the body text can be typed directly into the text field on the node. Pressing Enter inside the field makes a line break, and the lines are laid out one by one. Overlapping glyphs (with italics, or when the letter spacing is tightened) are merged into a single filled region.

Settings on the node

  • Text field — the body text. When the Text port is connected, its value becomes the body text
  • Font — the typeface dropdown. Auto (default) picks a typeface that can display Japanese automatically from the OS. Refresh Fonts picks up typefaces installed after startup. You can also select one by feeding a string with the typeface name into the Font port
  • Left / Center (default) / Right — the alignment of the lines. The mesh as a whole is always centered, so what this affects is the position of each line when there are several

Notes on the ports

  • FontSize — the size of one character (1 em) in world units (default 5, lower limit 0.01)
  • Depth — the thickness of the extrusion (default 1)
  • Bevel — the width of the bevel on the front and back edges (in world units, default 0 = no bevel). Characters where the bevel breaks down in thin areas have their width reduced automatically, and the status shows “面取りを縮めた輪郭N本” (bevel narrowed on N contours)
  • Bevel Segments (labeled Segments on the node) — the number of subdivisions of the bevel. Clamped to 1-8 (default 1). 1 is a flat 45° bevel, 2 or more gives a rounded bevel
  • LineSpacing — the line-spacing multiplier (default 1 = the line spacing of the typeface as is)
  • LetterSpacing — the letter spacing. A multiplier relative to 1 em, so 0.1 opens a gap of 10% of one character width between characters (default 0; negative values tighten it)
  • Detail — clamped to 0-1 (default 0.5). The number of subdivisions per curve (2 at 0, 16 at 1)
  • FrontFace / BackFace (labeled Front Face / Back Face) — whether to cap the front and back faces (default: both ON). With both OFF you get a tube of just the character outlines

The contour points total at most 16384; anything beyond that is thinned out evenly.

The status line shows Baking… and N polys / M verts, plus “Text が空” (text is empty) when the body text is empty and “フォント無し” (no font) when the typeface cannot be resolved. A character a typeface does not have comes out as tofu (a box). Vertical writing and ligatures are not supported.

Input ports

Port IDType
Textstring
Fontstring
FontSizefloat
Depthfloat
Bevelfloat
Bevel Segmentsint
LineSpacingfloat
LetterSpacingfloat
Detailfloat
FrontFacebool
BackFacebool

Output ports

Port IDType
MeshMeshOutput

Scriptable members

PathType
textInputstring
fontInputstring
fontSizeInputfloat
depthInputfloat
bevelInputfloat
bevelSegmentsInputint
lineSpacingInputfloat
letterSpacingInputfloat
detailInputfloat
frontFaceInputbool
backFaceInputbool
textstring
fontNamestring

Synapse Apps (scripting)

await synapse.modules.create({ type: "Text3D" })

Pages linking here

Also referenced from