Stuttering in 2023.2 and 6000.0 in a minimal URP project on macOS

Hi.

The Intel 64-bit build seems to be locked at 60 FPS. If you force the Apple Silicon builds to 60 FPS does it decrease stuttering for you?

I noticed huge spikes caused by the PhysX physics in a project that has only a single cube:

Can you also see these spikes in the Unity Profiler? If so, can you try to disable PhysX just for testing if the stuttering decreases? You can do this by going to Edit → Project Settings → Physics → Game Object SDK and change it from PhysX to None.

I also noticed that setting QualitySettings.vSyncCount = 1 and making sure that Application.targetFrameRate is not set decreased stuttering for me.

Are you on Tahoe by chance? I had major stuttering issues with HDRP on both 6 and 6.3. I spent the past weekend completely downgrading to Sequoia and problem went away. At least for me, Tahoe is the culprit. Not sure who fixes it though. I too submit a bug report with Unity.

Tested on Tahoe, MacBook Pro, internal and external monitor:

  • External 60 FPS display: Constant stuttering when V-Sync is enabled and the target refresh rate is not set, regardless of whether PhysX is enabled or not.

  • Internal display: No stuttering! The app runs at 120 FPS, which corresponds to the refresh rate of the internal display.

It looks like V-Sync isn’t working on external monitors. I tested my external monitor at 60, 100, 120, and 144 FPS. I don’t think Apple will fix this, since most external monitors aren’t made by Apple.

It can’t be an external display issue, because I don’t have an external display and both of my Macs have stuttering / tearing problems with Unity. The stuttering presents itself differently on my 2019 Intel iMac and 2020 Apple Silicon MacBook Air, but it’s present in both, on the internal displays.

Both Macs currently running latest Sequoia, but the problem has been present long before Sequoia.

I am in the same situation. I have had the issues for a long time. On my m1 max the issues happens in editor and build. Vsync off but capping frame rate the issue is still present.

With V-Sync disabled, stuttering and tearing will always occur. Therefore, you should synchronize the graphics output with your monitor’s refresh rate. This is precisely why screen synchronization was invented back in the Commodore 64 era.

I noticed that 6000.5.0a6 has now been released. Issue tracker still says “In Progress in 6000.5.X”, but the fix is in the release notes for this version.

I gave it a go on my Intel iMac. I created a new project using the URP template and did a few test builds with different settings. I made development builds with automatic profiler attaching.

I added a sphere into the URP template’s default empty scene and attached the following script to it:

using UnityEngine;

public class VsyncTest : MonoBehaviour
{

    void Awake()
    {
        // Application.targetFrameRate = 60;

        Debug.Log(Screen.currentResolution);
        Debug.Log(QualitySettings.vSyncCount);
        Debug.Log(Application.targetFrameRate);
    }


    void Update()
    {

        transform.position = new Vector3(Mathf.Cos(Time.time) * 5, Mathf.Sin(Time.time) * 5, 0);

    }

}

27" iMac 2019
3,7 GHz 6-Core Intel Core i5
Radeon Pro 580X
5120 x 2880 @ 59.9928644487025Hz (internal display, no external displays connected)
Unity 6000.5.0a6
macOS Sequoia 15.7.3

Test 1 — MetalDisplayLink OFF / Vsync count 0 / Target frame rate -1

Constant stuttering and ridiculous screen tearing, which has been the normal state of Unity on at least this iMac model for years now. Playerloop under 6ms, but rendering looks like it’s done at 15 fps. Useless.

Test 2 — MetalDisplayLink OFF / Vsync count 1 / Target frame rate -1

A slideshow. One massive, show-stopping stutter per second, like clockwork. A brief moment of smooth rendering, then a pause. Once again, the default Unity experience on this Mac for years, one macOS and Unity version after another. Profiler Highlights reports a median frame time of 16.9ms, but 0% of frames going over CPU / GPU budget.

Test 3 — MetalDisplayLink OFF / Vsync count 0 / Target frame rate 60

Quite identical to test 1. Gives me a headache. Tearing, stuttering, all the time. Moving object almost appears to travel in time, movement is very erratic.

Test 4 — MetalDisplayLink ON / Vsync count 0 / Target frame rate -1

Oh wow! It’s so smooth! No tearing or stuttering! This is the first smooth Unity performance I’ve seen on this machine since 2021.1.20! That version was released years ago! Median frametime is 16.67ms.

51% of CPU frames go over budget, but judging by these test results, the more red you see in the Highlights timeline, the smoother the performance. The vast majority of the CPU time goes into Others, which apparently includes “Wait for MetalDisplayLink update” itself doing its thing for 14ms.

Test 5 — MetalDisplayLink ON / Vsync count 1 / Target frame rate -1

This is the big one… And I’m happy to say that it appears to work very well! Smooth sailing. I saw a couple of hiccups, but those may have been caused by the profiler connection or something? Very good, at least in this test scenario.

Test 6 — MetalDisplayLink ON / Vsync count 0 / Target frame rate 60

