The more complex the shader, the lower the framerate, it's to be expected. Shaders that involve clipping are more complicated than shaders that don't. If you turn off clipping, you will likely see the same framerate with alpha blended as with transparent colored.
Alright... Since this is by no means my field, I just gotta ask: What is done so much differently than say in native iOS- & Android-development? Clipping there is per "widget" (UIView for iOS) instead of a dedicated panel, and there is no problem at all having clipping enabled on multiple views (it's on by default for each view). But here, with 2 panels clipping their content, the system runs on its knees... (No bashing, honest question).
Followup question about performance: What _the hell_ is this magic "Overhead" that sometimes eats up 20-50% of the CPU-time (pretty much constantly from time to time)? Got any ideas on how to track down the source of this godzilla of performance-eaters? Or is it just Unity-stuff when profiling, not affecting the apps performance?
We are in the finishing touches of our little 100% UI-based game, and compared to our previous one done in NGUI 2.x (a much larger project), this new one is having serious problems with running at a smooth framerate. Shader aside, UIPanel.LateUpdate & UIRect.OnUpdate are the real performance-killers (profiled on device without "Deep Profile"), together constantly consuming >10% CPU
at minimum and gives very little extra room for other components which will cause instantly bad framerate if anything besides UI may need a few ms of CPU-time. Now, looking at UIRect.OnUpdate, I can't really understand what is taking up this time since overloads does pretty much nothing but check some booleans, so may there be something else wrong in our setup (the app is at idle and all of our own scrips are at 0%)? In editor, it basically stays at <0.1%, but on android it's constantly 5-10% (iOS is <1%), 15-20% at times (idling in a menu)... UIPanel is jumping between 5-20% pretty much all the time (idling in a menu). Any common mistakes causing this to happen? Number of draw calls is held below 20 (mostly below 10 if not a lot of textures are displayed in a list), and this is on level with the previous app.
Also, with the new way of handling widgets (from my understanding, theres been a rather big change), Disabling/Enabling widgets is a big
Nono!, which in turn will further increase the amount of widgets polling stuff in OnUpdate. In NGUI 2.x we naturally disabled screens not currently visible, and enabled when transitioned in. This is not possible anymore, as it will create massive spikes stretching over multiple frames which will cause any current tweens to be almost completely ignored. What is the recommended thing to do with widgets that's not visible? Alpha = 0? (the latter is what we currently do. Not good enough but much better than SetActive).
Edit. Noticed that the spikes (at least in a quick test on Android) when enabling widgets is due to a massive GC.Collect somewhere within UIPanel.LateUpdate. What is allocated so intensely when enabling a widget with ~10 child-widgets?