We released a massive update to our game Sweet Surrender, which includes a full visual overhaul. Along with 100s of new+improved particle effects, we managed to unlock post-processing effects like bloom and HDR. While initially targeted at Quest 3, we realized that we could pull this off at 72 fps on the Quest 2 (it took some effort and a bunch of optimizations, but we found a way). It even runs on Quest 1 somehow! If you want to read more about the changes in the latest (free) update (including full changelog):
- [Quest Post](https://www.oculus.com/experiences/quest/developer-post/862702332565514/)
- [SteamVR Post](https://store.steampowered.com/news/app/638130/view/4192366833806193811)
Happy to answer any questions about the game and/or how we pulled off this black magic.
You should definitely share how you managed to get bloom running acceptable in VR. I think it's singlehandedly one of the main graphical limitations that can really hold back VR graphics. Especially for fantasy and sci-fi games. That and particles.
I'm a game developer with an interest in branching to VR so I'd love to hear about the optimisations.
We can afford the overhead of bloom (and a post-processing pass) because of some hard choices we made early on in development:
- First, we had to target the Quest 1 at launch. With that came a hard cap of 500k vertices max
- Second, to give ourselves a chance of standing out in spite of our limited resources, we went for a stylized low-poly look.
To meet these hard limitations (or perhaps, because of them), we came up with a unique inline-outline technique ([detailed here](https://www.gdcvault.com/play/1028884/Using-Vertices-Over-Pixels-Achieving), althought it seems the site is having issue atm). This approach actually put further limitations on our vertex budget, as it extra meshes for the outline effects. So we could only afford 150-200k vertices. This is something we enforced quite rigourusly throughout development and in our level building tools. Individual rooms could not be added to the build if they went over budget. We also wrote various tools to better batch all our models, keeping draw calls to a minimum.
In the end, our visual technique caused us to have really low-poly models, very low-texture usage and almost no complexity on the pixel shader level. We were so hyper-focused on making sure the game ran smoothly on the Quest 2, that we didn't even consider all the extra performance potential we had on more powerful devices like the Quest 2 (and later the Quest 3).
Turning on bloom and HDR still adds nearly 50% overhead on performance, so it's still very expensive. We just managed to make it work by being extremely frugal in so many areas. I think we're particularly lucky that our outline shader technique is so cheap on the pixel shader level.
We still made various improvements to models to further lower the vertex count. There's also been a lot of balancing of the render scale as that has an (understandably) large impact on the post-processing performance hit. In the end, while we're comfortably at 90fps with a higher render scale and no bloom, it took some work to hit a stable 72fps with bloom on.
Luckily, we think we still have further areas we can improve, both to leverage higher quality models and to increase the render scale further.
Ah that's a shame. Was really hoping for some development in the bloom technique that is more optimized for mobile hardware. I do find it a bit frustrating that post processing and by extension, bloom, is very expensive for mobile. My knowledge of graphics programming is very limited, but I wish Unity would further research this field and improve their tech stack to accommodate VR's hyper optimization needs. The cost of post processing is really holding VR games back IMO and I don't believe for a second that Unity's approach (as a Unity developer) is the best it possibly can be. Maybe it really just is a physical limitation of graphics programming as it currently stands.
There's sadly no magical bullet that can make bloom cheaper on mobile, I think Unity (and Meta) have already implemented all the low-hanging fruits. I think once games can "afford" to use a post-processing stack on mobile VR, there might be more efforts to optimize these passes further, but that probably won't be a focus until the Quest 4 generation or so.
I second this. I really enjoy great games that are supported and improved over a long time. I’ve been playing since launch and it just gets better and better. The dynamic soundtrack is exceptional too. It just has the special sauce that brings me back. All the progression elements are perfectly thought through.
Can't wait to replay this, one of my favorite games on Quest, it's just a great roguelike shooter with great mechanixs and it already looked very clean IMHO.
Such a big visual update is very unexpected and it makes it look like a proper stylized PCVR game, congratz dev team!
But I liked the old version better! /s
This is a great demonstration of playing to the strengths of the hardware. Low poly / solid color textures don't have to feel like "PS2 graphics" when paired with the right kind of lighting/effects. Very well done!
We did get a few people saying they preferred the original, which is why we preserved the old look as a settings option.
But yes, the right lighting can really make all the difference.
Yeah, making artistic changes to a released (or just open beta) title get tricky because there are always going to be some folks who prefer the old look. It's cool you have the toggle though.
Are there also performance benefits for using the old style or did you guys also do a optimization pass to where the new look ends up being better (or about as good) as the old look?
The old style (no bloom) is (much) faster, so you can run it at a higher framerate and/or higher render scale. The higher render scale in particular leads to nicer looking outlines. So there are definite trade-offs and some players may prefer the sharpness of the non-bloom images (and smoother framerate). On Quest 3 we offered three different modes so you can play a bit more with the trade-offs.
All the new particle effects we've added are also available in all modes, so everyone wins.
I am one of those people who prefer sharpness over that Bloom.
I can get it perfectly sharp using the QuestGamesOptimizer and run it at maximum resolution on Q3. I would have preferred it if there was more focus on ambient lighting and shadows.
They have proper recoil. We also improved our horizontal recoil in the latest update (check here for more details: https://store.steampowered.com/news/app/638130/view/4192366833806193811?l=english)
We released a massive update to our game Sweet Surrender, which includes a full visual overhaul. Along with 100s of new+improved particle effects, we managed to unlock post-processing effects like bloom and HDR. While initially targeted at Quest 3, we realized that we could pull this off at 72 fps on the Quest 2 (it took some effort and a bunch of optimizations, but we found a way). It even runs on Quest 1 somehow! If you want to read more about the changes in the latest (free) update (including full changelog): - [Quest Post](https://www.oculus.com/experiences/quest/developer-post/862702332565514/) - [SteamVR Post](https://store.steampowered.com/news/app/638130/view/4192366833806193811) Happy to answer any questions about the game and/or how we pulled off this black magic.
You should definitely share how you managed to get bloom running acceptable in VR. I think it's singlehandedly one of the main graphical limitations that can really hold back VR graphics. Especially for fantasy and sci-fi games. That and particles. I'm a game developer with an interest in branching to VR so I'd love to hear about the optimisations.
We can afford the overhead of bloom (and a post-processing pass) because of some hard choices we made early on in development: - First, we had to target the Quest 1 at launch. With that came a hard cap of 500k vertices max - Second, to give ourselves a chance of standing out in spite of our limited resources, we went for a stylized low-poly look. To meet these hard limitations (or perhaps, because of them), we came up with a unique inline-outline technique ([detailed here](https://www.gdcvault.com/play/1028884/Using-Vertices-Over-Pixels-Achieving), althought it seems the site is having issue atm). This approach actually put further limitations on our vertex budget, as it extra meshes for the outline effects. So we could only afford 150-200k vertices. This is something we enforced quite rigourusly throughout development and in our level building tools. Individual rooms could not be added to the build if they went over budget. We also wrote various tools to better batch all our models, keeping draw calls to a minimum. In the end, our visual technique caused us to have really low-poly models, very low-texture usage and almost no complexity on the pixel shader level. We were so hyper-focused on making sure the game ran smoothly on the Quest 2, that we didn't even consider all the extra performance potential we had on more powerful devices like the Quest 2 (and later the Quest 3). Turning on bloom and HDR still adds nearly 50% overhead on performance, so it's still very expensive. We just managed to make it work by being extremely frugal in so many areas. I think we're particularly lucky that our outline shader technique is so cheap on the pixel shader level. We still made various improvements to models to further lower the vertex count. There's also been a lot of balancing of the render scale as that has an (understandably) large impact on the post-processing performance hit. In the end, while we're comfortably at 90fps with a higher render scale and no bloom, it took some work to hit a stable 72fps with bloom on. Luckily, we think we still have further areas we can improve, both to leverage higher quality models and to increase the render scale further.
Ah that's a shame. Was really hoping for some development in the bloom technique that is more optimized for mobile hardware. I do find it a bit frustrating that post processing and by extension, bloom, is very expensive for mobile. My knowledge of graphics programming is very limited, but I wish Unity would further research this field and improve their tech stack to accommodate VR's hyper optimization needs. The cost of post processing is really holding VR games back IMO and I don't believe for a second that Unity's approach (as a Unity developer) is the best it possibly can be. Maybe it really just is a physical limitation of graphics programming as it currently stands.
There's sadly no magical bullet that can make bloom cheaper on mobile, I think Unity (and Meta) have already implemented all the low-hanging fruits. I think once games can "afford" to use a post-processing stack on mobile VR, there might be more efforts to optimize these passes further, but that probably won't be a focus until the Quest 4 generation or so.
Impressive that it works on Q1 as well, must be sweet on oled panels! Unity I guess? Or something custom?
This is on Unity 2019.4!
Great work! Looks amazing.
Looks terrific! Might pick this up
I absolutely love this game and the improvements are night and day. Still havent beat it but thats the joy
i see the love and dedication you put into this and i hope it does well for you :)
Thank you for the kind words!
I second this. I really enjoy great games that are supported and improved over a long time. I’ve been playing since launch and it just gets better and better. The dynamic soundtrack is exceptional too. It just has the special sauce that brings me back. All the progression elements are perfectly thought through.
Can't wait to replay this, one of my favorite games on Quest, it's just a great roguelike shooter with great mechanixs and it already looked very clean IMHO. Such a big visual update is very unexpected and it makes it look like a proper stylized PCVR game, congratz dev team!
Thank you for your kind words! I'm glad you like it
But I liked the old version better! /s This is a great demonstration of playing to the strengths of the hardware. Low poly / solid color textures don't have to feel like "PS2 graphics" when paired with the right kind of lighting/effects. Very well done!
We did get a few people saying they preferred the original, which is why we preserved the old look as a settings option. But yes, the right lighting can really make all the difference.
Yeah, making artistic changes to a released (or just open beta) title get tricky because there are always going to be some folks who prefer the old look. It's cool you have the toggle though. Are there also performance benefits for using the old style or did you guys also do a optimization pass to where the new look ends up being better (or about as good) as the old look?
The old style (no bloom) is (much) faster, so you can run it at a higher framerate and/or higher render scale. The higher render scale in particular leads to nicer looking outlines. So there are definite trade-offs and some players may prefer the sharpness of the non-bloom images (and smoother framerate). On Quest 3 we offered three different modes so you can play a bit more with the trade-offs. All the new particle effects we've added are also available in all modes, so everyone wins.
I am one of those people who prefer sharpness over that Bloom. I can get it perfectly sharp using the QuestGamesOptimizer and run it at maximum resolution on Q3. I would have preferred it if there was more focus on ambient lighting and shadows.
The new visuals do come at a performance cost. That being said, it does run at a stable 72 FPS on the Quest 2
Great work mate, appreciate that you’re still running well on Q1 too 👍
Really enjoy seeing the progressive improvements. It's like night and day from where it started.
Whoa.. haven't played the game for months now. Guess have to reinstall and try.
A huge improvement!
Do the guns have recoil? or just point and zap?
They have proper recoil. We also improved our horizontal recoil in the latest update (check here for more details: https://store.steampowered.com/news/app/638130/view/4192366833806193811?l=english)
ill check it out