Rio 360 (Unofficial Post-Mortem)
I had just delivered another project when I was moved to work in Rio 360 project. Just two week before the official release. My primary goal was to add some VFX so I've created some simple clouds, some butterflies, some fishes and some fireworks to the soccer stadium. All created using Shuriken and a single material shared by all effects in order to reduce the number of batches.
Rio 360 was also presenting some performance problems which was solved eliminating water reflection, tweaking Quality Settings, cleaning some meshes and eliminating some transparent useless UI elements.
But as soon I started to really feel the app, it was very clear that Rio 360 cycle should be much longer than expected.
A third party developer was responsible for the main app code and art and totally fails to deliver the expected result. Unfortunately, the contract between the parts also failed on solve this issue and so we had to bring the development in-house and finish the app by ourselves. After a while we realised that the damage was worse than imagined and about 90% of the entire code had to be re-written and re-designed from scratch.
Initially, Rio 360 was stylised using faced-art-style. A common way to simplify things, use cheap shaders and align art style to technical specs. You can find several cases of that at Oculus Store, however, looks like one of the superiors wasn't a VR user and a feedback from another superior was interpreted in a wrong way resulting in the order: "Change all the art direction to a realistic one". This happened just a day before the official release.
Looks like a bad joke but yes, just one day before release, we had to almost start Rio 360 all over.
At that moment, the art was in great danger. Discounting resources being used by UI, VFX and minor props that should be reused, I had less than 20 drawcalls, less than 90k tri/verts and absolute not time to create Rio de Janeiro. The resources available? A single artist facing the new world of 3D art and myself.
By the other hand, the code part was also in a critical moment. The download system as specified by the UX demanded a totally new solution created in the Android layer without use the Download Manager. This is a hard task by itself but, since the new solutions should be made over the top of the old code, this instantly became a nightmare.
No one knows how the art should looks like anymore then I just took 3ds max and did in the next day a partial map in three versions following different art-directions. The "that one looks more like the expected" feel won and we start the new art right away.
There's no time for a new workflow research. We used an atlas for the simple buildings on the later version of Rio 360 and, at this time, that's the only workflow that was familiar to my artist companion so the building was manually painted in a texture by him and the model mapped over it. Just a single texture could be used to all building or we gonna to overpass our polycount.
While an "realistic" city demands a huge number of building, we got an easier approach, creating huge buildings. That definitely not realistic but as soon as we receive the first art feedback it becomes very clear that some approvers was art-blinded and just reproved the faced art-style because it recalls 90's 3D.
In order to make the city looks like Rio, we, artists, modelled some key-buildings and put then in position following the real ones. Also, I have manually positioned all generic cube-based buildings trying to mimic the architecture from each region. The new terrain was manually created in 3ds max and textured using substance painter.
In order to achieve the "realistic" feel on the terrain which uses only a simple single texture as well, I added a normal map. A crime if you're developing to VR but as I said, we had just a couple of days to re-create all art before they start to cut heads.
Now with this expensive terrain, VFX, UI and all the other things. the resource was very low. So I need to manage how to put hundreds of buildings and make everything works in about 60fps. If you are a VR developer, you should know something about Occlusion Culling. It consumes a huge amount of time to be used. Also, static batch will produce mesh combinations and is a very bad solution if you're creating a forest, an entire city or and entire city with forests as we are doing.
The solution? well... manually batch our forests combining all trees in a single mesh. The same to the key-buildings. All the others buildings ara batched using dynamic batch. Lightmap was unable in order to increase the verts limit to 900. The single material used uses a mobile vertex lit (Directional Only) shader.
Looks like an odd solution but if you look for a solution rendering more than 1000 elements simultaneously at Oculus Store, there's only one app: Rio 360. Which, by the way, can render up to 3000 elements simultaneously.
By the code side, the things wasn't easy. If you have a similar situation, please, don't try to fix the bad code. Refactoring has it limits. We discovered that by the worst way and the result was endless bugs during several months. The things just start to work properly when we start to put away huge parts of the old code and create our own over it.
I can't avoid to think in how this project could be better and remember the mass of totally insane things that happened during this project but looking to the download number and to the technical aspects achieved in such context, I also can't deny that I'm very proud of the final result.