Skip to content
/ TMP3D Public

A small extension that makes 3D text with Unity's TextMeshPro possible. It uses raymarching and a geometry shader to work around the limitations of TMP at the moment

License

Notifications You must be signed in to change notification settings

Ikaroon/TMP3D

Repository files navigation

TMP3D Logo

GitHub (Pre-)Release Date

Text Mesh Pro 3D

This is a small extension that makes 3D text with Unity's TextMeshPro possible. It uses raymarching and a geometry shader to work around the limitations of TMP at the moment.

Features

  • Solid, unlit shader (3D)
  • 3D character properties and animation
  • Outline support
  • Bold text support
  • Italic text support
  • Debug rendering
    • Steps: Showing shader complexity
    • Mask: 3D uvs
  • Text Creation Helper
  • Multiple Raymarching Algorithms
    • Simple: Equal sized steps
    • Temporal: Optimized for Temporal Antialiasing
    • SDF: Using TextMeshPro's distance values
  • Strikethrough text support
  • Underline text support
  • Face texture support
  • Documentation
  • Solid, surface shader
  • Solid, unlit shader (UI)
  • Sprite support

In Evaluation

  • Bevelled text1
  • Full fledged freeform text using textures1
  • Translucent, unlit shader
  • VR optimizations2

Compatibility

Graphics API Built-in HDRP URP
DirectX 11 ✔️ Compatible ✔️ Compatible ✔️ Compatible
DirectX 12 ✔️ Compatible ✔️ Compatible ✔️ Compatible
Vulkan ✔️ Compatible ✔️ Compatible ✔️ Compatible
OpenGL Core ✔️ Compatible ⚠️ Invalid ✔️ Compatible
OpenGLES23 ❌ Incompatible ⚠️ Invalid ❌ Incompatible
OpenGLES3 ✔️ Compatible ⚠️ Invalid ✔️ Compatible
Metal4 〰️ To Be Tested 〰️ To Be Tested 〰️ To Be Tested

If the shader doesn't work for a compatible combination try to reimport the shader file first! When the issue persists contact me!

Installation

PackageInstallation

  1. Open the package manager in Unity from Window>Package Manager
  2. Select the + dropdown button in the top-left corner of the package manager
  3. Select Add package from git URL...
  4. Enter https://github.com/Ikaroon/TMP3D.git as url and confirm

This method will always install the current state of the git. To get a released version head to the release page!

How to use

To understand how to setup a TextMeshPro for 3D you can check out the sample in the package. For downloading that follow these steps:

  1. Open the package manager in Unity from Window>Package Manager
  2. Select Text Mesh Pro 3D Support in the section Ikaroon
  3. Expand Samples
  4. Click Import next to Solid Text
  5. Now open the scene from Assets/Samples/Text Mesh Pro 3D Support/<version>/Solid Text/Scenes/Sample_TMP3D

If you still need help, here are some steps how you setup a TextMeshPro for 3D. There are two ways of creating a TextMeshPro 3D.

The Automatic way:

  1. Create a TextMeshPro in a scene from 3D Object>Text - TextMeshPro (3D)
  2. Replace the FontAsset with another font
  3. Click Create 3D Font Asset Variant if it's not a 3D font already (The button will be disabled otherwise)
  4. You have now access to 3D text!

The Manual way:

  1. Create a new FontAsset by using the Font Asset Creator from Window>Text Mesh Pro>Font Asset Creator
  2. Expand the created Asset and select the Material
  3. Change the Material's shader to TextMeshPro/3D/Unlit
  4. Create a TextMeshPro in a scene from 3D Object>Text - TextMeshPro NOT from UI>Text - TextMeshPro this is not supported yet.
  5. Add a TMP3D_Handler component from Script>Ikaroon.TMP3D>TMP3D_Handler
  6. Apply the FontAsset to the TextMeshPro component
  7. You have now access to 3D text!

Notice

Work on this project happens in my freetime and, therefore, I cannot promise if and when certain features are added.

Bugs

When you find a bug you can create a bug report on Github! I will try to cover them as quickly as possible.

Footnotes

  1. Tempering with the SDF values in the distance makes raymarching more difficult, I need to find a good way of evaluating the shortest distance. 2

  2. I currently don't have access to any VR device and, therefore, cannot optimize for it right now.

  3. Support for OpenGLES2 is currently NOT planned.

  4. I currently don't have access to any Mac and, therefore, cannot test it for Metal right now.

About

A small extension that makes 3D text with Unity's TextMeshPro possible. It uses raymarching and a geometry shader to work around the limitations of TMP at the moment

Topics

Resources

License

Stars

Watchers

Forks