This year has seen Nintendo’s hybrid console go from strength to strength, showing that innovative thinking can still cut through against pure graphical muscle. Nintendo has now sold more than 39 million Switches worldwide, giving the console a bigger install base than the Wii U, the Gamecube, or even the Nintendo 64 achieved in their lifetimes. Meanwhile, the launch of the handheld-only Switch Lite introduces the platform to younger and more price-sensitive gamers. Just wait until Pokémon launches and we see the number of Switches sold sky rocket.
There’s no doubt now that Nintendo has a healthy install base, and one that’s hungry for a wide range of games, all the way from cute and colourful Kirby through to grim and gritty Wolfenstein. The team at Virtuos have for a while seen the huge opportunity of the Switch, and over the past few years have been making a name for ourselves by both developing original content and remastering existing content for the Nintendo Switch platform.
Our team has worked on DARK SOULS with Bandai Namco, STARLINK with Ubisoft, and OUTER WORLDS with Obsidian. There are also plenty of other games I’d love to tell you about, but we’re not quite ready to say anything about just yet.
The Switch is very popular with gamers, but it’s also popular with developers like us too! I recently sat down with our Studio Technical Director, Andy Fong, and asked him to share his top tips for developing on Switch.
Andy Fong: From a developer's point of view, many people are stating that the Switch is Nintendo's easiest platform to build games for, ever!
This is based on the whole idea that the Switch does not just offer one singular console experience but a whole range of multi-platform features. As we know, it can be placed in a dock to link to a TV, or be removed from the dock and played as a handheld by utilising the two detachable Joy-Con controllers, perfect for multi-player sessions at home or on the go. This of course if putting the handheld-only Switch Lite to one side for now.
Many developers were expecting major headaches as they sought to get their games optimised for large TV screens and handhelds alike – but many have credited Nintendo with almost eliminating hours of tedious fine tuning. It's not quite automated, but it's not a factor that limits multi-screen success.
With such a solid toolchain, easy to understand (and extensive) documentation, and great support staff, it's rare to come across any real roadblocks thanks in large part to Nintendo’s fantastic dev support.
The handheld screen offers 720p resolution, the screen is bright and its colours are vibrant. When plugged into the TV, it hits 1080p. To optimise performance, a few key observations will help developers maximize the GPU potential. This includes using texture compression and reducing texture sizes to improve performance and reduce the memory footprint.
Vertex processing can also get expensive so mesh geometry should be reduced. There are many great middleware tools such as Simplygon and InstaLOD that do geometry optimization very well.
If a developer's rendering pipeline uses deferred rendering, reducing the number of render targets in the GBuffer can help with performance by reducing bandwidth usage. Virtuos achieved good results, using only two render targets for its GBuffer layout however this may require some rendering feature tradeoffs
Getting deeper into the nuts and bolts - as with all modern consoles, the Switch CPU has a multicore configuration which requires games to be multithreaded in order to get the most out of the hardware. Engine's that are predominantly single threaded can pose some optimisation challenges.
In Virtuos' work on games like Starlink and L.A. Noire, we were able to see success from the following threading model:
- Main Thread (1) – Dispatches work to the different job threads.
- Render Thread (1) – Submits rendering commands.
- Short Jobs Thread (2) – Jobs that need to be done in one frame
- Long Jobs Thread (2) – Jobs that can be done over multiple frames
- Utilising a depth pre-pass may be beneficial depending on your pipeline setup. Virtuos found big gains using it on some titles and less so with others. It's recommended to at least give it a try, as it can be implemented rather quickly in most engines.
It's also recommended that adaptive resolution is adopted as it’s very useful for maintaining a constant framerate when the GPU is overloaded. Experimenting with different resolution "floors" for handheld mode versus TV mode is critical to finding what works best with each specific game.
For streaming, loading, and other I/O operations, a good compression scheme is extremely useful and cannot be overstated. This is useful for reducing data size so it can fit on smaller cartridges as well as improve streaming performance. On recent projects, LZ4 was the go-to compression method with a decent compression to decompression ratio.
Experimenting with commercial middleware solutions can often produce better results than LZ4 but the titles in question didn't really need the additional compression or decompression performance. Testing LZ4, zlib, zstd, and commercial middleware offerings is highly recommended, as results may vary from title to title.
So to sum up, here are some key things that we’ve learnt that we’re hoping other developers might find helpful:
- When using deferred rendering, Virtuos is finding it's important to have a compact GBuffer to reduce bandwidth.
- Compared to other platforms, overall the GPU is weaker, the CPU has less cores, and obviously it has docked and undocked modes. But this hasn’t been an obstacle we can’t overcome.
- CPU optimisation can be challenging due to the limited number of cores.
- Certain effects and materials need to have custom optimised paths specifically for Switch.
- While seeming counter intuitive, hitting framerate targets is actually easier in handheld mode. This is because docked mode has much larger resolution targets.
The team here at Virtuos not only delivers great games for Switch. We also enjoy making them too! It’s great to see both new and existing IP make the jump to a platform that’s reaching millions around the world. The Switch Lite meanwhile is making the Switch’s excellent catalogue of games more accessible than ever before. That’s why it’s not just a great platform for gamers; it’s a great platform for developers too.