Quite smooth! Median frametime 16.667ms. No tearing, mostly no stuttering, apart from an occasional hiccup which appears in the profiler as a Vsync spike with time spent in TimeUpdate.WaitForLastPresentationAndUpdateTime increasing gradually over a few frames up to 14ms. Then smooth again.

I’m going to tell everybody that gaming on a Mac is once again possible. Or will one day be, once the fix is out of alpha.

Now it would be fantastic if you could bring this fix to older Unity versions also. Most of my stuff is still stuck in 2021.1 and I’d really like to move on with the times. I’m basically sitting on a 99% ready demo of a game right now, but it’s unreleasable due to Unity’s security flaw patching tool not reaching that far back in time. I also can’t upgrade the project, because that makes it undevelopable. It’s a damned-if-you-do-damned-if-you-don’t scenario.

2 Likes

@midsummer Thank you for the update! It gives me hope I can actually release my game on macOS! I am sick of seeing my game stutter all over the place :grin:

@joao_maia_u3d Is there any timeline/if the update will come to older versions like 6.3 LTS?

3 Likes

then just do it!, great to know the metal display link has come and smooths stuff, not tried myself yet, I won’t be installing 6.5 for now sticking to 6.3 LTS

lets see what Joao says about backporting.

Hi!

I’m really happy to hear that the MetalDisplayLink made the game smoother for you! :smiley:

Because of the way the MetalDisplayLink works, I would really recommend setting Vsync count to 1 (and targetFrameRate to -1). It’s not really possible to have “unlimited FPS” (e.g. 500 FPS) or have more FPS than the display refresh rate as the MetalDisplayLink callback won’t run more frequently than the display refresh rate.

I saw a couple of hiccups, but those may have been caused by the profiler connection or something?

Unfortunately there are still some stutters happening from time to time and I have been trying to find out their causes but I haven’t made any concrete fixes yet.
Currently, the “Development Builds” on macOS/iOS have a big overhead compared to “Non-Development Builds” so hopefully your “Non-Development Build” should run even smoother. I will make an additional fix to remove this overhead from the “Development Builds” but this hasn’t landed yet.

Is there any timeline/if the update will come to older versions like 6.3 LTS?

Backporting this to 6.3 LTS isn’t straightforward, but since we now know that MetalDisplayLink reduces stuttering (at least for some users) I will start working on it. But please note that I’m not promising that this will be backported to 6.3 LTS yet as many things can go wrong in the process :sweat_smile:. I will keep you updated :slight_smile:

3 Likes

With MetalDisplayLink things are not just smoother, that’s an understatement in my case. The situation improved from a completely broken mess back to normal. Apparently this issue presents itself very, very differently on different Mac models (my M1 has behaved much better). It’s been unbearably bad on my 2019 27" iMac in particular, modern versions of Unity have not worked at all on this machine.

@joao_maia_u3d By the way, does the use of CAMetalDisplayLink increase the macOS version requirement of the builds?

By the way, does the use of CAMetalDisplayLink increase the macOS version requirement of the builds?

CAMetalDisplayLink is only available in macOS 14.0. If the app runs in macOS 13.0, CAMetalDisplayLink will not be used (the app should still run, but most likely with stutters).

When the system requirements for a smoothly running app is increased from Mac OSX 13 to Mac OSX 14, backward compatibility decreases from 3.5 to 2.5 years. That’s a problem.

Thank you for looking into this issue. We know that an application compiled with Intel runs smoothly on Silicon Macs, while one compiled with Silicon stutters. Apparently, V-Sync works in Rosetta 2, but not in the native code. If V-Sync doesn’t work on Silicon Macs under macOS, not only Unity applications would be affected. Could it be that V-Sync is simply not implemented correctly in your Silicon code?

Hi!

CAMetalDisplayLink for the macOS standalone player was backported to 6000.3.11f1 and 6000.4.0b12. As before this needs to be enabled using a player setting. Please let us know if you find any issues with it. Thank you!

4 Likes

Our code for Intel and Silicon Macs regarding V-Sync is the same. But I will look into this as well :slight_smile:

3 Likes

Nice!, now I can stay with 6.3, tho I won’t get time until july etc, lets hope it has no issues

Hey! So I updated to 6.3.11 today and the jitter is still there :sob:

I am on a m1Max. I set the correct setting in the player settings. Is there something I am doing wrong?

Also, when I build for Web and play the game on Safari, it jitters too. Is this also going to get a fix/the same issue?

Hi! Is the jitter happening in the Mac Player Standalone build? We have implemented it only for the Mac Player Standalone build and for the Editor jittering is still expected.

For the web I think it’s a completely different issue. The CAMetalDisplayLink we implemented is a macOS/iOS concept only, it’s doesn’t apply to the web browser.

Are you using WebGL or WebGPU?

Yes.

Screenshot 2026-03-12 at 5.35.54 PM

This is a good visual of what I am seeing. Micro stutters where the game seems to jump. (vysnc profiler). This is window mode at 2560x1600

This is when I have the resolution of the game at 1728x1118 in window mode.

This is what I see at fullscreen 3456x2235

I am using WebGL.

This is a good example of what the game looks like. It constantly jitters.

If you look at the terrain (black lines) you can see it the jitter. Its what also happening in the macOS standalone build just not as bad.