Advanced 6 min read

Mastering Custom Fonts & Arabic/RTL Support in 3D

Most web 3D tools break when you try to type in Arabic, Hebrew, or Urdu. Here is how Vextrude solves it, and how to use your own font files.

Vextrude Team

Updated Dec 29, 2025

Custom fonts and Arabic RTL text in 3D

Typography is personal. Sometimes the default fonts just won't cut it, or you need to support a language that isn't written left-to-right.

1. Using Custom Fonts (.TTF / .OTF)

Vextrude uses the Three.js FontLoader, which typically requires a special JSON format. However, we have integrated a real-time converter (using Opentype.js) so you don't have to worry about that.

How to upload:

  1. Locate the Font section in the left sidebar.
  2. Click the Upload File button.
  3. Select any .ttf or .otf file from your computer.
  4. The tool will instantly parse the font shapes and regenerate the 3D mesh.

Note: Your font is processed locally in your browser. It is never uploaded to our servers, ensuring your font licenses remain secure.

2. The RTL Challenge

If you have ever tried to paste Arabic text into Photoshop or a standard 3D app, you know the pain: the letters disconnect, and the text reads backwards (Left-to-Right instead of Right-to-Left).

This happens because most graphics libraries (like WebGL) don't natively understand "text reshaping" or bi-directional (Bidi) algorithms.

3. How Vextrude Handles Arabic & Urdu

We have built a custom implementation of Arabic-Persian-Reshaper directly into the Text Tool.

  • Auto-Detection: As soon as you type characters from the Arabic or Hebrew unicode blocks, the tool detects it.
  • Reshaping: It converts the "isolated" forms of letters into their "medial" or "initial" forms so they connect correctly.
  • Reordering: It visually reverses the string so it renders Right-to-Left in the 3D space.

If for some reason the detection fails, you can manually toggle the "Force RTL" switch in the Advanced settings.

4. Mesh Optimization for Performance

3D text can generate a lot of triangles, especially with curvy fonts or serif typefaces.

If you are exporting for a game or a mobile web experience, look for the "Curve Segments" slider.

  • High (12+): Very smooth curves. Best for high-res rendering or 3D printing.
  • Low (1-4): More angular curves, but significantly lower file size (polycount). Best for real-time games.

Why Arabic Breaks in Naive 3D Text

Type "مرحبا" into a tool that has not been built for it and you get disconnected letters in the wrong order. This is not a font problem — it is a missing shaping step.

Arabic letters change form depending on position in the word. Most have four: isolated, initial, medial and final. The letter ع is a different glyph in each. A renderer that maps each character straight to its default glyph produces the isolated form every time, so the word arrives as a row of unjoined shapes.

On top of that, the text runs right to left, and any embedded numbers or Latin words run left to right inside it — the bidirectional algorithm that resolves this is a specification in its own right.

The same class of problem affects Devanagari, where consonant clusters combine into conjunct forms, and Thai, where marks stack vertically. If a tool advertises Unicode support, that tells you it can store the characters, not that it can shape them.

Kerning Is Why Your 3D Text Looks Amateur

Set a word in 3D and it often looks subtly loose compared with the same word on screen. The usual cause is that kerning pairs were never applied.

Fonts ship with a table of exceptions: specific letter pairs that need tightening or loosening beyond their default advance widths. "AV", "To", "Ye" and "P." are classic examples — without adjustment, "AV" leaves a visible gap because the diagonal of the A and the diagonal of the V create empty space between their bounding boxes.

Many 3D text pipelines place glyphs by advance width alone and skip the kern table entirely. If your lettering looks gappy in specific places rather than uniformly, that is what you are seeing.

The practical fix is manual: set problem pairs as separate objects and nudge them. Tedious, but for a logo you set once it is a few minutes of work.

Ligatures and Other OpenType Features

OpenType fonts carry substitution rules — standard ligatures like "fi" and "fl", discretionary ligatures, small caps, oldstyle figures, stylistic alternates. Each is a feature tag the renderer must actively request.

3D text engines generally apply none of them. Usually that is harmless. It becomes visible with "fi", where the dot of the i collides with the hook of the f in many serif faces — the ligature exists precisely to avoid that collision, and without it the pair looks broken.

If you need a ligature and the pipeline will not produce one, set the text in a vector editor with the feature enabled, convert to outlines, and extrude the resulting SVG instead. You lose editability and gain exact typographic control.

Which Typefaces Actually Print

Typeface choice matters more in 3D than on screen, because thin shapes become physically fragile.

Works well: geometric sans faces with even stroke weight and generous counters. Medium and bold weights. Anything designed for signage.

Works badly: Didone serifs such as Bodoni, where hairline strokes contrast with thick stems — the hairlines fall below nozzle width and vanish. Light and thin weights generally. Scripts with delicate connecting strokes, which snap at exactly the join.

Counters are the other constraint. Letters like "e", "a" and "g" have enclosed holes that close up as size decreases, turning the letter into a solid blob. A face with large open counters survives small sizes far better than one with tight apertures, whatever the stroke weight.

Missing Glyphs and Tofu Boxes

An empty rectangle where a character should be means the font has no glyph for that codepoint. The text is correct; the typeface simply does not cover it.

Most Latin fonts include a few hundred glyphs. Full Cyrillic, Greek, Arabic or CJK coverage is comparatively rare, and CJK in particular requires thousands of glyphs — which is why those font files run to megabytes while a Latin face is tens of kilobytes.

Before blaming the tool, open the font in a character viewer and confirm the glyph exists. If it does not, the answer is a different font rather than a different setting. Noto is the usual fallback, since it was built specifically to cover scripts other families skip.


Try these features now

Upload your own font or type in Arabic to see the magic.

Go to Text Tool