Yuzu (Switch Emulator) Introducing Project ART


Shortly after the interview with GDKChan – creator of the Ryujinx Switch emulator – was published, one of the developers of Yuzu, the competing Switch emulator, contacted me and asked if I would be willing to take a look at his pull request for Yuzu. This pull request is called Project ART (Advanced Rendering Techniques, or Aristotle’s Right Testicle…yuck) and was developed in collaboration with a few other developers. In a nutshell, this PR adds the following features to the emulator:

  • Resolution scaling (as low as 0.5x or as high as 6x)
  • New window adapting filters:
    • Nearest Neighbor (good for Pixel/classic games).
    • Bilinear (default pre-ART).
    • Bicubic (good when rendering at same native resolution as the screen).
    • Gaussian (best for downsampling into the screen).
    • ScaleForce (good non-heavy upsampling).
    • FidelityFX FSR from AMD (best for upsampling).
  • FXAA anti-aliasing method
  • a few bug fixes for Bayonetta 2, Pokemon Sword/Shield, and Yu-Gi-Oh: Legacy of the Duelist (fixes blurriness or certain models not rendering)

So certainly, if you play any of the mentioned games above, this pull request is for you. It’s also a big help for those who have a monitor that’s higher than 1080p; the upscaling quality makes games look fantastic. On the other hand, for those who are looking to save performance, or who are using devices like the Steam Deck, the downscaling will definitely come in handy. The Yuzu blog post for this PR mentions that players can get as much as a 20% performance boost by downscaling, at the expense of lower quality. However, thanks to the FSR filter, players should be able to get a performance boost while maintaining most of the same quality as before. Genius!

The additional filters can be used in conjunction with the upscaled or downscaled resolutions for enhanced quality, at the expense of performance, or lower quality filters that are less resource-intensive. For instance, the Gaussian filter applies a sort of blurry effect on higher resolutions, but it won’t look so bad at lower resolutions, while also saving performance. ScaleForce and FSR can be used for higher resolutions, providing an even better image quality at the cost of performance.

As for FXAA, this can be applied to games that don’t already have it baked in to (once again) enhance image quality; jagged lines will look smoother. However, for games that already have FXAA (like Metroid Dread), this won’t do much of anything.

All of these options can be accessed by going to the Graphics tab in the configuration window, under Graphics Settings:

Project ART additional settings

The filters can also be changed on-the-fly when in-game by selecting the appropriate option in the emulation window and clicking it. Same goes for FXAA.

Previously, there was a resolution scaler, but it was using an algorithm-based method for scaling, and it took months before the algorithm finally learned what textures to upscale and what not to upscale. Furthermore, this method only worked on the NVIDIA graphics drivers. Blinkhawk, one of the Yuzu developers, rewrote the scaler from scratch. Instead of using an algorithm-based system, Project ART uses a rating system. There’s a lot of info that’s over my head to explain the rest; just have a look at Yuzu’s blog post to learn more as to how this new scaler works.

Observe the difference in resolution with Metroid Dread. The left side looks a lot more crisp at 3x the native Switch resolution, versus the standard scaling:

Metroid Dread scaling comparison

Upscaling games come at a cost though. Rendering at 2x scaling needs a minimum of 4 GB VRAM, and a recommended amount of 6 GB. 4x scaling needs 8 GB at the minimum, and 10 GB recommended.

Yuzu scaling requirements chart

Two games at the moment can’t be upscaled: Paper Mario: The Origami King, and Crash Bandicoot 4: It’s About Time. However, there’s already a workaround for Paper Mario by downloading a mod and putting it in the mods folder for said game; download the mod from the blog post.

As for the additional window adaptation filters, you can experiment to see which is best for you; Yuzu’s blog post provides a nicely detailed chart to explain which is recommended:

Yuzu filter explaination chart

Here’s Super Mario 3D World + Bowser’s Fury, comparing the default bilinear filter with FSR:

Comparing FSR with bilinear

During my testing, I haven’t noticed any significant difference using FXAA than without it. If anything, turning FXAA slightly decreased the graphics quality. Perhaps this is because the games I’ve tested already have their own FXAA baked in.

Pretty nice changes if I say so myself; however crashing is as you’d expect. Trying to access the Properties menu for Metroid Dread crashed the emulator every time. Same with trying to take a screenshot with the built-in screenshot tool for Bowser’s Fury. Also, changing the filter from FSR to Nearest Neighbor will cause some games to crash. It’s a PR though; crashes and bugs are to be expected.

Want to try these new features yourself? You don’t actually need to be a patron to get early access to this; you can simply compile from source (make sure you have the dependencies installed before compiling):

git clone --recursive https://github.com/yuzu-emu/yuzu
cd yuzu

Checkout the Project ART PR with:

git fetch origin pull/7219/head:ART
git checkout ART

Compile the source code with:

mkdir build && cd build
cmake .. -GNinja
sudo ninja install

The binary should be in build/bin. All good to go!

Check out the blog post for more info!