View Issue Details

IDProjectCategoryView StatusLast Update
0002987NoesisGUIC++ SDKpublic2026-08-31 20:31
Reportersaji8k Assigned Tojsantos  
PrioritynormalSeverityfeature 
Status assignedResolutionopen 
Target Version3.2 
Summary0002987: Use Multi-Channel Signed Distance Fields to get Sharper Text Corners
Description

When displaying text with NoesisGUI, the corners of each character are rounded and not sharp.

This is occurring because text in NoesisGUI is rendered using (Single-Channel) Signed Distance Fields.

Please add support using Multi-Channel Signed Distance Fields to rendering text. This would allow for sharp corners while still maintaining good performance.

Pretty much every bespoke engine uses MSDF these days
Godot - https://docs.godotengine.org/en/stable/tutorials/ui/gui_using_fonts.html
Evergine - https://evergine.com/new-font-and-text-feature/
Hazel - https://github.com/TheCherno/Hazel

Introduction to MSDF Text Rendering Video by TheCherno
https://www.youtube.com/watch?v=J26hm7r-k6A

Steps To Reproduce

Create a TextBlock with the Arial FontFamily and a huge FontSize (like 300).
Compare the visual output of Blend and NoesisGUI renderers.
In the Blend renderer, the corners of each character are sharp. In the NoesisGUI renderer, the corners of each character are rounded.

PlatformAny

Activities

jsantos

jsantos

2024-04-30 18:18

manager   ~0009440

Last edited: 2024-04-30 18:19

Planned to start working on this after 3.2.4 and first studio alpha.

We added support for Variable Fonts in 3.2.4, this is next.

Demond

Demond

2026-03-18 08:14

reporter   ~0012058

The Slug Algorithm has gone public! What do you think about its use?
https://terathon.com/blog/decade-slug.html
https://github.com/EricLengyel/Slug

jsantos

jsantos

2026-03-23 13:08

manager   ~0012088

It is a very good algorithm, but only for static vectors and requires a preprocessing step

jsantos

jsantos

2026-03-24 21:11

manager   ~0012103

Just a clarification to my previous comment: Slug requires significant preprocessing of bands and bounding boxes, which is not very compatible with dynamic geometry. I haven’t experimented with it yet, but I plan to do so soon. My impression, however, is that this will be quite CPU-intensive. If we don’t precompute the bands, it will likely become very GPU-intensive instead.

I understand that text is static, but we’re aiming for a solution that unifies everything—static paths, dynamic paths, and text—under the same technology. We’ve been working on this new architecture for quite some time.

That said, we could definitely add support for the .slug format and use it alongside TTF.

saji8k

saji8k

2026-08-25 03:34

reporter   ~0012562

I agree with Demond, when I made this post back in Jan 2024, MSDF was the best solution but that simply isn't the case anymore, Slug is.
I don't think there is any point in adding MSDF now, I would rather you add slug support to get sharper text.
The reason that slug is better than MSDF is very clearly outlined on page 9 of this document:
https://slughorn.io/UserGuide.pdf

Yes it needs to be pre-computed, but I think this small tradeoff is worth getting resolution independent text and paths for users that need it.
The pre-computation could even be built into Noesis Studio allowing you to export fonts and paths for resolution independent use.

Slug isn't the solution for everything, so I don't think anyone expects it replace the new/current architecture but it seems it should be able to co-exist with it.

jsantos

jsantos

2026-08-31 20:31

manager   ~0012571

We are working on this. Noesis 4.0 was focused on API stability to make the adoption of Noesis Studio easier.

The next big thing is our new renderer: fully GPU-based, with pixel-perfect rendering in both 2D and 3D.

Super excited about this, although it will take some time before it officially appears.

Issue History

Date Modified Username Field Change
2024-01-03 07:48 saji8k New Issue
2024-01-03 07:49 saji8k Description Updated
2024-01-04 14:29 jsantos Assigned To => jsantos
2024-01-04 14:29 jsantos Status new => assigned
2024-01-04 14:29 jsantos Target Version => 3.2
2024-04-30 18:18 jsantos Note Added: 0009440
2024-04-30 18:19 jsantos Note Edited: 0009440
2026-03-18 08:14 Demond Note Added: 0012058
2026-03-23 13:08 jsantos Note Added: 0012088
2026-03-24 21:11 jsantos Note Added: 0012103
2026-08-25 03:34 saji8k Note Added: 0012562
2026-08-31 20:31 jsantos Note Added: 0012571