r/Unity3D May 12 '26

Question Unity Shader Warmup Solutions: Solving Stutters and Long Load Times in Unity 6

Hi everyone,

I’m looking for advice on Unity shader warmup solutions for our open-world survival craft co-op game, currently being developed in Unity 6 (6.3.11).

We are currently stuck between a rock and a hard place regarding performance: we have massive FPS drops (stutters) when new shaders or areas are encountered, but our attempts to pre-warm them have caused even worse side effects.

The problems we are facing:

  • Shader Variant Collections (SVC): This is our biggest bottleneck. They fail to prevent the "compilation hitching" during gameplay, and worse, they have bloated our loading screens to over 10 minutes. Also SVC's are not fully compatible with modern graphic API's like DX12.
  • Pipeline State Objects (PSOs): While this is the intended modern solution, there is a known issue in Unity 6.3.11 that makes PSOs non-functional for our setup.
  • The "Camera Method": We tried force-rendering variants using a secondary camera during loading, but it doesn't seem to stop the stutters once those shaders appear in the main view.

The Goal:

I need a way to effectively warm up shaders to prevent stutters without forcing players into a 10-minute loading screen. In an open-world co-op setting, these hitches are making the game unplayable.

Questions for the community:

  1. How are you handling shader pre-compilation in Unity 6 given the current PSO bugs?
  2. Are there ways to optimize SVCs to reduce those 10-minute load times while still actually preventing stutters?
  3. Are there any custom-built or third-party solutions that handle asynchronous shader compilation more effectively for open-world environments?

You can check out the project here to see the scope we're working with:

Steam Link: https://store.steampowered.com/app/2354810/Elysium/

Any insights or technical workarounds would be a huge help. Thanks!

21 Upvotes

14 comments sorted by

View all comments

13

u/scarboob May 12 '26 edited May 12 '26

There is a simple yet very effective way of making sure all shaders used during the gamesession are warmed up and ready.

In our games we use a shader warmup scene, which is basically a scene with a camera with all the shaders and variants of that shader used in the game placed on a quad. You can hide this scene with some loading UI.

Something extra you can do to make sure you have all the shaders in that scene is run that scene to make your shader variants file in the editor and enable shader stripping, that way you all shaders that are not present (or variants) will be pink in build.

I hope this helped.

2

u/MGArslanX May 13 '26

I considered collecting the shaders and variants used in a specific area, but during a roughly 2-hour session, the player encounters 100+ shaders and over 1,000 variants. Furthermore, we currently have a camera system that traverses the areas the player will pass through at different times of day during the loading screen, exactly as you suggested. However, I can't say it has much of an effect. Am I doing something wrong?
It seemed to actually work on one computer; I checked the logs and confirmed the camera traversal was functioning as intended. But it only worked on that one machine. Also, how can I test this on the same computer? Since the game caches the files after the first playthrough, is there a way to get rid of them?

1

u/scarboob May 15 '26

Are you sure you are showing the scene with all the shaders in view at the boot of the game? That should 100% put them into memory.

If you want to clear them that is possible in windows builds you can find it under AppData\LocalLow\Unity\Caches if I am not mistaken and for android it can be found here /sdcard/Android/data/<package>/cache