Coming back to Uru, part 3

2018/10/25 | Simon Rodriguez | opengl rendering reverse-engineering video games

Six months ago, I decided to implement an asset viewer for Uru, a game in the Myst series. The goal was to be able to load and visualize levels from the game in real-time, with a rendering as close to the in-game appearance as possible.

Last time, we were left with a basic textured look using the first listed texture for each object, and rendering everything all the time. After the last post, I kept working on it for around a month.

A rendering result
A rendering result

Looking at the git history from the 17th of April to the 29th of May:

The result I'm getting right now is pretty satisfying. Basic layered textures are properly handled, objects are culled when unused. Some issues remain, obviously. In levels that only rely on dynamic lighting[3], everything is completely dark. Providing some default lighting should help explore those scenes. A longer term goal would be to completely support the original lights contained in the scene. The GUI also needs some cleanup before being usable. Dynamic textures (texts generated on the fly, reflection maps) are not handled. Finally, transparent objects are not correctly ordered when rendered, preventing other objects from being visible behind them.

An example of unsupported transparency and dynamic lighting
An example of unsupported transparency and dynamic lighting

Since I've started to write this post, I am fiddling with the project again, so expect another post in the coming weeks. I have uploaded the code online on Github ; it will only compiles on macOS out of the box, but I managed to run it on Windows recently with a bit of tweaking in the Cmake files. Until next time!

Link to part 1
Link to part 2

  1. the frustum of the camera. 

  2. the yellow and red spot in the image for instance. 

  3. because they have a day/night cycle for instance.