Emulator Issues #12519
Software Renderer screenshots are blurry and deformed
What's the problem? Describe what went wrong.
When I take a screenshot with the "Software Renderer" backend, the result is blurry and deformed.
What steps will reproduce the problem?
Go to Graphics > Select the backend "Software Renderer" > Take any screenshot.
Is the issue present in the latest development version? For future reference, please also write down the version number of the latest development version.
Yes, as of 5.0-14259.
Is the issue present in the latest stable version?
Yes, as of 5.0-14095.
What are your PC specifications?
CPU: AMD Ryzen 5 3600
GPU: Nvidia GeForce GTX 1050 Ti
OS: Windows 10
I'm writing screenshot guidelines for a wiki, and we need pixel-accurate screenshots at the game's internal resolution. We can get similar results with OpenGL, but it's not 100% accurate. We believe that Dolphin should provide a way to take pixel-accurate screenshot like (for example) angrylion's RDP with OpenGL in the case of Nintendo 64 emulation.
- Subject changed from Software Renderer to Software Renderer screenshots are blurry and deformed
Try using "Dump at Internal Resolution". To enable it, switch to one of the hardware renderers (e.g. OpenGL), then go to the Advanced tab, and check "Dump at Internal Resolution" under "Frame Dumping". You can then switch back to the software renderer; despite the setting not being listed with the more minimal software renderer options, it does still apply to the software renderer.
- Subject changed from Software Renderer screenshots are blurry and deformed to Software Renderer
- File FCTE01_2021-05-22_18-09-06.png FCTE01_2021-05-22_18-09-06.png added
- File FCTE01_2021-05-22_18-08-38.png FCTE01_2021-05-22_18-08-38.png added
Can you try turning off "Dump Frames at Internal Resolution" in Graphics Settings -> Advanced in a Hardware Backend. It's really, really, really stupid if it's doing that. But...
#5 Updated by Stormkyleis 30 days ago
- File Wrong screenshot from 5.0-14095, dump at internal resolution off.png Wrong screenshot from 5.0-14095, dump at internal resolution off.png added
- File Wrong screenshot from 5.0-14095, dump at internal resolution on.png Wrong screenshot from 5.0-14095, dump at internal resolution on.png added
- File Correct screenshot from 5.0-1405.png Correct screenshot from 5.0-1405.png added
I did some tests with "Dump at Internal Resolution" on and off. It does affect the resolution, but the result is still wrong.
Title screen of Paper Mario: The Thousand-Year Door (PAL):
- 5.0-1405, Dump at Internal Resolution on/off: 608x480 (correct)
- 5.0-14095, Dump at Internal Resolution on: 720x568 (wrong)
- 5.0-14095, Dump at Internal Resolution off: 720x564 (wrong)
Title screen of Super Mario Sunshine (PAL):
- 5.0-1405, Dump at Internal Resolution on/off: 640x448 (correct)
- 5.0-14095, Dump at Internal Resolution on: 640x476 (right width, wrong height?)
- 5.0-14095, Dump at Internal Resolution off: 720x536 (wrong)
Comparison (notice how the pixels are perfectly sharp and distinguishable in the old version):
I get 640x480 (internal resolution enabled) and 720x540 (internal resolution disabled) on my NTSC copy of sunshine with the software renderer; with OGL I get 640x480 in both cases. And I also checked with the FIFO analyzer (as tweaked here; the relevant info isn't visible in master) and the size should be 640 by 448. So, that's odd.
As for the distortion, I remember that the software renderer resizes things using nearest neighbor, and the distortions do seem similar to those from nearest neighbor. I don't remember exactly what it's resizing, though. I'm not sure what the deal is with the blur, though.
It seems like (though I haven't confirmed it) the software renderer used the XFB resolution when taking screenshots; now, it either uses the window size or Dolphin's native resolution. However, the way the window size worked was odd, which is where the width of 720 came from (that will be fixed with PR 9742); with that fix, "Dump at Internal Resolution" being off will use the actual window height, which will be 480 on NTSC when "Auto-Adjust Window Size" is checked.
The other problem is that screenshots are done at the internal resolution, which is resized from the XFB; with the software renderer, this happens using nearest neighbor, but it also happens with the OGL renderer (just using a bilinear filter instead, which looks nicer). Probably the best fix for that is to add an option to save screenshots at the XFB resolution.
We believe that Dolphin should provide a way to take pixel-accurate screenshot like (for example) angrylion's RDP with OpenGL in the case of Nintendo 64 emulation.
The goal of Dolphin's image pipeline is to provide screen-accurate screenshots with the correct image aspect ratio.
The default VI setup provided by Nintendo's SDK has some noticeably non-square pixels, with a pixel aspect ratio of 10:11 in NTSC and 59:54 in PAL. In order to provide a similar experience as using a real gamecube/wii on a real TV, dolphin stretches the image to correct the aspect ratio on monitors which have a 1:1 Pixel Aspect Ratio.
Without this correction, objects which appear round on a real TV will show up as oval. See the progress report from August 2015 for some examples: https://dolphin-emu.org/blog/2015/08/01/dolphin-progress-report-july-2015/#40-7138-pixel-aspect-ratio-adjustment-vi-scaling-fix-by-mirrorbender
Also, for games which support 16:9 aspect ratio (some gamecube, most wii games), the internal resolution stays around 640x480 and the pixels get stretched by your TV to a very non-square aspect ratio.
Displaying "Pixel-accurate" screenshots for these widescreen games makes zero sense.
You can actually see the incorrect aspect ratio in your Super Mario Sunshine screenshots.
The boxes are meant to be square. On a real TV they look more or less square, in both the 640x476 and 720x536 screenshots the boxes look more or less square. You can even measure them in an image editor to be more or less square.
But in your 640x448 screenshot, the boxes look noticeably squashed.
#12 Updated by Stormkyleis 29 days ago
Can you bisect to whatever version broke it? I'm guessing it might have been when we moved software stuff to videocommon, but honestly so few people use software renderer that it doesn't get tested enough.
We tested various versions and eventually found it. The first version with this issue is 5.0-5874, the last without it is 5.0-5833.
It's certainly up for debate. I just believe that Dolphin should provide the option for users to choose.
We chose to show how the games are rendered at their internal resolution, rather than how they appear on TV. This matches with some official screenshots from Nintendo's press kits, such as this:
It's certainly up for debate.
Sure. But "Nintendo sometimes messed up their press kits" is not a great argument. Correspondingly, Nintendo also did the right thing at other times.
"Dolphin should provide choice" is a better argument, but not enough on it's own. There are downsides to adding millions of options for everything users might want.
Especially for your proposed solution in this issue of "software renderer should take screenshots at internal EFB resolution". That would result in your screenshots being an unachievable result. Users can't reproduce it on a real consumer console. Most users don't have access to the Nintendo devkit which allows dumping efb. Users wouldn't be able reproduce it in dolphin, short of taking a screenshot in video software every frame, because most versions of dolphin have done aspect ratio correction (even if it was to an incorrect aspect in older versions).
Your screenshots would be a fantasy.
Can you provide justification as to why your Wiki wants to choose this unrealistic "internal resolution" screenshot standard? If you are talking about gametechwiki, then it appears the purpose of the wiki focused on comparing emulators and graphics plugins. If that's the case, then you want to use the defaults or typical configurations that any given emulator recommends and not trying to force all emulators to the same standard.
Your "internal resolution" screenshot standard seems to be designed to preserve the pixel art look with sharp pixels at the cost of accuracy. Which kind of makes sense for 2d consoles, but makes very little sense once consoles go 3d.
If your goal is accuracy, you should be trusting dolphin's default but slightly blurry opengl output. Dolphin actually applies much less blur than a real console, maybe one day we will get a fully accurate output, but the current defaults are a lot better than raw efb dumps.
We could potentially prove an option for higher quality resampling.
If your goal is sharpness and clarity, then you should be using Dolphin's higher IR support and downscaling a 4x or 5x IR result down to a reasonable resolution with a high quality image resampling algorithm.