Typography

February 2, 2026 · View on GitHub

GPU Text Rendering for Unity / VRChat

Unity 2022.3+ License: MIT

Japanese

Render 32 texts in 1 draw call with high quality. Fully GPU-driven, no C# runtime required.

Performance

Fragment shader instruction counts (Unity compiled shader stats, d3d11):

MathTextureBranch
Typography920331
SSVFX3,702102201
TexSvfx5,585210255

1/4 fragment instructions vs alternatives. Processing concentrated in Vertex Shader - performance gap widens with resolution.

AvgRatio
Typography0.471ms1x
SSVFX0.851ms1.8x
TexSV6.094ms13.0x

Features

  • High-quality edges with MSDF (sharp at any scale)
  • Unicode support (Japanese, emoji, ligatures)
  • Up to 8 fonts simultaneously
  • 5 Root Transforms (hierarchical structure)
  • Typewriter / Curve Path / Shake effects
  • Outline / Shadow & Glow / Fractal Noise
  • Stencil buffer support
  • VR Scale adjustment

Installation

  1. Import Thry Editor
  2. Import Typography unitypackage
  3. Set Typography/Mesh.asset to MeshFilter
  4. Create Material with Shader: GekikaraStore/Typography

Basic Usage

  1. Add fonts in Fonts section
  2. Enter text in Text Settings, click "Gen"
  3. Adjust Position / Rotation / Scale

Properties

Global

PropertyDescription
ProjectProject name (materials with same project share atlas)

Camera Settings

PropertyDescription
PositionVirtual camera position (for screen-space mode)
RotationVirtual camera rotation
FOVField of view (10-120)

Root Transforms

PropertyDescription
PositionRoot position (cm)
RotationRoot rotation
ScaleRoot scale

5 roots available. Assign texts to a Root for hierarchical transformation.

Text Settings

PropertyDescription
RootParent root (None / Root 1-5)
SpaceScreen / World coordinate mode
ModeText_Horizontal / Text_Vertical
TextText input + Gen button
FontFont selection (from Fonts section)
LayerDraw order (0-31, higher = front)
ColorText color (HDR)
PositionPosition (cm)
RotationRotation (ZXY order, Unity standard)
ScaleScale
PivotRotation center (character width units)

Animator

PropertyDescription
Typewriter
TypeSequential (1 char at a time) / Block (fixed window)
DirectionLeft to Right / Right to Left / Center Out (Sequential)
CenteringCenter text alignment (Enable / Disable)
ProgressDisplay progress (0-1, Sequential)
SmoothCharacter appear fade (0-1)
Fade WidthNext character overlap (0-1, 0=wait until complete)
OffsetMovement offset on appear
RotationRotation on appear
ScaleScale animation on appear
Visible CountStatic visible chars (Block)
Animating CountTransitioning chars (Block)
Char DelayPer-char stagger (Block)
Kerning & Tracking
AnchorSpacing anchor (Center / Left / Right)
SpacingCharacter spacing (-1 to 1)

Effector

PropertyDescription
Curve Path
X/Y/Z CurveCurve for each axis
IntensityDeformation strength (0-1)
OffsetCurve start position (0-1)
SpeedAnimation speed
RotationRotation along curve (0-1)
Shake
AmplitudeAmplitude (0-1)
FrequencyFrequency (0-20)
BlendPer-character to per-line blend
Outline
ModeOutline (filled) / Stroke (outline only)
WidthWidth (0-1)
ColorColor (HDR)
Shadow & Glow
IntensityIntensity (0-1)
SoftnessSoft shadow blur (0-1)
OffsetOffset
ColorColor (HDR)
Fractal Noise
ModeSimplex / Curl / FBM / Turbulence / Ridged / Marble
IntensityEffect intensity (0-1)
ScaleNoise scale
SpeedAnimation speed
ColorEffect color (HDR)
BlendMultiply / Replace / Add

Rendering Settings

PropertyDescription
Fade Min/MaxDistance fade range
Render TypeOpaque / Transparent / Overlay
CullCulling mode
ZTestDepth test
ZWriteDepth write
Source/Destination BlendBlend mode
Stencil
ReferenceStencil reference value (0-255)
Read/Write MaskMask value
CompareComparison function
Pass/Fail/ZFailStencil operation
Utility
Quad PaddingCharacter quad size expansion (0-1)
VR ScaleVR environment scale (0.1-1)

Specifications

ItemValue
Text count32
Font count8
Atlas4096x4096 BC7
Max characters32

Dependencies

License

MIT - See LICENSE

This project uses msdf-atlas-gen (MIT License). See THIRD-PARTY-LICENSES.md for details.

Sample

https://vrchat.com/home/avatar/avtr_20c77b57-edc0-4de3-bace-3b7b21b998bd

Acknowledgments

This project was inspired by ShaderToyText by Krzysztof Narkowicz (knarkowicz). His elegant approach to GPU-based text rendering laid the foundation for this work. Thank you for sharing your knowledge with the community.

Special Thanks

  • 皐月-Satuki
  • ぷくぷくまる
  • あまね
  • 一ノ瀬
  • みぃ_暇人
  • UniTea (group)
  • Everyone who helped with announcements