The Witness – Thekla

I was the first programmer hired at Thekla and worked there for 10 years. My work on The Witness is one the accomplishments that I’m most proud of. I developed the engine from scratch without using any third party engines and very few support libraries. I contributed to practically every aspect of its development, but was primarily responsible of the overall rendering architecture, asset processing pipeline, tools, general infrastructure, and OSX and iOS ports.

Company of Heroes – Relic

At Relic I only worked for less than a year, but in that short period I developed a special effects engine to render particles, explosions, and other effects, based on the venerable Homeworld 2.

I’ve worked on at least 4 additional games and many other personal projects that were never released. Failures don’t get much recognition, but they offer valuable lessons and are paving stones to success.

Texture Processing

My interest in DXT compression started with the search for an unencumbered compression algorithm in order to open source the popular NVIDIA Texture Tools. Around that time Simon Brown published the first version of squish. I adopted his implementation, contributed many improvements, and ported it to the GPU using CUDA. Recently I released this compressor as a standalone single header library (ICBC).

While at NVIDIA I also had the honor to collaborate with Jan Paul van Waveren on the research of real-time DXT compression algorithms. We published our results in these two papers:

One of my most significant contributions to the texture processing pipeline is a method to compute mipmaps preserving alpha coverage. Today, this has become the de facto standard method to compute alpha mipmaps. A description of the algorithm was included in the 4th edition of the Real-Time Rendering Book and I provided a couple screenshots that showcase it better than the temporary assets in my original article:

At Thekla I also wrote an ETC2 compressor with an optimal planar mode encoder, specifically targeting HDR lightmaps encoded as RGBM.

Mesh Processing

Tessellation and Subdivision

At NVIDIA, I was one of the designers of the GPU tessellation pipeline. Although it did not have the success we envisioned, it was a great opportunity to prototype new algorithms and explore the possibilities that it opened up.

I worked closely with hardware architects, wrote the first draft of the OpenGL tessellation extension, implemented a tessellation emulator that run on D3D10 hardware, developed new algorithms, and wrote the first shaders that run on tessellation hardware. I gave many presentations, published a paper at Siggraph Asia and organized a course at Siggraph in collaboration with Valve and ILM.

Parameterization (UV Mapping)

At Thekla, I wrote a mesh parameterization library for the lightmap generation tool of The Witness. I released that code under the MIT License, and it was adopted by Godot, Filament, and used in multitude of games. This is flattering, but also a little embarrassing; I wrote that code very quickly and I was never particularly happy with it. I hope I can revisit this problem at some point.

Programming Languages

I’m dissatisfied with the evolution of the C++ language and the lack of practical alternatives for game development. Working in jai at Thekla was eye opening: Developing suitable alternatives is not that hard and the benefits in productivity and quality of life are huge.

  • Jiyu
    I added support for enums, flags, multiline strings, for loops with custom iterators, template function arguments, and many other small improvements.
  • Thekla/Jai
    I contributed to the jai ecosystem adding new modules, libraries and small features, fixing bugs, and adding support for targeting the Nintendo Switch.
  • Thekla/HLSLParser
    I improved Unknown Worlds‘ shader parser with new features to handle all our shaders and added new backends for D3D11 and Metal. This project was later adopted by Roblox and ConfettiFX.