Emulator Issues #13135open
(GLME01) Luigi's Mansion suffers from reoccurring microstutters/frame pacing issues in game not caused by shader compilation
Game ID? (right click the game in the game list, Properties, Info tab)
MD5 Hash? (right click the game in the game list, Properties, Verify tab, Verify Integrity button)
What's the problem? Describe what went wrong.
Luigi's Mansion suffers from microstuttering and frame pacing issues in game. These stutters occur randomly, and aren't caused by shader compilation either. These stutters don't seem to occur on hardware, and the stutters themselves are not situation dependent and can occur seemingly anywhere even when nothing is happening in the scene. This has been an issue for well over a decade, since Dolphin's very beginnings. No setting change in Dolphin, aside from setting a hard frame limit of 30fps, gets rid of the stutter.
Luigi's Mansion, being a 30fps game, requires consistent frame delivery for the best experience. I've known of this issue for a long time, but because of Dolphn's recent framerate and frametime graphs, I think I can finally illustrate what the problem actually looks like.
What steps will reproduce the problem?
- Start with a fresh copy of Dolphin. That is, a fresh Dolphin install folder and a fresh recreation of the Dolphin Emulator folder in documents.
- Update your graphics card drivers to whatever's latest as of writing (527.56 for me). I always update these using a fresh install, using DDU.
- Open Dolphin and make the following settings changes. These are the changes I made, and these should be the base recommended settings changes to make Luigi's Mansion work properly at all:
a.) Under Options -> Configuration...
- General tab:
- Disable dual core, this will ensure Luigi's mouth doesn't bug out during the opening cutscene.
- Interface tab:
- Set Mouse Cursor Visibility to "Never", I always do this because I worry that I might lose GSYNC or exclusive fullscreen. Might not be necessary.
- Advanced tab:
- Enable and Set Clock Override value to 115%, this will ensure that the game has somewhat correct timings that will prevent the nozzle from disappearing. b.) Under Graphics...
- General tab:
- Set the Backend to Direct3D 11, for NVIDIA users such as myself. The reason for this is that Vulkan, while it is the fastest backend of them all, experiences shader compilation stutter not present in the DirectX backends. Since we're trying to solve an issue in regards to framepacing, I'm going with the backend that produces the smoothest experience possible. DirectX12 is a little bit slower on average and I think experiences some odd issues sometimes, so DirectX 11 is the most optimal setting for us here.
- Enable "Exclusive Ubershaders" and "Compile Shaders Before Starting". This will ensure that we experience absolutely no stutters caused by shader compilation while the game is running. With a relatively modern card, this setting won't be much of an issue these days. Since performance using Exclusive Ubershaders is also dependent on output resolution, we'll be using native resolution anyway. This should allow anyone following along to use this intensive setting comfortably.
- (Optional) You might need to enable vsync. I use a GSYNC monitor and I have found I never needed to use Vsync. Enabling it for me doesn't make a difference as far as this issue is concerned. But if you experience screen tearing, you might want to enable this.
- Enhancements tab:
- Set Internal Resolution to Native (640x528) if it hasn't been done already.
- You can leave Scaled EFB Copy, Force 24-Bit Color, Arbitrary Mipmap Detection, and Disable Copy Filter turned on. These settings don't seem to impact performance and won't influence the stuttering here.
- Hacks tab:
- Leave everything default. In other words, only Ignore Format Changes, Store EFB Copies to Texture Only, Fast Texture Cache Accuracy, Store XFB Copies to Texture Only, Skip Presenting Duplicate Frames, Fast Depth Calculation, Disable Bounding Box, and Save Texture Cache to State should be enabled. I remember playing with the XFB settings and could not eliminate the stuttering, so leave it default as that might be what most users will have enabled.
- Advanced tab:
- Turn on all the performance statistics, this way you can see the frametime graph and framerate reflect what occurs on screen. Set the Performance Sample Window (ms) to 250, so that you can catch the small fluctuations in the frametime graph.
- Next, launch Luigi's Mansion. Get to a part of the game where you can walk down any corridor or hallway horizontally so you can witness the uneven frame pacing. The hallway on the second floor in the main hall, west wing, is a good spot.
- While paying careful attention to the frametime graph and the wall/high beams, walk from one end to the hallway and back, multiple times.
You should notice when walking down the hallway that the wallpaper patterns on the wall seem to jump and skip. This seems to be caused by dropped frames, and is a sign of uneven frame pacing. This can also be seen on the frametime graph. When the game has consistent frame pacing, the Frame time (ms) on the frame time graph hovers around 33.37ms. When the stuttering occurs, the frame time seems to drop down to 50.0ms for a brief moment, before shooting up to 16.7ms (the same time as V-Blank), before falling back down to 33.37. Interestingly, V-Blank time remains consistent even when this is occurring, hovering around 16.6ms.
I do not believe this occurs on hardware, but I might be wrong. This is one of the only games that runs at 30fps that seems to always exhibit frame pacing issues despite whatever settings you use, and I have no idea why. I am aware this game has some bizarre timing issues as far as the CPU is concerned, so maybe this is related? The issue doesn't seem to improve with a higher clockrate, however...
Is the issue present in the latest development version? For future reference, please also write down the version number of the latest development version.
Is the issue present in the latest stable version?
If the issue isn't present in the latest stable version, which is the first broken version? (You can find the first broken version by bisecting. Windows users can use the tool https://forums.dolphin-emu.org/Thread-green-notice-development-thread-unofficial-dolphin-bisection-tool-for-finding-broken-builds and anyone who is building Dolphin on their own can use git bisect.)
This issue has always existed.
What are your PC specifications? (CPU, GPU, Operating System, more)
Processor: AMD Ryzen 7 5800X 8-Core Processor
Number of Cores: 16
Speed: 4.7 GHz
CPU ID: 178BFBFF00A20F10
RAM 16 GB (G.SKILL Trident Z Royal RGB 3600MHz)
Video Card NVIDIA GeForce RTX 3080
Chipset NVIDIA GeForce RTX 3080
Hardware T&L Yes
Total Memory 18 GB
Dedicated Memory 10 GB
Driver Version 188.8.131.5256
Vertex Shader Version 5.1
Pixel Shader Version 5.1
Plug and Play ID VEN_10DE&DEV_2206&SUBSYS_403D1458&REV_A1
Vendor ID 10DE
Driver version 527.56
Motherboard: ASRock X570 Taichi (BIOS: P5.00)
Is there anything else that can help developers narrow down the issue? (e.g. logs, screenshots,
configuration files, savefiles, savestates)
Here's a screenshot when the game is performing normally, and the framepacing is fine:
Here's a screenshot when irregular framepacing occurs:
Finally, here's a video that captures the whole thing in motion:
Reiterating from before: When the game has consistent frame pacing, the Frame time (ms) on the frame time graph hovers around 33.37ms. When the stuttering occurs, the frame time seems to drop down to 50.0ms for a brief moment, before shooting up to 16.7ms (the same time as V-Blank), before falling back down to 33.37. Interestingly, V-Blank time remains consistent even when this is occurring, hovering around 16.6ms.