Chimera Reader

Developed in: Unreal Engine 4/Unity

Role: Programmer

Worked On: May 2015- January 2015 (off and on)

Worked With: Dustin KochenspargerErik Buchholz

Links: Oculus Store Link | Project Website | VR Jam Submission

Description:

Chimera Reader is a virtual reality ebook reader for the Gear VR. Initial prototype was created in 3 weeks for the Oculus Mobile VR Jam, Chimera Reader was continually developed to completion.

Responsibilities:

I handled worked on all aspects of the project minus implementing the UI flow (in final version). This included:

  • Ebook rendering
  • VR rendering
  • UI hookup
  • Scene optimization

Technical Challenges:

  • Engine decision
    • The project was initially created using Unreal Engine 4. When we were using it this had various technical hiccups such as:
    • Poor mobile performance (CPU and GPU overclock were needed on Galaxy Note 4 for a base Unreal project)
    • 3D UI was not implemented correctly on mobile
      • A positive side effect of this though had me editing the Unreal source code to get it to work
    • Lack of documentation for C++/VR
    • The project was switched to Unity which had better mobile performance as well as proper 3D UI support for mobile devices
  • Rendering Scene
    • In the initial prototype of the project, it became clear that rendering a complex scene on mobile in VR was very costly in terms of performance
    • Even after switching to Unity, rendering a full scene was expensive
      • One technique that was tried was using a texture atlas for the entire scene
        • This entailed using a tool, TextureMapper Pro, to take all of the texture and create an atlas out of them
        • The UV’s for every model were then remapped to fit within the TextureAtlas
        • This technique still proved to be non-performant for the type of scene we wanted to render
      • The technique we ended up going with was stereoscopic skyboxes
        • Steroscopic skyboxes are extremely cheap in terms of processing and GPU power because they are just two prerendered skyboxes that are rendered at offsets from each other to give the apperance of 3D
        • This technique works great for Gear VR which had no positional tracking
        • Only issue was that the menus were actually rendering in 3D space which created an effect where the menus would appear to follow head movement
  • EPUB Format Rendering and Parsing
    • Display text on a screen like a Kindle was more difficult than expected. For the prototype, I wrote an algorithm that was able to display plain text (no images) separated onto pages (not justified like on the Kindle).
      • This solution was non-optimal, and would require full parsing beforehand
      • My solution also only worked for monospace font
    • The final project implemented an open source solution called epub.js
      • The idea came when working on the project that web pages already did a lot of the parsing I would want to do. That’s when I stumbled on epub.js which had exactly what I needed
      • The main issue with epub.js is that it’s performance can be suboptimal on mobile
  • Interop
    • Due to engine choice as well as platform there were three layers of code:
      • C#- The game/client code that ran in the Unity engine
      • Java- For the Android WebView layer.