Songbird: Making of 2018

The goal for the visual style of Songbird, was a painterly style, that also had some sense of realism. It was not about redesigning, but rather painting an environment that stays true to the source, yet felt as an artist interpretation.

I was responsible for most of the 3D work and also did the final touches of the ʻōʻō, which was modeled by Signe Tveitan. This included writing the shaders needed for the various types of objects in the scene. I also did all the programming, though the Guardian made some scripts they used for the Daydream version.

Models and textures

The style and technique builds upon Nothing Happens, which primarily was flat textures and sprites. We approached the models as 2.5D, which translated Michelle’s paintings fairly well into 3D and VR. Plants were modeled based on scale or how important or close they would be to you.

low-poly mesh with detailed texture
curved “cards” for distant objects

The ʻōʻō was one of the most detailed models. We used x-gen to generate cards on most of the body and alpha-blended shaders. We also gave it a opaque body to fill in the gaps and avoid too much z-swapping.

ʻōʻō with card feathers

For the clouds in the first scene we used a bunch of intersecting cards. I got this idea from The Witness. In addition I made some tweaks to the shader, so that the cards would fade away when seen from an angle, which made some acceptable transitions when moving around the clouds.

fake volume from intersecting cards


The shading was a simple unlit technique with a custom fog effect. I also made a version with basic wind, that used vertex color as weighting. Only some plants and trees use the wind shader.

shader with high amount of fog and wind


For the small birds I developed a system that was very specific to the animation we had and how the birds needed to behave. The system was setup with a bunch of target points which allowed a certain amount of movement on a straight line. The points defined where the birds would fly to and also if they were supposed to look a certain direction. While sitting, the system would randomly play animation clips, but take their movement into account so that they would never walk off a branch.

bird targets and generated fly paths in the editor

So there you have it. Lots of little tricks to create a jungle in VR. I must admit I was a bit nervous about making a jungle at first, but I think it turned out pretty well. The Daydream version did end up having less overlapping objects and did not use the wind – mostly due to phones overheating. There are also many transparent objects which requires a lot of performance. I did suggest an opaque approach, but we didn’t want to sacrifice the painted details around the edges.

For a future project I would investigate more ways to improve performance with many overlapping transparent objects. For example, it might be beneficial to do a quick opaque pass first, which writes to the z-buffer and thereby prevents unnecessary rendering of background objects that might be completely blocked from view.