Ikaroon / TMP3D

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
Other
97 stars 7 forks source link
3d extension shader textmesh textmeshpro tmp unity unity3d volumetric

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

In Evaluation

[^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]: I currently don't have access to any VR device and, therefore, cannot optimize for it right now.

Compatibility

Graphics API Built-in HDRP URP
DirectX 11 :heavy_check_mark: Compatible :heavy_check_mark: Compatible :heavy_check_mark: Compatible
DirectX 12 :heavy_check_mark: Compatible :heavy_check_mark: Compatible :heavy_check_mark: Compatible
Vulkan :heavy_check_mark: Compatible :heavy_check_mark: Compatible :heavy_check_mark: Compatible
OpenGL Core :heavy_check_mark: Compatible :warning: Invalid :heavy_check_mark: Compatible
OpenGLES2[^3] :x: Incompatible :warning: Invalid :x: Incompatible
OpenGLES3 :heavy_check_mark: Compatible :warning: Invalid :heavy_check_mark: Compatible
Metal[^4] :wavy_dash: To Be Tested :wavy_dash: To Be Tested :wavy_dash: To Be Tested

[^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.

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. I am considering to open this up for contribution but for now you can manipulate the code as you please. This project is MIT licensed and may be used freely. (Check the license file for more information)

Bugs

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

Donation

If this project helped you, you can treat me to a coffee if you want :coffee:

ko-fi

Contact

If you need support with this package please contact me: support@marian-brinkmann.com