<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Development &#8211; The Witness</title>
	<atom:link href="https://the-witness.net/news/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>https://the-witness.net/news</link>
	<description>Explore an abandoned island.</description>
	<lastBuildDate>Wed, 23 Dec 2015 17:32:18 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.9</generator>
	<item>
		<title>Entering the Home Stretch</title>
		<link>https://the-witness.net/news/2015/12/entering-the-home-stretch/</link>
					<comments>https://the-witness.net/news/2015/12/entering-the-home-stretch/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Tue, 22 Dec 2015 22:07:48 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=3138</guid>

					<description><![CDATA[We've been averaging about a blog post a month -- not by design, it just works out that way -- which means if we stick to that pace, then in just one more posting, the launch of the game will be imminent. Well, I think we will post a little …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2015/12/entering-the-home-stretch/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>We've been averaging about a blog post a month -- not by design, it just works out that way -- which means if we stick to that pace, then in just one more posting, the launch of the game will be imminent.</p>
<p>Well, I think we will post a little more frequently, because we'll have increasing amounts to say about the game as we get closer to release. In the meantime, here's:</p>
<p><iframe width="900" height="506" src="https://www.youtube.com/embed/xzNh-hdceiU?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>(It is longer than Long Screenshot #1!)</p>
<p><strong>Voiceover</strong></p>
<p>This week we just finished recording the majority of the final voiceover. We're going to do a little more in early January, but most of it is in the can. After New Year's we'll make some postings where we announce who the voice actors are (you may know some of them from other recent games!)</p>
<p><strong>Physical Box Release</strong></p>
<p>We've had some people asking us whether there will be a physical retail release of The Witness. It's seeming likely, as we have been in talks with a couple of parties for a while about that possibility. *However*, it looks like if there is a retail release, it won't happen until a little bit after the digital release. The reason is just that we need all the time we can get up until the release date in order to get all the finishing touches into the game; but because of the lead-time involved in physical manufacturing and distribution, we would have to freeze the game right about now in order to have it on store shelves for the release date. *Or* we could delay the digital release date in order to wait for the physical. But I don't see a good reason to do either of those things. I would rather just focus our energy on making the game as good as we can make it, and a retail version can lag behind by a little bit.</p>
<p><strong>What Else is Going On</strong></p>
<p>We've gotten the bulk of the translations into the game for all the languages mentioned in the previous blog posting. There is a small percentage of text that will come in a little later, but for the most part those languages are in. Also, we will be adding Hungarian to the list of languages suppoorted at release.</p>
<p>Here are some screenshots of Arabic and Russian:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2015/12/Arabic.png" rel="attachment wp-att-3142"><img src="https://the-witness.net/news/wp-content/uploads/2015/12/Arabic-512x288.png" alt="Arabic" width="512" height="288" class="aligncenter size-large wp-image-3142" /></a></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2015/12/Russian.png" rel="attachment wp-att-3141"><img src="https://the-witness.net/news/wp-content/uploads/2015/12/Russian-512x288.png" alt="Russian" width="512" height="288" class="aligncenter size-large wp-image-3141" /></a></p>
<p>Of all the languages, supporting Arabic took by far the most programming work, and as you can see from some gaps between the letters, and a couple of cases where letters are too close to each other, it's not quite done yet. I will be working on that as soon as I finish with this blog posting! But I think even with these issues it is starting to look nice.</p>
<p>We're doing *lots* of little gameplay fixes all around the island, like, what does collision feel like in this area when you bump into things, what happens if you are standing in this doorway and the door tries to close on top of you, all that kind of thing.</p>
<p>Visuals are mostly locked down at the moment; we are no longer changing big things about how the game looks, we're more making spot-fixes here and there every time we see something we don't totally like.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2015/12/entering-the-home-stretch/feed/</wfw:commentRss>
			<slash:comments>64</slash:comments>
		
		
			</item>
		<item>
		<title>On Music, Sound Effects, Story</title>
		<link>https://the-witness.net/news/2015/11/on-music-sound-effects-story/</link>
					<comments>https://the-witness.net/news/2015/11/on-music-sound-effects-story/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 19 Nov 2015 22:03:32 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=3121</guid>

					<description><![CDATA[Music and Sound Effects Once in a while I get a question, from someone who really liked the music in Braid, what the soundtrack in The Witness is like. The answer to this question is that there isn't one. There is (almost) no music in the game. This is not …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2015/11/on-music-sound-effects-story/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><a href="https://the-witness.net/news/wp-content/uploads/2015/11/record_player.png"><img class="aligncenter size-large wp-image-3127" src="https://the-witness.net/news/wp-content/uploads/2015/11/record_player-512x288.png" alt="record_player" width="512" height="288" /></a></p>
<p><strong>Music and Sound Effects</strong></p>
<p>Once in a while I get a question, from someone who really liked the music in Braid, what the soundtrack in The Witness is like. The answer to this question is that there isn't one. There is (almost) no music in the game. This is not an arbitrary decision, but is in fact very important to the coherence of the thing we are making.</p>
<p>The Witness is a game about being perceptive: noticing subtleties in the puzzles you find, noticing details in the world around you. If we slather on a layer of music that is just arbitrarily playing, and not really coming from the world, then we're adding a layer of stuff that works against the game. It'd be like a layer of insulation that you have to hear through in order to be more present in the world.</p>
<p>Instead, we put a great deal of care into the sounds of the world around you, in a way that maximizes immersion in the game. This is made trickier by the game's setting: you are alone on this island, and there are not even any other animals. There are no birds in the trees! In everyday life if we imagine the sound of nature, we'll think of some elements that have no place on the island: a forest naturally has the sounds of birds, plains with smaller shrubbery will have crickets, a marsh will have the sounds of many insects. There's none of that in this game because in this game you are really alone, and it has forced us to be very creative with the audio in order to ensure things have depth and texture to them. This work is being done by Wabi Sabi Sound, who did the sound for the very atmospheric Dead Space series, and more recently some smaller, artier games like Ori and the Blind Forest.</p>
<p>We thought it would be fun to release a few more small videos to give you more of a feel of what the world of the game is like, so here's:</p>
<p><iframe width="900" height="506" src="https://www.youtube.com/embed/j4PD0skohfM?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><strong>Story and Voicework</strong></p>
<p>Lately I have been doing a lot of work on story and voice acting stuff. When wandering around the island, you may find voice recordings that were placed by ... well, at the outset of the game, you don't know who; and as the game goes along, there is an interesting mystery to unfold about who these people are or were. In the game currently we have what is known as "temp voice", which is me reading all the parts under very noisy conditions and just getting them into the game so we can make sure the data works properly with the engine, to get all the subtitles into the game and roughly synced with the audio (which we need to do sooner than later so we can give the translators those subtitles, which they will translate into many different languages).</p>
<p>We have cast the real actors and starting tomorrow we'll do our first test readings with those actors. We'll use this to get a new layer of temp voice in the game, which will get it closer to final; this will allow me to see how the game really feels with this stuff in there, possibly to adjust the nuances of the way the recordings appear in the game and the way they are played back. When everything feels good we'll do a set of final recording sessions. There's not a whole lot of time until release, and we have several holidays coming up, but we'll get it done!</p>
<p>We are working with Warner Brothers Game Audio in Burbank, California to do the voice stuff; they are providing the facilities and voice direction and production assistance. After we do a few recording sessions I will have more details to share in this department.</p>
<p><img class="aligncenter size-large wp-image-3128" src="https://the-witness.net/news/wp-content/uploads/2015/11/limited-512x287.png" alt="limited" width="512" height="287" /><br />
<strong>Localization</strong></p>
<p>Earlier, I mentioned subtitles. As many games do, we will be localizing our game so that people who speak many different languages will be able to understand the words. We are not recording voice acting in different languages, mainly because it is pretty hard to make sure quality is high when you do that. It is hard enough making sure acting is good in just *one* language. We generally seem to feel the same way about movies: a foreign-language dub of a movie is generally considered to be inferior to a subtitled version, because the acting is so important.</p>
<p>Our localization efforts will involve menu text and subtitles, just as for a good movie.</p>
<p>This is not 100% final, but here's the list of languages we are planning to have translations for, at launch:</p>
<ul>
<li>English</li>
<li>Italian</li>
<li>French</li>
<li>German</li>
<li>Spanish (Spain)</li>
<li>Spanish (Latin America)</li>
<li>Portuguese (Portugal)</li>
<li>Portuguese (Brazil)</li>
<li>Arabic</li>
<li>Russian</li>
<li>Chinese (Simplified)</li>
<li>Chinese (Traditional)</li>
<li>Japanese</li>
<li>Korean</li>
<li>Polish</li>
<li>Indonesian</li>
</ul>
<p>We may add more languages later but man this stuff is expensive, so there is a limit to how many languages we can do at once.</p>
<p>We will have more news for you before too long!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2015/11/on-music-sound-effects-story/feed/</wfw:commentRss>
			<slash:comments>67</slash:comments>
		
		
			</item>
		<item>
		<title>Polishing the Architecture</title>
		<link>https://the-witness.net/news/2015/06/polishing-the-architecture/</link>
					<comments>https://the-witness.net/news/2015/06/polishing-the-architecture/#comments</comments>
		
		<dc:creator><![CDATA[Luis Antonio]]></dc:creator>
		<pubDate>Wed, 03 Jun 2015 21:09:37 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Art]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2994</guid>

					<description><![CDATA[In the last few weeks we’ve been adding the final art touches to the island. Now that we have all the content locked down, Deanna, one of the architects,  is reviewing all the structures we created and make sure they are as correct as possible. Even though they previously designed …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2015/06/polishing-the-architecture/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>In the last few weeks we’ve been adding the final art touches to the island.<br />
Now that we have all the content locked down, Deanna, one of the architects,  is reviewing all the structures we created and make sure they are as correct as possible.<br />
Even though they previously designed the buildings and we implemented them, there have been many revisions and tweaks  for gameplay that caused deviations from the original concepts, and in some cases, we just had to make stuff up with  the best of our knowledge without ever having the <i>Architect Seal Of Approval</i><i><img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /></i></p>
<p>Here is an example, a set of stairs added to a roof structure:<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_18_n01.png"><img class="aligncenter size-large wp-image-3000" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_18_n01-512x288.png" alt="shot_2015.06.02__time_21_18_n01" width="512" height="288" /></a></p>
<p>&nbsp;</p>
<p>It looks ok, but looking close up you can see how flimsy the roof attachment is:<br />
<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_19_n02.png"><img class="aligncenter size-large wp-image-2999" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_19_n02-512x288.png" alt="shot_2015.06.02__time_21_19_n02" width="512" height="288" /></a>Or the way the railings are assembled together:<br />
<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_19_n03.png"><img class="aligncenter size-large wp-image-2998" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_19_n03-512x288.png" alt="shot_2015.06.02__time_21_19_n03" width="512" height="288" /></a></p>
<p>Deanna showed us that it would make more sense to extend the main roof support to accommodate for the stairs:<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.03__time_13_36_n01.png"><img class="aligncenter size-large wp-image-3001" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.03__time_13_36_n01-512x288.png" alt="shot_2015.06.03__time_13_36_n01" width="512" height="288" /></a></p>
<p>&nbsp;</p>
<p>An in the case of the railings, to do a better job showing the assembled pieces, removing the awkward intersections:<br />
<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.03__time_13_38_n03.png"><img class="aligncenter size-large wp-image-3002" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.03__time_13_38_n03-512x288.png" alt="shot_2015.06.03__time_13_38_n03" width="512" height="288" /></a></p>
<p>&nbsp;</p>
<p>Another example is this stone wall door frame. It lacks any assembly detail for its size, making it feel it was made from one single gigantic piece of stone:<br />
<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_21_n04.png"><img class="aligncenter size-large wp-image-2997" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_21_n04-512x288.png" alt="shot_2015.06.02__time_21_21_n04" width="512" height="288" /></a>And here is the revised version:<br />
<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.03__time_13_40_n04.png"><img class="aligncenter size-large wp-image-3003" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.03__time_13_40_n04-512x288.png" alt="shot_2015.06.03__time_13_40_n04" width="512" height="288" /></a></p>
<p>Another type of issue is how two different surfaces meet. The more detailed the island gets, the more these stand out as incomplete. As an example, the way this wood structure connects with the floor:<br />
<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_24_n05.png"><img class="aligncenter size-large wp-image-2996" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.02__time_21_24_n05-512x288.png" alt="shot_2015.06.02__time_21_24_n05" width="512" height="288" /></a></p>
<p>And after the revision:<br />
<a href="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.03__time_13_44_n05.png"><img class="aligncenter size-large wp-image-3004" src="https://the-witness.net/news/wp-content/uploads/2015/06/shot_2015.06.03__time_13_44_n05-512x288.png" alt="shot_2015.06.03__time_13_44_n05" width="512" height="288" /></a></p>
<p>Some of this work might seem minute but it really makes the whole environment feel more grounded, adding a lot to the experience!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2015/06/polishing-the-architecture/feed/</wfw:commentRss>
			<slash:comments>83</slash:comments>
		
		
			</item>
		<item>
		<title>Progress!</title>
		<link>https://the-witness.net/news/2015/01/progress/</link>
					<comments>https://the-witness.net/news/2015/01/progress/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 26 Jan 2015 01:19:47 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2911</guid>

					<description><![CDATA[On Friday we officially reached the Puzzle Complete milestone. This means that all puzzles that will be in the game when it ships are in the game now. It does *not* mean that the game is done. We still have a lot to do! But it *does* mean that the nature …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2015/01/progress/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>On Friday we officially reached the Puzzle Complete milestone. This means that all puzzles that will be in the game when it ships are in the game now.</p>
<p>It does *not* mean that the game is done. We still have a lot to do! But it *does* mean that the nature of the work changes and becomes simpler, because we don't have to be making high-level creative decisions any more. It is now much more about turning the finish-the-game crank (making sure stuff plays well and polishing it up) for anything related to game design, modeling and texturing.</p>
<p>There are a few categories that still need creative decisions (story stuff, the menu system, etc), but for those of you who are awaiting the game's release, this is pretty good news.</p>
<p>There are currently 677 puzzles in the game. That number might be slightly different when it ships (we might cut a few, for example!)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2015/01/progress/feed/</wfw:commentRss>
			<slash:comments>124</slash:comments>
		
		
			</item>
		<item>
		<title>What we&#8217;ve been working on lately.</title>
		<link>https://the-witness.net/news/2014/09/what-weve-been-working-on-lately/</link>
					<comments>https://the-witness.net/news/2014/09/what-weve-been-working-on-lately/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 10 Sep 2014 18:02:36 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2679</guid>

					<description><![CDATA[We built a DirectX11 rendering backend for our engine, which is likely to be the default when running on Windows. Up until now we had been running on DirectX9, which made sense when we thought the game was going to be done a while ago. But these days, DX9 is …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/09/what-weve-been-working-on-lately/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>We built a DirectX11 rendering backend for our engine, which is likely to be the default when running on Windows. Up until now we had been running on DirectX9, which made sense when we thought the game was going to be done a while ago. But these days, DX9 is getting pretty old and busted. So far the DirectX11 version has been very successful; the engine runs much more smoothly, especially on low-end platforms, due to the drastically lowered CPU overhead of draw calls. There's a little work to do here still -- some of our weirder shaders don't work in DX11 yet and there are a couple of lighting bugs -- but this all should be nailed down soon.</p>
<p>We've been revising the modeling and texturing for areas near the end of the game. There are some nice treats in store!</p>
<p>We've been working on some of the "special effects" in the game, most notably particle effects. Our particle system was old and slow, so we are speeding this up, and then we will make some modifications to help make particle authoring an easier process.</p>
<p>We've been making some baseline functionality smoother. For example, so that you don't need to think about saving your game, The Witness autosaves your progress every minute or so. On a high-end PC, you don't notice the autosave, but on a low-end PC or on a console (because consoles tend to have different memory access properties than PCs), scanning the world for stuff that needs to be saved can be pretty slow, like, it could take 1/10 of a second, which would result in a hitch in the frame rate happening every minute. So we are hammering on this to make it faster, which should also result in saved game files being smaller, since we'll be excluding a lot of things that don't need to be saved.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/09/what-weve-been-working-on-lately/feed/</wfw:commentRss>
			<slash:comments>47</slash:comments>
		
		
			</item>
		<item>
		<title>Irradiance Caching &#8211; Continued</title>
		<link>https://the-witness.net/news/2014/07/irradiance-caching-continued/</link>
					<comments>https://the-witness.net/news/2014/07/irradiance-caching-continued/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 10 Jul 2014 18:36:34 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2646</guid>

					<description><![CDATA[... ... Ignacio has posted the conclusion of his series on irradiance caching -- at long last! -- and released the source code. This code is a significant chunk of what makes lighting in The Witness as nice as it is.<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/07/irradiance-caching-continued/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>...<br />
...</p>
<p>Ignacio has posted <a href="http://www.ludicon.com/castano/blog/2014/07/irradiance-caching-continued/">the conclusion of his series on irradiance caching</a> -- at long last! -- and released the source code.</p>
<p>This code is a significant chunk of what makes lighting in The Witness as nice as it is.</p>
<p><a href="http://www.ludicon.com/castano/blog/2014/07/irradiance-caching-continued/"><img class="aligncenter size-large wp-image-2648" src="https://the-witness.net/news/wp-content/uploads/2014/07/neighbor_clamping_02-512x213.jpg" alt="neighbor_clamping_02" width="512" height="213" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/07/irradiance-caching-continued/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Road to E3 &#8211; Day 5</title>
		<link>https://the-witness.net/news/2014/06/road-to-e3-day-5/</link>
					<comments>https://the-witness.net/news/2014/06/road-to-e3-day-5/#comments</comments>
		
		<dc:creator><![CDATA[Luis Antonio]]></dc:creator>
		<pubDate>Sat, 07 Jun 2014 02:44:05 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Art]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2588</guid>

					<description><![CDATA[Final day and a lot more little things to polish than I expected. Every time I got something fixed another problem would pop up. We got everything in a good state for E3 but there are quite a few more ideas we want to try for the castle visuals,  probably 2 or 3 …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/06/road-to-e3-day-5/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Final day and a lot more little things to polish than I expected. Every time I got something fixed another problem would pop up.<br />
We got everything in a good state for E3 but there are quite a few more ideas we want to try for the castle visuals,  probably 2 or 3 more days of work .</p>
<p>Here is a screenshot from another angle:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.06__time_19_11_n01.png"><img class="aligncenter size-large wp-image-2589" src="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.06__time_19_11_n01-512x288.png" alt="shot_2014.06.06__time_19_11_n01" width="512" height="288" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/06/road-to-e3-day-5/feed/</wfw:commentRss>
			<slash:comments>30</slash:comments>
		
		
			</item>
		<item>
		<title>Road to E3 &#8211; Day 4</title>
		<link>https://the-witness.net/news/2014/06/road-to-e3-day-4/</link>
					<comments>https://the-witness.net/news/2014/06/road-to-e3-day-4/#comments</comments>
		
		<dc:creator><![CDATA[Luis Antonio]]></dc:creator>
		<pubDate>Fri, 06 Jun 2014 01:29:43 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Art]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2574</guid>

					<description><![CDATA[Getting close to the end of the week. Most of the key detail has been added to the walls and I feel, if we had to send this build to E3, it wouldn't be terrible. We managed to get in some really nice framing details that I won't spoil here but …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/06/road-to-e3-day-4/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Getting close to the end of the week.</p>
<p>Most of the key detail has been added to the walls and I feel, if we had to send this build to E3, it wouldn't be terrible.<br />
We managed to get in some really nice framing details that I won't spoil here but I'm sure players will appreciate them!<br />
Here is a shot showing the ruined walls work.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.05__time_18_10_n01.png"><img class="aligncenter size-large wp-image-2575" src="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.05__time_18_10_n01-512x288.png" alt="shot_2014.06.05__time_18_10_n01" width="512" height="288" /></a>Tomorrow I'll make sure I walk around a lot to hunt down any major issues, get the overall color vibe (mostly get more variation on the walls) and any extra details.</p>
<p>&nbsp;</p>
<p><strong>Orsi's Vegetation Update</strong>:</p>
<p>To give a little variation to the post today, I thought I would include some things I have been working on as well. While Luis had been working on the structures around the entry yard, I have been placing the vegetation and cables, and re-working some puzzle related things. Laying out the vegetation early on was important to give the place a sense of scale and to get the overall vibe of the place. I am very happy we got an other chance to re-do all of it, because I think it turned out much more magical this time around:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.05__time_17_41_n12.png"><img class="aligncenter size-large wp-image-2576" src="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.05__time_17_41_n12-512x288.png" alt="shot_2014.06.05__time_17_41_n12" width="512" height="288" /></a></p>
<p>Even though it's a much smaller area than it used to be before, I used a different combination of plants in different areas, so people would be less likely to get lost:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.05__time_17_42_n13.png"><img class="aligncenter size-large wp-image-2577" src="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.05__time_17_42_n13-512x288.png" alt="shot_2014.06.05__time_17_42_n13" width="512" height="288" /></a></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.05__time_17_43_n16.png"><img class="aligncenter size-large wp-image-2579" src="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.05__time_17_43_n16-512x288.png" alt="shot_2014.06.05__time_17_43_n16" width="512" height="288" /></a></p>
<p>&nbsp;</p>
<p>I still have polish to do, to match everything to the walls Luis finalizes tomorrow, and then we should be ready for E3!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/06/road-to-e3-day-4/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Road to E3 &#8211; Day 2</title>
		<link>https://the-witness.net/news/2014/06/road-to-e3-day-2/</link>
					<comments>https://the-witness.net/news/2014/06/road-to-e3-day-2/#comments</comments>
		
		<dc:creator><![CDATA[Luis Antonio]]></dc:creator>
		<pubDate>Wed, 04 Jun 2014 01:29:23 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Art]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2554</guid>

					<description><![CDATA[Here is the progress for today. Detail has been added to the rest of the walls and towers as well as windows and other smaller features. We've had some discussions about the style of the battlements so those might change tomorrow or after. Here are the new modular pieces that were …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/06/road-to-e3-day-2/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/Pieces.jpg"><br />
</a>Here is the progress for today. Detail has been added to the rest of the walls and towers as well as windows and other smaller features.<br />
We've had some discussions about the style of the battlements so those might change tomorrow or after.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.03__time_18_11_n01.png"><img class="aligncenter size-large wp-image-2556" src="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.03__time_18_11_n01-512x288.png" alt="shot_2014.06.03__time_18_11_n01" width="512" height="288" /></a></p>
<p>Here are the new modular pieces that were done for detailing:</p>
<p><img class="aligncenter size-large wp-image-2555" src="https://the-witness.net/news/wp-content/uploads/2014/06/Pieces-512x283.jpg" alt="Pieces" width="512" height="283" /></p>
<p>&nbsp;</p>
<p>We just finished the day by meeting with the architects and discussing the interior layout of the space so tomorrow I'll start on the interior building and ruin walls.<br />
Here is how it currently looks:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.03__time_18_26_n04.png"><img class="aligncenter size-large wp-image-2559" src="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.03__time_18_26_n04-512x288.png" alt="shot_2014.06.03__time_18_26_n04" width="512" height="288" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/06/road-to-e3-day-2/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Road to E3 &#8211; Day 1</title>
		<link>https://the-witness.net/news/2014/06/road-to-e3-day-1/</link>
					<comments>https://the-witness.net/news/2014/06/road-to-e3-day-1/#comments</comments>
		
		<dc:creator><![CDATA[Luis Antonio]]></dc:creator>
		<pubDate>Tue, 03 Jun 2014 05:00:01 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<category><![CDATA[Art]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2532</guid>

					<description><![CDATA[Since we have only one week to get the entry area ready before E3 I was thinking it could be interesting to have a post at the end of each day to show how we are progressing. It will balance out the high programming post count we've had the past few days and …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/06/road-to-e3-day-1/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Since we have only one week to get the entry area ready before E3 I was thinking it could be interesting to have a post at the end of each day to show how we are progressing.<br />
It will balance out the high programming post count we've had the past few days and hopefully show a bit of how the art team works!</p>
<p>Last week, as you could see from previous screenshot, we got  a rough layout of the area in the engine and tried to find answers to any remaining issues.</p>
<p>Today the goal was to sort out the design  and navigation of the main entrance and the small towers.<br />
This is one of my first mockups that didn't look quite right.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/image.png"><img class="aligncenter size-large wp-image-2538" src="https://the-witness.net/news/wp-content/uploads/2014/06/image-512x287.png" alt="image" width="512" height="287" /></a></p>
<p>&nbsp;</p>
<p>The architects took a look at it and provided some 3d models of how castle stairs are usually assembled as well as sketches of how it should look:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/stairs.jpg"><img class="aligncenter size-full wp-image-2542" src="https://the-witness.net/news/wp-content/uploads/2014/06/stairs.jpg" alt="stairs" width="301" height="252" /></a><a href="https://the-witness.net/news/wp-content/uploads/2014/06/EntranceEdits1.jpeg"><img class="aligncenter size-large wp-image-2540" src="https://the-witness.net/news/wp-content/uploads/2014/06/EntranceEdits1-512x288.jpeg" alt="EntranceEdits1" width="512" height="288" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>After, I tried to figure out the details from references and what "pieces" I would need to build the structure.<br />
Two years ago I went for vacations in Portugal and tried to see some castles. One of them in Guimaraes struck me as very similar to the entry yard. I made sure I got some pictures and now they are proving to be useful with angles that would be hard to get from online research.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/DSC_0168.jpg"><img class="aligncenter size-large wp-image-2549" src="https://the-witness.net/news/wp-content/uploads/2014/06/DSC_0168-512x342.jpg" alt="DSC_0168" width="512" height="342" /></a></p>
<p>Here is the current result using different modular stairs/floor/battlement pieces:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.02__time_18_31_n03.png"><img class="aligncenter wp-image-2539 size-large" src="https://the-witness.net/news/wp-content/uploads/2014/06/shot_2014.06.02__time_18_31_n03-512x288.png" alt="shot_2014.06.02__time_18_31_n03" width="512" height="288" /></a></p>
<p>And the current overall look by the end of today:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2014/06/image2.png"><br />
</a> <a href="https://the-witness.net/news/wp-content/uploads/2014/06/Day_01.png"><img class="aligncenter size-large wp-image-2536" src="https://the-witness.net/news/wp-content/uploads/2014/06/Day_01-512x288.png" alt="Day_01" width="512" height="288" /></a></p>
<p>Tomorrow I'll be tackling  the rest of the exterior walls and the 3 other towers.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/06/road-to-e3-day-1/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Casey&#8217;s Witness Wednesday on Interpolation</title>
		<link>https://the-witness.net/news/2014/05/caseys-witness-wednesday-on-interpolation/</link>
					<comments>https://the-witness.net/news/2014/05/caseys-witness-wednesday-on-interpolation/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Fri, 23 May 2014 16:53:52 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2518</guid>

					<description><![CDATA[He's put up another very informative blog post, leaving the specific topic of grass planting, venturing into more general territory regarding interpolation. And there's a video, from which it is possible to learn a lot of this is a new subject. Here's the blog post. Here's the video: &#160;<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/05/caseys-witness-wednesday-on-interpolation/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>He's put up another very informative blog post, leaving the specific topic of grass planting, venturing into more general territory regarding interpolation. And there's a video, from which it is possible to learn a lot of this is a new subject.</p>
<p><a href="http://mollyrocket.com/casey/stream_0018.html">Here's the blog post.</a></p>
<p>Here's the video:</p>
<p><iframe width="900" height="506" src="https://www.youtube.com/embed/S2fz4BS2J3Y?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/05/caseys-witness-wednesday-on-interpolation/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Witness Friday post on Casey&#8217;s blog</title>
		<link>https://the-witness.net/news/2014/05/witness-friday-post-on-caseys-blog/</link>
					<comments>https://the-witness.net/news/2014/05/witness-friday-post-on-caseys-blog/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sat, 03 May 2014 20:23:14 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2509</guid>

					<description><![CDATA[Casey Muratori is back, with more details about planting grass when you really care about how good the results are. &#160; &#160; &#160; Update: And here's another post, complete with a video showing in detail how the grass planting works in the actual game.<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/05/witness-friday-post-on-caseys-blog/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Casey Muratori is back, with <a href="http://mollyrocket.com/casey/stream_0015.html">more details about planting grass</a> when you really care about how good the results are.</p>
<p>&nbsp;</p>
<p><a href="http://mollyrocket.com/casey/stream_0015.html"><img class="aligncenter size-large wp-image-2510" src="https://the-witness.net/news/wp-content/uploads/2014/05/grass_03_22-512x269.png" alt="grass_03_22" width="512" height="269" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Update</strong>: And here's <a href="http://mollyrocket.com/casey/stream_0017.html">another post</a>, complete with a video showing in detail how the grass planting works in the actual game.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/05/witness-friday-post-on-caseys-blog/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
		<item>
		<title>Working on The Witness, Parts 5 and 6.</title>
		<link>https://the-witness.net/news/2014/04/working-on-the-witness-part-5/</link>
					<comments>https://the-witness.net/news/2014/04/working-on-the-witness-part-5/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 16 Apr 2014 19:20:53 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2489</guid>

					<description><![CDATA[Casey Muratori has made new postings about the work he has done on The Witness: Working on The Witness, Part 5 Working on The Witness, Part 6 In this one he talks about how to distribute grass. Legally. As well as the different colors of noise one might want to …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/04/working-on-the-witness-part-5/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Casey Muratori has made new postings about the work he has done on The Witness:</p>
<p><a href="http://mollyrocket.com/casey/stream_0013.html">Working on The Witness, Part 5</a></p>
<p><a href="http://mollyrocket.com/casey/stream_0014.html">Working on The Witness, Part 6</a></p>
<p>In this one he talks about how to distribute grass. Legally. As well as the different colors of noise one might want to be familiar with in order to do this well.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/04/working-on-the-witness-part-5/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>The Art of &#8220;The Witness&#8221; &#8211; GDC 2014</title>
		<link>https://the-witness.net/news/2014/03/the-art-of-the-witness-gdc-2014/</link>
					<comments>https://the-witness.net/news/2014/03/the-art-of-the-witness-gdc-2014/#comments</comments>
		
		<dc:creator><![CDATA[Luis Antonio]]></dc:creator>
		<pubDate>Mon, 24 Mar 2014 18:52:13 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Art]]></category>
		<category><![CDATA[GDC]]></category>
		<category><![CDATA[Luis Antonio]]></category>
		<category><![CDATA[Talk]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2474</guid>

					<description><![CDATA[Last week was the Game Developers Conference (GDC) here in San Francisco and we were invited to talk about the art  of "The Witness". I decided to shift the talk from any technical aspect, since there are already plenty of those, and tried to focus instead on our thought process, …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/03/the-art-of-the-witness-gdc-2014/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Last week was the Game Developers Conference (GDC) here in San Francisco and we were invited to talk about the art  of "The Witness".<br />
I decided to shift the talk from any technical aspect, since there are already plenty of those, and tried to focus instead on our thought process, what were the decisions we took that led us to the current art style.</p>
<p>If you are interested you can take a look at the slides PDF here:<br />
<a href="https://the-witness.net/news/wp-content/uploads/2014/03/GDC2014_LuisAntonio_TheArtOfTheWitness.pdf">GDC2014_LuisAntonio_TheArtOfTheWitness</a></p>
<p>Unfortunately the PDF merges animated slides so there is some content that you won't be able to see and you are missing the actual talk but it should be available in a few weeks at the <a href="http://www.gdcvault.com/">GDC Vault</a>!</p>
<p>&nbsp;</p>
<p>*UPDATE - The talk is now available at the GDC Vault, you can  check it here:<br />
<a href="http://www.gdcvault.com/play/1020552/The-Art-of-The">http://www.gdcvault.com/play/1020552/The-Art-of-The</a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/03/the-art-of-the-witness-gdc-2014/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title>What that VR post was about</title>
		<link>https://the-witness.net/news/2014/01/what-that-vr-post-was-about/</link>
					<comments>https://the-witness.net/news/2014/01/what-that-vr-post-was-about/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Fri, 24 Jan 2014 19:27:49 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2432</guid>

					<description><![CDATA[Last November I made a somewhat-mysterious posting which some people speculated was hinting at stereoscopic rendering in The Witness. Indeed it was, and Now It Can Be Told. Last year I was pessimistic about VR systems in the near future, since the ones I had tried didn't seem to offer …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2014/01/what-that-vr-post-was-about/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Last November I made a <a href="https://the-witness.net/news/2013/11/what-could-it-mean/">somewhat-mysterious posting</a> which some people speculated was hinting at stereoscopic rendering in The Witness. Indeed it was, and Now It Can Be Told.</p>
<p>Last year I was pessimistic about VR systems in the near future, since the ones I had tried didn't seem to offer much (certainly not enough to justify wearing a bulky headset all the time and fighting back feelings of nausea).</p>
<p>But I was fortunate enough to get a sneak peek at Valve's virtual reality system. It is so much better than anything else I had used that I was instantly very excited by it. Right away I could see games you might design for this system that had been impossible before; so it isn't just a matter of the system being very immersive (which it is) but that it can take video games in general to a new place.</p>
<p>We worked with Valve to get support for the system in The Witness, and that's where those screenshots come from (but when I took the shots, an HMD was not plugged in, and as a result what you see is a dummy calibration that does not correspond to any useful image-warping; the screenshot was really more about just being happy about the stereo display capability.) In late November I spent a few days at Valve's offices working with Atman Binstock and Doug Church to adapt the HMD's input system more thoroughly for The Witness and to build a few scenes that are playable on the device.</p>
<p>(In theory the whole game is playable on the device, but when you are rendering for VR the performance demands become much higher, because you are rendering two scenes at higher resolution than you might previously have been rendering one scene. So the full game world with all content currently does not run fast enough for this device, but that is the kind of problem that gets solved over time).</p>
<p>We had to keep this under wraps, though, because Valve's system was not announced. But this month at Steam Dev Days they revealed details of the system.</p>
<p>For more details on the Valve system, Lee Vermeulen wrote up a nice post of his impressions:</p>
<p>http://www.3delement.com/?p=332</p>
<p>So, we will be supporting this device (and any similar devices) with The Witness. But I am really looking forward to see what gets designed specifically for devices like this.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2014/01/what-that-vr-post-was-about/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title>It&#8217;s been a while since we did an Island Snapshot</title>
		<link>https://the-witness.net/news/2013/12/its-been-a-while-since-we-did-an-island-snapshot/</link>
					<comments>https://the-witness.net/news/2013/12/its-been-a-while-since-we-did-an-island-snapshot/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 19 Dec 2013 02:34:02 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2422</guid>

					<description><![CDATA[... so here one is. &#160; &#160; Luis has been doing a lot of work lately on the mountain and especially the stuff at the top. Other folks have been doing a bunch of work on things that are not as obvious in this picture! Current puzzle count: 595<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2013/12/its-been-a-while-since-we-did-an-island-snapshot/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>... so here one is.</p>
<p>&nbsp;</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2013/12/shot_2013.12.18__time_18_30_n01.png"><img class="aligncenter size-large wp-image-2423" alt="shot_2013.12.18__time_18_30_n01" src="https://the-witness.net/news/wp-content/uploads/2013/12/shot_2013.12.18__time_18_30_n01-512x288.png" width="512" height="288" /></a></p>
<p>&nbsp;</p>
<p>Luis has been doing a lot of work lately on the mountain and especially the stuff at the top.</p>
<p>Other folks have been doing a bunch of work on things that are not as obvious in this picture!</p>
<p>Current puzzle count: 595</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2013/12/its-been-a-while-since-we-did-an-island-snapshot/feed/</wfw:commentRss>
			<slash:comments>35</slash:comments>
		
		
			</item>
		<item>
		<title>More Screenshots</title>
		<link>https://the-witness.net/news/2013/08/more-screenshots/</link>
					<comments>https://the-witness.net/news/2013/08/more-screenshots/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 05 Aug 2013 19:46:11 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2230</guid>

					<description><![CDATA[It's been a long time since the last posting! Time flies. Normally I would post an Island Snapshot, but the viewpoint we have been using for Island Snapshots is a little bit unfortunate lately, since the main thing taking up the view is the mountain, which is an area we …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2013/08/more-screenshots/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>It's been a long time since the last posting! Time flies.</p>
<p>Normally I would post an Island Snapshot, but the viewpoint we have been using for Island Snapshots is a little bit unfortunate lately, since the main thing taking up the view is the mountain, which is an area we haven't worked on modeling-wise lately. (It is a big area so we are going to do a concentrated push on it in a little bit, when some other things get locked down.)</p>
<p>So, here are some screenshots of other stuff we have been working on lately. Both areas are in progress and will look better than this in the final game!</p>
<p>&nbsp;</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2013/08/shot_2013.08.05__time_12_14_n01.png"><img class="aligncenter size-large wp-image-2231" alt="shot_2013.08.05__time_12_14_n01" src="https://the-witness.net/news/wp-content/uploads/2013/08/shot_2013.08.05__time_12_14_n01-512x288.png" width="512" height="288" /></a></p>
<p>A lake that's central to the island...</p>
<p>&nbsp;</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2013/08/shot_2013.08.05__time_12_03_n19.png"><img class="aligncenter size-large wp-image-2232" alt="shot_2013.08.05__time_12_03_n19" src="https://the-witness.net/news/wp-content/uploads/2013/08/shot_2013.08.05__time_12_03_n19-512x288.png" width="512" height="288" /></a></p>
<p>A swampy area with light buildings and walkways. The vegetation you see here is temporary! But I am happy we are finally starting to work on this area; if you look at it in the trailer, for example, it's obviously very much more temporary.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2013/08/more-screenshots/feed/</wfw:commentRss>
			<slash:comments>40</slash:comments>
		
		
			</item>
		<item>
		<title>iPad video update #1</title>
		<link>https://the-witness.net/news/2013/03/ipad-video-update-1/</link>
					<comments>https://the-witness.net/news/2013/03/ipad-video-update-1/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 14 Mar 2013 02:26:04 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2113</guid>

					<description><![CDATA[Andy's got the iPad port far enough along that you can sort of play the game now. Here's a short video: There are some basic hacks going on; for example, right now, we are not drawing the real sky; it's just solid blue. Also, right now we are just loading …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2013/03/ipad-video-update-1/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Andy's got the iPad port far enough along that you can sort of play the game now. Here's a short video:</p>
<p><center><br />
<iframe width="900" height="506" src="http://www.youtube.com/embed/pXuPKOy_PXU?feature=oembed" frameborder="0" allowfullscreen></iframe><br />
</center></p>
<p>There are some basic hacks going on; for example, right now, we are not drawing the real sky; it's just solid blue. Also, right now we are just loading this starting area, but it should not be long before we can load the whole game (Salvador wrote the streaming system a while back and we have been testing it extensively on the PC, so for the iPad it should Just Work. Famous last words.) Also, as you can see, the panel-tracing controls could use some work.</p>
<p>When we can wander around the island generally, I'll post another video update!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2013/03/ipad-video-update-1/feed/</wfw:commentRss>
			<slash:comments>51</slash:comments>
		
		
			</item>
		<item>
		<title>The Witness Audio: 1000 Subtle Layers</title>
		<link>https://the-witness.net/news/2013/02/the-witness-audio-1000-subtle-layers/</link>
					<comments>https://the-witness.net/news/2013/02/the-witness-audio-1000-subtle-layers/#comments</comments>
		
		<dc:creator><![CDATA[Andrew Lackey]]></dc:creator>
		<pubDate>Wed, 20 Feb 2013 04:41:22 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2081</guid>

					<description><![CDATA[(This is a crosspost from WabiSabi Sound's blog). I didn’t think Witness was going to be an easy project by any stretch, but I certainly didn’t expect it to be one of our biggest creative challenges. I’ve worked on nearly 80 projects spanning feature film, games, ads and other sorts, …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2013/02/the-witness-audio-1000-subtle-layers/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><em>(This is a crosspost from <a href="http://wabisabisound.com/blog/">WabiSabi Sound's blog</a>).</em></p>
<p>I didn’t think Witness was going to be an easy project by any stretch, but I certainly didn’t expect it to be one of our biggest creative challenges.   I’ve worked on nearly 80 projects spanning feature film, games, ads and other sorts, and my job as sound designer had always been to broaden the experience in every possible way.  The Witness inverts this notion.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2013/01/shot_2013.01.03__time_17_05_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2013/01/shot_2013.01.03__time_17_05_n01-512x288.png" alt="shot_2013.01.03__time_17_05_n01" width="512" height="288" class="aligncenter size-large wp-image-2037" /></a></p>
<p>A tree of any significance in a film or game will have a bird perched on its branches chirping away.  Cicadas will buzz.  Wind will rustle its leaves.  Branches will creak, stress and morph right before your ears.  All this happening without you actually seeing it…or really expecting to, interestingly.</p>
<p>In The Witness every element has purpose.   A key game mechanic, in fact, relies on the player’s perception as they explore.  So, we’re not just talking aesthetics…noise (literally stated) ruins the game’s playability.   Noticing, as a buddhist would call it, is key to discovering solutions and even finding the puzzles themselves.  Nothing in the Witness is superfluous.</p>
<p>All this said, the island is a tangible living breathing organic place following roughly the same laws of our universe.  The trees exist.  They have mass and energy.  My eyes receive bands of light reflecting off them, and in fact they are quite beautiful.  So then what do my ears hear? Silence is not only a bad artistic choice, it's untrue.</p>
<p>At this point, you’ve probably asked, “What about music?”  It’s no spoiler that there isn’t a gigantic speaker system in the sky fed by a mic’d orchestra.  So….</p>
<p>None the less, the island is a fascinating place, with lots to see, hear and do.  Geoff and I ‘the audio team’ have had an interesting time exploring 1000′s of layers of sonic subtly, and finding ways to engage players to listen ever deeper.  This is a unique project for game sound, and we though it would be of interest to share our challenges and discoveries since starting with Jon in 2010 (and of course the challenges yet to meet).  </p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2013/02/the-witness-audio-1000-subtle-layers/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Interview about The Witness and related design topics</title>
		<link>https://the-witness.net/news/2013/02/interview-about-the-witness-and-related-design-topics/</link>
					<comments>https://the-witness.net/news/2013/02/interview-about-the-witness-and-related-design-topics/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sat, 02 Feb 2013 04:21:38 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Ill-Advised Rants]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2067</guid>

					<description><![CDATA[On January 31, 2013, Tom McShea of Gamespot interviewed me as part of their Break Room Interview series. It was an interesting conversation! Here's the interview.<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2013/02/interview-about-the-witness-and-related-design-topics/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>On January 31, 2013, Tom McShea of Gamespot interviewed me as part of their Break Room Interview series. It was an interesting conversation!</p>
<p><a href="http://www.gamespot.com/the-witness/videos/the-break-room-interviews-jonathan-blow-6403321/">Here's the interview.</p>
<p><img src="https://the-witness.net/news/wp-content/uploads/2013/02/pic-512x286.jpg" alt="pic" width="512" height="286" class="aligncenter size-large wp-image-2073" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2013/02/interview-about-the-witness-and-related-design-topics/feed/</wfw:commentRss>
			<slash:comments>72</slash:comments>
		
		
			</item>
		<item>
		<title>How do you say &#8220;plane&#8221; in The Witness?</title>
		<link>https://the-witness.net/news/2013/01/how-do-you-say-plane-in-the-witness/</link>
					<comments>https://the-witness.net/news/2013/01/how-do-you-say-plane-in-the-witness/#comments</comments>
		
		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Mon, 21 Jan 2013 02:54:07 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2052</guid>

					<description><![CDATA[Just before Christmas break, I fixed a bug in the transform manipulator and checked it in. Having a transform manipulator is a nice addition to any editor, and we were all happy to have it working. But shortly thereafter, I had to leave for a cross-country family Christmas trip. This …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2013/01/how-do-you-say-plane-in-the-witness/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Just before Christmas break, I <a href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/">fixed a bug in the transform manipulator</a> and checked it in. Having a transform manipulator is a nice addition to any editor, and we were all happy to have it working. But shortly thereafter, I had to leave for a cross-country family Christmas trip. This meant no more real <i>Witness</i> work for about ten days, because my laptop only has Linux on it, and right now the Linux version of <i>The Witness</i> is still under construction.</p>
<p>This hiatus was the primary motivation behind writing my previous entry as a cliffhanger: although I had fixed the bug, I didn’t have time to adequately document the bug via debugger inspection, so it would have been hard to write anything meaningful showing how the bug manifested itself in practice. I wanted to wait until I had a chance to go through every last little bit of it, so I could be as specific as possible. In that sense, it was meant to be a bit of a cliffhanger for me as well.</p>
<p>But as it turned out, it was much more of a cliffhanger than I’d originally anticipated.</p>
<p><span id="more-2052"></span></p>
<h2>Good News, Bad News</h2>
<p>The good news: congratulations to those of you who posted “floating point precision” as a suggestion for the cause of the bug. You aren’t any dumber than I am.</p>
<p>The bad news: we’re all dumber than we should be.</p>
<p>For those of you who don’t already know all about floating point precision problems, I’ll explain the problem we all thought we were solving. The original code, verbatim, looked like this:</p>
<pre>bool ray_vs_plane(Vector3 *xpoint, Vector3 const &amp;p0, Vector3 const &amp;dir,
                  Plane3 const &amp;plane) {
    Vector3 n = plane.get_normal();

    float denom = dot_product(n, dir);
    float epsilon = 0.0001f;
    if (fabs(denom) &lt; epsilon) return false;

    float t = - ((plane.d + dot_product(n, p0)) / denom);
    if (t &lt; 0) return false;

    *xpoint = p0 + dir * t;
    return true;
}</pre>
<p>To fix the bug, I wrote a modified version to use for the transform manipulator:</p>
<pre>bool ray_vs_plane(Vector3 *xpoint, Vector3 const &amp;p0, Vector3 const &amp;dir,
                  Vector3 const &amp;plane_point, Vector3 const &amp;plane_n)
{
    Vector3 local_p0 = p0 - plane_point;

    float denom = dot_product(plane_n, dir);
    float epsilon = 0.0001f;
    if (fabs(denom) &lt; epsilon) return false;

    float t = - (dot_product(plane_n, local_p0) / denom);

    *xpoint = p0 + dir * t;
    return true;
}</pre>
<p>I’ve done exactly the same operation, but instead of using the d value of the plane equation to solve for t, I just move the ray itself to be centered around a point on the plane, so that the d value is implicitly zero. My reasoning was very simple: if I subtract two things that I know are close together (the camera location and the picked point on the manipulator), I will have less cancellation error than if I subtract two things that may be wildly different in scale (the d value and the dot product of the camera location and the plane normal).</p>
<p>This is pretty weak sauce as far as numerical precision improvements go. I am far from an expert on the subject (<a href="http://www.amazon.com/Forman-S.-Acton/e/B001IYTXGY/ref=sr_ntt_srch_lnk_2?qid=1358735012&amp;sr=8-2">read some Forman Acton</a>, for example, if you want to see how the pros roll). But, when I did this, it fixed the bug perfectly, so I assumed, at least for the moment, that it must be a reasonable fix.</p>
<p>But, honestly, I didn’t really have a good feeling about it.</p>
<h2>Christmas Stew</h2>
<p>Sometimes, when there’s a lot to do, you’ll live with a bug fix because it works, rather than because it makes sense. But invariably, at least for me, I end up going back to look more closely at something if I don’t feel like I fully understood it. I am sure this is mostly just an obsessive personality trait, but regardless, I rarely find the time to be wasted, because I almost always learn something from the process.</p>
<p>In this specific case, I didn’t have time to look into the problem in depth before I left. I planned to do so for the eventual writeup, but of course, I couldn’t do much without being able to run the code, and while I was on Christmas break, that wasn’t an option. Unfortunately, this meant that I had the entire Christmas break to stew about the bug that I wasn’t sure I’d really fixed properly.</p>
<p>From the beginning, the thing that didn’t sit right with me about the fix was that when Jon originally reported the problem to me, he didn’t mention anything about it happening more on the outskirts of the island than on the interior. Jon’s a very experienced programmer, so if something like that were happening, he would probably notice and include that in the report, because he’d know it would help me find the bug faster.</p>
<p>Instead, it seemed pretty clear that the bug was related more to the camera angle than the position in the world. While obviously the camera angle affects the input values, and could have a number of effects on the numerical precision of the program, it’s not intuitively the kind of thing that I would expect. If these sorts of algorithms were that sensitive in this way, I would have expected to encounter similar problems with camera-relative plane intersections many times before — but I never had.</p>
<p>The more I thought about that, the more it gnawed at me that I couldn’t go see exactly what was happening and prove to myself why the fix worked. I did have the game on my laptop, because I’d done some initial Linux porting work, so I realized that maybe, if I was lucky, I could reconstruct the problem without actually being able to load and run the editor.</p>
<p>That is when I became very thankful that I had been writing these blog entries, because it meant I had stopped to take this screenshot before I left, specifically so I could do the writeup over break:</p>
<p><a href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/witness3_yworks/" rel="attachment wp-att-1995"><img class="aligncenter size-large wp-image-1995" alt="witness3_yworks" src="https://the-witness.net/news/wp-content/uploads/2012/12/witness3_yworks-512x288.jpg" width="512" height="288" /></a></p>
<p>Do you see what I see? That lovely entity number up in the corner is pure gold for step one of reconstructing the problem. Because I could see the entity number, I was able to go into the repository and get the data file that says where that entity is placed in the world. That let me know the numbers of the center point of the manipulator: -304.114, 193.4923, 4.7582.</p>
<p>If you’re an experienced 3D programmer, then you probably are thinking the same thing that I was thinking when I saw those: how the hell could I be having numerical precision problems with such low numbers? <i>The Witness’s</i> scale is one unit per meter, which means that, at the scale of the dragging we’re talking about, there should be absolutely no problems with solving a single plane equation, regardless of how sloppily you did it.</p>
<p>But if that was the case, then how did I fix the bug? This lead me to step two of reproducing the problem: writing a test program. I wrote a little C program that would take numbers around that point and, for a large set of programmatically generated planes and rays, perform the intersection using both the old ray intersection routine and my “improved” one.</p>
<p>Perhaps unsurprisingly, these results reinforced my suspicions that there wasn’t enough of a difference between the two routines to account for the original bug. In all the tests, my “improved” routine was no more than one decimal digit more precise; so if the original routine produced intersection points that were actually, say, 0.0001 units away from the plane, the new routine might produce ones that were 0.00001 away.</p>
<p>Clearly, the fix just plain shouldn’t have worked. But it did.</p>
<p>Why?</p>
<h2>The Wrong Part of the Post</h2>
<p>I would love to be able to say that I guessed the real reason before stepping through the code, but I absolutely didn’t.</p>
<p>When I returned from Christmas break, I eagerly booted up the <i>Witness</i> and stepped through the code very carefully, keeping accurate track of all the numbers as I went, waiting to find that super-elusive numerical thing that I had overlooked. To my complete surprise, it turned out to have <i>absolutely nothing to do with precision</i>.</p>
<p>In fact, somehow, although I didn’t know it at the time, I actually did write about the root cause of the problem in my original post. It just wasn’t in the part that I thought. Indeed, rather than <i>Always Look Behind You</i> foretelling the eventual solution, it was <i>Foreign Languages</i> that contained the hint: due to my naivete with <i>The Witness</i> codebase, I misunderstood what it was doing with planes. It turns out that this one line from the original routine was the entire culprit:</p>
<pre>    Vector3 n = plane.get_normal();</pre>
<p>You will notice that it only occurs in the buggy version of the ray intersection code. In my version, I couldn’t use the plane structure, because I didn’t want an “a, b, c, d” representation of the plane. I wanted “a, b, c, p”, if you will, where p is an actual 3D point on the plane. So I never called get_normal().</p>
<p>Why does this matter? Well, upon stepping through all the code, I realized that get_normal(), being true to its name, takes the unusual step of <i>normalizing</i> the a, b, c values of the plane before returning them to you as a vector. This means that the a, b, c values of the plane that you pass in when you create the plane aren’t the ones you get out.</p>
<p>That wouldn’t be a problem if it weren’t for the fact that, when you create one of these planes, it <i>does not</i> normalize the values you pass in:</p>
<pre>    Vector3 plane_n = cross_product(camera_back, translation_axis);
    plane_n = cross_product(plane_n, translation_axis);
    grabbing_plane = plane_from_point_and_normal(hit_pos, plane_n);</pre>
<p>This is my fault on its face, because hey, it <i>does say normal</i>, and normals are traditionally supposed to be normalized. But in keeping with my reference to foreign languages, this is something I really just didn’t think about, because I am used to the way I’ve always done things with planes: nothing is normalized automatically, everything is just left unnormalized, because back in the day, normalization was very expensive and you never did it in a math routine unless it was absolutely necessary.</p>
<p>So plane_from_point_and_normal was actually doing what I thought it would: it just stored plane_n as the a, b, c values, and computed d with the inner product. But get_normal() was not doing what I thought it would. Rather than just returning me the vector {a,b,c}, it was normalizing them before giving them to me, which meant <i>all</i> my calculations with them would no longer agree with the d value computed in plane_from_point_and_normal.</p>
<p>And therein, clearly, lies the entirety of the bug.</p>
<p>Just to underscore how much of a native language issue this really is, when I showed Jon the preview of this article, he said, “If you are thinking of the plane as a geometric object, of course the normal is unit length, what else would it be?? But if you are thinking of it as some specific equation all the time, then it is natural to care about the a, b, c, you put in.” So I can only assume, were he using my math library, he would’ve been tripped up by the fact that I <i>don’t</i> normalize normals automatically, exactly the inverse of the problem I encountered with his.</p>
<p>I honestly don’t believe that this sort of thing is a case of us being presumptuous or sloppy; it’s just the price you have to pay for being able to program complex things at a reasonable speed. If we constantly have to think about what it means to work with a vector, or a plane, or a quaternion, we’re going to be a lot slower. It’s much more efficient to have a consistent perspective, and always rely on it.</p>
<p>And of course, the cost is bugs like this — but that’s a very small cost relative to the benefits.</p>
<h2>Partial Credit</h2>
<p>So, where does that leave you?</p>
<p>Clearly, automatic partial credit goes to everyone who wrote in suggesting that numerical precision was the problem. You came to the same conclusion I did with the information I knew at the time, which was all you had to go on. You certainly can’t be blamed for not finding the real bug since you would have needed the source code to the <i>Witness</i> math library to even see it. And it is true that the numerical precision of the routine could have been improved, as I believe I was able to verify separately with my test program.</p>
<p>But by the same token, nobody gets automatic full credit. There were a lot of reasons why, even with only the information in the original article, you could have said, “I don’t think it’s numerical precision, Muratori.” Maybe I am ascribing overly heroic attributes to the man, but I feel like <a href="http://en.wikipedia.org/wiki/Forman_S._Acton">Forman Acton</a> would have known, from looking at the plane intersection snippet, that there wasn’t any way to lose enough precision in there to account for the bug as I described it, at least not in any way that would have been substantially improved by the suggested fixes people wrote in (or the fix I actually did, for that matter).</p>
<p>So in order to actually get full credit, you’re going to have to earn it, I think, but on the honor system. Ask yourself, if you had encountered this bug, and you had “fixed” it as I had, would you have gone back and figured out what was really happening before moving on to something else?</p>
<p>If you can honestly answer yes, then you get full credit, for this is about as good as you can hope to do as a working programmer, I think. You’re no Forman Acton, of course. . . but then again, who among us is?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2013/01/how-do-you-say-plane-in-the-witness/feed/</wfw:commentRss>
			<slash:comments>28</slash:comments>
		
		
			</item>
		<item>
		<title>Island Partition</title>
		<link>https://the-witness.net/news/2013/01/island-partition/</link>
					<comments>https://the-witness.net/news/2013/01/island-partition/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 17 Jan 2013 02:21:09 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2048</guid>

					<description><![CDATA[This week we've been having discussions about how it's almost time to move into full-on Production Mode and start cranking out final-ish 3D models and textures ... following schedules, and all kinds of organized stuff like that. Up until now we have not been in that kind of work mode, …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2013/01/island-partition/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>This week we've been having discussions about how it's almost time to move into full-on Production Mode and start cranking out final-ish 3D models and textures ... following schedules, and all kinds of organized stuff like that.</p>
<p>Up until now we have not been in that kind of work mode, because we were figuring out the game, and in that kind of mode, I find schedules to be anti-quality. But once you have everything figured out and need to produce a volume of work, schedules are pro-quality, since they help you gauge how well you are doing, whether you need a reality check on the rate or quality of things you can produce, etc.</p>
<p>Luis has made this handy map that we are using to partition up modeling tasks, which I have then edited to remove spoilers:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2013/01/World_Map_Edited.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2013/01/World_Map_Edited-426x384.jpg" alt="World_Map_Edited" width="426" height="384" class="aligncenter size-large wp-image-2049" /></a></p>
<p>I like looking at this map because it reminds me how many distinct areas there are and how they relate to each other.</p>
<p>Today I was showing the game to someone who had not seen it before, and that's always interesting because it helps me see the game through fresh eyes a little. It really feels unlike any other game in the way it is an Open World but also a Small World, where you can be in one location and see several neighboring locations, and that helps keep you oriented, but it also helps you reflect on what you have done and orient on where you are in the course of things you are planning to do.</p>
<p>We still have <strong>a ton</strong> of work to do, though, and I was reminded of this as well. Not just in detailing all these areas, but in filling out the story, crafting details that further help the areas relate to each other, etc.</p>
<p>It is going to be an interesting time!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2013/01/island-partition/feed/</wfw:commentRss>
			<slash:comments>49</slash:comments>
		
		
			</item>
		<item>
		<title>Island Snapshot</title>
		<link>https://the-witness.net/news/2013/01/2034/</link>
					<comments>https://the-witness.net/news/2013/01/2034/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Fri, 04 Jan 2013 01:08:06 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2034</guid>

					<description><![CDATA[Current puzzle count: 505.<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2013/01/2034/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><a href="https://the-witness.net/news/wp-content/uploads/2013/01/shot_2013.01.03__time_17_05_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2013/01/shot_2013.01.03__time_17_05_n01-512x288.png" alt="shot_2013.01.03__time_17_05_n01" width="512" height="288" class="aligncenter size-large wp-image-2037" /></a></p>
<p>Current puzzle count: 505.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2013/01/2034/feed/</wfw:commentRss>
			<slash:comments>27</slash:comments>
		
		
			</item>
		<item>
		<title>What I Did on My Christmas Vacation</title>
		<link>https://the-witness.net/news/2012/12/what-i-did-on-my-christmas-vacation/</link>
					<comments>https://the-witness.net/news/2012/12/what-i-did-on-my-christmas-vacation/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sun, 30 Dec 2012 23:34:47 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=2018</guid>

					<description><![CDATA[I apologize in advance that this posting is a rambling mess. The Background Way back in 2008 when I came upon the core idea of this game, the design was the exciting part. Though I started in games mainly as a technical person who was excited about technical challenges, I …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/12/what-i-did-on-my-christmas-vacation/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>I apologize in advance that this posting is a rambling mess.</p>
<p><strong>The Background<br />
</strong><br />
Way back in 2008 when I came upon the core idea of this game, the design was the exciting part. Though I started in games mainly as a technical person who was excited about technical challenges, I have shifted into a mode of thought where, when I program, it's mainly just to get the design done in the most straightforward way.</p>
<p>Since Braid I have viewed programming as mostly pragmatic: I know what I want to do, and I know what kinds of things I have to type in to make it happen, but for the most part, the interesting mental challenges are in design, and programming is rote execution. Once you have enough programming experience, I think 95% of writing a big program is like this. There have been a few times during <em>The Witness</em> when I spent significant effort solving technical problems where I had no idea what the answer would be in advance, <a href="https://the-witness.net/news/2010/05/kriging-is-cool/">like with the terrain manipulation,</a> but even in these cases I treated the technical development in a very pragmatic way: the goal was to get something that is good enough for current needs, not to design a shining jewel of an amazing technical system (back when I was a younger game programmer, I was trying to make amazing technical systems all the time, and it came at the cost of actually getting games done).</p>
<p>Despite the fact that I am trying to focus on design, in order to make this game a reality, I had to start a company, bring people onto the project to build the game, etc. This means that nowadays I am not just wearing the programmer and designer and business development hats, I also wear the producer hat and the (admittedly small at present) HR hat. Maybe if The Witness does well, we can expand the team a little bit so that I don't have to do these things, but for now, that's the reality.</p>
<p>We are very laid back and unstructured in the way we do things, but even so, I feel there's a heavy subconscious load involving running the company, making sure nobody's work is blocked, dealing with money all the time, etc. I often find it hard to do deep design thinking when I am in the office, if only because all these issues are just ambiently around. So, in terms of design, my most productive days tend to be work-from-home days (which for me includes most weekends).</p>
<p>All this up til now is just to explain that if I take a vacation seriously, it can be very relaxing, because that subliminal load is gone, or at least mitigated for a while. The activity of the rest of the company is mostly paused, which removes urgency from my own activities. </p>
<p>At first I didn't know how I would spend vacation; at first I thought maybe I would actually treat it the way most people treat vacation, and not work. Then I thought, hmm, there is a certain sector of the game that I might like to work on, that is definitely very important, and I should get a bunch of that done while everyone is gone, so that when they come back it will be figured out. (I don't want to go into detail about what that section of the game is, because I am avoiding spoilers).</p>
<p><strong>The Vacation</strong></p>
<p>But, inspiration is a funny thing. I worked a little bit on the issues I had planned to work on, but for the first bit of the vacation, up through the 25th, I found myself most motivated by cleaning up old nagging issues on my to-do list, and shipping this improved version of the game to our very few beta players. This involved stuff like improving the feel of tracing lines on the puzzle panels.</p>
<p><div id="attachment_2026" style="width: 486px" class="wp-caption aligncenter"><a href="https://the-witness.net/news/wp-content/uploads/2012/12/export.png"><img aria-describedby="caption-attachment-2026" src="https://the-witness.net/news/wp-content/uploads/2012/12/export-476x384.png" alt="A peek at the export script, used to package the game for end-users." width="476" height="384" class="size-large wp-image-2026" /></a><p id="caption-attachment-2026" class="wp-caption-text">A peek at the export script, used to package the game for end-users.</p></div></p>
<p>After shipping that beta, I found my attention most strongly drawn toward an unexpected part of the game: an optional area, one that we could completely cut from the game and nobody would know, yet at the same time, it's an area that adds to the overall conceptual arc of the game in a strong way, and would be very rewarding for the small percentage of players who get deeply into the game. (Again, I apologize for the vagueness, but let's avoid spoilers). </p>
<p>I had roughed out a version of this area a long time ago -- maybe a year or two ago -- and had always found the basic idea very exciting. But back then the area wasn't done enough to prove the concept, and over time it decayed while the rest of the game was being worked on (which is natural on a big project like this). But, perhaps because it's an area of the game that nobody else on the team really knows about or understands yet, I had a great motivation to spend vacation time on making this area good. Now that I think about this again it makes a strange kind of sense: when development is pretty much paused, it is somehow appropriate to work on something that nobody else really knows about.</p>
<p><span id="more-2018"></span></p>
<p>At first I thought the task would just be to make the old stuff work again and then do a straightforward job of the extra functionality I needed to complete the area. Thinking about the programming I would have to do to complete the area, I saw it as a necessary bummer ("I want to be done with this game, but ugh, there is more programming I have to do that isn't even on the mainline to all the things that really need to be done.") </p>
<p>But I started programming that extra functionality, and 10 minutes into it, realized I was not so excited about the design part -- it seemed like a very rote execution, like anyone could do in any game, and The Witness ought to have something better than that. Because there was no pressure, and because I was free to do whatever I wanted, my mind was open enough to instantly see an alternative that would be much truer to the essence of the game. The chance to do this better thing was very exciting. (We'll come back to this subject of being able to see ideas, later).</p>
<p>So I started programming this more-exciting version of the functionality. Then I saw how I could make it even more interesting, and I would start doing that. Then I would see how to make it even <em>more</em> interesting, though that would introduce a lot more programming work. If I were feeling the regular pressure of the game schedule, at this time years in when it is time to be finishing the game, I might have said, "naah, we don't have time add that extra work". But because it was vacation the work was free, so I said screw it.</p>
<p>I worked in a fiercely productive way for a couple of days. New ideas would come. They would raise new issues. I would program some things, and in that way that programming often goes, new problems would come to light that I hadn't thought of, and those problems introduced even smaller 2nd-order problems when confronted. But by this time I was fully energized and just had dogged determination and was fully enjoying the whole process. In the end I programmed at least 5 times as much functionality as I had planned, but rather than being bummed about it, I enjoyed the whole excursion.</p>
<p>Those who know me will tell you that I am not predisposed toward painting things in an unduly positive light -- but I will tell you that these past four days or so have been amazing and wonderful. Here's a shot from what I did (the visuals are 'programmer art', as usual):</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.29__time_20_51_n06.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.29__time_20_51_n06-512x288.png" alt="shot_2012.12.29__time_20_51_n06" width="512" height="288" class="aligncenter size-large wp-image-2019" /></a></p>
<p>It is hard to tell you why this is so cool without huge spoilers.</p>
<p><strong>It's so amazing and wonderful because</strong></p>
<p>it's been a long time since I worked this hard and this effectively. Keeping in mind that memory is sometimes not as reliable as we think, I would tell you that the last time I worked this hard and this well was when starting my first, ultimately doomed, company (with a friend from college and a 3D artist we recruited from that same school and unfortunately put through years of meager-wage toil).</p>
<p>Here are some shots from the first professional game I ever worked on, back before we had a concept of 'indie development'. Software rendered, subpixel-accurate texture mapping, assembly-language inner loop that commandeers ebp in order to utilize a precious extra register, a la Mike Abrash, and oh yeah, it was multiplayer-only, 32-player, over 9600 baud modems:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/wulfram.2.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/wulfram.2-512x384.jpg" alt="wulfram.2" width="512" height="384" class="aligncenter size-large wp-image-2021" /></a></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/Wulfram-2.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/Wulfram-2-512x384.jpg" alt="Wulfram 2" width="512" height="384" class="aligncenter size-large wp-image-2022" /></a></p>
<p>We were working on this game from 1996 to 1999 or so. 1996 was the year I got into professional game development, and in hindsight, it appears to have been the hardest possible time in the history of video games. Indies of today, y'all have <em>no idea</em> how much easier it is to make games now than it was in 1996. (I hate to be an old fogey who's all "back in my day, we had to walk to school in the snow, barefoot, uphill both ways," but in this case it is absolutely true.)</p>
<p>That game was never very successful. It had design problems, but also, we didn't really know how to talk about or promote a game; lastly, this was before many people played games over the internet, so the potential audience was pretty small. (Trivia Tidbit: <a href="http://en.wikipedia.org/wiki/Attack_Retrieve_Capture">There was another online game being supported by the same publishing service as our game</a>, and this other game was more popular, despite being relatively simple in a technical sense, which annoyed the hell out of us on a subliminal level that we wouldn't totally admit. The guys making this game were John Vechey and Brian Fiete; our producer at the publisher was Jason Kapalka, who later went off with these guys to start a company called PopCap, which last I heard had done okay.)</p>
<p>Back in those days I worked very hard. When we started the company I knew nothing about building 3D games; we learned very quickly. I would long hours, late into the night, intensively. At some point we all burned ourselves out, I think. </p>
<p>After we closed down that company, I went on to do a number of contractor things, game industry lecture things, magazine article things, and working on various independent projects that I never finished. Through that time, I was still very burned out. If you have never experienced burnout, it's hard to explain. Burnout is not just "I don't feel like working right now"; it is about your mind refusing to permit you to work, because it has seen what happens when it lets you work.</p>
<p>Eventually, I swore that I would design a very good game and finish it and release it to people, and the result is a game that was successful and that many people like:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/Braid_screenshot2.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/Braid_screenshot2-512x288.jpg" alt="Braid_screenshot2" width="512" height="288" class="aligncenter size-large wp-image-2023" /></a></p>
<p>A main part of the reason this game exists was that I instilled a certain discipline in myself: I wasn't going to do this game because I was excited about a technical thing, or excited about programming; I was going to minimize the amount of programming, firstly so that the game would get finished at all (I had plenty of experience by this point at not-finishing-projects, as did many of my friends; it was an endemic problem), but also so that I could focus appropriately on the design and build something very special.</p>
<p>Despite the fact that I kept the game technically simple, there was still a huge amount of programming to do. But thankfully, the strategy worked and the game was completed. Eventually.</p>
<p>Even though I'd made a successful game, I was still burned out to some degree. In 1996-1997 I was working at full capacity and was very productive, at least inasmuch as one might expect for a programmer of that age who was first starting to get real-world large-project experience. But after being burned out at that time, I never again worked at full capacity.</p>
<p><strong>What I am getting at<br />
</strong></p>
<p>I am saying all these things just as a way to get around to explaining that, during this Christmas vacation, I finally recovered fully from burnout. For about 3 days, I was working at 100% capacity, which I have not done in 15 years. It felt wonderful to have that back, to not succumb to the story that maybe game design and programming are like math of physics where you peak at 25. These few days were way better than when I was 25, because now I am substantially better at programming, and I am good at design also, and games are so much easier to make than they used to be; so the design cylinders are firing and then they turn it over to the programming cylinders, etc, and very quickly a lot of high-quality work gets banged out. And it's not just arbitrary good work, but work that helps to round out the game that I already feel is the best thing I have ever worked on, that helps put grace notes in just the right places, in the <a href="http://www.youtube.com/watch?v=OGSeLSmOALU">manner of exploratory game design</a> that Marc ten Bosch and I spoke about at Indiecade 2011. So this period of intensive work was seasoned and tempered in a way that was not possible when I was 25.</p>
<p>It has been a wonderful time and I look forward to doing more of it. Part of what allowed it to happen this way was that lack of pressure that I have mentioned, due to being on vacation. When a design idea would come to mind, and I would see that it might be cool but would lead to a lot of work, well, this week I was able to let it happen, and I was able to enjoy the challenge of going off on a minor programming rathole in order to do something really good in the design. This is to some degree a reversal of the discipline I instilled to get Braid done; you can think of it as a correction term to the equation. The 0th order term is knowing how to program and design; the 1st order term is having discipline to be able to execute efficiently without being carried away with ideas that will scuttle production; but the 2nd order term is that it is joyful and interesting to have some wiggle room in there, sometimes eroding away a bit of the 1st order term.</p>
<p>There is a kind of open curiosity about programming that I haven't had in a long time, that I allowed myself to re-discover this week in the freedom of exploring that 2nd-order term.</p>
<p>(<a href="http://www.physics.ohio-state.edu/~kilcup/262/feynman.html">Richard Feynman has an anecdote about how he was burned out on physics</a>, and how he started to get over it, which I think bears some similarity).</p>
<p>I am not explaining any of this very well. But I am doing the best work of my life, right now, and it feels great, and for the first time I could see myself working in this same fashion for the rest of my life and feeling happy that I am operating at something like my full potential. So there you have it. </p>
<p>I mentioned earlier that I would talk further about the ability to see ideas, but I guess I was lying, because this is already too long and rambling. I'll save that for a future post.</p>
<p><em>It's worth pointing out that I started Braid while working on what was supposed to be a vacation. And back when I got the impulse to start the Experimental Gameplay Workshop, I was on a plane back from a vacation to Africa. So apparently vacations are good times for me, even if I don't treat them the way Normal People do.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/12/what-i-did-on-my-christmas-vacation/feed/</wfw:commentRss>
			<slash:comments>62</slash:comments>
		
		
			</item>
		<item>
		<title>A Cliffside Cliffhanger</title>
		<link>https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/</link>
					<comments>https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/#comments</comments>
		
		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Tue, 25 Dec 2012 01:24:36 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1989</guid>

					<description><![CDATA[This is a little mystery about a rock that refused to move. The rock lives off the coast of The Witness, just beyond the desert cliffs: I do not know who made this rock or how long it has been there, but when I first happened upon it, I found …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>This is a little mystery about a rock that refused to move. The rock lives off the coast of <i>The Witness</i>, just beyond the desert cliffs:</p>
<p><a href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/witness3_rock/" rel="attachment wp-att-1993"><img class="aligncenter size-large wp-image-1993" alt="witness3_rock" src="https://the-witness.net/news/wp-content/uploads/2012/12/witness3_rock-512x288.jpg" width="512" height="288" /></a></p>
<p>I do not know who made this rock or how long it has been there, but when I first happened upon it, I found that it resides in a nicely isolated part of the island where there’s nothing else in view, so the frame rate is always high even in full debug mode. Plus, it’s big, unobstructed, and easily pickable in the editor without fear of selecting any other objects. These properties make it perfect for testing editing features in progress, so the rock and I have become fast friends.</p>
<p>Normally, I do not want large rocks to move around. If I’m in the game engine, and a giant rock starts moving, I know I’m in for some debugging work. But if I’m in the editor, and I tell a rock to move, I expect it to move. That’s the whole point of having an editor. So when this cliffside rock, which otherwise had been so pleasant, decided that it would only move in certain directions, I knew I had a bit of a mystery on my hands, one that eventually forced my brain to remember some very important things it had forgotten in the ten years since I last did any serious 3D graphics programming.</p>
<p><span id="more-1989"></span></p>
<h2>Foreign Languages</h2>
<p>Working in someone else’s codebase is much like moving to a foreign country that happens to use the same alphabet as you do, but not the same language: technically, you can read, but you don’t really have any idea what most things mean. At first, every little thing you do is a painstaking linguistic procedure, and you have to constantly check and recheck things to make sure you actually know what’s going on. Over time, as you gain more experience, you start to intuit the way things work, and you’re able to operate at closer to your full speed.</p>
<p>I’m used to the process of working in unfamiliar codebases since I’ve worked with so many of them over the years. I tend to approach each new one the same way: first, I write something very isolated, and keep it walled off. This lets me start making some contributions right away, while I gradually learn how to interface with the rest of the code. In the case of <i>The Witness</i>, this was <a href="https://the-witness.net/news/2012/12/mapping-the-islands-walkable-surfaces/">Walk Monster</a>. Next, I try to do some performance optimization or bug fixing, so I learn to work locally, but directly, with existing code. That was <a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/">fixing the five-second stall</a>. Finally, I start picking real features to add to other people’s code, preferably in the systems that I will most likely need to learn well.</p>
<p>Since I’m working on the collision system, and at this point I am certain there will need to be some interactive tools for it, I picked the <i>Witness</i> editor as the best place to start adding real features. After playing with it for a while, I selected two features I thought would be good additions from both the standpoint of learning the code, and for be generally useful for people working on the game. The first feature was compatible camera controls, and the second was a translation manipulator.</p>
<p>By “compatible camera controls”, I mean camera controls that work like common 3D art packages. My understanding was that the <i>Witness</i> team did their modeling in Maya, so I put a toggle in the editor that, when enabled, allowed you to use ALT-drag camera movements that replicate the way Maya moves the camera. After checking this in, I learned from the artists that some of them prefer 3D Studio MAX, so I added another button that emulates its camera controls (once you do one, it’s very little incremental cost to add others, as they’re really all just other sets of bindings for the same movements). All of this went rather smoothly.</p>
<p>Unfortunately the second feature, the translation manipulator, did not go so smoothly at all.</p>
<h2>The Translation Manipulator</h2>
<p>By “translation manipulator”, I mean the standard three-axis overlay that modern 3D packages have where you can click and drag on any axis and move your selection along that axis. Depending on the package, there are also little squares on each plane that allow planar movement. I chose to include these, but to allow them to be toggled separately since not all packages have them and I didn’t want them to be in the way if an artist wasn’t accustomed to using them.</p>
<p>Compared to the camera controls, it was moderately more work to understand all the intricacies of the editor code involved with translation. But I worked my way through it, and eventually I had a translation manipulator working reasonably well in my test world, which was a completely empty world with just a few boxy entities that I could move around to see if everything was working.</p>
<p>When I was confident everything was solid — undo was working, occlusion was working, etc. — I tried it out on the full <i>Witness</i> island for a bit. Nothing seemed immediately wrong, so I checked in the feature on a toggle switch that defaulted to “off”, and asked <a href="https://number-none.com/blow/">Jon</a> to check it out when he got a chance. I figured it was better not to check it in enabled by default and have the artists all start using it, only to find out it had some critical bug that would corrupt things in some irreparable way, losing lots of valuable work in the process. Since Jon does a lot of work in the editor, and he wrote a lot of the editor code originally, I figured he would know the things to try that might break so we could fix them before any real damage was done.</p>
<p>When I heard back from Jon, he said it did seem to be working correctly, but sometimes “moving along the Z axis wasn’t working”.</p>
<h2>The Occasionally Movable Rock</h2>
<p>I was not at all surprised to hear that Z-axis translation was unreliable. This was something I was expecting to have happen. Surely something was broken in the way my code interacted with the existing planar movement constraints, which were buttons the editor had always provided and which were the only way of constraining interactive movement before I added the translation manipulator. But I checked the code thoroughly, and I just didn’t see any way that I could be mishandling the Z axis in the intermittent way Jon had reported.</p>
<p>I tried playing around with movement more in the editor, to see if I could reproduce the problem myself. Soon, I started to notice that when I played with the solitary rock in the ocean, it wasn’t really “sticking” to the cursor as well as it should be; the code I had written was supposed to feel as if you had “grabbed” the manipulator, and it should follow your cursor rather exactly. It wasn’t doing that.</p>
<p>Then I noticed something even stranger. Depending on how I rotated the camera, I was able to find angles at which Y-axis dragging moved the rock extremely slowly even for large cursor movements. At one particular camera angle, the rock refused to move along the Y axis at all! For example, at this angle, I could move the rock along the Y (green) axis, albeit slowly:</p>
<p><a href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/witness3_yworks/" rel="attachment wp-att-1995"><img class="aligncenter size-large wp-image-1995" alt="witness3_yworks" src="https://the-witness.net/news/wp-content/uploads/2012/12/witness3_yworks-512x288.jpg" width="512" height="288" /></a></p>
<p>and at this angle, I could not move the rock along the Y axis at all:</p>
<p><a href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/witness3_ybroken/" rel="attachment wp-att-1994"><img class="aligncenter size-large wp-image-1994" alt="witness3_ybroken" src="https://the-witness.net/news/wp-content/uploads/2012/12/witness3_ybroken-512x288.jpg" width="512" height="288" /></a></p>
<p>even though the other two axes worked fine, and from other camera angles the Y axis worked fine, too. Since the manipulator supported entity-relative axial movement as well as world-relative axial movement, I tried switching to entity-relative axes to test if there was something wrong with the Y axis specifically. I rotated the rock such that the Z (blue) axis was pointing in the direction that the Y axis pointed previously:</p>
<p><a href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/witness3_zbroken/" rel="attachment wp-att-1996"><img class="aligncenter size-large wp-image-1996" alt="witness3_zbroken" src="https://the-witness.net/news/wp-content/uploads/2012/12/witness3_zbroken-512x288.jpg" width="512" height="288" /></a></p>
<p>To my surprise, it now refused to move along Z! So it really had nothing to do with which semantic axis you were moving, it seemed to be the direction in the world and the angle of the camera alone that mattered for reproducing the bug.</p>
<p>Looking for more ideas about what the bug could be, I tried loading the empty test world again and playing around with the manipulator there. Again, to my surprise, it was completely impossible to reproduce the bug. No matter what camera angle I used, or where the axes were pointing, the always dragged perfectly, and seemingly at the correct speed to boot.</p>
<p>What on earth was going on? Clearly, it was time to think more deeply about the code and the behavior it was exhibiting.</p>
<h2>Ray Versus Plane</h2>
<p>In most 3D editing operations, you must confront the problem of turning a 2D cursor position into something useful in three dimensions. Since a 2D point on the screen mathematically represents a ray in three dimensions (everything in the world that is “under” that point from the perspective of the user), this typically involves taking the ray and intersecting it with something. For example, to implement picking of objects in 3D, you typically intersect this 3D ray with the objects in the world, and you see which intersection is closest. That will be the closest object under the cursor when the user looks at the screen, and therefore the one that they most often expect to pick when they press the mouse button.</p>
<p>My translation manipulator also works by intersecting the ray implied by the cursor. Knowing which axis the user clicks on is analogous to the picking problem, and I essentially implemented it that way: I pretend that there are three long, skinny boxes that align with the axis arrows, and I test to see if the cursor ray intersects them.</p>
<p>Picking the axis is straightforward, but things get more complicated once dragging begins. Although I know which axis the user started dragging, in order to actually move things properly, I have to have a way of computing exactly how far they have dragged the object along the selected axis. Intuitively you might think well, why not just extend the box used to pick the axis to be infinitely long along the dragging axis, and continue intersecting with it as the user moves the cursor? That’s not a bad idea, and it would work, but it isn’t the best solution.</p>
<p>The reason is because it doesn’t feel very good to use. Although it will feel fine if the user drags right along the axis in question, a lot of times users don’t do that. They tend to drag erratically, and pay more attention to the object’s position than how closely they follow the line implied by the axis. This quickly moves the cursor off the imaginary box entirely, so the ray implied by the cursor won’t intersect it. This causes the manipulator to stop working until the user moves the cursor back onto the axis, resulting in a sticky and unpleasant user interaction.</p>
<p>What we’d rather have happen in this case is for the dragging to happen as if the user had moved the mouse to the point on the axis closest to where they actually dragged, even when they’ve wandered quite far from the axis itself. To see how to solve this problem geometrically, imagine a user dragging the mouse along the X axis of a 2D plane. If the user starts dragging erratically, and moves along Y as well, their cursor will end up out in the middle of the plane somewhere. Figuring out where they would have been on the X axis is quite simple, though: ignore the Y coordinate, and just use the X coordinate. Nothing could be simpler.</p>
<p>But how do we do this operation for an arbitrary 3D axis and a ray extending from the cursor? It turns out you can do it exactly the same way. All you have to do is pick a 3D plane that happens to contain the dragging axis, then intersect the cursor ray with that plane. That gives you a nice 2D coordinate on a 2D plane, where the dragging axis is analogous to the X axis in the simple example. You then “throw out the Y”, and are left with a drag that always feels nice in 3D, sticks the object tightly to the cursor, and does not require the user to drag close to the axis.</p>
<p>You don’t need any fancy math to do this. It’s entirely constructible with simple operations available in any math library: dot product, cross product, and ray-intersects-plane, all three of which were already available in <i>The Witness</i> codebase.</p>
<p>So my translation manipulator was built entirely out of the most basic 3D operations in any math library. Yet somehow it was exhibiting very odd behavior atypical for a simple system. How could this be? What was I missing?</p>
<h2>Debug Rendering</h2>
<p>My first thought was that I must be picking the dragging plane poorly. Constructing planes in 3D with only partial information is always a little dicey; you need three non-collinear points to define a plane, but often you want to construct one with only one or two points. The translation manipulator is a perfect example: it needs a plane to operate, but it only really has a line to work with, which is equivalent to only two points. There are, in fact, an infinite number of planes that pass through the dragging axis of the translation manipulator. It’s much like a waterwheel: the dragging axis is the center axle, and each blade of the wheel is another valid choice for a plane.</p>
<p>So how do you pick one? The best method I’ve found for translation manipulators is to use the location of the user. Since we want the user to be able to drag around on this plane easily, it makes sense to say that, of all the planes containing the dragging axis, the best one is the one that is most visible to them. This avoids the potentially bad cases you can hit if you pick something independent of the user’s location, such as the resulting plane being edge-on or nearly edge-on so that the user cannot actually drag along it effectively.</p>
<p>Since even simple 3D math like this can be difficult to verify by inspection alone, my first inclination was to add some debugging rendering to verify that I was picking the dragging plane properly. Since the camera angle clearly mattered, and the plane was one of the only things dependent on that angle, it seemed like a likely culprit. So I tried drawing the normal to the plane in yellow at the base of the manipulator:</p>
<p><a href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/witness3_dragplane/" rel="attachment wp-att-1991"><img class="aligncenter size-large wp-image-1991" alt="witness3_dragplane" src="https://the-witness.net/news/wp-content/uploads/2012/12/witness3_dragplane-512x288.jpg" width="512" height="288" /></a></p>
<p>Even in the cases where the dragging failed, the plane normal looked right. Maybe the positioning of the plane was wrong? I tried computing the location of the plane directly, by moving along the normal by the plane constant <i>d</i> and drawing the normal there. This, of course, put the normal nowhere near the manipulator, so I had to look around for it (the plane equation gives you the point closest to the origin, which has no real relationship to where the manipulator might be, other than that they both lie on the same infinite plane). But once I found it, even though it was far away, looking back toward the manipulator it still did seem like it was the right plane.</p>
<p>Next I moved onto the intersections. I tried drawing the intersection point that I had computed when picking the axis in the first place, and also the point that I used to compute the plane constant in the first place. Both looked correct.</p>
<p>But then I tried drawing the actual intersection computed at each drag update, and that didn’t look correct. In fact, it didn’t really “look” at all. Although I was specifically telling the renderer to draw a white sphere where I’d found the intersection of the cursor line with the plane, no white sphere appeared. I checked the code again, and it looked correct, so I tried doing a few more test drags, this time from angles that had seemed to be working before. Now, the sphere showed up, although it was bigger than I thought it should be, which was odd.</p>
<p>I tried rotating the camera. I wrote the code so as to leave the sphere rendering wherever the last dragging intersection occurred, so if I stopped dragging, it just stayed where it was. This allowed me to rotate the camera and see precisely where the sphere was located, and as I did, I realized that the reason the sphere appeared too large was because it wasn’t even close to being on the plane I thought I was using. It was much closer to the camera. Weirder still was that, at the buggier camera angles, the sphere was jumping around erratically, and wasn’t really sticking to the cursor, which it always should do no matter what plane was being used. I was, after all, intersecting the cursor line with a plane. How could the intersection point possibly lie anywhere but directly under the cursor, regardless of the parameters of the plane?</p>
<p>It was at that moment that my math brain finally woke up. It had been sleeping for about a decade, which is how long it’d been since I’d done any real mathematical programming. In an instant, I immediately knew both what the problem was and how to fix it.</p>
<h2>Always Look Behind You</h2>
<p>The problem was embarrassingly obvious when you consider the clues I’d been generously given and yet completely ignored. Remember when I said I drew the plane normal at the location indicated by the plane constant, and I had to look “far away” at the manipulator to see if it looked like it was in line with the plane? Well if the generally erratic behavior of the manipulator hadn’t been telling enough, that little episode should have been the dead giveaway.</p>
<p>At this point, every serious 3D programmer who hasn’t been doing other work for ten years surely knows what the bug was. But for the sake of people who are less experienced, I decided to end this article with a bit of a cliffhanger.</p>
<p>I am going to tell you that you can find the bug by looking at this simplified version of the ray_vs_plane function in <i>The Witness</i> that I was calling (the real version does some epsilon checking in case the ray and plane are parallel, but otherwise it is identical):</p>
<pre>Vector3 ray_vs_plane(Vector3 ray_origin, Vector3 ray_direction,
                     Vector3 plane_normal, float plane_d)
{
    float denominator = dot_product(plane_normal, ray_direction);
    float numerator = dot_product(plane_normal, ray_origin);
    float t = -((plane_d + numerator) / denominator);
    return ray_origin + t*ray_direction;
}</pre>
<p>And I will also show you this screenshot of what it looks like if you turn around 180 degrees from the rock and look back at the island itself:</p>
<p><a href="https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/witness3_island/" rel="attachment wp-att-1992"><img class="aligncenter size-large wp-image-1992" alt="witness3_island" src="https://the-witness.net/news/wp-content/uploads/2012/12/witness3_island-512x288.jpg" width="512" height="288" /></a></p>
<p>But, until next time, I’m not going to tell you what the bug actually is. Can you find it, and figure out how to fix it, before then?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/12/a-cliffside-cliffhanger/feed/</wfw:commentRss>
			<slash:comments>83</slash:comments>
		
		
			</item>
		<item>
		<title>Finding and Fixing a Five Second Stall</title>
		<link>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/</link>
					<comments>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/#comments</comments>
		
		<dc:creator><![CDATA[Casey Muratori]]></dc:creator>
		<pubDate>Tue, 18 Dec 2012 20:23:22 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1976</guid>

					<description><![CDATA[The great thing about programming on Windows is that it is the only commercially viable platform where you can ship software to users without getting approval from a giant bureaucracy (well, perhaps I should say it used to be). The not-so-great thing about programming on Windows is that, well, the …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><a href="https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/witness_2_windowskeys/" rel="attachment wp-att-1980"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/witness_2_windowskeys-512x290.jpg" alt="witness_2_windowskeys" width="512" height="290" class="aligncenter size-large wp-image-1980" /></a><br />
The great thing about programming on Windows is that it is the only commercially viable platform where you can ship software to users without getting approval from a giant bureaucracy (well, perhaps I should say <a href="http://mollyrocket.com/casey/stream_0004.html">it used to be</a>). The not-so-great thing about programming on Windows is that, well, the Windows API is a horrific nightmare.</p>
<p>Granted, it is not uniformly horrific. It ranges from only slightly scarey (xinput, comdlg32) to full psycho (DirectShow, Event Tracing, TabletPC, etc.). But no matter which part of the spectrum you encounter, programming on Windows tends to be about doing a lot of unnecessary research, experimentation, and debugging due to a confluence of poorly designed APIs.</p>
<p>Since time spent debugging Windows issues isn’t often chronicled, I thought I’d go ahead and describe my experience this Saturday of tracking down a Windows bug in <i>The Witness</i>.</p>
<p><span id="more-1976"></span></p>
<h2>The Symptom</h2>
<p>Apparently, not everyone on <i>The Witness</i> team was seeing the symptom. But trust me, it was there.</p>
<p>On both <a href="https://number-none.com/blow">Jon</a> and my machines, there was a period during the initial loading of the game where you couldn’t do things like ALT-TAB back to the debugger. If you set a breakpoint then ran the game, when the breakpoint eventually hit and the debugger came to the front, it would wait about five seconds before it allowed you to actually interact with it. Sometimes, in rare cases, it would go into some sort of psycho mode whereby mouse movements stuttered, and the computer would literally beep at you as the mouse moved, for several seconds. Then everything would return to normal.</p>
<p>While not technically a showstopper, this is the kind of bug that’s worth fixing if you can, because it costs you real development time every day. Five seconds wasted every breakpoint is bad news, and people often underestimate the effects of frustration that can build up over time due to flaky and unpleasant development environments. So I decided to try to track it down.</p>
<p>Because Windows is a closed-source platform, there’s no great way to track down problems of this nature. However, having programmed on Windows for over twenty years now, I have a nose for it, so I felt like I knew the best place to start: since there was definitely a UI blackout somewhere during startup, there had to be something occurring early in the execution of the program that was causing at least that particular symptom. So before doing anything else, I started stepping through the entire startup sequence of the program to see if anything out of the ordinary struck me.</p>
<p>I very quickly came upon this code:</p>
<pre>// @@ The hook appears to install properly, but is never invoked :(
keyboard_hook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc,
                                 GetModuleHandle(NULL), 0);</pre>
<p>Now, I don’t want to make it sound like the “find the source of the problem” phase of Windows debugging is straightforward. It usually takes a very long time, sometimes multiple days. But as luck would have it, this was literally the first piece of code I suspected, and it turned out to be the culprit.</p>
<p>I commented out the SetWindowsHookEx, ran the program, and poof! All the symptoms were gone.</p>
<h2>The Problem</h2>
<p>From experience, I’ve learned that it’s always best to fully understand a problem before you fix it. If you just patch over its symptoms but never figure out what the problem really was, it will often come back to haunt you.</p>
<p>In this context, that meant two things: first, I should figure out specifically why the keyboard hook was causing the UI stalls; second, I should determine why the code had been trying to call SetWindowsHookEx in the first place, even though apparently it never quite worked (according to the “is never invoked” comment).</p>
<p>The first part turns out to be obvious in hindsight, but it took me a little while to put all the pieces together and be sure I had a solid explanation for what we were seeing. As with any puzzle, looking at the finished picture is easy, but figuring out what that picture might be when all you have are little pieces coming in one at a time is much more difficult. Here’s the best picture I could come up with, but of course there’s no way to completely verify it external to Microsoft:</p>
<p>Normal Windows hooks are pieces of code which execute in the address space of the eventual message recipient, not the installer of the hook. It is for this reason that, normally, if you want to install a global hook, you must put the hook code in a DLL, because that DLL must be mapped into the address space of every running executable on the machine that can receive Windows messages.</p>
<p>But low-level hooks are completely different. A low-level hook like WH_KEYBOARD_LL is a piece of code that resides in only the process that registers the hook. Windows remembers which thread registered the hook, and when any other executable is about to have a hooked message posted to its message queue, Windows actually waits until it can switch contexts back to the hook thread, run the hook in that context, and then finally deliver the message.</p>
<p>This leads directly to the symptom that we were experiencing. When the game is loading, its main thread isn’t yielding to Windows frequently like it is during normal play. Since the main thread is the one that registered the hook, Windows must wait for that thread to finish all the load-time work it was doing and call a function which yields to Windows in order for Windows to actually call the hook procedure. Since no keyboard processing can occur until the hook procedure has run, the keyboard becomes unresponsive as messages back up waiting to be processed through the hook. This completely explains the UI problems during startup, and fits with the oddity that the mouse never seemed to be affected, just the keyboard.</p>
<p>When the game hit a breakpoint, the keyboard hook couldn’t execute at all because the debugger had halted the thread required to execute it. This would have meant that keyboard input would be completely halted, and the debugger would never be able to receive keystrokes, if it weren’t for the fact that Windows actually uses a timeout on hook calls. If the timeout value is exceeded waiting for the hook thread to become available, the hooking executable is assumed to have crashed, and it will silently remove that hook and continue with normal operation.</p>
<p>That timeout value? Five seconds — right in line with our observed pause (technically, it’s whatever is set in the registry under HKEY_LOCAL_MACHINE\Control Panel\Desktop\LowLevelHooksTimeout, but the default is five seconds).</p>
<p>So, no mystery as to the pathology. But what about the second part? What was the code actually trying to do?</p>
<h2>The Windows Logo Keys</h2>
<p>Although SetWindowsHookEx might seem like an odd call to make in a game executable, it’s actually quite common. It’s there to prevent the Windows logo keys on modern keyboards from ruining full-screen games. Because the keys are placed in a location that’s easy to hit by mistake, many gamers would accidentally hit them, causing their games to be instantly deactivated by Windows in favor of bringing up the start menu. So widely acknowledged was this problem that, when these keys were first introduced, Microsoft itself published a recommended work-around. From <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ee416808%28v=vs.85%29.aspx">Disabling Shortcut Keys in Games</a>:</p>
<blockquote><p>This article describes how to temporarily disable keyboard shortcuts in Microsoft Windows to prevent disruption of game play for full screen games... Use a low-level keyboard hook to filter out the Windows key from being processed.</p></blockquote>
<p>The article goes on to show sample code that is basically the same code that was being used in <i>The Witness</i>. It’s a simple SetWindowsHookEx call with WH_KEYBOARD_LL whose hook routine does nothing but block VK_LWIN and VK_RWIN keys from being processed. The only difference between the code in <i>The Witness</i> and the code in the sample is that <i>The Witness</i> would conscientiously remove the hook when it no longer had focus, and then reinstall the hook when focus was regained. The sample code, by contrast, just set a global variable.</p>
<p>So if this was what the code was doing, why the frowny face? If you look back at the comment, it states very clearly that the hook was never being invoked, even though no error message came back from Windows. And, although I normally remap my Windows keys via the registry, I went ahead and mapped them back to see if <i>The Witness</i> was properly blocking their effects.</p>
<p>Much as the frowny face foretold, it wasn’t.</p>
<h2>Obeying the Static Discipline</h2>
<p>I don’t know anything about digital circuit design, but I once watched a lecture by <a href="http://www.darpa.mil/Our_Work/DSO/Personnel/Dr_Gill_Pratt.aspx">Gill Pratt</a> where he explained something called “the static discipline”. In essence, it is the requirement that any component in a circuit must accept voltages with a certain range for “1” and “0”, and then must output its own results in a certain range. These ranges are defined so as to require that components always produce equal or better conditioned voltages than their inputs, thus ensuring that the digital signals being propagated through the circuit don’t degrade into noise due to lots of tiny losses.</p>
<p>For some reason, I took this concept to heart in a programming sense and have found it is a good rule to code by. My version of the static discipline, adapted for software, is that whenever you are making a modification to a piece of code, you should always leave it in a state of stability equal to or better than how you found it. And preferably the latter.</p>
<p>All too often, people go in to fix a problem or add a feature to a piece of code, and they just hammer on it until it does that one new thing. The resulting code is then usually more fragile, less well designed, more unnecessarily complex, etc. To try to prevent myself from having this effect, I try to observe the static discipline.</p>
<p>And so it was with this Windows key situation. I could see what the code was supposed to be doing, and although I could reasonably fix my bug by just commenting out the hook (because it didn’t work), I felt it was the more disciplined thing to do to figure out why the hook wasn’t working, and to implement something that did what it was trying to do. Since there was no obvious bug, I had to start experimenting.</p>
<p>After adding some debug outputs and running Spy to keep an eye on the window messages, the first thing I tried was removing the part of the code that unregistered the hook when his window lost focus. Since I didn’t know exactly how his windowing code worked at all levels, I figured it wasn’t entirely out of the question that it could be getting disabled prematurely.</p>
<p>Although that turned out not to be the case, this experiment did pay off unexpectedly (as many do): although the keyboard hook still never got called when <i>The Witness</i> window had focus, the hook did start getting called when it lost focus. Yes, oddly enough, the hook was working just fine for everyone else’s window, but on the one window where it actually needed to work, it wasn’t working.</p>
<p>This lead to the obvious question, what was <i>The Witness</i> doing differently?</p>
<h2>Raw Input</h2>
<p>This was a case where having lots of Windows programming experience probably saved a lot of time. Instead of having to experiment blindly, I knew right off the bat that Windows Raw Input probably had something to do with the situation. I’ve debugged lots of Windows front end code in the past, and any time Raw Input, DirectInput, XInput, or anything else with the word “input” in it is involved, you know that things are going to be going a little haywire.</p>
<p>I commented out the device registration call for Raw Input, and lo and behold, the hook started working for <i>The Witness</i> window, no problem. So, although I was completely unable to find any documentation on MSDN that discussed what was going on under the hood, it must be the case that Raw Input processing happens before low-level keyboard hook processing in such as way as to prevent the keyboard hook processing from ever seeing keyboard messages on a Raw Input-registered window. Normally, this wouldn’t be a problem, but in our case, the Microsoft-recommended fix for the Windows logo key problem relies on keyboard hooks. <i>The Witness</i> needs Raw Input to get good low-level relative mouse movements, but it also needs to disable the Windows logo keys; sadly, this is the kind of situation that is all too routine for anyone who programs Windows professionally.</p>
<p>I couldn’t think of any plausible ways that I could convince Raw Input to start using the Windows keyboard hook, since I don’t have access to any of the Windows source code and I have no idea how it works internally. So I focused my efforts on Raw Input.</p>
<p>I experimented with just about everything I could think of. I tried not calling DefWindowProc on WM_INPUT calls, to see if it was the default window processing that was using the Windows logo key events to switch to the start menu. No such luck. I tried using RIDEV_NOLEGACY during Raw Input initialization to see if preventing keyboard messages from being generated would solve the problem. It didn’t. After many failed attempts, and finding no relevant information on the web, I decided to call it a night and sleep on it.</p>
<p>When I woke the next morning, for some reason I remembered the most important thing anyone programming Windows must remember: never, ever trust the documentation. It’s always either inaccurate or incomplete. So when I sat down at my keyboard, the first thing I did was try using the RIDEV_NOHOTKEYS flag when initializing Raw Input.</p>
<p>You see, the previous day I hadn’t bothered to try this flag, because it explicitly says in the documentation that it does not block system-level hotkeys, only application-level hotkeys (like the kind you create yourself with RegisterHotKey). But why was I believing that? That was just something somebody wrote down when they needed to create a documentation page. They probably never even saw the actual code for Raw Input in the first place.</p>
<p>Surprise surprise, RIDEV_NOHOTKEYS worked. After all the fussing, all that had to be done to make <i>The Witness</i> impervious to Windows Logo keys was one little flag during Raw Input initialization. No keyboard hook necessary.</p>
<h2>Zero-Sum Game</h2>
<p>It’s worth taking a step back for a moment and asking the question, why did all of this happen? Why did I have to spend several hours working on code that has nothing to do with my project, is not valuable in any intrinsic way, and whose specifics are relevant only in a fleeting temporal sense (there will be no need to know anything about RIDEV_NOHOTKEYS when the next user input model for Windows is invariably introduced)?</p>
<p>The answer is the same on Windows as it is on most every other platform that exists today: the platform providers just don’t spend real resources designing and improving their APIs. If there had simply been an API call, WindowIgnoresWindowsLogoKeys(HWND), then everyone would always just call that, and the platform developers and Microsoft could field it and do the right thing, no matter how many times they revised their platform and its infrastructure.</p>
<p>Better yet, way back when they first started catering to games with Windows 95, they could have introduce a call like BeginFullScreenGame(), and that could have done literally everything for you: initialize the window, set up the input stream, prepare the sound device, etc. Then they wouldn’t have had to ever worry about the Windows logo keys at all, because they would have been automatically disabled in any application that initialized itself with that call.</p>
<p>But instead of any of these things, Microsoft chose to ship a new feature (the Windows logo hotkey) without ever thinking about the consequences. Then they patched over its problems by telling developers to install a keyboard hook (SetWindowsHookEx), something that has nothing to do with the actual problem but which was the most expedient way for them to get the problem solved without doing any real work on their platform. Then they broke that method, which they’d previously advocated, when they introduce Raw Input, so (presumably) they introduced a new way to do the same thing (RIDEV_NOHOTKEYS), although they failed to document it. Then they didn’t even bother to publish an obvious tech article explaining this change, or even revise their old documents saying that SetWindowsHookEx was the preferred solution.</p>
<p>As broken as all that sounds, it is absolutely par for the course. On every project, in every discipline, developers just like me spend hundreds of hours doing nothing but diagnosing and repairing problems with the platforms on which we ship our software. It may sound like it’s just “part of the job”, but the pernicious thing about it is that development resources are always finite. External to the platform, development is always a zero-sum game. The hours I spent tracking down this bug were hours that won’t get spent making parts of The Witness better, and there’s nothing me or the team can do about that. If we want to ship a polished project, it’s a sacrifice we have to make.</p>
<div>
<p>And it’s a sacrifice that’s not just made by us, but by thousands of teams on thousands of projects every year. The cost of obtuse, easy to misuse APIs is multiplied across all these projects, turning the hundreds of hours we will spend on Witness platform work (across multiple platforms) into hundreds of thousands of hours when you consider that this same work has to be done by every other developer, too. It’s really thousands of zero-sum games being played, all across the industry, and the end result is universally worse software because the underlying platforms take up too much effort.</p>
<p>But there is a way for this not to be a zero-sum game, and that’s if there’s a shift in thinking internal to the platform providers. If Microsoft, for example, started realizing that software on Windows gets better if their APIs are clear, concise, and difficult to misuse, they might start changing their development processes to make API quality a priority. They might try to hire and cultivate good API designers, and have real, talented developers who do nothing but work on the APIs to the internal systems.</p>
<p>If that happened, the relatively small amount of hours spent on this endeavor internal to Microsoft (or Sony, or Apple, or Nintendo, or Google) would have a massively leveraged effect. If nobody has to think about things like the Windows keys again, that’s four hours right there that every software project gets back. That is literally thousands of hours, just that. Don’t need to worry about task switching or window minimization? That’s a day, at least — which makes it <i>thousands of days</i> saved. Straightforward user input? Easy access to camera inputs? Each little thing adds up until every developer is getting weeks of their schedule back to devote to working on their actual software, not to mention all the bugs that wouldn’t slip through the cracks because the developers may not have been experienced enough with the particular platform to know to look for them.</p>
<p>So how do we get there? Honestly, I have no idea. In the meantime, I guess we just keep writing articles like this one that detail the right solutions as we find them, and hope that saves everyone some of the vast amount of time that we all lose to platform-related problems each year. Beyond that, it’s really up to the platform providers to start taking these issues more seriously.</p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/feed/</wfw:commentRss>
			<slash:comments>46</slash:comments>
		
		
			</item>
		<item>
		<title>Collecting Playtest Data</title>
		<link>https://the-witness.net/news/2012/12/collecting-playtest-data/</link>
					<comments>https://the-witness.net/news/2012/12/collecting-playtest-data/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 03 Dec 2012 03:57:03 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1889</guid>

					<description><![CDATA[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 …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/12/collecting-playtest-data/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>In <em>The Witness</em>, 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:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/load_game_screen.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/load_game_screen-512x299.png" alt="" title="load_game_screen" width="512" height="299" class="aligncenter size-large wp-image-1891" /></a></p>
<p>Right now, we save the thumbnail and the game data as separate files, but the names are mostly the same; so if you go into your game data folder in Windows you can see them living there very plainly:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/file_window.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/file_window-512x309.png" alt="" title="file_window" width="512" height="309" class="aligncenter size-large wp-image-1890" /></a></p>
<p>(It might be interesting to do it like <em>Spore</em> and embed the save data in the image file, so that there's only one file per save. Maybe we'll do this, though it's not a no-brainer; right now the image file is usually bigger than the save data, so this would involve tying a relatively small amount of crucial data to a relatively large amount of cosmetic data. Maybe that doesn't matter, though.)</p>
<p>As I mentioned in <a href="https://the-witness.net/news/2012/11/very-limited-very-closed-beta/">the previous post</a>, we are starting to get the game out to a limited number of players. It's been a long time since I've had anyone new play through the game as a whole, so I really have no idea how it plays now, and it's important to find out. However, it's not so easy, because if you sit behind someone and watch them play a game, they are going to play it differently than if you weren't there. You invalidate your own playtest data.</p>
<p>So, I wanted to set up the game to record some minimal playtest data, that would be easy for me to browse through later on, and that would get recorded without me being there to directly watch the play session. </p>
<p>One of the first approaches that programmers often consider is an input recording method. You just journal a stream of all the player's inputs, and you can play that back deterministically to reproduce the entire game session. I have never liked this method. Firstly, you need to play back using exactly the same version of the game executable that the player used, which is a pain; secondly, this kind of playback code is brittle and breaks often. An uninitialized memory read bug can render your playback data useless! (Of course, one reason you might want playback data is to track down an uninitialized memory read bug... so... there's a problem here.)</p>
<p>For these reasons I didn't want to use input journaling. It seemed to me that our saved games are small enough, and the thumbnails are nice enough, that together they almost solve the problem. All I need to do is save a series of snapshots / game states over time, without overwriting previous saves:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/streamsave.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/streamsave-512x332.png" alt="" title="streamsave" width="512" height="332" class="aligncenter size-large wp-image-1893" /></a></p>
<p>Whereas the earlier folder contained a collection of different play sessions, this one contains one play session at different moments in time. Every time the game made an autosave for this play session (overwriting the old one in the normal way), it also also copied the autosave here. The date and time that are in each filename just indicate when that game was started; the number at the end tells you which snapshot this is.</p>
<p>There's one immediate, very nice property of this: I don't even need to run the game in order to get a general idea of how someone's playtest went. Once they send me the files, I can just click on the first one in Windows to invoke the image viewer, and then click the forward/backward buttons in the image viewer to animate my way through the game.</p>
<p>But, if I have questions about what was going on, I can also dig into the save file that corresponds to any given image. I made a mode that lets me browse these saves in-game, load up any particular one into the current world state, and play from there. I invoke it by running a console command:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.02__time_19_36_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.02__time_19_36_n01-512x288.png" alt="" title="shot_2012.12.02__time_19_36_n01" width="512" height="288" class="aligncenter size-large wp-image-1907" /></a></p>
<p>This loads all the saved games and thumbnails and pops them into a scrolling list at the top of the screen, in chronological order:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.02__time_19_36_n02.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.02__time_19_36_n02-512x288.png" alt="" title="shot_2012.12.02__time_19_36_n02" width="512" height="288" class="aligncenter size-large wp-image-1908" /></a></p>
<p>I just scroll to the one I want:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.02__time_19_36_n03.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.02__time_19_36_n03-512x288.png" alt="" title="shot_2012.12.02__time_19_36_n03" width="512" height="288" class="aligncenter size-large wp-image-1909" /></a></p>
<p>... then press Enter to load that game state:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.02__time_19_36_n04.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/12/shot_2012.12.02__time_19_36_n04-512x288.png" alt="" title="shot_2012.12.02__time_19_36_n04" width="512" height="288" class="aligncenter size-large wp-image-1912" /></a></p>
<p>It's very fast to use and it only took a few hours to program.</p>
<p>This whole system is also pretty cool because it's much more robust than the input-recording method. If I want to look into some detail that is super-nitpicky, I may need to use the same build of the game executable that the player used, but this will almost never be necessary. Usually I won't even need to use the in-game browser -- as I mentioned, I can just click through the thumbnails in Windows to get a basic sense of what's going on.</p>
<p>The fact that we only have discrete snapshots is sort of a side-bonus: because we only snapshot every minute or so, the data is not so creepy and spy-like; players can relax while they are playtesting and know that we won't later be obsessing over their every move.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/12/collecting-playtest-data/feed/</wfw:commentRss>
			<slash:comments>25</slash:comments>
		
		
			</item>
		<item>
		<title>Very Limited, Very Closed Beta</title>
		<link>https://the-witness.net/news/2012/11/very-limited-very-closed-beta/</link>
					<comments>https://the-witness.net/news/2012/11/very-limited-very-closed-beta/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Fri, 30 Nov 2012 06:59:28 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1879</guid>

					<description><![CDATA[Last Wednesday night, just before Thanksgiving, we shipped our first extremely closed beta over Steam to a few limited testers. Today we shipped an update, still to the same limited group. We have some initial tech issues to work out before we go wider (game packaging issues, graphics card incompatibilities, …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/11/very-limited-very-closed-beta/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Last Wednesday night, just before Thanksgiving, we shipped our first extremely closed beta over Steam to a few limited testers.</p>
<p>Today we shipped an update, still to the same limited group. We have some initial tech issues to work out before we go wider (game packaging issues, graphics card incompatibilities, and the like).</p>
<p>Here's a desktop screenshot from one of the testers, with someone chiding him about what he's playing:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/11/tease.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/11/tease-512x288.png" alt="" title="tease" width="512" height="288" class="aligncenter size-large wp-image-1882" /></a></p>
<p>(The Witness window in this shot is artificially resized to make room on the desktop; by default we launch at 1280x720.)</p>
<p>I know that the impulse is to think "oh wow they are almost done!" Don't think that, it's not the case. We still have a gigantic amount of work to do and it'll be a while before the game is done.</p>
<p>Random Trivia Q&A</p>
<p><strong>Q:</strong> How many footstep sound effects are in <em>The Witness?</em></p>
<p><strong>A:</strong> 1,119 so far. They sound really good! We will probably be in the Guinness Book of World Records as the game with the most footstep sounds...</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/11/very-limited-very-closed-beta/feed/</wfw:commentRss>
			<slash:comments>48</slash:comments>
		
		
			</item>
		<item>
		<title>You know the game is coming along&#8230;</title>
		<link>https://the-witness.net/news/2012/11/you-know-the-game-is-coming-along/</link>
					<comments>https://the-witness.net/news/2012/11/you-know-the-game-is-coming-along/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sun, 18 Nov 2012 06:14:32 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1862</guid>

					<description><![CDATA[... when even your barest rough drafts seem like they'd be interesting to explore. Current puzzle count: 528.<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/11/you-know-the-game-is-coming-along/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>... when even your barest rough drafts seem like they'd be interesting to explore.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/11/shot_2012.11.17__time_22_12_n02.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/11/shot_2012.11.17__time_22_12_n02-512x287.png" alt="" title="shot_2012.11.17__time_22_12_n02" width="512" height="287" class="aligncenter size-large wp-image-1863" /></a></p>
<p>Current puzzle count: 528.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/11/you-know-the-game-is-coming-along/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
			</item>
		<item>
		<title>We are going Map Crazy.</title>
		<link>https://the-witness.net/news/2012/11/we-are-going-map-crazy/</link>
					<comments>https://the-witness.net/news/2012/11/we-are-going-map-crazy/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Tue, 06 Nov 2012 23:20:26 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1851</guid>

					<description><![CDATA[One of my primary design goals, all through development, has been to keep the island spatially small, so that there isn't a lot of wandering through empty or pointless spaces. The idea is to take the best parts of an open-world game, involving choice, exploration and discovery, but compressing these …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/11/we-are-going-map-crazy/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><a href="https://the-witness.net/news/wp-content/uploads/2012/11/Photo-Nov-06-1-50-02-PM.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/11/Photo-Nov-06-1-50-02-PM-512x384.jpg" alt="" title="Photo Nov 06, 1 50 02 PM" width="512" height="384" class="aligncenter size-large wp-image-1852" /></a></p>
<p>One of my primary design goals, all through development, has been to keep the island spatially small, so that there isn't a lot of wandering through empty or pointless spaces. The idea is to take the best parts of an open-world game, involving choice, exploration and discovery, but compressing these into a maximally dense experience.</p>
<p>That has been going well, but there's an interesting phenomenon where, as we add more detail to the world, it starts to feel a lot bigger. When something is a mostly-featureless plain it is easy to feel like it's small, but once you are passing tiny rocks and plants that are set up very carefully, your brain has more scale reference. So there have been a couple of times during development where we stopped and said "Hey wait a minute, things are just too big."</p>
<p>Last week that happened again; we were looking at two different parts of the island on the same day, and both of them seemed much bigger than we needed. So, we decided to go back to the overall island plan and try to compress it further. We had a discussion about this on Thursday, then the architects talked it over; you see the result of those discussions in the image above. These maps are a handy guide to helping us figure out what we can cut and how we can scoot existing areas around to pack them a little better, and to better-define the areas between them.</p>
<p>This is a little painful, since we <em>almost</em> had the island back into playable shape, and this knocks it back out of playable shape for a little longer. But my hope is that we can just make a mess and then clean it up very quickly.</p>
<p>In other news, there had been a puzzle that I needed to design for two years -- in the sense that I knew I needed to build the puzzle in order for a certain area to be complete, and I knew what that puzzle vaguely had to be about, but didn't have any good ideas on how to build it. Last week I had a breakthrough on that and built it very quickly; it's now one of the best puzzles in the game. So things are coming along well!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/11/we-are-going-map-crazy/feed/</wfw:commentRss>
			<slash:comments>47</slash:comments>
		
		
			</item>
		<item>
		<title>iPad Victory Shot</title>
		<link>https://the-witness.net/news/2012/10/ipad-victory-shot/</link>
					<comments>https://the-witness.net/news/2012/10/ipad-victory-shot/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Fri, 19 Oct 2012 16:46:48 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1840</guid>

					<description><![CDATA[For the past few weeks Andy has been working on the iPad port of the game, and we now have the engine running on that device: The colors are all funny because we haven't written the shaders for the iPad yet, so what you are seeing is the surface normals …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/10/ipad-victory-shot/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>For the past few weeks Andy has been working on the iPad port of the game, and we now have the engine running on that device:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/10/ipad.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/10/ipad-286x384.jpg" alt="" title="ipad" width="286" height="384" class="aligncenter size-large wp-image-1841" /></a></p>
<p>The colors are all funny because we haven't written the shaders for the iPad yet, so what you are seeing is the surface normals of the objects in the scene.</p>
<p>We haven't written the shaders yet because they need to be OpenGL ES shaders, and the shaders we have right now are HLSL shaders all written for medium-to-high-end PCs. As the first part of the porting work, Andy made the engine work on OpenGL on the PC, and for that we converted our HLSL shaders to GLSL automatically. But the jump to ES on an embedded device is big enough that it doesn't make sense to try and use the same shaders. Instead we'll have to have some simpler shaders that we substitute.</p>
<p>As you can see from my previous post, I have been working on touch controls (not on the iPad, but on a touchscreen Windows PC). A very rough first cut of that is now working. It's nice to play the game with touch controls, as it feels more immediate than mouse and keyboard (and I have been a first-person shooter player forever!) </p>
<p>So in order to have the game fully interactive on the iPad, we just need to write the bit that translates iPad touch controls to feed them into the rest of the gameplay code, which should not take long. </p>
<p>Then, after that, we have to work out exactly how we are going to crunch all the graphical assets down to portable versions and do the streaming in an appropriate way... which is going to be a bit of work. Salvador built a streaming asset system a while back, and we have been using that daily on the PC, but we haven't tried to set it up on a lighter-weight portable system like the iPad yet. We'll see how it goes!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/10/ipad-victory-shot/feed/</wfw:commentRss>
			<slash:comments>35</slash:comments>
		
		
			</item>
		<item>
		<title>WM_TOUCH is totally bananas.</title>
		<link>https://the-witness.net/news/2012/10/wm_touch-is-totally-bananas/</link>
					<comments>https://the-witness.net/news/2012/10/wm_touch-is-totally-bananas/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sun, 14 Oct 2012 23:15:51 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1824</guid>

					<description><![CDATA[The iPad is one of the major platforms The Witness will appear on. Andy has been working on the iPad port and it is coming along. You can't actually play the game yet, but we probably are close to that. The gameplay doesn't know how to respond to a touch …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/10/wm_touch-is-totally-bananas/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>The iPad is one of the major platforms The Witness will appear on. Andy has been working on the iPad port and it is coming along. You can't actually play the game yet, but we probably are close to that. The gameplay doesn't know how to respond to a touch interface yet, though. It is important to me that this interface is very good, so I wanted to start designing for it now, to give me time to wrestle with difficult issues. Since the game runs already on Windows, it seemed natural to start designing the touch interface on Windows.</p>
<p>I am not sure that many people are going to use Windows for touch devices, at least in the Windows 8 timeframe. But at least some people will, so it'd be nice to have a high-quality touch interface built into the game on Windows.</p>
<p>With all this in mind, I started working on some Windows 8 touch hardware a couple of days ago. There is a message format that you can use in Windows 8 to get events from the touch hardware, WM_POINTER, but because I want the touch interface to work in Windows 7 as well, I wanted to use WM_TOUCH messages, which were introduced in Windows 7 and are supported in both operating systems.</p>
<p>It look me less than 20 minutes to get WM_POINTER working. It took many, many hours to get WM_TOUCH working, because WM_TOUCH is some kind of fully insane mess. None of the insanity seems to be documented, or discussed on the internet, so I am laying it out here in case anyone in the future stumbles into this same trap.</p>
<p>A WM_TOUCH message will never be returned by PeekMessage. Spy++ will tell you that WM_TOUCH is being sent to your application, but before the message is delivered, it gets stealthily converted into a mouse motion event. The type of this event will vary depending on whether you have raw input selected: if raw input, it will be WM_INPUT (0x00ff); if not, it will be WM_MOUSEMOTION (0x0200).</p>
<p>If your application handles these events, you may think it's reasonable to complete the handling without calling DefWindowProc. If you do this, you will never see a WM_TOUCH, because something buried down in DefWindowProc stealthily dispatches a WM_TOUCH to your application's windows when it sees a specially-marked WM_INPUT or WM_MOUSEMOVE.</p>
<p><em>Note that actually, you are supposed to always call DefWindowProc on WM_INPUT (for "cleanup" -- I don't know what this means and why they can't just clean it up when you get the next message -- but whatever); but WM_MOUSEMOVE has no such requirement, and if you believe you handled the event, it is natural *not* to call DefWindowProc. This will result in your never seeing WM_TOUCH.</em> Strictly speaking our game had a bug, in that we were not calling DefWindowProc after WM_INPUT, but the bug was hard to find because it persisted when I tried turning off raw input, because we also were not calling DefWindowProc after WM_MOUSEMOVE (which as I mentioned is, in theory, totally fine.)</p>
<p>Important to note: WM_TOUCH gets dispatched to your windows without you dispatching it! You may think that you can log all messages after they come out of PeekMessage, and that you are in control of your entire message stream, but this is apparently not true. WM_TOUCH will just teleport itself into your window.</p>
<p>In addition to the mouse motion events, your application will get a bunch of other mouse events that are generated by the touch interface, to emulate mouse stuff for programs that don't understand touch. There is no way to tell Windows you don't want these events (unless you do Windows 8 stuff and respond to WM_POINTER; see below). According to Microsoft, the official way you are supposed to detect and ignore these messages is like this:</p>
<p><code></p>
<pre>
#define MOUSEEVENTF_FROMTOUCH 0xFF515700
if ((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) 
        == MOUSEEVENTF_FROMTOUCH) { 
     // Skip message
}
</pre>
<p></code></p>
<p>I wish I were joking. It's been this way for years; <a href="http://mollyrocket.com/forums/viewtopic.php?p=7496">Casey wrote about this in 2008</a>.</p>
<p>This mask works for events like WM_LBUTTONDOWN, but it does not work for the mouse motion events e.g. WM_INPUT. If you want to take input both from touch and the mouse, you need to disambiguate the real WM_INPUTs from the fake ones. Through a process of experimentation with message flags, I landed on this:</p>
<p><code><br />
    if ((GetMessageExtraInfo() & 0x82) == 0x82) { /* ignore event */ }<br />
</code></p>
<p>It seems to work for now, but who knows if that will mysteriously break in some future version of windows.</p>
<p>Nicely, if your application handles WM_POINTER messages, you will not get any of this mouse emulation stuff or WM_TOUCH, so all this ugliness disappears. If it is okay to make Windows 8 your minimum specification, I recommend using WM_POINTER and staying far away from WM_TOUCH.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/10/wm_touch-is-totally-bananas/feed/</wfw:commentRss>
			<slash:comments>43</slash:comments>
		
		
			</item>
		<item>
		<title>Packaging Update</title>
		<link>https://the-witness.net/news/2012/09/packaging-update/</link>
					<comments>https://the-witness.net/news/2012/09/packaging-update/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 20 Sep 2012 23:23:50 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1814</guid>

					<description><![CDATA[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 …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/09/packaging-update/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>A while ago, I wrote <a href="https://the-witness.net/news/2012/08/fun-with-package-sorting/">a post about package sorting</a> in order to minimize diffs when patching on Steam.</p>
<p>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 good reason for this. Our compiled shaders would contain small differences, as would many meshes in the game.</p>
<p>These looked like uninitialized memory errors and, upon further investigation, that's indeed what they were. They are fixed now, so patches are a lot smaller.</p>
<p>However, patches may never be as small as we would like, and I find there is a pretty deep philosophical issue where.</p>
<p>Right now we have 17MB of files that change in response to minimal changes in the game (say, moving a few entities in the world by small distances). These are mostly cube maps for Light Probe entities, which are used to do lighting on nearby objects. Here's what a Light Probe looks like in the game: </p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/09/shot_2012.09.20__time_15_57_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/09/shot_2012.09.20__time_15_57_n01-381x384.png" alt="" title="shot_2012.09.20__time_15_57_n01" width="381" height="384" class="aligncenter size-large wp-image-1816" /></a></p>
<p>(Well, you don't see that sphere the game, only in the editor!) To generate one of these cube maps, we render the scene in all directions, from the point at the center of that sphere, then apply a blur to the result.</p>
<p>Imagine that we move a couple of entities in the world, even slightly. All Light Probes that can see those entities are going to change, by at least a pixel or two. Because we are applying a big fat blur kernel, a 1-2 pixel change becomes small changes spread across the entire image.</p>
<p>We have an automated script that preps the game for release, clearing out data that we only use for development, and ensuring that automatically-computed things get recomputed (like LODs for faraway objects). Recently we added a step to this process that re-generates all the Light Probes, because it just makes sense to update those automatically. If we have to keep track of them manually somehow we are just going to make mistakes.</p>
<p>What this means is that you can pretty much guarantee that a lot of light probes are going to change if you move some entities and patch the game. If we change anything basic about any of the shaders, which seems very likely, then <em>all</em> of the light probes are going to change (because the output of the shaders feeds back into the light probes).</p>
<p>That said, maybe it's the case now that more light probes are changing than I would expect. I am wondering if other things in the game are causing them to change. For example, when you are playing the game, foliage waves in the wind. I wonder if the animation timer for plants is ticking during the process when we generate light probes, causing them to move over time? This would cause most light probes to be different every time we bake them, regardless of other factors.</p>
<p>Now, there's a bigger issue. In addition to light probes, we have pre-baked lightmaps all over all geometry in the game:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/09/shot_2012.09.20__time_16_15_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/09/shot_2012.09.20__time_16_15_n01-512x288.png" alt="" title="shot_2012.09.20__time_16_15_n01" width="512" height="288" class="aligncenter size-large wp-image-1817" /></a></p>
<p>In a way that is reminiscent of the light probes (but a bit different), we generate these by placing a camera at many points along each surface, rendering the scene from each camera, and interpolating those into a final result.</p>
<p>So, just like light probes change when entities move slightly, lightmaps are going to change also. Lightmaps will also change if shaders change, but furthermore, lightmaps will change if light probes change (because light probes determine the look of entities that shine on the surfaces we are lightmapping), and light probes will change if lightmaps change (because the lightmaps influence the objects rendered in the light probes). So we have a circular dependency, which is not so bad in practice, except it means that if you change one entity in the game, then repeat this process iteratively, you may well end up changing most lightmaps and light probes in the game.</p>
<p>The light probes are not so big, but last I checked there are between 500MB and 700MB of lightmaps. However, re-baking the lightmaps is not part of the automated build process; we have to trigger a bake manually. But it seems like good policy to do a full rebake any time we change the game significantly. So, we are probably looking at a minimum patch size in the 500MB range.</p>
<p>I guess that is not such a big deal, since we are not an online game that would be patching all the time. Hopefully once we release the initial version of the game, the "content" won't change very much (sorry, but the word "content" as used in video games is kind of absurd, so it's hard for me to use it without sarcasm quotes; it's almost as bad as "title", which is a word I refuse to use, except to make fun of its use)... the "content" won't change very much, so patches would be rare.</p>
<p>We'll see. We have a while to figure these things out.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/09/packaging-update/feed/</wfw:commentRss>
			<slash:comments>40</slash:comments>
		
		
			</item>
		<item>
		<title>Regarding Water</title>
		<link>https://the-witness.net/news/2012/08/regarding-water/</link>
					<comments>https://the-witness.net/news/2012/08/regarding-water/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sat, 25 Aug 2012 06:16:19 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1789</guid>

					<description><![CDATA[(Here's an internal email that Ignacio sent today that may provide some flavor on what we're doing lately.) From: Ignacio Castaño Date: 24 August 2012 I just checked in a few changes to the water shader. Note that this is still work in progress, there are some artifacts and unfinished …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/08/regarding-water/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><em>(Here's an internal email that Ignacio sent today that may provide some flavor on what we're doing lately.)</em></p>
<p>From: Ignacio Castaño<br />
Date: 24 August 2012</p>
<p>I just checked in a few changes to the water shader. Note that this is still work in progress, there are some artifacts and unfinished features.</p>
<p>From the art point of view, the main change is that there's now a water_color_map and a water_flow_map that you can use to change the behavior of the shader.</p>
<p>The RGB channels of the color map control the water extinction color and the alpha controls the opacity factor. The previous underwater shading model was simply wrong, the new one works nicely and is easy to tweak. Note that I assume the water color changes very smoothly, avoid sharp color changes!</p>
<p>The flow_map is intended to contain additional water attributes. Right now it's only used for the stillness, but I will certainly add more in the future.</p>
<p>You will also notice that the shoreline now also has a foam layer:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/a.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/a-512x287.png" alt="" title="a" width="512" height="287" class="aligncenter size-large wp-image-1791" /></a></p>
<p>The way it's computed is by comparing the screenspace depth difference. This is not very correct, it looks OK from some angles, but it breaks badly when the underwater geometry has screen-space depth discontinuities:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/b.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/b-512x287.png" alt="" title="b" width="512" height="287" class="aligncenter size-large wp-image-1792" /></a></p>
<p>If the foam is a desirable feature, I'm considering modifying the print_map command to render a foam map, or maybe this is something that can be painted manually and added to the water_flow_map. One of my concerns is that this map may not have enough resolution. </p>
<p>Just Cause 2 seems to use this method to render foam, but they apply a big screenspace distortion to hide the artifacts, I found it sickening when you stare at it closely...</p>
<p>The way the water is shaded has also changed somewhat. First, I now approximate the specular exponent based on the position of the camera with respect to the water and the water roughness. Somewhat like the LEAN paper does, but assuming the roughness of the water is the same for the whole texture. Depending on the value of the exponent I either sample the mirrored reflection map, a filtered environment map, or blend between the two. My goal was to be able to use the mirrored reflection map only on a small subset of the lake entities. The physically based approach does not allow us to cull many, so I'll probably have to introduce some hacks. BTW, I'm doing all these work not just an optimization, but also so that we can use the light probe reflection model in the river and lakes inside the island, where the mirrored reflection map is not available.</p>
<p>The main problem with the filtered environment map is that it does not take local reflections and occlusion from the environment into account. I have two ideas to work around this, one is to store an ambient occlusion map in the lightmaps, this may be a bit too smooth and will lack directional information. The other is to do screenspace raycasting of the depth buffer to decide whether the environment map is occluded or not.</p>
<p>This is somewhat like what Crysis 2 does. Insomniac also uses a similar approach with just a single sample:</p>
<p><a href="http://www.insomniacgames.com/tech/articles/0409/files/water.pdf">http://www.insomniacgames.com/tech/articles/0409/files/water.pdf</a></p>
<p>I'm hoping we can get away with a crude approximation too. I did a quick test, where the maths are not exactly right, with only 4 samples and no smoothing, and it was starting to look promising:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/c.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/c-512x287.png" alt="" title="c" width="512" height="287" class="aligncenter size-large wp-image-1790" /></a></p>
<p>This won't allow us to use the filtered environment maps closer to the camera, but if the screenspace raycasting works well, I'm thinking about using non-filtered environment maps in place of the mirrored reflection map, whenever those are not available.</p>
<p>Finally, I've also been playing with Valve's water flow model, I have the basic implementation working, but I haven't yet been able to reproduce the workaround for the pulsing and repetition artifacts that Alex proposes.</p>
<p><a href="http://www.valvesoftware.com/publications/2010/siggraph2010_vlachos_waterflow.pdf">http://www.valvesoftware.com/publications/2010/siggraph2010_vlachos_waterflow.pdf</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/08/regarding-water/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>Fun with package sorting</title>
		<link>https://the-witness.net/news/2012/08/fun-with-package-sorting/</link>
					<comments>https://the-witness.net/news/2012/08/fun-with-package-sorting/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 08 Aug 2012 20:04:16 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1766</guid>

					<description><![CDATA[As you see in the previous post, lately I've been getting the game set up on Steam. Now that it's in there and working, there are still things to think about and make better. A couple of months ago I was playing Super Monday Night Combat; a much-anticipated weekly update …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/08/fun-with-package-sorting/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>As you see in <a href="https://the-witness.net/news/2012/08/steam-is-cool/">the previous post</a>, lately I've been getting the game set up on Steam. Now that it's in there and working, there are still things to think about and make better.</p>
<p>A couple of months ago I was playing <a href="http://store.steampowered.com/app/104700/">Super Monday Night Combat</a>; a much-anticipated weekly update came along, but its file size was over 800MB! MNC is an Unreal Engine game and Unreal, like many game engines (and like The Witness), packages its data files together for robustness and speed. This package format interacts with the patch delivery system of any online distribution service, though.</p>
<p>Steam's system performs a binary-data comparison between the old version of your file and the new version, sending only the pieces that have changed. To make this analysis tractable, files are thought of as collections of 1 megabyte chunks; if anything in a particular chunk changes, even one byte, the whole chunk gets included in the patch. If you aren't careful about this, small details of your package format can trigger very large patches, and this is what was happening with Super MNC (not really the developers' fault since they were using a licensed engine; I have heard that the Unreal guys are addressing the problem.)</p>
<p>The Witness packs most of its data into a single 2-gigabyte file stored in the .zip format. Before uploading the initial version to Steam, I took a safeguard to minimize patch sizes, or so I thought: Files are sorted lexicographically and then placed into the zip file in that specific order. (Imagine that files are stored in random order: probably every patch involves every player re-downloading the entire game!)</p>
<p>Last night, as a test, I pushed a new build to Steam. The hope was that the patch would be small, since we had only done two days of work. Instead, here's what we got:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/steam_chunks.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/steam_chunks-512x94.png" alt="" title="steam_chunks" width="512" height="94" class="aligncenter size-large wp-image-1767" /></a></p>
<p>The patch was 660 megabytes. Clearly I had not done enough to prevent this. I opened up a zip file reader and took a look at the file order. In many cases, it was as you'd expect, but in the case of meshes and lightmaps we see this:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/sorting_problem_7zip.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/sorting_problem_7zip-512x162.png" alt="" title="sorting_problem_7zip" width="512" height="162" class="aligncenter size-large wp-image-1768" /></a></p>
<p>'save' is the world name and the 5-digit number is the identifier for each entity. (The world name is redundant right now, since The Witness takes place entirely in one world). We re-bake lightmaps pretty often, but we change meshes much less often. So, the packing order you see here will result in us patching more chunks than we should. Not necessarily by much, in this case, since meshes are much smaller than lightmaps, but that might not be true for all meshes, and other data types may have a similar issue but exhibit more-severe problems. So, I had the thought that instead of sorting things like this:</p>
<p><code>a.lightmap<br />
a.mesh<br />
b.lightmap<br />
b.mesh<br />
</code></p>
<p>What we really want is to sort by file extension first, then sort by name:</p>
<p><code>a.lightmap<br />
b.lightmap<br />
a.mesh<br />
b.mesh<br />
</code></p>
<p>... but not always. Sometimes we have multiple files associated with one source file, and that will all change when that source file changes, but that have different extensions. This is the case with shaders:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/shaders_7zip.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/shaders_7zip-512x107.png" alt="" title="shaders_7zip" width="512" height="107" class="aligncenter size-large wp-image-1769" /></a></p>
<p>So I hacked together a solution that sorts anything with an extension of .shader*, in terms of the global file list, as though the extension were only ".shader" -- that means all these files will stick together -- but locally, you still need to keep the full extension, so that the files for one particular shader do not randomize their order every time you make a patch.</p>
<p>The way I do this is to tack a modified extension onto the front of every filename, for sorting purposes only. So "hello.texture" becomes ".texture hello.texture", "whatever.shader_ps_text" becomes ".shader whatever.shader_ps_text", "whatever.shader_dump" becomes ".shader whatever.shader_dump".</p>
<p>If this doesn't make sense to you, don't worry too much about it, because it's not that big of a problem (and I am not even sure if those ps_text and vs_text files are needed for the running game; if we should be discarding them it would certainly mitigate the issue.) These kinds of problems would modestly increase the patch size, but I would not expect the increase to be terrible.</p>
<p>The whole time I was doing this sorting stuff, I knew it wasn't the real problem, and in the back of my mind I was thinking, "I hope the Steam patch mechanism ignores timestamps on files so that we don't have to go touching all files to a known time. (Or I hope we aren't packing a newly-generated build ID into each file or something.)" But this was an example of my brain not working properly: because we are packing all this stuff into a zip file, Steam doesn't know they are separate files! Since the zip file stores timestamps for all the files, <em>of course</em> that data changes every build (since our build process generates new files every time).</p>
<p>At first I was thinking that this wouldn't be the real problem, either, because the zip file format has a main directory that is stored compactly, and that is where timestamps would be, because you want to be able to access that data quickly. So I would have guessed that, if all the timestamps changed, the worst that would happen is that the directory would change every build, but that is at most a couple of megabytes. But looking at <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">the zip file specification</a>, I discovered how wrong I was. Inexplicably, timestamps for each file in a zip archive are stored both in the central directory <em>and</em> in the local header for each file, so if you change timestamps for all your files, you are strewing changes everywhere.</p>
<p>So I made the packaging script set all timestamps to 0, but the zip library we are using didn't like that, so I set the timestamp to January 1, 2012 00:00:00 GMT.</p>
<p>After fixing this, as a test I built two patches in a row from scratch, with the game recompiling all shaders and re-compressing all textures each time. In theory the results should be exactly the same (certainly if this still generated a huge patch, we would still have some kind of big problem). Happily, we have found at least some bit of success:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/success.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/success-512x97.png" alt="" title="success" width="512" height="97" class="aligncenter size-large wp-image-1772" /></a></p>
<p>I am not sure what it is saying there about 2046 of 2262 matching, or 60 changed chunks, but saying it uploaded 0 chunks. In any case it's better than before. I am going to ask the Steam people what these various numbers actually mean.</p>
<p>Feeling good about this, I ran a final test where I moved around a few objects in the world and changed a constant in one shader:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/bigger.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/bigger-512x93.png" alt="" title="bigger" width="512" height="93" class="aligncenter size-large wp-image-1781" /></a></p>
<p>That's once again not so good (140 MB!) I had been sweeping the 18MB from the previous run under the rug, thinking "hey, it says 0 chunks sent, so maybe that 18MB is protocol overhead involved in figuring out which chunks changed, and it doesn't impact patch size." Apparently not. The next step involves asking the Steam folks for advice, hunting around for a binary diff file with which to analyze our own packages to see if we are doing something unsavory, etc.</p>
<p>Here's the current Perl code for the part of our script that builds the zip file:</p>
<p><code></p>
<pre>
sub modify_name {
    my $name = $_[0];

    my ($file, $dir, $ext) = fileparse(lc($name), qr/\.[^.]*/);
    my $orig_ext = $ext;

    if ($ext =~ m/^\.shader/) { 
        $ext = '.shader';
    }

    # Throw away 'dir' since we discard it when writing the file, anyway.
    return "$ext $file$orig_ext";
}

sub make_uncompressed_zip {  # Sort zip members alphabetically so that binary diffing will have an easier time.
    my ($source, $prefix, $dest_zip_file) = @_;

    my @unsorted = glob("$source/*.*");
    my @sorted = sort { 
        modify_name($a) cmp modify_name($b)
    } @unsorted;

    print("Sorted $#sorted files.\n");

    use Archive::Zip qw(:ERROR_CODES);
    my $zip = Archive::Zip->new();

    
    # Zip API complains if time is before 1980, so use an arbitrary timestamp in that range (yuck).
    my $timestamp_2012_jan1 = 1325376000;
    foreach my $fullname (@sorted) {
        my ($file, $dir, $ext) = fileparse($fullname, qr/\.[^.]*/);

        # print("Adding '$fullname' as '$prefix$file$ext'\n");
        my $member = $zip->addFile("$fullname", "$prefix$file$ext");
        $member->setLastModFileDateTimeFromUnix($timestamp_2012_jan1);  # Clobber timestamp. 
    }

    # Set the compression level on all the members.

    my @members = $zip->members();
    foreach my $member (@members) {
        $member->desiredCompressionMethod(COMPRESSION_STORED);
    }

    $zip->writeToFileNamed($dest_zip_file);
}
</pre>
<p></code></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/08/fun-with-package-sorting/feed/</wfw:commentRss>
			<slash:comments>71</slash:comments>
		
		
			</item>
		<item>
		<title>Steam is cool.</title>
		<link>https://the-witness.net/news/2012/08/steam-is-cool/</link>
					<comments>https://the-witness.net/news/2012/08/steam-is-cool/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 06 Aug 2012 19:58:26 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1762</guid>

					<description><![CDATA[Last night I put together a test build of The Witness for Steam. I'd been wanting to do this for a while, but the game's ability to run in full-release mode had been broken for a while. From day to day, we run the game with unpackaged data files, because …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/08/steam-is-cool/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Last night I put together a test build of The Witness for Steam. I'd been wanting to do this for a while, but the game's ability to run in full-release mode had been broken for a while. From day to day, we run the game with unpackaged data files, because we change them a lot. For a release you generally want to pack them together. </p>
<p>We finally got that working well enough; here's me getting ready to download the game on Steam:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/witness_download.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/witness_download-487x384.jpg" alt="" title="witness_download" width="487" height="384" class="aligncenter size-large wp-image-1763" /></a></p>
<p>And here I am after having launched the game:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/witness_played.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/witness_played-488x384.jpg" alt="" title="witness_played" width="488" height="384" class="aligncenter size-large wp-image-1764" /></a></p>
<p>I don't want people out there to get too excited about these screenshots: this does <strong>not</strong> mean the game is close to release. You wouldn't want to play it right now. But this will help us a lot when it comes to getting the game out to playtesters and keeping it updated.</p>
<p>For actually shipping our game off to Steam, we are using the new version of the Steam developer tools, and they are really good. The old stuff (which I had used for Braid) was serviceable but had a lot of undesirable things going on. The new stuff is exactly what you want: you write a couple of very small and easy to read config files, then you run a command and it uploads your game. This process is now fully-automated, which means developers can modify their game and push changes out to users faster and with less hassle than with any other online distribution service. (It is basically as fast as if you host the game yourself).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/08/steam-is-cool/feed/</wfw:commentRss>
			<slash:comments>45</slash:comments>
		
		
			</item>
		<item>
		<title>Fun with in-engine color grading</title>
		<link>https://the-witness.net/news/2012/08/fun-with-in-engine-color-grading/</link>
					<comments>https://the-witness.net/news/2012/08/fun-with-in-engine-color-grading/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Fri, 03 Aug 2012 23:50:37 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1746</guid>

					<description><![CDATA[Quite some time ago, Ignacio put some color grading features into the engine, so that you could tell the postprocessor to tweak colors in particular ways. For a while these features were very experimental; we just had them on a debug menu and there wasn't a way to save the …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/08/fun-with-in-engine-color-grading/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Quite some time ago, Ignacio put some color grading features into the engine, so that you could tell the postprocessor to tweak colors in particular ways. For a while these features were very experimental; we just had them on a debug menu and there wasn't a way to save the settings. We didn't really use the features (in part because we were pretty busy just getting the basic parts of the game together).</p>
<p>Lately, Ignacio and Salvador took the features all the way so that we can use them easily in normal workflow. (This happened over some period of time, but the last parts came together this week). Now you can take a screenshot, screw around with the colors in Photoshop, and load it back into the game to control the grading. I am pretty sure this is not our idea, and we got it from the Uncharted guys or someone like that (Update: The idea was developed by Naty Hoffman and others; see the comments to this article).</p>
<p>Here's how it goes. First, I find an area the look of which I would like to change:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_13_n02.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_13_n02-512x288.png" alt="" title="shot_2012.08.03__time_16_13_n02" width="512" height="288" class="aligncenter size-large wp-image-1747" /></a></p>
<p>Next I hold down the control key while taking the screenshot, causing it to be saved with a special color bar along the top of the image:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_13_n03.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_13_n03-512x288.png" alt="" title="shot_2012.08.03__time_16_13_n03" width="512" height="288" class="aligncenter size-large wp-image-1748" /></a></p>
<p>Then I go into Photoshop and screw around with the colors. Here I am using the Hue/Saturation tool to shift the palette away from red:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/lut_test_1.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/lut_test_1-512x288.jpg" alt="" title="lut_test_1" width="512" height="288" class="aligncenter size-large wp-image-1752" /></a></p>
<p>Or, instead, I may wish to shape the histogram of the image:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/lut_test_2.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/lut_test_2-512x288.jpg" alt="" title="lut_test_2" width="512" height="288" class="aligncenter size-large wp-image-1753" /></a></p>
<p>That color bar at the top of the screen acts as a look-up table. The game doesn't need to understand what operations we have performed in Photoshop; it just knows what that color bar looked like when the screenshot was saved out, and, by comparing it to the colors in the result, knows how to transform any color in the rendered scene.</p>
<p>In the game, you can now attach these grading operations to spatial markers, so that color grading kicks in when you are inside specific areas. Here I am setting up some markers in the editor (the marker is the big white box):</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_23_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_23_n01-512x288.png" alt="" title="shot_2012.08.03__time_16_23_n01" width="512" height="288" class="aligncenter size-large wp-image-1749" /></a></p>
<p>After setting up two of these boxes, one for each of the two weird color operations I created, then I can walk around in the game and have these operations apply to everything:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_28_n04.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_28_n04-512x288.png" alt="" title="shot_2012.08.03__time_16_28_n04" width="512" height="288" class="aligncenter size-large wp-image-1751" /></a></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_27_n03.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/08/shot_2012.08.03__time_16_27_n03-512x288.png" alt="" title="shot_2012.08.03__time_16_27_n03" width="512" height="288" class="aligncenter size-large wp-image-1750" /></a></p>
<p>This gives us a really nice degree of control over how the game looks. We plan to use it to help with the color theming that will tie together specific areas.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/08/fun-with-in-engine-color-grading/feed/</wfw:commentRss>
			<slash:comments>26</slash:comments>
		
		
			</item>
		<item>
		<title>Fun With Subtitles</title>
		<link>https://the-witness.net/news/2012/07/fun-with-subtitles/</link>
					<comments>https://the-witness.net/news/2012/07/fun-with-subtitles/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 23 Jul 2012 22:31:37 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1720</guid>

					<description><![CDATA[Lately I have been doing some difficult puzzle design. Today I woke up and wanted a break from that, so I decided to nail down one of the loose ends that hadn't been thought about yet: displaying subtitles during the in-game voice recordings (of which there are a lot). Originally …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/07/fun-with-subtitles/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Lately I have been doing some difficult puzzle design. Today I woke up and wanted a break from that, so I decided to nail down one of the loose ends that hadn't been thought about yet: displaying subtitles during the in-game voice recordings (of which there are a lot).</p>
<p>Originally I wasn't sure whether I wanted to implement subtitles or not. It's important to me that the game have an overall aesthetic that contains no visual language. I was worried that if we were to draw subtitles for people who don't speak English, it might ruin this. But, a year ago, I was talking to a friend who has experience in film, and he convinced me that people just understand that subtitles are a different thing, that they are a layer on top of the game or movie or whatever. </p>
<p>So, I am implementing this, and maybe it's good, because if I had been hard-line about things, it would mean that most people in the world would not be able to understand the recordings. That's not terrible, because they are not necessary to complete the game, but as long as I don't feel like, ultimately, the subtitles are ruining things, it is probably better to have them.</p>
<p>(It's going to be an interesting time when I go try to implement the main menu without any written words...)</p>
<p>It's been a very productive day. I implemented the basic subtitling system in less than 3 hours (making a subtitle data file for one of the voice tracks, loading it, detecting in-game when a voice track is playing, finding the appropriate piece of subtitle for the current time, and drawing it on the screen). Here's the result:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/07/shot_2012.07.23__time_15_21_n04.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/07/shot_2012.07.23__time_15_21_n04-512x288.png" alt="" title="shot_2012.07.23__time_15_21_n04" width="512" height="288" class="aligncenter size-large wp-image-1721" /></a></p>
<p>The data file is a very simple format that I just made up. Taking my experience in making Braid multi-language, and looking at the kind of text we will be dealing with in The Witness, it was clear that I needed a format that was mostly about the text, with very minimal markup. Right now the main markup we need is just "which recording is the following text for" and "what time in the recording should the following lines be displayed". I can imagine that later on we will add some more features to it, but probably not many.</p>
<p>Since The Witness inherits code from Braid, we already have handling for other languages in our font rendering, so I pumped the text through Google Translate to test a couple of other languages:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/07/shot_2012.07.23__time_14_46_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/07/shot_2012.07.23__time_14_46_n01-512x288.png" alt="" title="shot_2012.07.23__time_14_46_n01" width="512" height="288" class="aligncenter size-large wp-image-1722" /></a></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/07/shot_2012.07.23__time_15_02_n02.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/07/shot_2012.07.23__time_15_02_n02-512x288.png" alt="" title="shot_2012.07.23__time_15_02_n02" width="512" height="288" class="aligncenter size-large wp-image-1723" /></a></p>
<p>If you are playing in English, subtitles are OFF BY DEFAULT. It amazes me how badly many games handle subtitles, most notably, that a great many games seem to have voice acting in English and then also default to subtitling in English. This is terrible because people read at a different speed than they listen, and they probably read faster. It ends up dividing peoples' attention in a weird way. I don't know why so many games do this except that they aren't paying enough attention to user experience. So to have a good experience you have to go turn subtitles off, but sometimes that doesn't even work! A couple of days ago, I was playing Xenoblade Chronicles, and when I turn off subtitles, only about half of the subtitles in the game go away. Apparently there are two different classes of subtitles and one of them you cannot even turn off! I think they never even tested it...</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/07/fun-with-subtitles/feed/</wfw:commentRss>
			<slash:comments>61</slash:comments>
		
		
			</item>
		<item>
		<title>Meeting Photos</title>
		<link>https://the-witness.net/news/2012/06/meeting-photos/</link>
					<comments>https://the-witness.net/news/2012/06/meeting-photos/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 20 Jun 2012 20:04:52 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1695</guid>

					<description><![CDATA[Every week we have a meeting with the architects where we plan the structures and landscapes on the island. Most of the week, the architects are generally off thinking about this stuff while we are building the game. During the weekly meeting we get together, talk about what concepts the …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/06/meeting-photos/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0401.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0401-512x384.jpg" alt="" title="IMG_0401" width="512" height="384" class="aligncenter size-large wp-image-1696" /></a></p>
<p>Every week we have a meeting with the architects where we plan the structures and landscapes on the island.  Most of the week, the architects are generally off thinking about this stuff while we are  building the game.  During the weekly meeting we get together, talk about what concepts the architects have come up with, figure out how those might integrate with the game, make decisions about which ones to pursue, and iterate in detail on concepts we have already decided to pursue.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0402.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0402-512x384.jpg" alt="" title="IMG_0402" width="512" height="384" class="aligncenter size-large wp-image-1697" /></a></p>
<p>A while back we took some photos of this meeting, so I figured it would be fun to post them.  </p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0403.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0403-512x384.jpg" alt="" title="IMG_0403" width="512" height="384" class="aligncenter size-large wp-image-1698" /></a></p>
<p>Here we are looking at a number of different possibilities for one of the areas in the game.  I had already done the gameplay design, so we had a working location that was built out of blocky programmer stuff (if you see blocky things in the island update screenshots, it was something like that).  So we knew the general shape of what we were trying to build and how it had to behave; the architects started with that and made proposals about what the location might be like in terms of its basic construction.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0404.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0404-512x384.jpg" alt="" title="IMG_0404" width="512" height="384" class="aligncenter size-large wp-image-1699" /></a></p>
<p>We chose one of these ideas and iterated on it a while.  Other concerns, having to do with the overall layout of elements on the island, then caused us to change the size and shape of this location; once we had done this, the original design was felt to be a bit weak at the new size and shape, so we went back and heavily modified the concept.  Only this past week have we converged on the final design and gotten a good first approximation into the game in a playable way.  It's pretty cool.</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0405.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0405-512x384.jpg" alt="" title="IMG_0405" width="512" height="384" class="aligncenter size-large wp-image-1700" /></a></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0406.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0406-512x384.jpg" alt="" title="IMG_0406" width="512" height="384" class="aligncenter size-large wp-image-1701" /></a></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0407.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0407-512x384.jpg" alt="" title="IMG_0407" width="512" height="384" class="aligncenter size-large wp-image-1702" /></a></p>
<p>Because we're working on a lot of things at once, we usually talk about a few different locations that are at different stages of development.  At this particular meeting we were also looking at some early concepts of the visual design and modeling of the area where you start the game:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0414.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0414-512x384.jpg" alt="" title="IMG_0414" width="512" height="384" class="aligncenter size-large wp-image-1703" /></a></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0416.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2012/06/IMG_0416-512x384.jpg" alt="" title="IMG_0416" width="512" height="384" class="aligncenter size-large wp-image-1704" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/06/meeting-photos/feed/</wfw:commentRss>
			<slash:comments>36</slash:comments>
		
		
			</item>
		<item>
		<title>Panel Art Update</title>
		<link>https://the-witness.net/news/2012/04/panel-art-update/</link>
					<comments>https://the-witness.net/news/2012/04/panel-art-update/#comments</comments>
		
		<dc:creator><![CDATA[Luis Antonio]]></dc:creator>
		<pubDate>Tue, 17 Apr 2012 20:51:00 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Art]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1583</guid>

					<description><![CDATA[It’s now been over 5 months since I joined The Witness team as an artist and I would like to share a bit of my experience on the project coming from a “big studio” as well as the most recent work I’ve done. Just before I left my last job …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/04/panel-art-update/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p dir="ltr">It’s now been over 5 months since I joined The Witness team as an artist and I would like to share a bit of my experience on the project coming from a “big studio” as well as the most recent work I’ve done.</p>
<p dir="ltr">Just before I left my last job I was working as a Lead/Art Director on a marketing driven project focused on selling as many units as possible. On one side I had high level decisions being made by stockholders whose focus is on turning a profit while on the other side there was the development team who truly believed they would be able to make a good game.</p>
<p dir="ltr">Also I was surrounded by schedules, performance reviews, hierarchical titles, producers, human resources, bonus system and all the other corporate systems that eventually dilute the organic process of doing something creative. While I understand the logic behind it I  realized that is not the reason why I joined the video games industry and that something wasn’t right.</p>
<p dir="ltr">Now, after these few months, the answers for these questions became clear. Its all based on trust. In this project, all the decisions we arrive at are very organic. Jonathan has a very clear vision of what he wants and the fact that we can see it and believe in it makes it extremely logical and simple.</p>
<p dir="ltr">Our passion for what we do (and what we would probably be doing on our free time if we weren’t being paid for it) gets distilled directly into the game in a very rewarding process.How much and how we give it depends entirely on us and that creates a natural challenge and pressure that most AAA companies cannot provide.</p>
<p dir="ltr">This trust leads to respect and it creates a very unique work environment. This is something that I’ve never seen with all the project management, task scheduling and scrum meetings that try to fix an inherently broken game. I don’t think video games can be produced like an assembly line, at least not games that have something meaningful to say, and I’m glad that I found people that are doing it the right way.</p>
<p dir="ltr">All this may sound trivial but probably 90% of the game developers that I know will understand how big of an issue this is. I still believe big companies can change their ways and make the same profit if not more, but it has to start from the bottom, the people who are hard at work making the games.</p>
<p dir="ltr">As for the second part, I would like to share what we have been trying to do with the many island panels. As you might already know the player has to solve different puzzles using these panel interfaces scattered around the island.</p>
<p dir="ltr">I started my research by looking at what materials they could be made of, what technology they would use and how they would be assembled and how all this could relate with the different areas and narrative of the game.</p>
<p>This first set of images shows some proposals of how the panel screens could possibly look. I tried not to focus so much on the gameplay but more on ideas that could lead to further discussions among the team.</p>
<p style="text-align: center" dir="ltr"><a href="https://the-witness.net/news/wp-content/uploads/2012/04/Panel_-Concepts.jpg"><img class="aligncenter size-large wp-image-1584" src="https://the-witness.net/news/wp-content/uploads/2012/04/Panel_-Concepts-384x384.jpg" alt="" width="384" height="384" /></a></p>
<p dir="ltr">After some solid feedback and a couple of art meetings I was able to understand what was working or not and decided to do a new set of proposals. Also this time I tried to focus on the more technical aspect of getting these panels to work in the game and if the effort we would have to put into them would be worthwhile.</p>
<p style="text-align: center" dir="ltr"><a href="https://the-witness.net/news/wp-content/uploads/2012/04/Panel_-Screens02.jpg"><img class="size-medium wp-image-1585 aligncenter" src="https://the-witness.net/news/wp-content/uploads/2012/04/Panel_-Screens02-300x300.jpg" alt="" width="300" height="300" /></a></p>
<p dir="ltr">The same amount of work went into the structure of the panels and how they would be assembled. This time, working with the architects gave valuable input into understanding how they would actually be built in the environment and the amount of work required. On this image you can see a screen capture of several prototypes before being tested ingame.</p>
<p style="text-align: center" dir="ltr"><a href="https://the-witness.net/news/wp-content/uploads/2012/04/Structure_Concept.jpg"><img class="aligncenter size-large wp-image-1586" src="https://the-witness.net/news/wp-content/uploads/2012/04/Structure_Concept-512x286.jpg" alt="" width="512" height="286" /></a></p>
<p dir="ltr">These are usually modelled very fast with just base colors so I can do several iterations until I find something that I'm happy with.<br />
And finally here is how some of them are looking in-game. They are still in concept but by placing them in the correct context makes it a lot easier to understand what is working or not.</p>
<p style="text-align: center" dir="ltr"><a href="https://the-witness.net/news/wp-content/uploads/2012/04/Structure_Ingame2.jpg"><img class="size-medium wp-image-1587 aligncenter" src="https://the-witness.net/news/wp-content/uploads/2012/04/Structure_Ingame2-177x300.jpg" alt="" width="177" height="300" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/04/panel-art-update/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title>Post-GDC update</title>
		<link>https://the-witness.net/news/2012/03/post-gdc-update/</link>
					<comments>https://the-witness.net/news/2012/03/post-gdc-update/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Tue, 27 Mar 2012 22:33:46 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1563</guid>

					<description><![CDATA[We brought The Witness to the Game Developers Conference and had the game playable privately in a hotel room to select members of the press. We had to do a lot of work to get the game back into playable condition; a lot of things had been broken since the …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/03/post-gdc-update/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>We brought The Witness to the Game Developers Conference and had the game playable privately in a hotel room to select members of the press.</p>
<p>We had to do a lot of work to get the game back into playable condition; a lot of things had been broken since the press tour last August / September.  (When you are making sweeping changes to a big and complicated game world, it is pretty easy for things to get bent out of shape).  So the GDC served as a good internal deadline to have the game banged back into shape.</p>
<p>I didn't expect a lot of press coverage to come out of this, because at the GDC there's just a lot of stuff going on, a lot of things for people to pay attention to and write about.  So I had been doing this mostly as an opportunity to keep the press up-to-date with the game, see how it is evolving graphically, etc.  But, to my surprise, we got a lot of coverage.  Here are links to what people are saying about the game lately:</p>
<p>First, a <a href="http://www.gamespot.com/events/gdc-2012/video.html?sid=6365133">video interview on Gamespot</a> (excerpted; we probably talked for 45 minutes or an hour).</p>
<p>Kirk Hamilton at Kotaku finds <a href="http://kotaku.com/5893336/jonathan-blows-the-witness-is-an-exercise-in-symphonic-game-design">a musical treatment for The Witness' game design philosophy</a>.</p>
<p>Ben Kuchera at the Penny Arcade Report, with <a href="http://penny-arcade.com/report/editorial-article/steam-vs.-xbox-live-arcade-jonathan-blow-explains-why-microsoft-is-aiming-a">a piece about online distribution channels</a>, and <a href="http://penny-arcade.com/report/editorial-article/jonathan-is-betting-2.5-million-youll-like-the-witness-as-much-as-braid">another biz-focused one</a>.</p>
<p>Ben Gilbert at Joystiq, with <a href="http://www.joystiq.com/2012/03/14/the-witness-cares-about-you-more-than-you-know">a design-oriented posting</a> and also <a href="http://www.joystiq.com/2012/03/12/the-witness-is-jon-blows-second-shot-at-all-or-nothing">a more biz-like one</a>.</p>
<p>Alex Rubens from G4 with <a href="http://www.g4tv.com/games/xbox-360/65972/the-witness/articles/76862/the-witness-preview-how-to-unbraid-modern-game-design">an overall preview of the game</a>.</p>
<p>Daniel Starkey of Destructoid, <a href="http://www.destructoid.com/gdc-witnessing-jonathan-blow-s-the-witness-223458.phtml ">with a preview as well</a>.</p>
<p>As you can see from the write-ups, people seemed to really dig the game.  So that is all good.</p>
<p>Keep in mind that, because I am known for my previous game and and the reporters are there talking directly to me, the tone that tends to get adopted in these write-ups makes it sound as though I were making the game myself.  That's not the case; there's a good-sized team of very talented people building the game!  (This reminds me that we need to update the About page to list everyone who is currently working on the project.)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/03/post-gdc-update/feed/</wfw:commentRss>
			<slash:comments>32</slash:comments>
		
		
			</item>
		<item>
		<title>Playtest; Island Update</title>
		<link>https://the-witness.net/news/2012/02/playtest-island-update/</link>
					<comments>https://the-witness.net/news/2012/02/playtest-island-update/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Fri, 24 Feb 2012 20:09:51 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1494</guid>

					<description><![CDATA[Here's how the island looks today: The current puzzle count is 440. As expected in the previous update, over the past week or so I went back and worked on the endgame again. I built an original version of the endgame last summer; I had one friend playtest it, and …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/02/playtest-island-update/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Here's how the island looks today:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/02/shot_2012.02.24__time_12_07_n02.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/02/shot_2012.02.24__time_12_07_n02-512x288.png" alt="" title="shot_2012.02.24__time_12_07_n02" width="512" height="288" class="aligncenter size-large wp-image-1495" /></a></p>
<p>The current puzzle count is 440.</p>
<p>As expected in <a href="https://the-witness.net/news/2012/02/island-snapshot-4/">the previous update</a>, over the past week or so I went back and worked on the endgame again.  I built an original version of the endgame last summer; I had one friend playtest it, and it worked out pretty well, though I felt it wasn't quite epic enough.  I didn't know what more to do with it at the time, so I just let it sit, and went to thinking about other parts of the game.</p>
<p>Lately I had more ideas for the endgame, so I went into personal crunch mode and rebuilt into something more epic.  This was one of the most productive periods of my working life (maybe the most productive) and I think this area, all taken together, may be the most interesting thing I have ever designed.  However, it may be a little too difficult for the player, at the moment!  Today I playtested this endgame and one other area of the game, with a game designer friend of mine, and it took <strong>nine and a half hours</strong> to play through these two areas (6 hours for the endgame, 3.5 hours for the other area).  I think this is a little long, so I am going to be tuning these areas and cleaning them up a little bit.  This weekend hopefully I can get in some playtest time with Jeff and Casey of <a href="http://www.jeffandcaseytime.com/s01_b02_c01out.htm"><em>Jeff and Casey Time</em></a>, so if that happens we will see how it goes.</p>
<p>(It's interesting; I haven't done a playtest of The Witness for a while, but I was still thinking of it as a 10-15 hour game, and that's what I tell people when they ask.  But if these two areas by themselves, even after being cleaned up, are 6-7 hours of playtime, that means the whole game is ... ... much longer.  Sometime in a month or two, I'll do some playtests with people who have never seen the game before, and we'll see how long it really is.)</p>
<p>Meanwhile, on the art side, we've been working on the style of the game; expect a future blog post as we come to conclusions on that.  </p>
<p>Tech-wise, Andy has been working on performance stuff.  First he made raycasting much faster; til now the game had been relatively lazy about spatial organization.  Andy implemented a quadtree for finding entities in the world and enabled k-d tree generation and serialization for casting rays against individual meshes.  (We had k-d tree code already as part of a library but weren't using it.)  Salvador is working on in-game animation playback, as well as exporting; until now we have been making do without animations, but once this is in the game it will help us with a number of issues.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/02/playtest-island-update/feed/</wfw:commentRss>
			<slash:comments>50</slash:comments>
		
		
			</item>
		<item>
		<title>Island Snapshot</title>
		<link>https://the-witness.net/news/2012/02/island-snapshot-4/</link>
					<comments>https://the-witness.net/news/2012/02/island-snapshot-4/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 02 Feb 2012 01:52:57 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1479</guid>

					<description><![CDATA[Here's how the island looks right now. It is a bit crazy and messy, especially the stuff nearest the camera: This is because this corner of the world is one of the last areas that we haven't really figured out, in terms of what goes where. There is sort of …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2012/02/island-snapshot-4/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Here's how the island looks right now.  It is a bit crazy and messy, especially the stuff nearest the camera:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2012/02/shot_2012.02.01__time_17_15_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2012/02/shot_2012.02.01__time_17_15_n01-512x288.png" alt="" title="shot_2012.02.01__time_17_15_n01" width="512" height="288" class="aligncenter size-large wp-image-1481" /></a></p>
<p>This is because this corner of the world is one of the last areas that we haven't really figured out, in terms of what goes where.  There is sort of just some random stuff dumped there right now.  That will change pretty soon.</p>
<p>Expect the next few island snapshots to show a lot of big changes.  We've reached the point where the basic gameplay is settled, I'm refining many of the specific puzzles, and we've got at least rough drafts of many of the architectural layouts.  That means we can start planning the island a bit better.  Over the next month or so, we're going to be changing the shape of the island to something a little more geologically plausible, something that carries more information.  It's going to be interesting to do this without disrupting the gameplay layout of the island too much.  </p>
<p>The current puzzle count is 427.  In January I scrapped and re-designed an area and its 60-or-so puzzles.  The previous area was inside dark caves, which is a bit cliche, and the gameplay hook that motivated my setting that area in caves, which I had hoped would be cool, didn't work very well.  In addition, I felt that the puzzles themselves, while fitting into the rest of the game, were the weakest part of the game.  I'd been feeling this way for a long time, but I didn't have a good solution for it til late December.  I moved the location and redesigned the puzzles.  Now the theme of the location is totally different, has a gameplay hook that works way better than the cave thing, and is very cool.  The puzzles situated in this area are also much stronger than before, because I found a way to change the rules of those puzzles to make them much tighter.  They'd felt wishy-washy before (people would play through that area and, after finishing, lack clarity on what the puzzles were saying.  That's no good.)</p>
<p>We certainly could have shipped the game with the old area in the caves with the old puzzles, and probably shipped the game at least a month sooner, but an important skill in building a beautiful game is knowing when something just isn't good enough.</p>
<p>Next I am going back to the endgame, which I did my first pass at last summer sometime; I've got a gameplay hook to add which I think will bring it over the top and make it extra-good. I'll be working on that over the next few weeks while also working with the landscape architects on the island revision.</p>
<p>Also, we've got a new programmer starting soon (this week or next!)  Combined with our other new addition, who's been here a few weeks (Andrew Smith, ex-Zipper and -Oddworld; hi Andy!) we will have quite a bit of tech manpower to bring to bear on finishing this game.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2012/02/island-snapshot-4/feed/</wfw:commentRss>
			<slash:comments>33</slash:comments>
		
		
			</item>
		<item>
		<title>Architecture in The Witness</title>
		<link>https://the-witness.net/news/2011/12/architecture-in-the-witness/</link>
					<comments>https://the-witness.net/news/2011/12/architecture-in-the-witness/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Fri, 23 Dec 2011 21:28:02 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1389</guid>

					<description><![CDATA[This summer, we began working in earnest with architects, to bring further sophistication to the design of locations in The Witness.  Before this time, we had a game that was fully playable, but buildings and the areas around them tended to be placeholders, developed only enough to make the basic …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/12/architecture-in-the-witness/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>This summer, we began working in earnest with architects, to bring further sophistication to the design of locations in The Witness.  Before this time, we had a game that was fully playable, but buildings and the areas around them tended to be placeholders, developed only enough to make the basic gameplay possible.  We began working with two architecture firms, FOURM design (for buildings and such), and David Fletcher Studio (for landscape architecture).  Both firms are located in the Bay Area, so it's easy for us to meet regularly.</p>
<p>When we sat down to start working with the architects, one of the first things we did was put together a history of the island where The Witness takes place: how long has the island been there?  What groups of people lived there, and what kind of structures did they build?  How did later civilizations use the structures built by earlier groups?</p>
<p>Quickly we developed a running theme of sites that are old and have over time been used in two or three different ways.  When entering a new location, you probably first notice the most basic elements of its structure: where you can walk to easily, versus where you can't; what puzzles or goals are calling for your attention, and what walls or doors might be preventing you from getting to them.  If this is all you care about, you can then play through the area in a very utilitarian fashion.  But if you have an eye for detail, you may notice the elements of modern construction shoring up the design of an older structure with a different purpose.  The design of the new structure tells you something about what the newer guys were doing there, and how it differs from what the older guys were doing there.  And if you look really closely, you can see traces of the original footprint of the site (perhaps these are very subtle, some bricks just rising above the dirt in a few places), and infer the purpose of this very old site too.</p>
<p>If you see the different civilizations that came to this island as embodying different philosophies; and you see the structures they built as representative of the way these philosophies led them to interact with the world; and you see further that when they replaced a site, it represents the rejection of some older worldview that they consider no longer useful, then perhaps you start to get some idea of the amount of backstory that can be encoded into the world, nonverbally.</p>
<p>All of this backstory is also directly relevant to the main story -- who you are, why you are on this island, how you may get back home.  So, to put it another way, the game is constructed so that the more you pay attention to tiny details during your travels, the more insight you will have to the central story, even though it may not be obvious at any given time what a particular detail has to do with that story.</p>
<div>
<p>Having smart architecture, it seems, really helps this process work, brings it alive.  If you build a game where people are supposed to pay attention to details, but the details are wrong or naive or just don't have much thought put into them, then at some level the game just won't work.  Even if you don't know the first thing about architecture, you have been in enough buildings in your life that the deeper parts of your brain have distilled plenty of patterns about those buildings.  Your brain knows the difference between a real building and a nonsense building that wouldn't occur in the real world.  It can feel the difference in veracity between carefully-thought-out structural details -- on the one hand -- versus stuff that was just placed by a level designer to look cool.  When I showed a recent build to a friend, who had already played an earlier build of the game, he said the new structures made the game feel deeper, more serious.</p>
<p>I was a little surprised by this statement but should not have been, since really, that is what we are aiming for.  Thoughtful design of these structures and landscapes gives the game further gravitas.</p>
</div>
<div>
<p>The most-recent issue of Game Informer printed an article that showed some of the first screenshots of the newly-architected areas appearing in the game engine.  It is an interesting article; pick up the issue if you haven't!  They also put up a companion article online (but which not as extensive) here:</p>
<p><a href="http://www.gameinformer.com/games/the_witness/b/pc/archive/2011/12/06/architecture-of-the-witness.aspx">(Summary article at Game Informer)</a></p>
<p>The area featured in this article is the one that we have taken furthest so far in terms of modeling and texturing.  Here are some other shots of it:</p>
<p style="text-align: center;"><strong>The Keep, before and after</strong></p>
<p style="text-align: center;"><strong><a href="https://the-witness.net/news/wp-content/uploads/2011/12/keep_before_and_after.png"><img class="aligncenter size-medium wp-image-1413" title="keep_before_and_after" src="https://the-witness.net/news/wp-content/uploads/2011/12/keep_before_and_after-300x89.png" alt="" width="300" height="89" /></a><br />
</strong></p>
<p style="text-align: center;"><strong>The Keep, close-up 1</strong></p>
<p style="text-align: center;"><a href="https://the-witness.net/news/wp-content/uploads/2011/12/shot_2011.11.15__time_14_32_n01.png"><img class="size-medium wp-image-1416 aligncenter" title="shot_2011.11.15__time_14_32_n01" src="https://the-witness.net/news/wp-content/uploads/2011/12/shot_2011.11.15__time_14_32_n01-300x187.png" alt="" width="300" height="187" /></a><strong><br />
</strong></p>
<p style="text-align: center;"><strong>The Keep, close-up 2</strong></p>
<p style="text-align: center;"><a href="https://the-witness.net/news/wp-content/uploads/2011/12/shot_2011.11.15__time_14_33_n04.png"><img class="size-medium wp-image-1414 aligncenter" title="shot_2011.11.15__time_14_33_n04" src="https://the-witness.net/news/wp-content/uploads/2011/12/shot_2011.11.15__time_14_33_n04-300x187.png" alt="" width="300" height="187" /></a><strong> </strong></p>
<p style="text-align: center;"><strong><br />
The Keep, close-up 3</strong></p>
<p style="text-align: center;"><strong><a href="https://the-witness.net/news/wp-content/uploads/2011/12/shot_2011.11.15__time_14_35_n07.png"><img class="aligncenter size-medium wp-image-1415" style="border-style: initial; border-color: initial;" title="shot_2011.11.15__time_14_35_n07" src="https://the-witness.net/news/wp-content/uploads/2011/12/shot_2011.11.15__time_14_35_n07-300x187.png" alt="" width="300" height="187" /></a></strong></p>
<p style="text-align: center;"><strong><br />
</strong></p>
<p>We've done basic planning for some of the other areas, so I thought it would be nice to show some screenshots of work in progress.  For each of these, there's a 'before' version (when we had a fully-playable game, but basic placeholder structures) and after (once we have incorporated the architects' designs, revised the site plans and in some cases even the puzzles, etc):</p>
<p>&nbsp;</p>
<p style="text-align: center;"><strong>The Compound, before and after</strong></p>
<div><a href="https://the-witness.net/news/wp-content/uploads/2011/12/compound_before_and_after.png"><img class="size-medium wp-image-1399 aligncenter" style="border-style: initial; border-color: initial;" title="compound_before_and_after" src="https://the-witness.net/news/wp-content/uploads/2011/12/compound_before_and_after-300x84.png" alt="" width="300" height="84" /></a></div>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p style="text-align: center;"><strong><br />
Glass Factory, before and after</strong></p>
<p style="text-align: center;"><strong><a href="https://the-witness.net/news/wp-content/uploads/2011/12/glass_before_and_after.png"><img class="aligncenter size-medium wp-image-1400" title="glass_before_and_after" src="https://the-witness.net/news/wp-content/uploads/2011/12/glass_before_and_after-300x84.png" alt="" width="300" height="84" /></a><br />
</strong></p>
<p style="text-align: center;"><strong>Peninsula, before and after</strong></p>
<p style="text-align: center;"><strong><a href="https://the-witness.net/news/wp-content/uploads/2011/12/peninsula_before_and_after.png"><img class="aligncenter size-medium wp-image-1401" title="peninsula_before_and_after" src="https://the-witness.net/news/wp-content/uploads/2011/12/peninsula_before_and_after-300x84.png" alt="" width="300" height="84" /></a><br />
</strong></p>
<p style="text-align: center;"><strong>Vault, before and after</strong></p>
<p style="text-align: center;"><strong><a href="https://the-witness.net/news/wp-content/uploads/2011/12/vault_before_and_after.png"><img class="aligncenter size-medium wp-image-1402" title="vault_before_and_after" src="https://the-witness.net/news/wp-content/uploads/2011/12/vault_before_and_after-300x84.png" alt="" width="300" height="84" /></a><br />
</strong></p>
<p style="text-align: left;">Don't regard these "after" images as representative of what the game will look like!  They are still works in progress, and the final game will look substantially better: scenes like these will feel richer due to the placement of detail objects, further care put into the texture mapping and lighting, refinement of the still-rough-drafty terrain features around these structures, and many other bits of subtle game development magic.  But I wanted to show these now since they provide a good taste of the game's flavor, and they show how much structural intelligence is brought to the table by working with the architects.  Yes, we could have started with the placeholder structures and made them more elaborate and better-looking, in a general video-game-level-design way, but that's different from having well-thought-out ideas subtly embodied in the structures of the areas, which is what we are going for.</p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/12/architecture-in-the-witness/feed/</wfw:commentRss>
			<slash:comments>50</slash:comments>
		
		
			</item>
		<item>
		<title>Update!</title>
		<link>https://the-witness.net/news/2011/11/update-2/</link>
					<comments>https://the-witness.net/news/2011/11/update-2/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sun, 27 Nov 2011 02:25:15 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1344</guid>

					<description><![CDATA[I am working hard on puzzles right now. We've had figured out, for a while, the basic set of locations you can travel to on the island, and what the puzzles are in each. These locations were defined to varying degrees of specificity, though. Sometimes we know what the puzzles …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/11/update-2/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>I am working hard on puzzles right now.  We've had figured out, for a while, the basic set of locations you can travel to on the island, and what the puzzles are in each.  These locations were defined to varying degrees of specificity, though.  Sometimes we know what the puzzles are, exactly (they are all designed and implemented) but aren't sure what the architecture is.  Sometimes I have concrete ideas for some puzzles but only vague ideas for other puzzles, and it's a case of "I will fill these in later on, when I have time to think about it and come up with something good here; but it is pretty clear to me that there <em>will</em> be something good here, so I am not worrying too much about it."</p>
<p>Eventually, these things have to be figured out.  Over the past month or so we've done some of that figuring.  We nailed down the architecture for a couple of areas (including the all-important area where the player starts the game).  We've done this in a way where the architecture and the puzzle ideas have synergy, which is always nice.  In particular, there was one location that, from the beginning of development, was basically a big box with a window cut into it and some puzzles stuffed inside.  For a long time (maybe 2 years!) I was never sure what to do with it, but eventually the architects suggested an idea for that location.  I mocked it up and didn't like it.  They suggested another one.  This one sparked an idea for how to make the structural properties resonate with the puzzle theme, and when I built even just a rough-draft of the building, I found the result to be strong.  Lately we've been finalizing that location too.</p>
<p>So anyway, there are all these spots on the island that represented vague ideas, with puzzles there that were just in rough form, or that weren't even implemented fully, but just served as reminders to do something there.  I've been going through and filling in a bunch of those.  </p>
<p>I have also been working with some other puzzles, which seemed "done enough to ship", and thinking hard about how to make them better.  Braid benefited from a lot of this kind of attention -- a lot of games would have shipped with just early versions of the puzzles in that game, considering them to be just fine; but the more I worked with the puzzles in Braid, the more I found better, simpler, more-to-the-point versions of them.  The same thing is happening here (though The Witness is a much bigger, more-complicated game, so sometimes it is challenging to get to that same kind of clarity.)</p>
<p>With regard to the visuals (modeling and texturing), things have been coming along nicely as well.  Pretty soon a high-profile game magazine will publish some screenshots of one of the most-finished areas of the game, showing the look we are targeting and giving a strong hint of what the game will be like stylistically.  When the magazine is out there we will link it here.</p>
<p><em>(This has not been a particularly coherent update; just wanted to let you all know what is up!)</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/11/update-2/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>Designing to Reveal the Nature of the Universe</title>
		<link>https://the-witness.net/news/2011/11/designing-to-reveal-the-nature-of-the-universe/</link>
					<comments>https://the-witness.net/news/2011/11/designing-to-reveal-the-nature-of-the-universe/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 03 Nov 2011 05:58:09 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Other Games]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1338</guid>

					<description><![CDATA[This talk was presented by Jonathan Blow and Marc ten Bosch at Indiecade on October 7, 2011. Any system of interactivity can of course be explored: If X happens, what are the consequences? What are all the ways in which pattern Y expresses itself, and to what do those expressions …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/11/designing-to-reveal-the-nature-of-the-universe/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>This talk was presented by Jonathan Blow and Marc ten Bosch at Indiecade on October 7, 2011.</p>
<p><center><br />
<iframe width="420" height="315" src="http://www.youtube.com/embed/OGSeLSmOALU" frameborder="0" allowfullscreen></iframe></center></p>
<p><em>Any system of interactivity can of course be explored: If X happens, what are the consequences? What are all the ways in which pattern Y expresses itself, and to what do those expressions lead? By inspecting the structure of a system in this way, we can find the core ideas of the system, and see how those ideas illustrate fundamental truths of our universe. We present a game design aesthetic that values looking for systems that express these truths in the cleanest possible way. We explain how this is different from more-traditional combinatoric design techniques; we show examples from our games and describe a method for applying the aesthetic in general.</em></p>
<p><a href="http://www.indiecade.com/index.php/2011/Conference_videos/">Here's a link to the Indiecade page, on which there's also a presentation by Richard LeMarchand, and more to come.</a></p>
<p><em>Thanks very much to <a href="http://portfolio.idaimages.com/">Ida C. Benedetto</a> for recording the talk!</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/11/designing-to-reveal-the-nature-of-the-universe/feed/</wfw:commentRss>
			<slash:comments>71</slash:comments>
		
		
			</item>
		<item>
		<title>Saying hi.</title>
		<link>https://the-witness.net/news/2011/10/saying-hi/</link>
					<comments>https://the-witness.net/news/2011/10/saying-hi/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Tue, 01 Nov 2011 06:05:31 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1335</guid>

					<description><![CDATA[Hi everyone. We haven't posted anything in a while, but this is just because we have been working intensively on the game. These days we are doing a lot of working with the architects, integrating their designs with the gameplay. The result is coming out really well -- the architectural …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/10/saying-hi/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Hi everyone.  We haven't posted anything in a while, but this is just because we have been working intensively on the game.  These days we are doing a lot of working with the architects, integrating their designs with the gameplay.  The result is coming out really well -- the architectural designs add tremendously to the feeling of being in a world, and they also give us opportunities to make the puzzles richer.  So as we do this the game just keeps getting bigger and more sophisticated.</p>
<p>I'll post something more concrete before too long, but I wanted to at least say something, since it's been a while.</p>
<p>Team-wise, we have just hired two people (a 3D artist and a programmer), and we plan to hire another programmer as well, once his visa clears and he can get into the country.  This is a pretty big staffing-up, percentage-wise, and will allow us to make things quite nice.  The new folks will be starting over the next couple of months (they need to wind down the things they are working on currently!)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/10/saying-hi/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>A pleasant lightmapping update</title>
		<link>https://the-witness.net/news/2011/09/a-pleasant-lightmapping-update/</link>
					<comments>https://the-witness.net/news/2011/09/a-pleasant-lightmapping-update/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 07 Sep 2011 22:22:16 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1317</guid>

					<description><![CDATA[It's been a little bit since the last post. We have been busy doing a lot of good things with the game. Here's one of them: Ignacio just got back from vacation and implemented a simple lightmap encoding idea that improves the color resolution of our lightmaps, removing banding, like …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/09/a-pleasant-lightmapping-update/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>It's been a little bit since the last post.  We have been busy doing a lot of good things with the game.  Here's one of them: Ignacio just got back from vacation and implemented a simple lightmap encoding idea that improves the color resolution of our lightmaps, removing banding, like so:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/09/before_after.jpg"><img class="aligncenter size-medium wp-image-1318" title="before_after" src="https://the-witness.net/news/wp-content/uploads/2011/09/before_after-300x168.jpg" alt="" width="300" height="168" /></a></p>
<p>The difference is not too pronounced in this scene, but with smoother-colored textures it becomes a lot more obvious (and I do want to use more smoother-colored textures, art-direction-wise!)</p>
<p>The situation is, the lightmaps are HDR (for some definition of "high"), so we needed a way to encode those values reasonably into a bitmap.  We were using RGBM where M is just an overall brightness factor; you read RGB from the texture then multiply by M to get the output color.  We used to just encode this naively, but the problem is, when M is less than 1 then it actually kills precision in your RGB, so the solution is, well, don't ever let M go below 1; just clamp it.  This is not rocket science and in fact is the kind of thing that is a little funny, as one starts wondering why we didn't think of that a long time ago, but hey, that's how it is sometimes.  The results made me happy, though, so I am posting them.</p>
<p>The improved image quality may enable us to have higher dynamic range throughout the game (this is probably something we will evaluate later on), which would be very nice!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/09/a-pleasant-lightmapping-update/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>How to program independent games</title>
		<link>https://the-witness.net/news/2011/06/how-to-program-independent-games/</link>
					<comments>https://the-witness.net/news/2011/06/how-to-program-independent-games/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 23 Jun 2011 06:16:32 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Ill-Advised Rants]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1004</guid>

					<description><![CDATA[On April 1, 2011, I was invited by UC Berkeley's Computer Science Undergraduate Association to come give a speech. This was pretty interesting because that's where I went to school, and I was once a member of the CSUA. I approached it this way: if I were going back to …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/06/how-to-program-independent-games/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>On April 1, 2011, I was invited by UC Berkeley's Computer Science Undergraduate Association to come give a speech. This was pretty interesting because that's where I went to school, and I was once a member of the CSUA. I approached it this way: if I were going back to speak to my undergraduate self, what would I say to help him be most effective at making video games, programming-wise?</p>
<p>The talk's about 38 minutes long, with about 40 minutes of Q&amp;A afterward. Here's a slideshow:</p>
<div>
<div style="display: block; overflow: hidden; width: 400px; padding-top: 4px; padding-bottom: 2px; font-size: 14px; font-family: Verdana, Arial, sans-serif; text-align: center;"><p><a href="https://www.youtube.com/watch?v=JjDsP5n2kSM"><img src="https://img.youtube.com/vi/JjDsP5n2kSM/2.jpg"></a></p>
<p><a href="https://www.youtube.com/watch?v=JjDsP5n2kSM">Click here to view the video on YouTube</a>.</p>
</div>
</div>
<p>If the above embedded player doesn't work for you, or you prefer to download the files directly, here they are:</p>
<p><a href="https://number-none.com/blow/slides/CSUA%20talk.mp3">audio track</a><br />
<a href="https://number-none.com/blow/slides/CSUA%20talk.ppt">slides (ppt format)</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/06/how-to-program-independent-games/feed/</wfw:commentRss>
			<slash:comments>108</slash:comments>
		
		<enclosure url="https://number-none.com/blow/slides/CSUA%20talk.mp3" length="72783027" type="audio/mpeg" />

			</item>
		<item>
		<title>Witness Trees</title>
		<link>https://the-witness.net/news/2011/06/witness-trees/</link>
					<comments>https://the-witness.net/news/2011/06/witness-trees/#comments</comments>
		
		<dc:creator><![CDATA[sgalvin]]></dc:creator>
		<pubDate>Fri, 17 Jun 2011 23:01:19 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Art]]></category>
		<category><![CDATA[Trees]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=951</guid>

					<description><![CDATA[Hi, I'm Shannon and this in my first blog post about The Witness. I'm currently the only 3D artist working on the game and this post is about game trees... both the ones I'm making and game trees  in general. I've worked on trees for games over the years, and …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/06/witness-trees/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Hi, I'm Shannon and this in my first blog post about The Witness. I'm currently the only 3D artist working on the game and this post is about game trees... both the ones I'm making and game trees  in general.</p>
<p>I've worked on trees for games over the years, and I've come to a conclusion: There's no good way to make them currently. Trees reject the idea of low poly versions of themselves by their very nature, and what you're left with is many unsatisfactory ways of making them. It's up to the artist to pick which one of these techniques to use and to do their best to make it work. That choice depends on a lot of things. Does it have to be real-time, or can it be pre-rendered? Where will the player be when he sees the tree? Up close, far away, underneath, from above, or (in the worst case) all of these? Will there be a few trees or a forest of them? Then there's the engine constraints.  Overdraw, poly counts, texture space, LOD systems, lighting and light maps; all these affect how the trees need to be created. And none of that is even scratching the surface on the style you want the trees to have.</p>
<p>Still, I like a challenge as much as the next person.</p>
<p><a rel="attachment wp-att-952" href="https://the-witness.net/news/2011/06/witness-trees/trees-01/"><img class="size-medium wp-image-952 aligncenter" src="https://the-witness.net/news/wp-content/uploads/2011/06/trees-01-300x182.jpg" alt="" width="300" height="182" /></a></p>
<p>Here's an early visual mockup of the game that contains some trees. I didn't actually make this, but it did give me some direction is where to go. As you can see, the trees are very colorful and full of volume. I wasn't sure how close I could get to this, but I was going to give it a try. The problem with most low-poly game trees is that they are made with large sheets of polygons with branch and bough textures on them...and while this is certainly a way of making game trees, they usually can't be considered volumetric.</p>
<p>The current trees I have right now started from a lucky accident. Early on the engine couldn't handle alpha maps, so I want to make a bough structure that would look vaguely leafy without being too many polys and without using opacity maps. That's how I came up with this.</p>
<p><a rel="attachment wp-att-953" href="https://the-witness.net/news/2011/06/witness-trees/trees-02/"><br />
</a><a rel="attachment wp-att-954" href="https://the-witness.net/news/2011/06/witness-trees/trees-02-2/"><img class="aligncenter size-large wp-image-954" src="https://the-witness.net/news/wp-content/uploads/2011/06/trees-021-512x213.jpg" alt="" width="512" height="213" /></a></p>
<p>It's basically a ton of triangles sitting in a bowl. The bowl is there to simplify the bottom and hide the triangle nature of the triangles. It worked fine for the time I needed it. Recently I started adding a bunch of trees to the world and I wanted something fairly lightweight for even the large trees (the one I had done just before that was 40,000 polys, which was way too big). So I went to the old non-opacity tree, added some opacity maps and tried it out. And, surprisingly, it worked really well. It was giving me a volume I didn't expect, and it looked really good at a distance.</p>
<p><a rel="attachment wp-att-955" href="https://the-witness.net/news/2011/06/witness-trees/trees-03/"><img class="aligncenter size-large wp-image-955" src="https://the-witness.net/news/wp-content/uploads/2011/06/trees-03-512x327.jpg" alt="" width="512" height="327" /></a></p>
<p>Not only that, I took a look at them with only the lightmaps on and the structure looked really nice...especially the branches underneath.</p>
<p><a rel="attachment wp-att-956" href="https://the-witness.net/news/2011/06/witness-trees/trees-04/"><img class="aligncenter size-large wp-image-956" src="https://the-witness.net/news/wp-content/uploads/2011/06/trees-04-512x318.jpg" alt="" width="512" height="318" /></a></p>
<p>They were still too heavy though, being 12 thousand polys. Worse, they looked really bad up close and you could see that, what read as a nice, thick foliage from a distance, was really a mess of triangles.</p>
<p><a rel="attachment wp-att-957" href="https://the-witness.net/news/2011/06/witness-trees/trees-05/"><img class="aligncenter size-large wp-image-957" src="https://the-witness.net/news/wp-content/uploads/2011/06/trees-05-415x384.jpg" alt="" width="415" height="384" /></a></p>
<p>So the past few days I've been trying to make the trees look better from a close distance and be lower poly without losing what I liked about the previous ones. After a bit of struggle, I got something that seems to do the trick. Ignacio helped a lot, making a shader that made polys disappear when they became too edge on to the camera, which eliminated many ugly artifacts. The foliage is half the polys of the other trees, plus it looks a lot better close up. Here's a close shot of it, plus a comparison shot with an older tree.</p>
<p><a rel="attachment wp-att-960" href="https://the-witness.net/news/2011/06/witness-trees/trees-06-2/"><img class="aligncenter size-large wp-image-960" src="https://the-witness.net/news/wp-content/uploads/2011/06/trees-061-465x384.jpg" alt="" width="465" height="384" /></a></p>
<p><a rel="attachment wp-att-962" href="https://the-witness.net/news/2011/06/witness-trees/trees-07-3/"><img class="aligncenter size-large wp-image-962" src="https://the-witness.net/news/wp-content/uploads/2011/06/trees-072-512x316.jpg" alt="" width="512" height="316" /></a></p>
<p>I still have a bunch of other ideas I want to add to these to make them look better, but I think we're on the right track to getting trees that really do have a nice amount of volume and harken back to the early mockups.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/06/witness-trees/feed/</wfw:commentRss>
			<slash:comments>25</slash:comments>
		
		
			</item>
		<item>
		<title>Thinking about color</title>
		<link>https://the-witness.net/news/2011/06/thinking-about-color/</link>
					<comments>https://the-witness.net/news/2011/06/thinking-about-color/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 01 Jun 2011 23:45:22 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=889</guid>

					<description><![CDATA[We've known for a long time that we wanted some kind of color grading to happen in the postprocessing for The Witness; recently we started thinking about what that should be. Shannon wanted to try having colored shadows, as painters often do. We considered different ways of doing this; the …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/06/thinking-about-color/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>We've known for a long time that we wanted some kind of color grading to happen in the postprocessing for The Witness; recently we started thinking about what that should be.  Shannon wanted to try having colored shadows, as painters often do.  We considered different ways of doing this; the "right way" to do it would involve keeping more data in offscreen buffers than we currently do, which could be expensive, but is definitely at least a hassle if you're just playing around with ideas.  So instead, we decided to play around with the ambient light color: in shadow, the color of the ambient light is going to be a large influence on the perceived color of the surface, whereas outside of shadow, the color of the sun or light source will dominate, so it can be functionally pretty close to having colored shadows.</p>
<p>But we also figured, hey, why not play around with the color of sunlight as well?  The idea is that as you walk around in the game, the color of the sun and ambient light will interpolate as you move.  We haven't hooked it up that way yet; what you see below is just done by tweaking global variables in the game.  Well be doing more experiments in this direction...</p>
<p><P><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/06/newColor-brownside.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2011/06/newColor-brownside-300x84.jpg" alt="" title="newColor-brownside" width="300" height="84" class="aligncenter size-medium wp-image-911" /></a></p>
<p><P><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/06/newColor-gold-side.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2011/06/newColor-gold-side-300x84.jpg" alt="" title="newColor-gold-side" width="300" height="84" class="aligncenter size-medium wp-image-912" /></a></p>
<p><P><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/06/newColor-green-side.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2011/06/newColor-green-side-300x84.jpg" alt="" title="newColor-green-side" width="300" height="84" class="aligncenter size-medium wp-image-913" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/06/thinking-about-color/feed/</wfw:commentRss>
			<slash:comments>44</slash:comments>
		
		
			</item>
		<item>
		<title>Themed areas</title>
		<link>https://the-witness.net/news/2011/05/themed-areas/</link>
					<comments>https://the-witness.net/news/2011/05/themed-areas/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sat, 28 May 2011 01:47:53 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=875</guid>

					<description><![CDATA[As mentioned in the previous couple of updates, we are starting to take steps toward establishing the visual style of the game. This past week while I was on vacation, Shannon did a bunch of world editing, with the primary goal being to draft out a few areas of the …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/05/themed-areas/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>As mentioned in the previous couple of updates, we are starting to take steps toward establishing the visual style of the game.  This past week while I was on vacation, Shannon did a bunch of world editing, with the primary goal being to draft out a few areas of the world that have different color schemes, as concepted in <a href="https://the-witness.net/news/2011/05/landscape-color-studies/">this post</a>.  Here's how the island looks with all the new trees, rocks, etc added:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.27__time_18_34_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.27__time_18_34_n01-300x168.png" alt="" title="shot_2011.05.27__time_18_34_n01" width="300" height="168" class="aligncenter size-medium wp-image-877" /></a></p>
<p>Much denser and more visually interesting; it's starting to look like maybe a good game!</p>
<p>Here are some close-ups of different areas now.</p>
<p>Autumnal:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.27__time_18_35_n03.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.27__time_18_35_n03-300x168.png" alt="" title="shot_2011.05.27__time_18_35_n03" width="300" height="168" class="aligncenter size-medium wp-image-879" /></a></p>
<p>Desert:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.27__time_18_35_n04.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.27__time_18_35_n04-300x168.png" alt="" title="shot_2011.05.27__time_18_35_n04" width="300" height="168" class="aligncenter size-medium wp-image-880" /></a></p>
<p>Foresty (there is a lightmapping problem on some of these trees so they are brighter than they should be!):</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.27__time_18_34_n02.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.27__time_18_34_n02-300x168.png" alt="" title="shot_2011.05.27__time_18_34_n02" width="300" height="168" class="aligncenter size-medium wp-image-878" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/05/themed-areas/feed/</wfw:commentRss>
			<slash:comments>31</slash:comments>
		
		
			</item>
		<item>
		<title>More island color experiments; shadow update</title>
		<link>https://the-witness.net/news/2011/05/more-island-color-experiments-shadow-update/</link>
					<comments>https://the-witness.net/news/2011/05/more-island-color-experiments-shadow-update/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 18 May 2011 23:20:42 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=859</guid>

					<description><![CDATA[Until now, we had been using Uncharted-2-style blend mapping to color our terrain. This is a way of using a low-resolution texture map to control the blending of high-resolution textures; this gives you the ability to maintain fine pixel-by-pixel detail while also blending between multiple textures in order to create …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/05/more-island-color-experiments-shadow-update/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Until now, we had been using Uncharted-2-style blend mapping to color our terrain.  This is a way of using a low-resolution texture map to control the blending of high-resolution textures; this gives you the ability to maintain fine pixel-by-pixel detail while also blending between multiple textures in order to create larger-scale patterns.  (This method is in effect in earlier screenshots like <a href="https://the-witness.net/news/2011/04/whew/">this one</a>, though keep in mind that we were not using it very seriously in a whole-island kind of way yet.  For some idea of what the blend mapping looks like closer-in, see <a href="https://the-witness.net/news/2011/02/grassing-it-up/">this</a> or <a href="https://the-witness.net/news/2011/02/a-glimpse-into-the-terrain-design-process/">this</a>.)</p>
<p>But now we are thinking about how to create colorful scenes, like in <a href="https://the-witness.net/news/2011/05/landscape-color-studies/">the previous post</a>, and this style of blend-mapping did not seem like a very good idea.  In order to create gradients across the scene, we would need to have a lot of blend layers; this would be slow and use a lot of texture memory (since now we are storing a lot of individual blend maps). Even once we did that, it would be laborious to control, and it's unclear that it would look good.</p>
<p>Ignacio mentioned that the Wolfire guys were just dropping one color map across their whole terrain.  That seemed like a good idea to me -- I have done that before, but in contexts where we were trying to really crank up the resolution to levels that were ridiculous at the time, like 8192x8192 texture maps back in 2001.  Rather than doing that, the idea now is to just use what is a reasonable-sized texture on a modern machine, and see what it looks like.  So Shannon painted a 2048x2048 texture of the island (of which we are only really using less than half right now) and here's how it looks from up high:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.18__time_12_39_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.18__time_12_39_n01-300x168.png" alt="" title="shot_2011.05.18__time_12_39_n01" width="300" height="168" class="aligncenter size-medium wp-image-860" /></a></p>
<p>Immediately this strikes me as much nicer, and much more in-tune with the art direction we want for the game.  The buildings and other meshes now stick out like sore thumbs, but that is just what happens when you improve only a part of the scene.  We'll be working on this.</p>
<p>Here's a scene from closer in:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.18__time_12_40_n02.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.18__time_12_40_n02-300x168.png" alt="" title="shot_2011.05.18__time_12_40_n02" width="300" height="168" class="aligncenter size-medium wp-image-861" /></a></p>
<p>As you can see, we have less detail close-up on the ground; things look a bit blurry.  However, the colors are a lot better, and I think if we can adapt this scheme into something that permits sharper details up close, we will be able to make something that has a lot of character and looks special.  In these shots, we are still using the old blend map system to tile high-detail normal maps across the terrain; that helps, but by itself it's not enough.  (In recent videos for Overgrowth, <a href="http://blog.wolfire.com/2011/05/Overgrowth-a131-video-changelog">like this one</a>, you can see that they are doing something that provides close-up details, maybe just intensity maps that are being modulated by the color map).  So we'll keep working on this and see how it goes.</p>
<p>Meanwhile, Ignacio has been revising the shadow map rendering.  We used to have very speckly shadow maps, as I was using a 4-sample Poisson disc to sample the shadow map.  Ignacio recently switched this to a Gaussian that has more taps, then applied some math tricks to reduce the number of taps.  This results in softer shadows:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.18__time_12_42_n03.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.18__time_12_42_n03-300x168.png" alt="" title="shot_2011.05.18__time_12_42_n03" width="300" height="168" class="aligncenter size-medium wp-image-862" /></a></p>
<p>At some angles, shadow map jaggies still show up pretty clearly:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.18__time_12_42_n04.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/shot_2011.05.18__time_12_42_n04-300x168.png" alt="" title="shot_2011.05.18__time_12_42_n04" width="300" height="168" class="aligncenter size-medium wp-image-863" /></a></p>
<p>This is something we might work around in the final game by changing the scene when this happens!  Or, it's possible the shadows will be modified further so that they look smoother in cases like this.  Who can say?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/05/more-island-color-experiments-shadow-update/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
		<item>
		<title>Landscape color studies</title>
		<link>https://the-witness.net/news/2011/05/landscape-color-studies/</link>
					<comments>https://the-witness.net/news/2011/05/landscape-color-studies/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sat, 14 May 2011 00:25:29 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=852</guid>

					<description><![CDATA[Now that the gameplay is further along, we are starting to think more seriously about how the game is going to look. Shape and color are very important thematically; one idea that's been floating around for a while is that different locations on the island would have very different color …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/05/landscape-color-studies/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Now that the gameplay is further along, we are starting to think more seriously about how the game is going to look.  Shape and color are very important thematically; one idea that's been floating around for a while is that different locations on the island would have very different color palettes associated with them, and that this would help cement the locations' individual personalities.  (This is not in principle a new idea; games often do this kind of thing, but I think the way we do it will make it special).</p>
<p>Shannon did a few color studies by taking screenshots of the game world as it stands today, then painting over them to build scenes with different palettes.  Here's what he came up with:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/05/colors-gold.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/colors-gold-300x188.jpg" alt="" title="colors-gold" width="300" height="188" class="aligncenter size-medium wp-image-854" /></a><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/05/colors-brown.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/colors-brown-300x168.jpg" alt="" title="colors-brown" width="300" height="168" class="aligncenter size-medium wp-image-853" /></a><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/05/colors-green.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2011/05/colors-green-300x169.jpg" alt="" title="colors-green" width="300" height="169" class="aligncenter size-medium wp-image-855" /></a></p>
<p>I think it looks quite nice.  Don't assume much based on the painterly style of these images; they were intentionally done at a low level of detail, so that we could quickly get a feel for the colors.  We don't know yet exactly what the rendering style of the game will be in the end (but that is something we will start working on soon!)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/05/landscape-color-studies/feed/</wfw:commentRss>
			<slash:comments>34</slash:comments>
		
		
			</item>
		<item>
		<title>Whew!</title>
		<link>https://the-witness.net/news/2011/04/whew/</link>
					<comments>https://the-witness.net/news/2011/04/whew/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 25 Apr 2011 05:55:53 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=835</guid>

					<description><![CDATA[In a previous post I mentioned that we had done a bunch of playtesting at the GDC. As a result of that playtesting, I ended up heavily restructuring some areas of the game world. On top of that, there were a few areas that had been incomplete at that time, …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/04/whew/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>In a <a href="https://the-witness.net/news/2011/03/gdc-playtesting-the-island-shrinks-again/">previous post</a> I mentioned that we had done a bunch of playtesting at the GDC.  As a result of that playtesting, I ended up heavily restructuring some areas of the game world.  On top of that, there were a few areas that had been incomplete at that time, and I felt it was important to  get those finished.  So after the GDC I entered a period of very hard work to get all this stuff done, and it is now done!  Here is how the island is looking now:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/04/shot_2011.04.24__time_22_27_n01.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/04/shot_2011.04.24__time_22_27_n01-512x288.png" alt="" title="shot_2011.04.24__time_22_27_n01" width="512" height="288" class="aligncenter size-large wp-image-836" /></a></p>
<p>The puzzle count is now 285.</p>
<p>This means I am getting closer to my Gameplay Complete milestone.  The bulk of the game design is now more-or-less there, in the sense that you can go and solve all the puzzles and they are basically the body of puzzles that will be there for the final game (though in the final game they will be refined, and more will be added -- but if we had to ship with only the puzzles that are in there now, we could do that, and it would be a good game).  However, there's no endgame or winning condition, so I will be working on this next.  </p>
<p>I think the endgame is going to be a bunch of work -- the original idea was ambitious, and I need to do a bunch of redesign on it since the game as a whole has evolved since the time the endgame was originally conceived.  We'll see how it goes.</p>
<p>The visuals are still placeholder.  In a couple of weeks we have some architects coming in to start designing buildings and terrain; at that time our production pipeline will change and we'll be moving a little closer to "the real visuals".</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/04/whew/feed/</wfw:commentRss>
			<slash:comments>39</slash:comments>
		
		
			</item>
		<item>
		<title>GDC Playtesting; the island shrinks again&#8230;</title>
		<link>https://the-witness.net/news/2011/03/gdc-playtesting-the-island-shrinks-again/</link>
					<comments>https://the-witness.net/news/2011/03/gdc-playtesting-the-island-shrinks-again/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sat, 26 Mar 2011 07:53:51 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=826</guid>

					<description><![CDATA[This month was time for the annual Game Developers Conference in San Francisco [this has been its official name for a while now: the completely ungrammatical "Game Developers Conference". Whatever.] We used this opportunity to have game designer friends come and playtest The Witness. We did somewhere between 40 and …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/03/gdc-playtesting-the-island-shrinks-again/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>This month was time for the annual Game Developers Conference in San Francisco [this has been its official name for a while now: the completely ungrammatical "Game Developers Conference".  Whatever.]  We used this opportunity to have game designer friends come and playtest The Witness.  We did somewhere between 40 and 50 hours of playtesting that week, and it was all very useful. Thanks to everyone who came by and played!</p>
<p>As a result of these sessions it immediately became clear how to redesign some of the areas to improve pacing.  So I started radically restructuring three of the major areas, as well as rearranging the relative positions of areas on the map.  That process isn't done yet, but it is starting to converge (just one more area left to redesign).  I am very happy with the two areas already redesigned; they are obviously far better than the original versions.  It feels very rewarding when you feel good about a game already, and then do something to improve it so much.</p>
<p>Also, I've shrunk the island again.  Here's what it looks like now:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/03/island_shot.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2011/03/island_shot-512x288.jpg" alt="" title="island_shot" width="512" height="288" class="aligncenter size-large wp-image-827" /></a></p>
<p>The current puzzle count is 275.</p>
<p>Also, <a href="https://the-witness.net/news/2011/03/jobs/">we are hiring</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/03/gdc-playtesting-the-island-shrinks-again/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
			</item>
		<item>
		<title>Grassing it up&#8230;</title>
		<link>https://the-witness.net/news/2011/02/grassing-it-up/</link>
					<comments>https://the-witness.net/news/2011/02/grassing-it-up/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sun, 27 Feb 2011 06:05:14 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=807</guid>

					<description><![CDATA[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 …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/02/grassing-it-up/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>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, it is starting to be kind-of reasonable, so to spruce up the game a little bit for next week's conference, I started using grass willy-nilly around the world.  (You may have seen a little bit of grass creep into earlier screenshots, but prior to today it had been confined to very small areas of the island).</p>
<p>Here's what it looks like now:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/02/grass.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2011/02/grass-512x288.jpg" alt="" title="grass" width="512" height="288" class="aligncenter size-large wp-image-808" /></a></p>
<p>It does not look shipping-quality, but then, almost nothing in the game does!  As the first results obtained by just slapping some pre-existing grass meshes down on the terrain without trying too hard, I find it highly encouraging.</p>
<p>Note that grass doesn't cast shadows right now.  There are two reasons for that: rendering speed and aliasing of the shadow map.  I suspect we will try to make grass cast shadows before we ship, though, and if we make something good happen there, I think it will really boost the visual quality.</p>
<p>The one piece of code that pushed the grass over the threshold into general usability is that it now has the ability to sample terrain blend maps.  (The terrain uses a blend shader, where a non-visible blend texture map controls the degree of mixing of different terrain materials.  This is becoming a common thing in 3D games; Uncharted 2 and Crysis 2 do it, among others.)  The grass can now peek at the blend map and reduce its density in areas of particular blend values, which is why in this screenshot that path going up the hill is free of grass.  This tremendously reduces the amount of manual tweaking required to make the grass not do obviously-bad things.</p>
<p>However, the grass doesn't check for buildings yet, which means if you place a field of grass across the area of a building, the grass will probably stick up through the floor inside the building!  Fixing that is next on my to-do list, but it involves a lot of raycasting, so hopefully it doesn't make grass placement too slow.</p>
<p>In the future I plan to try using this same "grass" system for other kinds of scattered ground objects (fallen leaves, twigs, small rocks, etc).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/02/grassing-it-up/feed/</wfw:commentRss>
			<slash:comments>38</slash:comments>
		
		
			</item>
		<item>
		<title>A glimpse into the terrain design process.</title>
		<link>https://the-witness.net/news/2011/02/a-glimpse-into-the-terrain-design-process/</link>
					<comments>https://the-witness.net/news/2011/02/a-glimpse-into-the-terrain-design-process/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 14 Feb 2011 03:15:52 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=784</guid>

					<description><![CDATA[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 …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/02/a-glimpse-into-the-terrain-design-process/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><em>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!</em></p>
<p><em><br />
</em></p>
<p>I was talking to David Hellman about the game the other day, and he was asking when the island was going to become less like a flat plane where you can just walk to any destination from anywhere else.</p>
<p>It's been on my to-do list for a while to add more topology to the island.  That week I had been working on an area full of puzzles, and I wanted the buildings that define this area to have more of a purpose than they currently do; a topological purpose seemed like the right thing.</p>
<p>So I figured I'd add a canyon, and the building containing these puzzles would also serve as a bridge across the canyon.</p>
<p>The natural way to build the canyon in this engine is to shape it out generally with terrain control points, and then make the walls steep by putting mesh objects in there (so that you can't walk up them, and so that the walls of the canyon won't look super-distorted the way heightfield terrains usually do when there are steep slopes.)</p>
<p>Here was the first cut at it:</p>
<p><img class="aligncenter size-large wp-image-789" title="shot_2011.02.13__time_16_21_n01 copy" src="https://the-witness.net/news/wp-content/uploads/2011/02/shot_2011.02.13__time_16_21_n01-copy-512x288.jpg" alt="" width="512" height="288" /></p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/02/Untitled-2-copy.jpg"></a></p>
<p><span id="more-784"></span></p>
<p>As you can see, there are a lot of weird ripples and curves happening there.  This is what signal processing people might call "ringing".  What's happening is that the Kriging system that we are using for terrain modeling is always trying to reconstruct a smooth function, but what we are trying to build here is a discontinuous function (or else a function so steep that it has a lot of high frequencies in it).</p>
<p>There are a number of ways that one might fix this, but the cheap and hacky one, which would work not only for Kriging but for any other terrain modeling stuff we might stick in in the future, is to add the notion of separating planes that represent discontinuities in the terrain.  When evaluating the height of the terrain at any point, we just ignore any control points that are on the other side of the separating plane.</p>
<p>Adding discontinuities has been on my to-do list since last year when Kriging was added to the engine.  It was pretty obvious that it would be needed eventually, but in the spirit of getting things done and not rat-holing on technology, I chose to put it off for as long as possible.  But it makes sense that if we are starting to add more topology to the island, we are going to want to have more steep places, and so it's time to add this.</p>
<p>(We've already had this steepeness problem before, though: if you look at this plateau that is near the camera in our regular island snapshots, you'll see that the whole thing is made out of mesh objects, rather than terrain; we did this in order to avoid this very same ringing problem:)</p>
<p><img class="aligncenter size-large wp-image-790" title="shot_2011.02.13__time_16_23_n02 copy" src="https://the-witness.net/news/wp-content/uploads/2011/02/shot_2011.02.13__time_16_23_n02-copy-512x288.jpg" alt="" width="512" height="288" /></p>
<p>It didn't take long to add discontinuity entities into the editor; here's how they are represented:</p>
<p><span style="color: #0000ee; -webkit-text-decorations-in-effect: underline;"><img class="aligncenter size-large wp-image-787" style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="Untitled-1 copy" src="https://the-witness.net/news/wp-content/uploads/2011/02/Untitled-1-copy-512x288.jpg" alt="" width="512" height="288" /></span></p>
<div><span style="color: #0000ee; -webkit-text-decorations-in-effect: underline;"><br />
</span></div>
<p>To start with, I just used a really dumb heuristic to decide when control points should be excluded.  When we use this, here's the result:</p>
<p><img class="aligncenter size-large wp-image-786" style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="shot_2011.02.13__time_17_41_n03 copy" src="https://the-witness.net/news/wp-content/uploads/2011/02/shot_2011.02.13__time_17_41_n03-copy-512x288.jpg" alt="" width="512" height="288" /><a href="https://the-witness.net/news/wp-content/uploads/2011/02/Untitled-1-copy.jpg"></a></p>
<p>There is still a bunch of heightfield terrain sticking out.  What's going on?  If we look back at our red discontinuity planes, it is clear that there are some terrain sample points inside the canyon that are getting treated as if they were outside:</p>
<p><span style="color: #0000ee; -webkit-text-decorations-in-effect: underline;"><img class="aligncenter size-large wp-image-788" style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="Untitled-2 copy" src="https://the-witness.net/news/wp-content/uploads/2011/02/Untitled-2-copy-512x288.jpg" alt="" width="512" height="288" /></span></p>
<div><span style="color: #0000ee;"><br />
</span></div>
<p>What's going on is that my simple criterion said "if you are on the opposite side of a discontinuity plane from a control point, ignore that control point".  The problem is that I am treating them as infinite planes, so those points that you see, which are in front of one plane, are actually outside a <em>neighboring </em>plane, if you were to extend that plane infinitely.  This is no surprise; I knew it would be a problem, but I am always about implementing the simple thing first and seeing what happens.  But now I need a heuristic that will fix this problem.</p>
<p>One solution would be to combine the discontinuity objects into sequences of points, and then do some more-heuristicky things that may be easier because we have an ordering between the points.  But I don't want to resort to that if I don't have to, because that may make the system less general, and may make it harder to edit.  (Then again it may make it easier to edit, because we have editor support for paths!  But if we want to, we can easily go the other way, from a path down to individual slabs, so it's better to take the most-primitive thing as input if we are able to.)<br />
</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 1882px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="color: #0000ee; -webkit-text-decorations-in-effect: underline;"><img class="aligncenter size-large wp-image-787" style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="Untitled-1 copy" src="https://the-witness.net/news/wp-content/uploads/2011/02/Untitled-1-copy-512x288.jpg" alt="" width="512" height="288" /></span></div>
<p>I added a check that would make discontinuity planes irrelevant if the sample points are closer to the side planes of these very thin slabs than they are to the face planes.  In theory that would at least help, but upon running this, the scene looked almost exactly the same.</p>
<p>Then upon further investigation I found that I was computing totally wrong planes in the Kriging code; I was transforming the coordinates incorrectly, and so the planes were not in fact where the red slabs in the picture would show them to be.  I fixed this:</p>
<div><a href="https://the-witness.net/news/wp-content/uploads/2011/02/shot_2011.02.13__time_19_05_n01-copy.jpg"><img class="aligncenter size-large wp-image-794" title="shot_2011.02.13__time_19_05_n01 copy" src="https://the-witness.net/news/wp-content/uploads/2011/02/shot_2011.02.13__time_19_05_n01-copy-512x288.jpg" alt="" width="512" height="288" /></a></div>
<p>Ahhh, much better.  This seems like it will be good enough for now.  There's still the question of how to seamlessly blend the heightfield terrain into the mesh objects, but that can wait until closer to ship.  For now, it doesn't need to be pretty; it just needs to let us build things of roughly the right shape.</p>
<p><P></p>
<p>The heuristic I use for discarding points is still pretty simplistic and may cause problems.  My hope is that most of those problems can be worked around just by changing the planes a bit.  If that turns out not to be true, a little more work will need to be done here!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/02/a-glimpse-into-the-terrain-design-process/feed/</wfw:commentRss>
			<slash:comments>21</slash:comments>
		
		
			</item>
		<item>
		<title>Adventures in Fisheye Lenses</title>
		<link>https://the-witness.net/news/2011/01/adventures-in-fisheye-lenses/</link>
					<comments>https://the-witness.net/news/2011/01/adventures-in-fisheye-lenses/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 01:32:12 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=729</guid>

					<description><![CDATA[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 …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2011/01/adventures-in-fisheye-lenses/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>During the past couple of weeks, we have been doing some experiments for <em>The Witness</em> 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 <strong>massive spoiler</strong>, so I'll just say it's for a kind of environment-mapped rendering.</p>
<p>The general requirement was that we need to be able to capture a pre-rendered scene with a really wide viewing angle.  At first I was confused about the technical aspects of the problem (hopefully forgivable, since I spend most of my time thinking about gameplay these days, so my tech is a little rusty), so I thought that we might need to have a linear projection in order to solve the specific problem under consideration.  So Shannon made a mock-up scene in 3D Studio MAX and we started making prerenders with increasingly wide camera angles, in order to test our special environment mapping.  Here are three shots of the same scene with fields-of-view of 90 degrees, 120 degrees, and 150 degrees:<br />
<P><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h16m58s53.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h16m58s53-512x384.png" alt="" title="linear_90degrees" width="307" height="269" class="aligncenter size-large wp-image-730" /></a><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h17m22s200.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h17m22s200-512x204.png" alt="" title="linear_120degrees" width="512" height="204" class="aligncenter size-large wp-image-731" /></a><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h19m08s237.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h19m08s237-512x204.png" alt="" title="linear_150degrees" width="512" height="204" class="aligncenter size-large wp-image-732" /></a><br />
<P><br />
<em>(Click on the images to see actual sizes.)</em></p>
<p><span id="more-729"></span></p>
<p>It's clear that as the field of view becomes wider, we can see more of the scene at once, laterally.  This is good for our application, because we want to see as much as possible!  But at the same time, when the angle is wide, objects at the center of the scene appear further away, occupying fewer pixels in the rendered image.  This is bad because it means we only have low-resolution imagery for the most important things in the scene!  <em>(These screenshots are also badly artifacted because for some reason the avi encoder we were using interlaces the output by default, and we couldn't find a way to not interlace, without using a different codec!  Hint to anyone making a video codec, anywhere in the past or future of this universe or any other: <strong>NOBODY LIKES INTERLACING.  IT IS UGLY AND CAUSES A LOT OF PROBLEMS.  DON'T DO IT.  Please do your part to make the world a better place.</strong>)</em></p>
<p>It's around this time that I realized we didn't have to use a linear projection, which was good -- if we can warp the image however we need to, then we can have the important parts of the scene landing really big in the middle of the texture, using lots of pixels, and squeeze the rest of the scene nonlinearly around the edges of the bitmap, using fewer pixels.</p>
<p>A 180-degree fisheye lens seemed like the right tool to do this.  For other reasons that I won't go into, another nice property of the fisheye lens (as opposed to some arbitrary distortion) is that it is physically plausible -- you can mount a fisheye lens onto a physical camera and generate a similar image.</p>
<p>We found some plugins for Mental Ray (a renderer that you can use from Max or Maya) that seemed to do the trick.  Here's the output of one of the plugins we found (this is from <a href="http://pixero.com/downloads_mr.html">Jan Sandstr&ouml;m's JS_fisheye.c</a>, which appears to be a modification of a simple fisheye lens shader in the Mental Ray reference manual):</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h40m09s91.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h40m09s91-384x384.png" alt="" title="JS_fisheye" width="384" height="384" class="aligncenter size-large wp-image-742" /></a></p>
<p>Unfortunately the field of view in this image we saved is less than 180 degrees, which makes it hard to directly compare with the later images, but just look at the basic character of it for now.</p>
<p>At first I assumed that this shader was implementing actual fisheye lens math, though there were no real comments to go on.  Here's the math used in the stripped-down Mental Ray Reference Manual:</p>
<p><code></p>
<pre>
    mi_vector_to_camera(state, &camdir, &state->dir);
    t = state->camera->focal / -camdir.z /
           (state->camera->aperture/2);
    x = t * camdir.x;
    y = t * camdir.y * state->camera->aspect;
    r = x * x + y * y;
    if (r < 1) {
        dir.x = camdir.x * r;
        dir.y = camdir.y * r;
        dir.z = -sqrt(1 - dir.x*dir.x - dir.y*dir.y);
        mi_vector_from_camera(state, &dir, &dir);
        return(mi_trace_eye(result, state, &state->org, &dir));
    }
</pre>
<p></code></p>
<p>(JS_fisheye.c has more parameters but is basically the same thing.)</p>
<p>Essentially, this code takes an input texture coordinate and converts it into a view vector in 3D space.  In order to use the rendered image from within a shader in the game, I need to be able to invert this function: turn it from a view vector into a 2D texture coordinate.  But when I tried to do this, I had all kinds of problems: the math was messy and ugly.  I got the inkling that this shader may not be acting as a physical lens really would, but rather, was a 2D image-warping effect that gives the same general impression as a fisheye lens.</p>
<p>(The reason for thinking this is that light behaves bidirectionally; there's no difference between light moving forward and light moving backward.  So if something is simple when light is going in one direction, it ought to be simple in the other direction too.  If the equation starts looking a lot more complicated, that is sort-of a violation of the way that the physical universe works, mathematically, and so one starts thinking that something is wrong.  That was the intuition I had, anyway.)</p>
<p>Over on <a href="http://wiki.panotools.org/Fisheye_Projection">this page</a> I found a nice reference for the way that a real fisheye lens bends light.  Indeed the equation is very simple (though as it is written on that page, it's not quite in the proper form for us to use).  Based on that, I wrote a new Mental Ray shader that looks like this:</p>
<p><code></p>
<pre>
    mi_vector_to_camera(state, &camdir, &state->dir);
    miScalar x = state->raster_x / state->camera->x_resolution * 2 - 1;
    miScalar y = state->raster_y / state->camera->y_resolution * 2 - 1;
    
    miScalar r2 = x * x + y * y;

    if (r2 < 1) {
        miScalar c = 1 - r2;
        miScalar s = sqrtf(2 - r2);

        dir.x = x * s;
        dir.y = y * s;
        dir.z = -c;  

        mi_vector_from_camera(state, &dir, &dir);
        return mi_trace_eye(result, state, &state->org, &dir);
    }
</pre>
<p></code></p>
<p>Superficially it doesn't look too different from the previous example, but in fact this version refracts light in a physical way and is invertible.  Here's what a render looks like using this lens:<br />
<P><br />
<a href="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h40m39s8.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/01/vlcsnap-2011-01-22-16h40m39s8-384x384.png" alt="" title="vlcsnap-2011-01-22-16h40m39s8" width="384" height="384" class="aligncenter size-large wp-image-743" /></a></p>
<p>As I mentioned, it's hard to compare with the earlier shot because the field-of-view is different (sorry about that), but I think it's evident that the nature of the distortion is fairly different between the two shots.  In our version, it feels milder.</p>
<p>Here's the runtime pixel shader code that inverts it:</p>
<p><code></p>
<pre>
    // (xprime, yprime, zprime) is the view vector in the same space where the environment map was rendered.

    float c = abs(zprime);

    video_uv.xy = float2(xprime, yprime);
    float scale = 1 / sqrt(1 + c);
    video_uv.xy *= scale;

    // Now we have video_uv in [-1, 1]; for [0, 1], scale appropriately.
</pre>
<p></code></p>
<p>It's very simple, and the only real math required is a multiplication by a reciprocal square root (very fast for shaders!)  So that was pleasant.</p>
<p>Once we had these both hooked up and working, the scene rendered perfectly, and we knew that the effect we wanted to create was achievable.  By way of improving it, Ignacio suggested using a cylinder map instead of a fisheye lens, because that is better for this particular shot: we need to render a wide room, and see a lot laterally, but the vertical span is roughly constant and much shorter than the horizontal span.  (The fisheye lens is more general, and we can use it for any scene, but to optimize texture resolution for specific cases, we might go to other things like the cylinder map.  You can think of the cylinder map as being fisheyed along only one axis.)</p>
<p>Here's the cylinder map version of the scene:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2011/01/cylinder_map.png"><img src="https://the-witness.net/news/wp-content/uploads/2011/01/cylinder_map-512x325.png" alt="" title="cylinder_map" width="512" height="325" class="aligncenter size-large wp-image-741" /></a></p>
<p>This is what we are going with for now.  Problem solved, job seemingly well-done.</p>
<p>Ignacio put the cylinder mapping code into the same shader as the fisheye lens, and also added a latitude-longitude distortion.  </p>
<p>Our work was sped up drastically by the fact that we were able to find JS_fisheye.c free on the internet, as well as information for the way a fisheye lens works.  So here's our attempt to give back a little: our final Mental Ray shader and the .mi file that defines the interface for it:<br />
<P><br />
<a href='https://the-witness.net/news/wp-content/uploads/2011/01/witness_fisheye.c'>witness_fisheye.c</a><br />
<a href='https://the-witness.net/news/wp-content/uploads/2011/01/witness_fisheye.mi'>witness_fisheye.mi</a><br />
<P><br />
If you are an experienced graphics programmer asking yourself <em>why the hell didn't they just use a cube map for this</em>, well, there is a very good answer to that, but it involves the spoiler.  You'll see when the game is released!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2011/01/adventures-in-fisheye-lenses/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title>Experiments in Texturing</title>
		<link>https://the-witness.net/news/2010/11/experiments-in-texturing/</link>
					<comments>https://the-witness.net/news/2010/11/experiments-in-texturing/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sat, 06 Nov 2010 02:57:44 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=668</guid>

					<description><![CDATA[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 …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/11/experiments-in-texturing/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Something like a year and a half ago, when I was starting to get serious about making The Witness, I was talking to <a href="http://mollyrocket.com/136">Casey Muratori</a> 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 a bunch of thinking and seeking advice on the right way to do it.</p>
<p>I had been viewing a bunch of online portfolios of 3D modelers (and lamenting the quality of these portfolios) with an eye to hiring someone. Sometimes these portfolios are shown in steps: here's the wireframe, here's the filled-in geometry, here it is with lighting, and here is the final thing after it's been textured.  Casey pointed out something interesting about these that I knew was true as soon as he said it: most of these portfolios look worse than they need to because the texturing ruins them.  When you run a radiosity algorithm on a scene full of unpainted geometry, it has an elegant, sophisticated, scent-of-the-real kind of thing going on; but it is very easy to spoil this sophistication through texturing.  And, it seems, in video games we have developed a tradition of "bad" texturing, whatever that means: unsubtle, unrefined, or just plain ugly.</p>
<p>We're on a low budget here, being an indie game; so not only was it an open question how to solve the Ugly Texturing problem, but we also needed to solve it with relatively little manpower.</p>
<p>I knew that, ultimately, we could just fall back on untextured geometry with lighting, if we had good precomputed lighting.  That's why we spent so much time and effort putting together our lighting system (as has been written about many times in this blog).  The question was, would we stick to vertex colors on most objects, or would we use some kind of texturing?</p>
<p>Early on, we identified a texturing style that would work for human-sized objects and would gel with the gameplay of The Witness.  The style prioritizes color, and tries not to break up the geometry of the object by imposing conflicting details through the texture.  We did some objects like a 1-person boat in this style in order to refine it.  [I'd like to include a screenshot of the boat here to illustrate it, but the boat is messed up right now, so I'll just have to be vague.]</p>
<p>Because that style tries to use the texture map to accentuate the object, the contents of the texture must change with the local neighborhood of the object, which means you can't use tiling textures very much.  This means it would be very expensive to texture something like a big building, since you'd need unique texels everywhere.</p>
<p>Thankfully, the Western game development world has a tradition of developers being very open with their techniques and processes, and communicating with other developers very honestly about what is effective.  (This is not something that one finds elsewhere in the world, and we should work hard to keep that spirit alive because it benefits everyone; but that's a totally separate rant.)  Here's one good example of this kind of information exchange: at the GDC this year, some guys from Naughty Dog gave a talk on the art direction for Uncharted 2 (<a href="http://cmpmedia.vo.llnwd.net/o1/vault/gdc10/slides/Pangilinan_Erick_Uncharted2ArtDirection.pdf">pdf link to their slides here</a>.)  Somewhere around page 220 of this very informative slideshow, they start talking about the blend shaders that they use in order to give more character to buildings and other geometry while still using tiling textures.  The idea is that you interpolate between two (or more) textures with a blend function that fits the shape of your building nicely.  You put some smarts into the interpolation so that it produces something that is visually interesting, rather than the blurry mess you would get via naive interpolation.</p>
<p>For The Witness it seemed like a good idea to use this kind of technique, but in a minimalist way, to create patterns that accentuate the shapes of buildings, and help tie them together visually, without stumbling into the realm of Ugly Texturing.</p>
<p>(There are a lot of reasons for the minimalism; one reason, though, is to provide clarity about what you can interact with, versus what is inert.  Interactive things are colored in a way that makes them stand out in an obvious way.  Think of it as something like what Mirror's Edge did, but in a different way.)</p>
<p>We've started experimenting with these blend shaders; here are some images:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2010/11/one_vs_two_tones.jpg"><img class="aligncenter size-large wp-image-670" title="one_vs_two_tones" src="https://the-witness.net/news/wp-content/uploads/2010/11/one_vs_two_tones-512x384.jpg" alt="" width="512" height="384" /></a></p>
<p>The upper-left shows a scene before we implemented the blend shader for buildings.  In the upper-right, we are using a blend shader that blends the original texture with an alternate one that is a bit darker and rougher (but the difference is a bit subtle, by game standards at least).  Below these images are the same scenes with precomputed lighting mixed in.</p>
<p>It is pretty clear to me that the lighting is actually the biggest ingredient in tying the scene together, but the blend shader is, I think, a good extra kick.  It helps the area feel like there is a little bit of life and history to it (for example, the lighter-colored paths near the puzzle panels in the foreground, which imply that people have been walking that way).  What you see here is not of shipping quality, but I see how we can reach shipping quality by iterating on this style and putting production-level effort into the assets.</p>
<p>Here's a close-up of what the stairway looks like:</p>
<p style="text-align: center;"><a href="https://the-witness.net/news/wp-content/uploads/2010/11/closeups.jpg"><img class="aligncenter size-large wp-image-671" title="closeups" src="https://the-witness.net/news/wp-content/uploads/2010/11/closeups-256x384.jpg" alt="" width="256" height="384" /></a></p>
<p>As you can see, the texture maps have some grain to them; from far away, the grain melts away and the structure is mostly a solid color, accented by lighting.</p>
<p>These experiments are still early yet but I find them very promising.  The plan is that we will continue to hone the style and end up with something very special.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/11/experiments-in-texturing/feed/</wfw:commentRss>
			<slash:comments>19</slash:comments>
		
		
			</item>
		<item>
		<title>About the Blue Mazes</title>
		<link>https://the-witness.net/news/2010/10/about-the-blue-mazes/</link>
					<comments>https://the-witness.net/news/2010/10/about-the-blue-mazes/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 20 Oct 2010 02:20:50 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=640</guid>

					<description><![CDATA[Just after PAX, Stephen Totilo posted a video at Kotaku showing some gameplay of The Witness. This is video from the start of the game and shows some basic stuff, including a set of blue mazes mounted on poles and on walls, that the player must solve to proceed. I've …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/10/about-the-blue-mazes/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Just after PAX, <a href="http://www.kotaku.com.au/2010/09/tantalising-session-with-the-witness-the-next-game-from-the-creator-of-braid/">Stephen Totilo posted a video at Kotaku showing some gameplay of The Witness</a>.  This is video from the start of the game and shows some basic stuff, including a set of blue mazes mounted on poles and on walls, that the player must solve to proceed.</p>
<p><a href="https://the-witness.net/news/2010/10/about-the-blue-mazes/maze/" rel="attachment wp-att-641"><img src="https://the-witness.net/news/wp-content/uploads/2010/10/maze-300x168.png" alt="" title="maze" width="300" height="168" class="aligncenter size-medium wp-image-641" /></a></p>
<p>I've seen mixed reactions to these mazes and to the gameplay shown in the video.  Some people seem to have jumped to the conclusion that the game is going to be about solving simple maze puzzles, and thus not be particularly exciting.</p>
<p>If that thought crosses your mind, all I can ask is to have faith.  I wouldn't make a game about solving a series of rote puzzles.  The footage came from the beginning of the game because we don't want to spoil anything major.  But even this beginning-of-the-game stuff has more to it than meets the eye.</p>
<p>It's like Braid, in a way.  Back before Braid was released, I never made a trailer video for it, because I couldn't come up with a way to show in video form what the game was about.  You can show some rewinding happening, or other funky time stuff, sure, but what is cool about Braid is not the mechanics of those things or how they look on the screen.  What is cool about Braid is what happens in the player's mind during the puzzle-solving process.  The time stuff is the method by which that is implemented, but the rules of time manipulation do not contain the magic.  Watching a video, it's nearly impossible to see the magic.  You have to play the game to see the magic.</p>
<p>The Witness is like that too.  The blue mazes are a major aspect of the game, but they are not the point.  The point is the magic that happens in the player's mind when he understands the subtle things that the mazes are saying -- because the mazes aren't just puzzles, they are lines of communication that aggregate, become more complex and eventually say surprising things.  This can't be seen in a video; you have to play it to have the experience.  The magic is in the player's head, not on the screen.</p>
<p>The only two guys who have played The Witness to completion have said it will be better than Braid when it is done.  I am certainly not going to jump up and down and say "hey this game is better than Braid", or even claim that Braid is good.  But I just want to put that out there as reassurance to those of you who are worried about that gameplay video.  </p>
<p>I have a file with about 80 game ideas in it, most of which would probably make really good games.  But I can only make one game at a time right now, so I had to pick one.  I picked The Witness, even though it more difficult and expensive to make than most of the other ideas, because I was more excited about the core concept of The Witness than about the other 79 ideas.  This is a highly ambitious game that stretches my ability as a game designer to its limit.</p>
<p>So if you don't yet see why the game is ambitious or exciting, please have patience!  We'll be releasing more information as the game comes closer to completion...</p>
<p>And whatever you think about what you've seen so far, I'd like to thank you for your interest in the game!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/10/about-the-blue-mazes/feed/</wfw:commentRss>
			<slash:comments>36</slash:comments>
		
		
			</item>
		<item>
		<title>We showed The Witness secretly at PAX&#8230; in plain sight.</title>
		<link>https://the-witness.net/news/2010/09/we-showed-the-witness-secretly-at-pax/</link>
					<comments>https://the-witness.net/news/2010/09/we-showed-the-witness-secretly-at-pax/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 06 Sep 2010 18:40:43 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=471</guid>

					<description><![CDATA[Chris Hecker, the developer of SpyParty, and Andy Schatz, the developer of Monaco, have been writing about their preparations for a joint exhibit at PAX.  They were keeping a secret, though: there was a secret 3rd partner in the exhibit, and that was The Witness. For all three days of …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/09/we-showed-the-witness-secretly-at-pax/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Chris Hecker, the developer of <a href="http://spyparty.com/" target="_blank">SpyParty</a>, and Andy Schatz, the developer of <a href="http://www.facebook.com/MonacoIsMine" target="_blank">Monaco</a>, have been writing about their <a href="http://www.gamasutra.com/view/feature/6032/monaco_and_spyparty_on_the_road_.php" target="_blank">preparations for a joint exhibit at PAX</a>.  They were keeping a secret, though: there was a secret 3rd partner in the exhibit, and that was <em>The Witness</em>.</p>
<p>For all three days of PAX 2010, <em>The Witness</em> was publicly playable by anyone who came by the booth.  However, it was unmarked and unattended, so it was easy to miss (as many people did; but then, plenty of people played it, too).</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2010/09/witness_table.png"><img class="aligncenter size-medium wp-image-475" title="witness_table" src="https://the-witness.net/news/wp-content/uploads/2010/09/witness_table-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Here's a close-up, with the opening scene of the game, as it silently waits for someone to sit down and play:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2010/09/waiting.jpg"><img class="aligncenter size-medium wp-image-476" title="waiting" src="https://the-witness.net/news/wp-content/uploads/2010/09/waiting-290x300.jpg" alt="" width="290" height="300" /></a></p>
<p>I had several reasons for wanting to show the game this way.  Firstly: At a show full of companies trying to capture your attention and sell you things, I wanted to do something that is subtle, and a surprise -- if you notice it, and decide to investigate, you find something unexpected.</p>
<p>Also, I wanted people to be able to play the game for as long as they want, not feeling pressured to stop playing because of a huge line of antsy people waiting behind them.</p>
<p>Before PAX, only two people had ever played the game; those people were game developers, and the versions they played were very rudimentary.  This was the first time the game had ever been played by general players, and I wanted to see how people would react to it, as honestly as possible.  I didn't want to give them any reason to think that this was a good game, or was by any designer they might have heard of.  So I just left the game running, and would occasionally peek at it from afar to see who was playing and how they were doing.</p>
<p>PAX is a huge show, with tons of stuff to see everywhere; if the game could hold peoples' attention under those conditions, purely on its own merits rather than by hype or pedigree, then I would know that it was really working.</p>
<p>Happily, the game worked very well -- despite the fact that the visuals are still in an early prototype stage.  People tended to play for a long time, and they liked what they played.  Here's a picture from Sunday; these guys played for a long time, perhaps an hour and a half:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2010/09/IMG_0138.jpg"><img class="aligncenter size-medium wp-image-474" title="IMG_0138" src="https://the-witness.net/news/wp-content/uploads/2010/09/IMG_0138-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Some game designers did recognize the game; here's Dylan Fitterer (of <a href="http://www.audio-surf.com/" target="_blank">AudioSurf</a>) playing:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2010/09/IMG_0137.jpg"><img class="aligncenter size-medium wp-image-473" title="IMG_0137" src="https://the-witness.net/news/wp-content/uploads/2010/09/IMG_0137-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://kotaku.com/people/StephenTotilo/" target="_blank">Stephen Totilo of Kotaku</a> recognized the game early, on Friday, and found me camping out on the other side of the booth.  Thankfully, though, he didn't spill the beans.</p>
<p>I am very happy with how this playtest session went.  I am glad I was able to bring a game directly to players, as a surprise.</p>
<p>The common wisdom among game designers is that the first time you put your game in the hands of players, it totally falls apart, and nothing works the way you expected.  Thankfully, that didn't happen here.  The game does work as expected, despite being kind of crazy and experimental, and people enjoy playing it.</p>
<p>All that's left now is just to do all the hard work required to finish the game!</p>
<p><strong>Update: </strong><a href="http://kotaku.com/5631002/a-tantalizing-session-with-the-witness-the-next-game-from-the-creator-of-braid" target="_blank">Stephen Totilo has posted his impressions, along with a gameplay video, at Kotaku</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/09/we-showed-the-witness-secretly-at-pax/feed/</wfw:commentRss>
			<slash:comments>31</slash:comments>
		
		
			</item>
		<item>
		<title>Design Charrette</title>
		<link>https://the-witness.net/news/2010/08/design-charrette/</link>
					<comments>https://the-witness.net/news/2010/08/design-charrette/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 26 Aug 2010 03:59:47 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=463</guid>

					<description><![CDATA[Apparently, "charrette" is French for paste a bunch of stuff all over the walls and eat fast food and think about design ideas until everyone is very tired, as I learned this past Sunday from a group of seasoned architects.  We performed such a charrette in order to start figuring …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/08/design-charrette/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Apparently, "charrette" is French for <em>paste a bunch of stuff all over the walls and eat fast food and think about design ideas until everyone is very tired</em>, as I learned this past Sunday from a group of seasoned architects.  We performed such a charrette in order to start figuring out what the locations in the game are going to be like, architecture-wise.  This photo taken by David Hellman captures the mood very well:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2010/08/photo.jpg"><img class="aligncenter size-medium wp-image-466" title="photo" src="https://the-witness.net/news/wp-content/uploads/2010/08/photo-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>A few of the many, many ideas we looked at:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2010/08/099.jpg"><img class="aligncenter size-medium wp-image-465" title="099" src="https://the-witness.net/news/wp-content/uploads/2010/08/099-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Here's David, looking like he's at the top of his game:</p>
<p><a href="https://the-witness.net/news/wp-content/uploads/2010/08/093.jpg"><img class="aligncenter size-medium wp-image-464" title="093" src="https://the-witness.net/news/wp-content/uploads/2010/08/093-300x225.jpg" alt="" width="300" height="225" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/08/design-charrette/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>The Island Today</title>
		<link>https://the-witness.net/news/2010/08/the-island-today/</link>
					<comments>https://the-witness.net/news/2010/08/the-island-today/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 05 Aug 2010 04:05:42 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=424</guid>

					<description><![CDATA[We are starting to tinker around with the sky (this one is way too dark). Also, moving around a bunch of locations and adding some new ones. I'm doing a couple of weeks' worth of serious map organization / reorganization in order to get the game to a point where …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/08/the-island-today/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p><P><br />
<a href="https://the-witness.net/news/wp-content/uploads/2010/08/shot_2010.08.04__time_20_08_n01.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2010/08/shot_2010.08.04__time_20_08_n01-300x192.jpg" alt="The Witness: Island Snapshot" title="The Witness: Island Snapshot" width="300" height="192" class="aligncenter size-medium wp-image-425" /></a><br />
<P></p>
<p>We are starting to tinker around with the sky (this one is way too dark).  Also, moving around a bunch of locations and adding some new ones.</p>
<p>I'm doing a couple of weeks' worth of serious map organization / reorganization in order to get the game to a point where we can playtest it at pretty much any time, and whoever sits down to play will have a reasonable experience.  The game was in this kind of shape back in January, but we had to do a lot of work on game internals in order to get things where they needed to be, interactivity-wise, for the mid-stage of development.  Now that most of that stuff is done, it's time to put the world/content back in playable shape; from there, new stuff can be added in a way that continuously fills out the world.  Once I feel like the world is "full enough" we can leave the preproduction phase and start going into production (which is where we start caring about what the graphics look like, start seriously doing voice recordings, etc).</p>
<p>One area I've been working on for the past few days is the start of the game.  It is meant to be a semi-guided experience that clues the player into what the game is about.  (If you remember the beginning of <em>Braid</em>, it's something like that.)  You may have seen the interior of the house (the white building on the left) in earlier blog posts:</p>
<p><P><br />
<a href="https://the-witness.net/news/wp-content/uploads/2010/08/shot_2010.08.04__time_20_09_n02.jpg"><img src="https://the-witness.net/news/wp-content/uploads/2010/08/shot_2010.08.04__time_20_09_n02-300x192.jpg" alt="The Witness: Area just outside the house" title="The Witness: Area just outside the house" width="300" height="192" class="aligncenter size-medium wp-image-426" /></a><br />
<P></p>
<p>The area just outside the house is a constrained path, but very soon the player exits this area and can freely roam an open world.</p>
<p>Most open-world games want to impress you with the hugeness of the world, and the corollary to that is that you spend a lot of time walking / riding / driving between places.  <em>The Witness</em> takes the opposite philosophy: it wants the world to be as high-density as possible, just packed full of interesting things.  As the island develops, we will be placing areas as close to each other as we can, within constraints.  (<em>Braid</em> had a similar high-density philosophy -- though it manifested in a different way -- and many people appreciated that).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/08/the-island-today/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Hey, who is making this game?</title>
		<link>https://the-witness.net/news/2010/07/hey-who-is-making-this-game/</link>
					<comments>https://the-witness.net/news/2010/07/hey-who-is-making-this-game/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 15 Jul 2010 07:43:28 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=408</guid>

					<description><![CDATA[Some people have been asking me about the team working on the game. If you click up there on the About link at the top of the page, you'll now find a short description of everyone working on The Witness, which I'll paste below for your convenience: The Witness is …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/07/hey-who-is-making-this-game/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>Some people have been asking me about the team working on the game.  If you click up there on the About link at the top of the page, you'll now find a short description of everyone working on The Witness, which I'll paste below for your convenience:<br />
<span id="more-408"></span></p>
<p><em>The Witness</em> is an exploration-puzzle game, to be released on multiple platforms — whatever makes sense in late 2011, when the game will hopefully be finished.</p>
<p>The game is being developed by a small, independent team, a mix of full-timers and contractors.  Here's a list:</p>
<p><P><br />
<strong>Jonathan Blow</strong><br />
Jonathan is a designer-programmer whose goal is to make games that are mind-expanding in ways special to this medium.  He is best known for the well-received game <em><a href="https://braid-game.com">Braid</a></em>.  He is also a partner in the <a href="http://www.indie-fund.com/">Indie Fund</a>, an initiative to help creative new developers grow stronger while remaining independent.  He speaks frequently at conferences and universities on the advancement of game design as an art form. </p>
<p><P><br />
<strong>Ignacio Casta&ntilde;o</strong><br />
Ignacio started programming at an early age and became obsessed with graphics. That led him to work at several game companies including Crytek, Relic and Oddworld. More recently he worked at NVIDIA, where he contributed to the design of modern graphics hardware, APIs, and programming models. Today he's the father of a 3 year old boy and embraces all aspects of human experience.</p>
<p><P><br />
<strong>Shannon Galvin</strong><br />
Shannon Galvin has worked on games for over 16 years, having started on a game called 'SimTown' and then adding pretty pictures to many others...including SimCity 2000, Sims 2 and Spore. When not doing art, he often wanders around games looking at environments and using cheat codes when monsters try to interrupt his art appreciation. Oh, and he's got a ceramic kiln in his living room. Those things can vaporize metal! (Caution: Kilns should not be used to vaporize metal).</p>
<p><P><br />
<strong>Andrew Hynek</strong><br />
Andrew Hynek has been a game programmer since the early PS2 days.  Having worked at small and large studios on a variety of genres, he is trying out the indie / freelancing life at his new company, <a href="http://www.atrophystudios.com/">Atrophy Studios</a>.</p>
<p><P><br />
<strong>Andrew Lackey</strong><br />
Andrew loves sound, nails on chalk board and all.  As a gamer and indie music/film/game fan, he's thrilled to connect with the team on the Witness.  Music and sound have been a part of his life since day one, but he got his professional start in Los Angeles on feature films.  <em>Go!</em>, <em>The Matrix Trilogy</em>, <em>8 Mile</em>, and <em>Treasure Planet</em> were among the 30+ films he worked on as a sound editor and foley supervisor. In 2004, he defected to San Francisco and shortly thereafter... the game industry.  After a brief stint at Skywalker Sound, he went to work for Electronic Arts as a senior sound designer.  He worked on several titles including the creature voices and sound design for Spore and Dead Space...although in decidedly different veins.  In late 2008, he went indie and started <a href="http://www.wabisabisound.com/">Wabi Sabi Sound</a>.  It's been a great ride.  He's contributed to <em>BioShock 2</em>, <em>Left 4 Dead 2</em>, <em>Dante's Inferno</em>, and currently <em>The Witness</em>.  The nonconforming push of the envelope is a space he's always thrived in.  <em>The Witness</em> challenges him to rethink the fundamentals of a craft he's been doing for over 10 years.... he loves that!</p>
<p><P><br />
<strong>Nicholas "Indy" Ray</strong><br />
Nicholas has been programming professionally for 8 years.  He first worked as a game developer at the U.S. Army-funded "America's Army" video game project. He has wide programming experience, ranging from compiler design to animation, and spends much of his time time trying to come up with unique solutions to problems, while stubbornly holding onto the conviction that byte-level data transformation is what programming is all about.</p>
<p>When not programming, he enjoys rock climbing in the summer, various snow sports in the winter, getting lost, and most anything that involves making a fool of himself.</p>
<p><P><br />
<strong>Eric Urquhart</strong><br />
At the age of 7 when Eric won his local community dental art contest by designing a fluffy rabbit with a big shiny tooth. It was then when he knew he could be on to something. So he started practicing painting on his bedroom walls. That wasn’t a big hit with the parents but did serve as good experience for his future as a mural artist.  Eric quickly became sought after for his mural work, being flown around the nation to add his personal touch to structures all around the country.  Six years ago he set down his analog brush and paints for a Wacom tablet and Photoshop. Since then he has been unleashing his artistic talent in feature film, television and the gaming industries. Past companies and clients Eric has worked for and with include Sony Pictures Imageworks, Warner Bros., Fuel and Brand New School.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/07/hey-who-is-making-this-game/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Location Development</title>
		<link>https://the-witness.net/news/2010/07/location-development/</link>
					<comments>https://the-witness.net/news/2010/07/location-development/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Tue, 13 Jul 2010 03:37:34 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Progress Shots]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=385</guid>

					<description><![CDATA[To start off, here's the customary island snapshot: It may not look tremendously different from the last one, aside from the translucent water and added objects at the near corner.  However, a number of locations have been worked on in the past few weeks, which happen to be either far …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/07/location-development/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>To start off, here's the customary island snapshot:</p>
<p> [<a href="https://the-witness.net/news/2010/07/location-development/">See image gallery at the-witness.net</a>] </p>
<p><P><br />
It may not look tremendously different from the last one, aside from the translucent water and added objects at the near corner.  However, a number of locations have been worked on in the past few weeks, which happen to be either far across the map or underground, so I figured I'd post some highlights.</p>
<p>Keep in mind that all of this is placeholder graphics; because we consider gameplay to be very important, we are planning out the gameplay carefully before we go into full production.</p>
<p>This area is an old ruin carved from stone; as the world gets developed, the area around it will become more deserty.  In a later blog update I'll show this area more extensively:</p>
<p> [<a href="https://the-witness.net/news/2010/07/location-development/">See image gallery at the-witness.net</a>] <br />
<span id="more-385"></span></p>
<p><P><br />
Here's  a cave at a junction of underground tunnels, lit by colored lights so that you know which tunnel is which:</p>
<p> [<a href="https://the-witness.net/news/2010/07/location-development/">See image gallery at the-witness.net</a>] </p>
<p><P><br />
A cathedral, built on a hill; its walls are old and crumbling, but it's been well-cared-for:</p>
<div>
<p> [<a href="https://the-witness.net/news/2010/07/location-development/">See image gallery at the-witness.net</a>] </p>
<p><P><br />
At the edge of the forest, near a bridge across the river, someone has been cutting down trees.  What was going on here?  Why did they just leave these logs laying around?</p>
<p> [<a href="https://the-witness.net/news/2010/07/location-development/">See image gallery at the-witness.net</a>] </p>
<p><P><br />
We've also been working on rendering for grass, bushes, and trees.  Here's a shot containing some of our new grass:</p>
<p> [<a href="https://the-witness.net/news/2010/07/location-development/">See image gallery at the-witness.net</a>] </p>
<p><P><br />
Trees and bushes used to cast overly-dark, jagged shadows, because the shadow system didn't know how to look at their texture maps to figure out transparency.  That's been fixed, and now shadows cast by leaves are the shapes of the leaves:</p>
<p> [<a href="https://the-witness.net/news/2010/07/location-development/">See image gallery at the-witness.net</a>] </p>
<p><P><br />
Much of the other work that I personally have been putting into the game is about the user interface for the puzzles.  As I mentioned, gameplay is the utmost concern; this being a puzzle game, you spend a long time solving puzzles, so it's important to make that feel good, even at this early stage.  There is still plenty of work to do there, but a very important aspect of the user interface has improved drastically this week, and I am very happy with the results.</p>
<p>More news as it comes!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/07/location-development/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Graphics Tech: Precomputed Lighting</title>
		<link>https://the-witness.net/news/2010/03/graphics-tech-precomputed-lighting/</link>
					<comments>https://the-witness.net/news/2010/03/graphics-tech-precomputed-lighting/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 01 Mar 2010 00:40:45 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Engine Tech]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=50</guid>

					<description><![CDATA[For the past 15 years or so, graphics technology in games has been driven by shooters.  Most shooters generate visual interest in their scenes by having lots of dynamic lights, with extreme use of bump mapping, and moving shadows, and particle effects. For The Witness, I wanted to develop a …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/03/graphics-tech-precomputed-lighting/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>For the past 15 years or so, graphics technology in games has been driven by shooters.  Most shooters generate visual interest in their scenes by having lots of dynamic lights, with extreme use of bump mapping, and moving shadows, and particle effects.</p>
<p>For <em>The Witness</em>, I wanted to develop a graphical style that values simplicity.   It would be suited to mellower environments, with both indoor and outdoor settings.  Some kind of global illumination solution seemed like the right idea here.  (Global illumination is when you simulate light bouncing around in a scene; the resulting look is usually much richer and subtler than the direct lighting that games usually do.)</p>
<p>Clearly, full real-time global illumination would be the most versatile solution.  I investigated some licensable packages that provide this, such as <a href="http://geomerics.com/">Geomerics' SDK</a>.  However, these solutions will invariably use a lot of texture space, and consume a bunch of processing time, and they seem like overkill for this game (<em>The Witness</em> does not have many moving light sources, relative to other types of games).</p>
<p>So, some form of precomputed global illumination seemed like the right thing.  3D modeling packages have plugins to compute global illumination, but they are very difficult to interface with, and they could not even come close to handling a full game scene.   The only thing that knows where all the objects in the world are at once is the game itself (and the in-game editor), so it seemed appropriate to develop our own in-game system for global illumination.  It could have been radiosity, could have been something like Monte Carlo Path Tracing, but <a href="http://www.cbloom.com/">Charles Bloom</a> suggested the very simple solution of just rendering the scene for every pixel in a lightmap, and that seemed like a good idea.  With an approach like that, you don't have to do a bunch of monkeying around to make radiosity or ray tracing match the completely different algorithm that is used to render your realtime game scene; light transport is computed by that same algorithm, so it will automatically match unless you mess things up.</p>
<p>For several months, <a href="http://castano.ludicon.com/blog/">Ignacio Castaño</a> has been working on this system.  He is writing up a highly technical explanation of how the system works, which I think he'll be done with in a few days, but in the meantime, here is a lighter-weight overview.<br />
<span id="more-50"></span></p>
<p>At preprocess time, we just walk a camera over every surface, pointing the camera away from the surface and rendering the game scene into a hemicube in video memory.  The render target textures of a hemicube are packed together into an atlas, and when the atlas fills up, we download it into system memory, integrate the values in each hemicube to find an average light value, and then store that value in the lightmap.  Most of the shots below were generated using 128x128 cube maps and multiple samples per texel.</p>
<p>Because we are just using our regular rendering code, this precomputation process is hardware-accelerated by default.</p>
<p>Note: <em>In the images below, all geometry and textures are placeholders. </em> As with Braid, we are using rough-draft versions of all these things while the core gameplay is built.  Bloggers, <strong><em>these are not to be considered screenshots of the game</em></strong>.  They aren't supposed to look good yet -- they are just supposed to show the precomputed lighting.</p>
<p>First, some shots of the house.  The precomputed lighting is responsible for most of the light in the room.  The places where you see sunlight hitting surfaces directly are dynamic; everything else is a static precompute.  (Without the precomputed lighting, the entire room would be black except for the patches of sunlight).</p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/house1.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_house1.jpg" alt="house1" /></a></p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/house2.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_house2.jpg" alt="house2" /></a></p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/house3.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_house3.jpg" alt="house3" /></a></p>
<p>Note the ambient occlusion, soft shadows, and other nice effects that all come naturally from this system.  (In the third image, the picture on the wall hasn't been lightmapped yet, which is why it sticks out so brightly.)</p>
<p>Here's a simple bunker interior consisting mostly of a single material and color.</p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/bunker1.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_bunker1.jpg" alt="bunker1" /></a></p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/bunker2.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_bunker2.jpg" alt="bunker2" /></a></p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/bunker3.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_bunker3.jpg" alt="bunker3" /></a></p>
<p>Lastly, the tower:</p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/tower1.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_tower1.jpg" alt="tower1" /></a></p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/tower2.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_tower2.jpg" alt="tower2" /></a></p>
<p><a class="shutterset_" href="https://the-witness.net/news/wp-content/gallery/lighting/tower3.jpg"><img class="ngg-singlepic ngg-center" src="https://the-witness.net/news/wp-content/gallery/lighting/thumbs/thumbs_tower3.jpg" alt="tower3" /></a></p>
<p>There are lots of caveats on these images.  The game renders in HDR, but we haven't balanced our lighting constants or done tone mapping yet, so I have gamma-corrected the output images by various amounts.  For now, we are computing only the first lighting bounce.  We'll probably do at least 2 or 3 bounces for the final game, and when we have that running I'll post some comparison images.  I believe our model of sky illumination is still overly simple and wrong (though I'd need to check with Ignacio on that, maybe he has fixed it up).  I haven't played around with the results of the current system in outdoor areas (e.g. lots of small branches and leaves), though if we find that we have too many aliasing problems, we can always make the lightmaps higher-resolution in those areas.</p>
<p>In areas that have doors or windows that open and close, we are planning on layering a supplemental lightmap that gets scaled by the openness of that light aperture, then added to the base lightmap.  This will provide a pretty good approximation for the way the indirect light in the room changes as the aperture opens and closes.  Direct light will be completely correct since it uses the fully dynamic shadow system.  I'll do a post about that shadow system sometime in the future.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/03/graphics-tech-precomputed-lighting/feed/</wfw:commentRss>
			<slash:comments>30</slash:comments>
		
		
			</item>
		<item>
		<title>Concept Art</title>
		<link>https://the-witness.net/news/2010/02/concept-art/</link>
					<comments>https://the-witness.net/news/2010/02/concept-art/#comments</comments>
		
		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Sun, 28 Feb 2010 05:58:18 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://the-witness.net/news/?p=9</guid>

					<description><![CDATA[In order to begin discussing the game, it seemed more appropriate to show some concept art, because the game is very visual. Click for full-sized versions.  The gallery seems to hang some versions of Google Chrome.  Sorry about that.  It works fine in Firefox and Internet Explorer. These concepts (and …<p class="continue-reading-button"> <a class="continue-reading-link" href="https://the-witness.net/news/2010/02/concept-art/">Continue reading<i class="crycon-right-dir"></i></a></p>]]></description>
										<content:encoded><![CDATA[<p>In order to begin discussing the game, it seemed more appropriate to show some concept art, because the game is very visual.</p>
<p><em>Click for full-sized versions.  The gallery seems to hang some versions of Google Chrome.  Sorry about that.  It works fine in Firefox and Internet Explorer.</em></p>
<p> [<a href="https://the-witness.net/news/2010/02/concept-art/">See image gallery at the-witness.net</a>] </p>
<p>These concepts (and many more) were all done by <a href="http://www.ericsart.com/">Eric Urquhart</a>, who has been working on the game for some months now.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://the-witness.net/news/2010/02/concept-art/feed/</wfw:commentRss>
			<slash:comments>39</slash:comments>
		
		
			</item>
	</channel>
</rss>
