Category Archives: Engine Tech

Working on The Witness, Part 5

Casey Muratori has made a new posting about the work he has done on The Witness: Working on The Witness, Part 5 In this one he talks about how to distribute grass. Legally.

Also posted in Development | 6 Comments

Shadow Mapping Summary – Part 1

During the last several weeks I’ve been polishing and optimizing the shadowing system and I think that at this point it won’t undergo any more significant changes. In the process I’ve been reading a bit and looking up references and I’m appalled by how inaccessible is all the shadow mapping knowledge. For the most part […]

Posted in Engine Tech | 12 Comments

Mapping the Island’s Walkable Surfaces


Despite not even being finished, The Witness is already one of my all-time favorite games. I’ve been playing it since Jon started developing it several years ago, and I could not be more excited about its upcoming release. Unlike Jon’s previous game Braid, the asset and programming scale for The Witness is much further toward […]

Posted in Engine Tech | 49 Comments

Collecting Playtest Data

In The Witness, when progress in your game is saved, we also save a thumbnail that shows you where you were. This makes it easier to load a particular game later if you had multiple saves. Here is our current, very unpolished load screen: Right now, we save the thumbnail and the game data as […]

Also posted in Development | 25 Comments

scope(exit) in C++11

I really like the scope(exit) statements in D. They allow you to keep the cleanup code next to the initialization code making it much easier to maintain and understand. I wish we had them in C++. Turns out this can be implemented easily using some of the new C++ features. I’m not a big fan […]

Posted in Engine Tech | 54 Comments

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 Comments

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 Comments

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 Comments

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 | 14 Comments

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 Comments
  • Archives

  • Categories

  • Meta