UI.Text and Canvas.SendWillRenderCanvases() eating up 50% of my CPU!?

Canvas.SendWillRenderCanvases() is eating basically 50% of my CPU. I’m only using a simple string with the font from the 2D roguelike demo.

How can I fix this? I’m not using pixel perfect texts and I turned off dynamic character mode.
The rendering mode is “Hinted Raster” which is supposed to be performant. I’m feeling as if the new Unity UI has some terrible performance bugs built in… but I’m not sure yet. Same performance bug when using dynamic character mode.

Hah. It’s actually MUCH cheaper to render (~40 FPS increase) the text to a seperate camera, then render that text to a quad with transparent background, fade the quad material and then render the quad on top of my main camera as a GUI. This is REALLY weird and inefficient of Unity. o.o

It just seems that someone at Unity did some inefficient coding when it comes to rendering/updating text (?). Not really sure why. Maybe recreating the string + reallocating/recreating all vertices every frame?

I have a problem similar to this, solved just changing from SCREEN SPACE - CAMERA to SCREEN SPACE - OVERLAY, that increased my fps by 100. :smiley:

When I disabled Pixel Perfect on the canvas the frame rate drop went away.

I noticed this problem in my project a while ago. I actually just fixed it and thought I would share my answer.

I simply removed all UI Outline scripts I had on my texts and my performance shot up!

I guess Outline (and probably Shadow) UI scripts REALLY affect performance.