Category Archives: Engine Tech

Packaging Update

A while ago, I wrote a post about package sorting in order to minimize diffs when patching on Steam. I ended up running a straightforward test where we would change the game minimally and build consecutive patches. The patches turned out to be quite large, but upon investigation, it was clear there usually wasn’t a […]

Also posted in Development | 40 Responses

Seamless Cube Map Filtering


Modern GPUs filter seamlessly across cube map faces. This feature is enabled automatically when using Direct3D 10 and 11 and in OpenGL when using the ARB_seamless_cube_map extension. However, it’s not exposed through Direct3D 9 and it’s just not available in any of the current generation consoles.

Posted in Engine Tech | 23 Responses

Engine Tech: Concurrent world editing

Summary A small team with limited manpower, we wanted a low-effort way to use our existing version control system (svn) to facilitate concurrent world editing for our open-world 3D game (i.e. we desire that multiple users can edit the world at the same time and merge their changes).  We developed a system wherein the data […]

Posted in Engine Tech | 44 Responses

Irradiance Caching – Part 1

This is the first article I wanted to publish when I started writing about the technology behind The Witness. I had just spent a week or so implementing irradiance caching with rotation and translation gradients. Extending the equations of the gradient estimation to the hemicube sample distribution had proven to be tricky and had taken […]

Posted in Engine Tech | 15 Responses

A few new graphical effects.

Lately we started thinking about making the game look better, finally. Ignacio has been working on some graphical effects to this end (though he’s been putting forth a lot of effort on performance as well). Here are a few things he’s been working on: Sun beams. These are accomplished with a radial blur centered on […]

Also posted in Progress Shots | 31 Responses

Grassing it up…

Since The Witness takes place in the outdoors much of the time, we knew from early on that we were going to want to have grass of some kind. We added grass into the engine quite a long time ago (starting around December 2009?) and it’s gone through several iterations of what-seemed-to-make-sense-at-the-time. At this point, […]

Also posted in Development | 38 Responses

A glimpse into the terrain design process.

This is an experiment in writing up a blog post for a development task while I actually perform the task!  So right now, as I start writing this, I don’t know how it will end! I was talking to David Hellman about the game the other day, and he was asking when the island was […]

Also posted in Development | 21 Responses

Adventures in Fisheye Lenses

During the past couple of weeks, we have been doing some experiments for The Witness that involve pre-rendering a scene with a fisheye lens and then using that render during gameplay. If I were to say exactly what this is for, it would be a massive spoiler, so I’ll just say it’s for a kind […]

Also posted in Development | 16 Responses

Experiments in Texturing

Something like a year and a half ago, when I was starting to get serious about making The Witness, I was talking to Casey Muratori about 3D modeling and texturing. Braid was a 2D game; The Witness being 3D meant that it would be much more expensive and difficult to make, so I was doing […]

Also posted in Development | 19 Responses

Hemicube Rendering and Integration

One of our aims with our global illumination implementation was to keep it as simple as possible, while still obtaining good performance, and we hoped to achieve that by using the GPU. While the are several approaches to compute global illumination in the GPU, the most simple one that we could come up with was […]

Posted in Engine Tech | 15 Responses