godotengine / godotengine/godot
Per Instance Uniforms Silent Erroring
- Dominant language
- C++
- Stars
- 117k
- Forks
- 26.8k
- PR merge metrics
- PR metrics pending
Description
### Tested versions
4.5 dev5 and 4.5 beta1
### System information
Godot v4.5.beta1 - Manjaro Linux #1 SMP PREEMPT_DYNAMIC Sun, 29 Jun 2025 07:02:15 +0000 on Wayland - X11 display driver, Multi-window, 1 monitor - OpenGL 3 (Compatibility) - NVIDIA GeForce RTX 3060 (nvidia; 575.64) - AMD Ryzen 9 9900X 12-Core Processor (24 threads) - 30.44 GiB memory
### Issue description
When using per Instance Uniforms on mobile (Quest 3) or Web, strange issues occur with no warnings. On Quest, some of the MSDF atlas based labels I have created flicker. On the web they display as though there was no uniform set. In the MRP you can see how labels appear correct in the editor, but when exporting for web, only some of them will render correctly. (And far less than the 1024 global uniform buffer limit should be, since there's only around 50 labels)
Editor:

Web:

### Steps to reproduce
Download below MRP and export for web, notice that multiple labels show the same word due to the per instance uniform failing.
### Minimal reproduction project (MRP)
[Instance Unifrom Bug.zip](https://github.com/user-attachments/files/20987303/Instance.Unifrom.Bug.zip)
Apologies, this isn't the cleanest MRP ever, I just took the bare minimum for my label rendering to demo the issue.
Contributor guide
Research direction
Start by downloading the attached minimal reproduction project and exporting it for the web, then compare the output with the editor result described in the issue. Investigate the per-instance uniform path for the MSDF labels across Web and Quest 3, and verify the fix by ensuring the labels render their distinct words consistently and failures no longer occur silently.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- computer-graphics, game-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100