Re-rasterization-free variable font morphing (knot-lattice blend)

ChaosBender1 pts0 comments

GitHub - GitBruno/VarFont: Re-rasterization-free variable-font morphing via a knot-lattice multilinear blend · GitHub

/" data-turbo-transient="true" />

Skip to content

Type / to search

Sign in<br>Sign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

GitBruno

VarFont

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

master

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>5 Commits<br>5 Commits

.github/workflows

.github/workflows

docs

docs

fonts

fonts

lib/imvarfont

lib/imvarfont

paper

paper

research

research

.gitignore

.gitignore

CMakeLists.txt

CMakeLists.txt

LICENSE

LICENSE

README.md

README.md

vcpkg.json

vcpkg.json

View all files

Repository files navigation

VarFont

~3× faster axis drags — ~0.23 µs/glyph on 13-axis Roboto Flex vs ~0.71 µs for FreeType re-instancing ·

4× fewer re-rasterizations per drag — 0.24 cell rebuilds per glyph render instead of a full re-instance every frame, with the glyph atlas left valid throughout ·

sub-pixel deviation from FreeType — max outline error 0.25 % em, mean per-pixel coverage error 0.08 % — numbers in the paper

Warning<br>The technique does not perform grid-fitting (hinting), so it offers no speed advantage at small text sizes where hinted rendering is required.

Dragging a variable-font axis usually re-instances every glyph and rebuilds the<br>atlas. This repo shows how to avoid that: knot-lattice morphing turns an<br>axis change into a cheap blend (and a GPU uniform update), with analytic<br>coverage that stays close to FreeType.

What you get here is the proof — the academic manuscript, numbers, and<br>harnesses that back the claim. Runtime GPU atlas / Face / morph live in the<br>product library ImVarFont (drop that<br>into an app).

Path<br>Purpose

paper/<br>Academic manuscript → paper.pdf, figures, citations

lib/imvarfont/<br>Vendored engine snapshot

research/<br>morph_probe, bench, figure tools

docs/<br>Implementation notes and benchmarks

Quick start

# Paper PDF (needs pandoc + tectonic — see paper/README.md)<br>make -C paper

# Validation / benches<br>cmake -B build -DCMAKE_BUILD_TYPE=Release<br>cmake --build build --target morph_probe bench

Binaries land in research/. Workflows: research/README.md.

License

MIT — see LICENSE. Bundled fonts keep their own licenses.

About<br>Re-rasterization-free variable-font morphing via a knot-lattice multilinear blend<br>Resources<br>Readme<br>MIT license<br>Activity<br>Stars<br>0 stars<br>Watchers<br>0 watching<br>Forks<br>0 forks<br>Report repository

Releases

Packages

Contributors

Languages

You can’t perform that action at this time.

paper research license readme variable font

Related Articles