Today I grabbed one of our Raspberry Pi 3 cased desk units. Connected headphone, a 800x480p touch LCD display, and a Xbox One S controller via Bluetooth. On the Raspberry Pi 3 I loaded a Windows 10 IoT 10.0.4393.187 customized OS image. This build is still running the stock Windows Standard Driver for Display, so NO GPU* use).
I started by updating my Unity beta install the to latest beta release. The 5.5.0b3 release now includes the most looking forwarded to feature, the Customized Splash Screen options. I downloaded 2D Platformer Sample Project found here.
Then setup a sequential custom splash screen animation for the game. Next I looked at all the art assets many of which are much higher resolution then needed for this devices display output resolution. So I scaled back most sprites to 64×64, and larger ones up to 256×256. With no sprites or textures exceeding the size of 512×512. This task was mostly to conserve memory as we have little to work with.
My first test resulted in a reasonable effort on the devices part to run a Unity game. The splash screens loaded perfectly with no noticeable frame drops. Once the game loaded I was presented with 2FPS. My next step was clearing up some quality and player preferences. Disabling Shadows, MSAA etc as non of this had much benefit to a sprite based handheld portable game.
The second debug resulted in a stable frame rate of 10-12 fps. CPU was running at between 50-89% with game open and idle. With only 103Mb of Ram in use.
It should be noted this is without the GPU functioning, and with no heat sync on CPU, so the CPU is throttled to manage heat dissipation. And the CPU is handling the entire workload.
10-12 fps was only barely playable so next to help increase the fps, we changed from WVGA to WQVGA, and QQVGA/HQVGA. Lowering the games resolution gave an improvement here is the stats:
- WVGA: framerate of 10-12 frame per second, resolution quality 100%, image quality Excellent
- WQVGA: framerate of 19-20 frame per second, resolution scale 50%, image quality Fair/Good
- HQVGA: framerate of 22-28 frame per second, resolution scale 25% image quality Poor
It should be notes that WQVGA is displays native resolution so image quality was best, WQVGA gave a very reasonable image quality. and HQVGA was sub-par image quality. After looking at all three modes the best video mode for Unity apps on the RPi 3 is a WQVGA (400x240xRGB) which yields a consistent frame rate of near 20 frames per second.
For comparison the Gameboy Advanced games are (HQVGA) pixel resolution. This gives us just over double the res of GBA. And a resolution close to the 265×224 of NES and the SNES of from 256×224 to 512×448. For creating Unity 2D sprite based project that closely mirror the visual aesthetics of retro handheld and console game systems. These settings do well when creating a project.
ProjectR101 – Sept 18th 2016 – 22 FPS after 1 hour running
*Windows IoT on the Raspberry Pi SoC utilize the Microsoft Standard Display driver. This driver does not activate the Video Core IV GPU and will not provide acceleration in 2D/3D or video playback. All driver tasks are handled on the CPU. Microsoft has a GitHub repository that has a early test ‘sample’ driver that is still under work.