<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/2.3" -->
<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/"
	>

<channel>
	<title>Doom-Ed</title>
	<link>http://doom-ed.com/blog</link>
	<description>Are you doom-ed?</description>
	<pubDate>Wed, 20 Oct 2004 09:26:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3</generator>
	<language>en</language>
			<item>
		<title>Half Life 2 goes Gold</title>
		<link>http://doom-ed.com/blog/2004/10/20/half-life-2-goes-gold</link>
		<comments>http://doom-ed.com/blog/2004/10/20/half-life-2-goes-gold#comments</comments>
		<pubDate>Wed, 20 Oct 2004 09:10:11 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/20/half-life-2-goes-gold</guid>
		<description><![CDATA[When it&#8217;s done &#8230;
Half Life 2 is considered as one of the most important games in history. When the delay  last year was announced, analysts lowered their PC games growth forecasts.
According to Vivendi it will be on shelves November 16, just in time for the holiday season.
According to the PC Gamer November issue, Half [...]]]></description>
			<content:encoded><![CDATA[<p>When it&#8217;s done &#8230;</p>
<p>Half Life 2 is considered as one of the most important games in history. When the delay  last year was announced, analysts lowered their PC games growth forecasts.</p>
<p>According to Vivendi it will be on shelves November 16, just in time for the holiday season.</p>
<p>According to the PC Gamer November issue, Half Life 2 is a &#8220;must buy&#8221;. Maybe this is because the environment is leaned strongly towards Europe. The graphics engine may not have those spectacular light effects of a Doom 3, but at least most scenes are brightly lit and you don&#8217;t feel claustrophobic all the time. We hope that they still have duct tape in the not-too-far future Half Life 2 is settled in, so you don&#8217;t have to switch between flashlight and weapon, but instead can use both at a time.</p>
<p>It&#8217;s time for a new graphics card, since ATI Technologies Inc. and Nvidia Corp. have to sell their newest cards to someone. If there are still cards left over from the sales to Doom 3 players &#8230;</p>
<p>So the countdown starts for MIT graduate Gordon Freeman to shed some alien blood &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/20/half-life-2-goes-gold/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 SDK Released</title>
		<link>http://doom-ed.com/blog/2004/10/17/doom-3-sdk-released</link>
		<comments>http://doom-ed.com/blog/2004/10/17/doom-3-sdk-released#comments</comments>
		<pubDate>Sun, 17 Oct 2004 13:40:24 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/17/doom-3-sdk-released</guid>
		<description><![CDATA[The wait is over. You can download the Doom 3 SDK.  You&#8217;ll need Visual C++ 7 to play with it.
For an introduction take a look at id.sdk. It&#8217;s official information.
Have fun 
]]></description>
			<content:encoded><![CDATA[<p>The wait is over. You can download the <a href="ftp://ftp.idsoftware.com/idstuff/doom3/source/Doom3_SDK.exe">Doom 3 SDK</a>.  You&#8217;ll need Visual C++ 7 to play with it.</p>
<p>For an introduction take a look at <a href="http://www.iddevnet.com/">id.sdk</a>. It&#8217;s official information.</p>
<p>Have fun <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/17/doom-3-sdk-released/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Packages</title>
		<link>http://doom-ed.com/blog/2004/10/07/half-life-2-packages</link>
		<comments>http://doom-ed.com/blog/2004/10/07/half-life-2-packages#comments</comments>
		<pubDate>Thu, 07 Oct 2004 07:59:10 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/07/half-life-2-packages</guid>
		<description><![CDATA[http://steampowered.com/forums/showthread.php?s=&#038;threadid=148079
shows a complete list of all packages Half Life 2 will be available.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://steampowered.com/forums/showthread.php?s=&#038;threadid=148079">http://steampowered.com/forums/showthread.php?s=&#038;threadid=148079</a><br />
shows a complete list of all packages Half Life 2 will be available.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/07/half-life-2-packages/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 on Linux</title>
		<link>http://doom-ed.com/blog/2004/10/06/doom-3-on-linux</link>
		<comments>http://doom-ed.com/blog/2004/10/06/doom-3-on-linux#comments</comments>
		<pubDate>Wed, 06 Oct 2004 06:39:11 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/06/doom-3-on-linux</guid>
		<description><![CDATA[When it&#8217;s done &#8230;
Finally you can play your game of choice on your OS of choice. With a (win32) retail version of the game, you can now download the Linux version and play away.
Plus there is the standalone Linux demo available.
Links broken? Looking for a Doom 3 patch? http://www.3dgamers.com/games/doom3/downloads/
For those of who who&#8217;d like to [...]]]></description>
			<content:encoded><![CDATA[<p>When it&#8217;s done &#8230;</p>
<p>Finally you can play your game of choice on your OS of choice. With a (win32) retail version of the game, you can now download the <a href="http://www.3dgamers.com/dlselect/games/doom3/doom3-linux-1.1.1282.x86.run.html">Linux version</a> and play away.</p>
<p>Plus there is the standalone <a href="http://www.3dgamers.com/dlselect/games/doom3/doom3-linux-1.1.1282-demo.x86.run.html">Linux demo</a> available.</p>
<p>Links broken? Looking for a Doom 3 patch? <a href="http://www.3dgamers.com/games/doom3/downloads/">http://www.3dgamers.com/games/doom3/downloads/</a></p>
<p>For those of who who&#8217;d like to build maps of their own, there is <a href="http://www.qeradiant.com/">GTKRadiant</a> available, based on QeRadiant, the official editor for Quake 2, on which the official Doom 3 editor is also based.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/06/doom-3-on-linux/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Release Date Set</title>
		<link>http://doom-ed.com/blog/2004/10/02/half-life-2-release-date-set</link>
		<comments>http://doom-ed.com/blog/2004/10/02/half-life-2-release-date-set#comments</comments>
		<pubDate>Sat, 02 Oct 2004 07:13:04 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/02/half-life-2-release-date-set</guid>
		<description><![CDATA[It&#8217;ll be November 23rd in the US, November 26th.
]]></description>
			<content:encoded><![CDATA[<p>It&#8217;ll be November 23rd in the US, November 26th.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/02/half-life-2-release-date-set/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Sex Video</title>
		<link>http://doom-ed.com/blog/2004/10/02/half-life-2-sex-video</link>
		<comments>http://doom-ed.com/blog/2004/10/02/half-life-2-sex-video#comments</comments>
		<pubDate>Sat, 02 Oct 2004 06:44:03 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/10/02/half-life-2-sex-video</guid>
		<description><![CDATA[I was startled this morning when I watched another site&#8217;s stats and saw it filled with requests for &#8220;half life 2 sex video&#8220;.
Further investigation showed that this is of course not a sex video, but nevertheless a very impressive video.
Some Mirrors:
Fileshack (looks like this server is overcrowded at the moment)
]]></description>
			<content:encoded><![CDATA[<p>I was startled this morning when I watched another site&#8217;s stats and saw it filled with requests for &#8220;<strong>half life 2 sex video</strong>&#8220;.</p>
<p>Further investigation showed that this is of course <strong>not a sex video</strong>, but nevertheless a very impressive video.</p>
<p>Some Mirrors:<br />
<a href="http://www.fileshack.com/file.x?fid=3619">Fileshack</a> (looks like this server is overcrowded at the moment)</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/10/02/half-life-2-sex-video/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2: Counter-Strike: Source to be out next week</title>
		<link>http://doom-ed.com/blog/2004/09/30/half-life-2-counter-strike-source-to-be-out-next-week</link>
		<comments>http://doom-ed.com/blog/2004/09/30/half-life-2-counter-strike-source-to-be-out-next-week#comments</comments>
		<pubDate>Thu, 30 Sep 2004 17:41:27 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/30/half-life-2-counter-strike-source-to-be-out-next-week</guid>
		<description><![CDATA[According to an announcement from Gabe Newell, the steam version of Counters-Strike: Source will be available around next week. The actual Half Life 2 (single player) will be locked until the legal issues concerning Valve and Vivendi Universal Games are solved.
]]></description>
			<content:encoded><![CDATA[<p>According to an announcement from Gabe Newell, the steam version of Counters-Strike: Source will be available around next week. The actual Half Life 2 (single player) will be locked until <a href="http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle">the legal issues concerning Valve and Vivendi Universal Games</a> are solved.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/30/half-life-2-counter-strike-source-to-be-out-next-week/feed</wfw:commentRss>
		</item>
		<item>
		<title>No Multiplayer for Half Life 2</title>
		<link>http://doom-ed.com/blog/2004/09/29/no-multiplayer-for-half-life-2</link>
		<comments>http://doom-ed.com/blog/2004/09/29/no-multiplayer-for-half-life-2#comments</comments>
		<pubDate>Wed, 29 Sep 2004 06:02:29 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/29/no-multiplayer-for-half-life-2</guid>
		<description><![CDATA[According to PC Gamer&#8217;s Chuck Osborn there won&#8217;t be a Half Life 2 multiplayer: &#8220;Counter-Strike Source is the multiplayer.&#8221;
]]></description>
			<content:encoded><![CDATA[<p>According to PC Gamer&#8217;s Chuck Osborn there won&#8217;t be a Half Life 2 multiplayer: &#8220;Counter-Strike Source is the multiplayer.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/29/no-multiplayer-for-half-life-2/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 1.1 Patch</title>
		<link>http://doom-ed.com/blog/2004/09/29/doom-3-11-patch</link>
		<comments>http://doom-ed.com/blog/2004/09/29/doom-3-11-patch#comments</comments>
		<pubDate>Wed, 29 Sep 2004 06:00:50 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/29/doom-3-11-patch</guid>
		<description><![CDATA[A Doom 3 patch has been released, updating your game to version 1.1. A number of improvements and fixes for both single player and multiplayer modes have been implemented, the patch is including a new &#8220;Dedicated Server&#8221; executable. The file is a moderate 17.4mb.
Mirrors:
Doom 3 Patch 1.1 Download
]]></description>
			<content:encoded><![CDATA[<p>A Doom 3 patch has been released, updating your game to version 1.1. A number of improvements and fixes for both single player and multiplayer modes have been implemented, the patch is including a new &#8220;Dedicated Server&#8221; executable. The file is a moderate 17.4mb.</p>
<p>Mirrors:<br />
<a href="http://www.filefront.com/?filepath=/gaminghorizon/patches/Doom3_1.1.exe">Doom 3 Patch 1.1 Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/29/doom-3-11-patch/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2: Final Preload</title>
		<link>http://doom-ed.com/blog/2004/09/28/half-life-2-final-preload</link>
		<comments>http://doom-ed.com/blog/2004/09/28/half-life-2-final-preload#comments</comments>
		<pubDate>Tue, 28 Sep 2004 07:40:43 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/28/half-life-2-final-preload</guid>
		<description><![CDATA[Looks like Valve has initiated phase 5 of Half Life 2 preload on the steam website. Of course, you can&#8217;t play it until it has been activated. Plus you can&#8217;t activate it until Half Life 2 boxes hit retail. Plus Half Life 2 won&#8217;t hit retail stores until the legal battles between Valve and Vivendi [...]]]></description>
			<content:encoded><![CDATA[<p>Looks like Valve has initiated phase 5 of Half Life 2 preload on the steam website. Of course, you can&#8217;t play it until it has been activated. Plus you can&#8217;t activate it until Half Life 2 boxes hit retail. Plus Half Life 2 won&#8217;t hit retail stores until the legal battles between Valve and Vivendi Universal Games have settled (kind of).</p>
<p>The moral of the story is that irrespective to all the hype about Half Life 2 preload, steam users won&#8217;t be playing the game any time earlier than ordinary buyers.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/28/half-life-2-final-preload/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half-Life 2 Special Edition</title>
		<link>http://doom-ed.com/blog/2004/09/25/half-life-2-special-edition</link>
		<comments>http://doom-ed.com/blog/2004/09/25/half-life-2-special-edition#comments</comments>
		<pubDate>Sat, 25 Sep 2004 07:57:15 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/25/half-life-2-special-edition</guid>
		<description><![CDATA[The name is not very original, but for most people the content is what counts:
Half-Life 2 Special Edition at Gamespot.

]]></description>
			<content:encoded><![CDATA[<p>The name is not very original, but for most people the content is what counts:</p>
<p><a href="http://www.gamestop.com/product.asp?product_id=645921">Half-Life 2 Special Edition</a> at Gamespot.</p>
<p><img src="/media/half-life-2-special-edition.jpg" alt="Half-Life 2 Special Edition"/></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/25/half-life-2-special-edition/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Delay due to court battle?</title>
		<link>http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle</link>
		<comments>http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle#comments</comments>
		<pubDate>Sat, 25 Sep 2004 07:45:27 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle</guid>
		<description><![CDATA[There is some speculation going on that Half Life 2 could be delayed for up to 6 months due to the publishing agreement between Valve and VU Games.
At least Steam users won&#8217;t get to download the game until it is made available at retail.
]]></description>
			<content:encoded><![CDATA[<p>There is some <a href="http://www.gamespot.com/news/2004/09/24/news_6108100.html">speculation going on</a> that Half Life 2 could be delayed for up to 6 months due to the publishing agreement between Valve and VU Games.</p>
<p>At least Steam users won&#8217;t get to download the game until it is made available at retail.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/25/half-life-2-delay-due-to-court-battle/feed</wfw:commentRss>
		</item>
		<item>
		<title>Original Ideas?</title>
		<link>http://doom-ed.com/blog/2004/09/22/original-ideas</link>
		<comments>http://doom-ed.com/blog/2004/09/22/original-ideas#comments</comments>
		<pubDate>Wed, 22 Sep 2004 10:53:30 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/22/original-ideas</guid>
		<description><![CDATA[According to the Straits Times, only 2 out of the 10 best-selling games in this year&#8217;s first 6 months were based on original ideas. All others were sequels.
And there are some more coming. Half-Life 2, Grand Theft Auto San Andreas.
]]></description>
			<content:encoded><![CDATA[<p>According to the Straits Times, only 2 out of the 10 best-selling games in this year&#8217;s first 6 months were based on original ideas. All others were sequels.</p>
<p>And there are some more coming. Half-Life 2, Grand Theft Auto San Andreas.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/22/original-ideas/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 Pushes Demand for AGP8X Graphics Chips</title>
		<link>http://doom-ed.com/blog/2004/09/22/doom-3-pushes-demand-for-agp8x-graphics-chips</link>
		<comments>http://doom-ed.com/blog/2004/09/22/doom-3-pushes-demand-for-agp8x-graphics-chips#comments</comments>
		<pubDate>Wed, 22 Sep 2004 10:48:37 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/22/doom-3-pushes-demand-for-agp8x-graphics-chips</guid>
		<description><![CDATA[According to internet sources, ATI has placed an additional order for 1,400 wafer starts at Taiwan Semiconductor Manufacturing Company (TSMC) to manufacture its Radeon 9800-series graphics chips.
With that order ATI is planning to bring the 9800 to market at price of under $200.
All the while Nvidia is announcing plans for a low-priced version of its [...]]]></description>
			<content:encoded><![CDATA[<p>According to internet sources, ATI has placed an additional order for 1,400 wafer starts at Taiwan Semiconductor Manufacturing Company (TSMC) to manufacture its Radeon 9800-series graphics chips.</p>
<p>With that order ATI is planning to bring the 9800 to market at price of under $200.</p>
<p>All the while Nvidia is announcing plans for a low-priced version of its GeForce FX5900-series in the fourth quarter.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/22/doom-3-pushes-demand-for-agp8x-graphics-chips/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Engine Licensed for Twilight War: After the Fall</title>
		<link>http://doom-ed.com/blog/2004/09/21/half-life-2-engine-licensed-for-twilight-war-after-the-fall</link>
		<comments>http://doom-ed.com/blog/2004/09/21/half-life-2-engine-licensed-for-twilight-war-after-the-fall#comments</comments>
		<pubDate>Tue, 21 Sep 2004 07:22:38 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/21/half-life-2-engine-licensed-for-twilight-war-after-the-fall</guid>
		<description><![CDATA[Valve said today that it had licensed its Half Life 2 Source engine to Florida-based start-up Smiling Gator Productions. Smiling Gator will use the engine in a massively-multi-player role-playing game (MMORPG), Twilight War: After the Fall.
The other 2 licensees so far are Troika Games with Vampire: The Masquerade-Bloodlines,  and Arkane Studios, for an yet [...]]]></description>
			<content:encoded><![CDATA[<p>Valve said today that it had licensed its Half Life 2 Source engine to Florida-based start-up Smiling Gator Productions. Smiling Gator will use the engine in a massively-multi-player role-playing game (MMORPG), Twilight War: After the Fall.</p>
<p>The other 2 licensees so far are Troika Games with Vampire: The Masquerade-Bloodlines,  and Arkane Studios, for an yet to be specified upcoming title.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/21/half-life-2-engine-licensed-for-twilight-war-after-the-fall/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 Demo Released</title>
		<link>http://doom-ed.com/blog/2004/09/18/doom-3-demo-released</link>
		<comments>http://doom-ed.com/blog/2004/09/18/doom-3-demo-released#comments</comments>
		<pubDate>Sat, 18 Sep 2004 07:21:28 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/18/doom-3-demo-released</guid>
		<description><![CDATA[The Doom 3 demo can be downloaded at gamespot. Enjoy!
Other Mirrors:
3D Gamers
]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://dlx.gamespot.com/pc/doom3/moreinfo_6107855.html">Doom 3 demo</a> can be downloaded at gamespot. Enjoy!</p>
<p>Other Mirrors:<br />
<a href="http://www.3dgamers.com/dl/games/doom3/d3demo.exe.html">3D Gamers</a></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/18/doom-3-demo-released/feed</wfw:commentRss>
		</item>
		<item>
		<title>John Carmack, creator of Doom and Quake</title>
		<link>http://doom-ed.com/blog/2004/09/09/john-carmack</link>
		<comments>http://doom-ed.com/blog/2004/09/09/john-carmack#comments</comments>
		<pubDate>Thu, 09 Sep 2004 11:21:31 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/09/john-carmack</guid>
		<description><![CDATA[This blog is dedicated to John Carmack, the creator of Games like Doom and Quake. It consists of his .plan file updates starting from 1997, converted into blog format.
]]></description>
			<content:encoded><![CDATA[<p>This blog is dedicated to John Carmack, the creator of Games like <a href="http://www.doom3.com/">Doom</a> and <a href="http://www.idsoftware.com/games/quake/quake/">Quake</a>. It consists of his .plan file updates starting from 1997, converted into blog format.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/09/john-carmack/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Life 2 Release Date</title>
		<link>http://doom-ed.com/blog/2004/09/06/half-life-2-release-date</link>
		<comments>http://doom-ed.com/blog/2004/09/06/half-life-2-release-date#comments</comments>
		<pubDate>Mon, 06 Sep 2004 14:27:58 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/06/half-life-2-release-date</guid>
		<description><![CDATA[The last official release date was September 3rd 2004, but until now nothing has happended. Still no sign on the official Half-Life 2 site.
]]></description>
			<content:encoded><![CDATA[<p>The last official release date was September 3rd 2004, but until now nothing has happended. Still no sign on the official <a href="http://www.half-life.com/">Half-Life 2</a> site.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/06/half-life-2-release-date/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 Fortress</title>
		<link>http://doom-ed.com/blog/2004/09/06/doom-3-fortress</link>
		<comments>http://doom-ed.com/blog/2004/09/06/doom-3-fortress#comments</comments>
		<pubDate>Mon, 06 Sep 2004 14:23:11 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/06/doom-3-fortress</guid>
		<description><![CDATA[Granted, for a popular game-engine like the one of Doom 3 there will be a lot of so called mods. These are modifications to the original game, from minor tweaks to total conversion.
One of the most promising mods is Team Fortress. The makers were interviewed by planetdoom recently.
]]></description>
			<content:encoded><![CDATA[<p>Granted, for a popular game-engine like the one of Doom 3 there will be a lot of so called <em>mods</em>. These are modifications to the original game, from minor tweaks to total conversion.</p>
<p>One of the most promising mods is <a href="http://www.planetdoom.com/d3f">Team Fortress</a>. The makers were interviewed by planetdoom <a href="http://www.planetdoom.com/features/interviews/d3f_int_mod.shtml">recently</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/06/doom-3-fortress/feed</wfw:commentRss>
		</item>
		<item>
		<title>Disclaimer</title>
		<link>http://doom-ed.com/blog/2004/09/05/disclaimer</link>
		<comments>http://doom-ed.com/blog/2004/09/05/disclaimer#comments</comments>
		<pubDate>Sun, 05 Sep 2004 12:07:37 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[doom-ed]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/09/05/disclaimer</guid>
		<description><![CDATA[This blog contains a collection of .plan files from John Carmack, the co-creator of Doom, Quake and other blockbusters. It has been brought to life by a guy from Europe.
Posts signed with johnc are original .plan file updates, all other posts were made by other people.
I have given my best (and still doing it) to [...]]]></description>
			<content:encoded><![CDATA[<p>This blog contains a <a href="http://doom-ed.com/blog/category/doom-ed/john-carmack/">collection of .plan files from John Carmack</a>, the co-creator of Doom, Quake and other blockbusters. It has been brought to life by a <a href="http://www.uberdose.com/journal/">guy from Europe</a>.</p>
<p>Posts signed with <em>johnc</em> are original .plan file updates, all other posts were made by other people.</p>
<p>I have given my best (and still doing it) to conserve the exact time stamps of .plan updates to the second wherever possible. In most cases this is Central Standard Time.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/09/05/disclaimer/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3: The Movie</title>
		<link>http://doom-ed.com/blog/2004/08/27/doom-3-the-movie</link>
		<comments>http://doom-ed.com/blog/2004/08/27/doom-3-the-movie#comments</comments>
		<pubDate>Fri, 27 Aug 2004 13:15:08 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/27/doom-3-the-movie</guid>
		<description><![CDATA[In an interview Todd Hollenshead announced that the Doom movie script is close to final and that he becomes more and more confident that we will see DOOM at movie theaters before the end of next year.
]]></description>
			<content:encoded><![CDATA[<p>In an interview Todd Hollenshead announced that the <a href="http://general.gamerfeed.com/gf/news/7478/">Doom movie script <em>is close to final</em></a> and that he <em>becomes more and more confident that we will see DOOM at movie theaters before the end of next year</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/27/doom-3-the-movie/feed</wfw:commentRss>
		</item>
		<item>
		<title>QuakeCon 2004 &#8212; John Carmack Keynote Video</title>
		<link>http://doom-ed.com/blog/2004/08/16/quakecon-2004-john-carmack-keynote-video</link>
		<comments>http://doom-ed.com/blog/2004/08/16/quakecon-2004-john-carmack-keynote-video#comments</comments>
		<pubDate>Mon, 16 Aug 2004 07:34:43 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/16/quakecon-2004-john-carmack-keynote-video</guid>
		<description><![CDATA[John Carmack&#8217;s keynote for QuakeCon 2004 is presented, just 2 days after his first son, Christopher Ryan Carmack (called Ryan by his parents), was born.

]]></description>
			<content:encoded><![CDATA[<p>John Carmack&#8217;s keynote for QuakeCon 2004 is presented, just 2 days after his first son, Christopher Ryan Carmack (called Ryan by his parents), was born.</p>
<p><a href="http://media.pc.gamespy.com/media/014/014934/vids_3.html"><img src="http://doom-ed.com/media/quakecon04_keynote_carmack_1092704511.jpg" alt="John Carmack Keynote Video" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/16/quakecon-2004-john-carmack-keynote-video/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake Kiddie Version</title>
		<link>http://doom-ed.com/blog/2004/08/14/quake-kiddie-version</link>
		<comments>http://doom-ed.com/blog/2004/08/14/quake-kiddie-version#comments</comments>
		<pubDate>Sat, 14 Aug 2004 07:24:31 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/14/quake-kiddie-version</guid>
		<description><![CDATA[In the midst of QuakeCon 2004 congratulations went to John Carmack and Anna Kang on the birth of their first child. Ryan was born this morning, weighing in at 6 pounds, 7 ounces.
It is hoped that Christopher Ryan Carmack will be a valuable addition for the next QuakeCons.
]]></description>
			<content:encoded><![CDATA[<p>In the midst of QuakeCon 2004 congratulations went to John Carmack and Anna Kang on the birth of their first child. Ryan was born this morning, weighing in at 6 pounds, 7 ounces.</p>
<p>It is hoped that Christopher Ryan Carmack will be a valuable addition for the next QuakeCons.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/14/quake-kiddie-version/feed</wfw:commentRss>
		</item>
		<item>
		<title>Wired News Review on Doom 3</title>
		<link>http://doom-ed.com/blog/2004/08/10/wired-news-review-on-doom-3</link>
		<comments>http://doom-ed.com/blog/2004/08/10/wired-news-review-on-doom-3#comments</comments>
		<pubDate>Tue, 10 Aug 2004 13:29:38 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/10/wired-news-review-on-doom-3</guid>
		<description><![CDATA[Doom 3: A Helluva Tech Demo
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wired.com/news/games/0,2101,64524,00.html?tw=wn_story_top5">Doom 3: A Helluva Tech Demo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/10/wired-news-review-on-doom-3/feed</wfw:commentRss>
		</item>
		<item>
		<title>International Shipping at id Store</title>
		<link>http://doom-ed.com/blog/2004/08/06/international-shipping-at-id-store</link>
		<comments>http://doom-ed.com/blog/2004/08/06/international-shipping-at-id-store#comments</comments>
		<pubDate>Fri, 06 Aug 2004 13:11:19 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/08/06/international-shipping-at-id-store</guid>
		<description><![CDATA[According to idsoftware.com, the id store is now shipping to the following countries:
Mexico, U.K., Ireland, Spain, Portugal, France, Switzerland, Iceland, Belgium, Finland, Sweden, Norway, Denmark, Austria, Czech Republic, The Netherlands, Italy, New Zealand, and Australia.
Not all countries from Europe are in the list, I&#8217;m inclined to blame censorship for that.
]]></description>
			<content:encoded><![CDATA[<p>According to <a href="http://www.idsoftware.com/">idsoftware.com</a>, the <a href="http://www.idsoftware.com/store">id store</a> is now shipping to the following countries:</p>
<p>Mexico, U.K., Ireland, Spain, Portugal, France, Switzerland, Iceland, Belgium, Finland, Sweden, Norway, Denmark, Austria, Czech Republic, The Netherlands, Italy, New Zealand, and Australia.</p>
<p>Not all countries from Europe are in the list, I&#8217;m inclined to blame censorship for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/08/06/international-shipping-at-id-store/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Official DOOM 3 [H]ardware Guide</title>
		<link>http://doom-ed.com/blog/2004/07/29/the-official-doom-3-hardware-guide</link>
		<comments>http://doom-ed.com/blog/2004/07/29/the-official-doom-3-hardware-guide#comments</comments>
		<pubDate>Thu, 29 Jul 2004 13:25:32 +0000</pubDate>
		<dc:creator>site admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2004/07/29/the-official-doom-3-hardware-guide</guid>
		<description><![CDATA[id Software and HardOCP team up to publish a real-world DOOM 3 hardware guide that will help you understand and maximize your DOOM 3 gaming experience.
]]></description>
			<content:encoded><![CDATA[<p>id Software and HardOCP team up to publish a real-world <a href="http://www2.hardocp.com/article.html?art=NjQ0">DOOM 3 hardware guide</a> that <em>will help you understand and maximize your DOOM 3 gaming experience</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2004/07/29/the-official-doom-3-hardware-guide/feed</wfw:commentRss>
		</item>
		<item>
		<title>Machinima Music Video</title>
		<link>http://doom-ed.com/blog/2003/02/07/machinima-music-video</link>
		<comments>http://doom-ed.com/blog/2003/02/07/machinima-music-video#comments</comments>
		<pubDate>Fri, 07 Feb 2003 14:30:12 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2003/02/07/machinima-music-video</guid>
		<description><![CDATA[The machinima music video that Fountainhead Entertainment (my wife&#8217;s company)
produced with Quake based tools is available for viewing and voting on at:
http://www.mtv.com/music/viewers_pick/ (&#8221;In the waiting line&#8221;)
I thought they did an excellent job of catering to the strengths of the
medium, and not attempting to make a game engine compete (poorly) as a
general purpose renderer.  In [...]]]></description>
			<content:encoded><![CDATA[<p>The machinima music video that Fountainhead Entertainment (my wife&#8217;s company)<br />
produced with Quake based tools is available for viewing and voting on at:<br />
http://www.mtv.com/music/viewers_pick/ (&#8221;In the waiting line&#8221;)</p>
<p>I thought they did an excellent job of catering to the strengths of the<br />
medium, and not attempting to make a game engine compete (poorly) as a<br />
general purpose renderer.  In watching the video, I did beat myself up a<br />
bit over the visible popping artifacts on the environment mapping, which are<br />
a direct result of the normal vector quantization in the md3 format.  While it<br />
isn&#8217;t the same issue (normals are full floating point already in Doom), it was<br />
the final factor that pushed me to do the per-pixel environment mapping for<br />
the new cards in the current engine.</p>
<p>The neat thing about the machinima aspect of the video is that they also have<br />
a little game you can play with the same media assets used to create the<br />
video.  Not sure when it will be made available publicly.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2003/02/07/machinima-music-video/feed</wfw:commentRss>
		</item>
		<item>
		<title>NV30 vs R300, current developments, etc</title>
		<link>http://doom-ed.com/blog/2003/01/29/nv30-vs-r300-current-developments-etc</link>
		<comments>http://doom-ed.com/blog/2003/01/29/nv30-vs-r300-current-developments-etc#comments</comments>
		<pubDate>Wed, 29 Jan 2003 14:32:09 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2003/01/29/nv30-vs-r300-current-developments-etc</guid>
		<description><![CDATA[NV30 vs R300, current developments, etc
At the moment, the NV30 is slightly faster on most scenes in Doom than the
R300, but I can still find some scenes where the R300 pulls a little bit
ahead.  The issue is complicated because of the different ways the cards can
choose to run the game.
The R300 can run Doom [...]]]></description>
			<content:encoded><![CDATA[<p>NV30 vs R300, current developments, etc</p>
<p>At the moment, the NV30 is slightly faster on most scenes in Doom than the<br />
R300, but I can still find some scenes where the R300 pulls a little bit<br />
ahead.  The issue is complicated because of the different ways the cards can<br />
choose to run the game.</p>
<p>The R300 can run Doom in three different modes: ARB (minimum extensions, no<br />
specular highlights, no vertex programs), R200 (full featured, almost always<br />
single pass interaction rendering), ARB2 (floating point fragment shaders,<br />
minor quality improvements, always single pass).</p>
<p>The NV30 can run DOOM in five different modes: ARB, NV10 (full featured, five<br />
rendering passes, no vertex programs), NV20 (full featured, two or three<br />
rendering passes), NV30 ( full featured, single pass), and ARB2.</p>
<p>The R200 path has a slight speed advantage over the ARB2 path on the R300, but<br />
only by a small margin, so it defaults to using the ARB2 path for the quality<br />
improvements.  The NV30 runs the ARB2 path MUCH slower than the NV30 path.<br />
Half the speed at the moment.  This is unfortunate, because when you do an<br />
exact, apples-to-apples comparison using exactly the same API, the R300 looks<br />
twice as fast, but when you use the vendor-specific paths, the NV30 wins.</p>
<p>The reason for this is that ATI does everything at high precision all the<br />
time, while Nvidia internally supports three different precisions with<br />
different performances.  To make it even more complicated, the exact<br />
precision that ATI uses is in between the floating point precisions offered by<br />
Nvidia, so when Nvidia runs fragment programs, they are at a higher precision<br />
than ATI&#8217;s, which is some justification for the slower speed.  Nvidia assures<br />
me that there is a lot of room for improving the fragment program performance<br />
with improved driver compiler technology.</p>
<p>The current NV30 cards do have some other disadvantages:  They take up two<br />
slots, and when the cooling fan fires up they are VERY LOUD.  I&#8217;m not usually<br />
one to care about fan noise, but the NV30 does annoy me.</p>
<p>I am using an NV30 in my primary work system now, largely so I can test more<br />
of the rendering paths on one system, and because I feel Nvidia still has<br />
somewhat better driver quality (ATI continues to improve, though).  For a<br />
typical consumer, I don&#8217;t think the decision is at all clear cut at the<br />
moment.</p>
<p>For developers doing forward looking work, there is a different tradeoff &#8211;<br />
the NV30 runs fragment programs much slower, but it has a huge maximum<br />
instruction count.  I have bumped into program limits on the R300 already.</p>
<p>As always, better cards are coming soon.</p>
<p>&#8212;&#8212;&#8212;&#8212;-</p>
<p>Doom has dropped support for vendor-specific vertex programs<br />
(NV_vertex_program and EXT_vertex_shader), in favor of using<br />
ARB_vertex_program for all rendering paths.  This has been a pleasant thing to<br />
do, and both ATI and Nvidia supported the move.  The standardization process<br />
for ARB_vertex_program was pretty drawn out and arduous, but in the end, it is<br />
a just-plain-better API than either of the vendor specific ones that it<br />
replaced.  I fretted for a while over whether I should leave in support for<br />
the older APIs for broader driver compatibility, but the final decision was<br />
that we are going to require a modern driver for the game to run in the<br />
advanced modes.  Older drivers can still fall back to either the ARB or NV10<br />
paths.</p>
<p>The newly-ratified ARB_vertex_buffer_object extension will probably let me do<br />
the same thing for NV_vertex_array_range and ATI_vertex_array_object.</p>
<p>Reasonable arguments can be made for and against the OpenGL or Direct-X style<br />
of API evolution.  With vendor extensions, you get immediate access to new<br />
functionality, but then there is often a period of squabbling about exact<br />
feature support from different vendors before an industry standard settles<br />
down.  With central planning, you can have &#8220;phasing problems&#8221; between<br />
hardware and software releases, and there is a real danger of bad decisions<br />
hampering the entire industry, but enforced commonality does make life easier<br />
for developers.  Trying to keep boneheaded-ideas-that-will-haunt-us-for-years<br />
out of Direct-X is the primary reason I have been attending the Windows<br />
Graphics Summit for the past three years, even though I still code for OpenGL.</p>
<p>The most significant functionality in the new crop of cards is the truly<br />
flexible fragment programming, as exposed with ARB_fragment_program.  Moving<br />
from the &#8220;switches and dials&#8221; style of discrete functional graphics<br />
programming to generally flexible programming with indirection and high<br />
precision is what is going to enable the next major step in graphics engines.</p>
<p>It is going to require fairly deep, non-backwards-compatible modifications to<br />
an engine to take real advantage of the new features, but working with<br />
ARB_fragment_program is really a lot of fun, so I have added a few little<br />
tweaks to the current codebase on the ARB2 path:</p>
<p>High dynamic color ranges are supported internally, rather than with<br />
post-blending.  This gives a few more bits of color precision in the final<br />
image, but it isn&#8217;t something that you really notice.</p>
<p>Per-pixel environment mapping, rather than per-vertex.  This fixes a pet-peeve<br />
of mine, which is large panes of environment mapped glass that aren&#8217;t<br />
tessellated enough, giving that awful warping-around-the-triangulation effect<br />
as you move past them.</p>
<p>Light and view vectors normalized with math, rather than a cube map.  On<br />
future hardware this will likely be a performance improvement due to the<br />
decrease in bandwidth, but current hardware has the computation and bandwidth<br />
balanced such that it is pretty much a wash.  What it does (in conjunction<br />
with floating point math) give you is a perfectly smooth specular highlight,<br />
instead of the pixelish blob that we get on older generations of cards.</p>
<p>There are some more things I am playing around with, that will probably remain<br />
in the engine as novelties, but not supported features:</p>
<p>Per-pixel reflection vector calculations for specular, instead of an<br />
interpolated half-angle.  The only remaining effect that has any visual<br />
dependency on the underlying geometry is the shape of the specular highlight.<br />
Ideally, you want the same final image for a surface regardless of if it is<br />
two giant triangles, or a mesh of 1024 triangles.  This will not be true if<br />
any calculation done at a vertex involves anything other than linear math<br />
operations.  The specular half-angle calculation involves normalizations, so<br />
the interpolation across triangles on a surface will be dependent on exactly<br />
where the vertexes are located.  The most visible end result of this is that<br />
on large, flat, shiny surfaces where you expect a clean highlight circle<br />
moving across it, you wind up with a highlight that distorts into an L shape<br />
around the triangulation line.</p>
<p>The extra instructions to implement this did have a noticeable performance<br />
hit, and I was a little surprised to see that the highlights not only<br />
stabilized in shape, but also sharpened up quite a bit, changing the scene<br />
more than I expected.  This probably isn&#8217;t a good tradeoff today for a gamer,<br />
but it is nice for any kind of high-fidelity rendering.</p>
<p>Renormalization of surface normal map samples makes significant quality<br />
improvements in magnified textures, turning tight, blurred corners into shiny,<br />
smooth pockets, but it introduces a huge amount of aliasing on minimized<br />
textures.  Blending between the cases is possible with fragment programs, but<br />
the performance overhead does start piling up, and it may require stashing<br />
some information in the normal map alpha channel that varies with mip level.<br />
Doing good filtering of a specularly lit normal map texture is a fairly<br />
interesting problem, with lots of subtle issues.</p>
<p>Bump mapped ambient lighting will give much better looking outdoor and<br />
well-lit scenes.  This only became possible with dependent texture reads, and<br />
it requires new designer and tool-chain support to implement well, so it isn&#8217;t<br />
easy to test globally with the current Doom datasets, but isolated demos are<br />
promising.</p>
<p>The future is in floating point framebuffers.  One of the most noticeable<br />
thing this will get you without fundamental algorithm changes is the ability<br />
to use a correct display gamma ramp without destroying the dark color<br />
precision.  Unfortunately, using a floating point framebuffer on the current<br />
generation of cards is pretty difficult, because no blending operations are<br />
supported, and the primary thing we need to do is add light contributions<br />
together in the framebuffer.  The workaround is to copy the part of the<br />
framebuffer you are going to reference to a texture, and have your fragment<br />
program explicitly add that texture, instead of having the separate blend unit<br />
do it.  This is intrusive enough that I probably won&#8217;t hack up the current<br />
codebase, instead playing around on a forked version.</p>
<p>Floating point framebuffers and complex fragment shaders will also allow much<br />
better volumetric effects, like volumetric illumination of fogged areas with<br />
shadows and additive/subtractive eddy currents.</p>
<p>John Carmack</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2003/01/29/nv30-vs-r300-current-developments-etc/feed</wfw:commentRss>
		</item>
		<item>
		<title>More graphics card notes:</title>
		<link>http://doom-ed.com/blog/2002/06/27/more-graphics-card-notes</link>
		<comments>http://doom-ed.com/blog/2002/06/27/more-graphics-card-notes#comments</comments>
		<pubDate>Thu, 27 Jun 2002 19:18:25 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2002/06/27/more-graphics-card-notes</guid>
		<description><![CDATA[More graphics card notes:
I need to apologize to Matrox &#8212; their implementation of hardware displacement
mapping is NOT quad based. I was thinking about a certain other companies
proposed approach. Matrox&#8217;s implementation actually looks quite good, so even
if we don&#8217;t use it because of the geometry amplification issues, I think it
will serve the noble purpose of killing [...]]]></description>
			<content:encoded><![CDATA[<p>More graphics card notes:</p>
<p>I need to apologize to Matrox &#8212; their implementation of hardware displacement<br />
mapping is NOT quad based. I was thinking about a certain other companies<br />
proposed approach. Matrox&#8217;s implementation actually looks quite good, so even<br />
if we don&#8217;t use it because of the geometry amplification issues, I think it<br />
will serve the noble purpose of killing dead any proposal to implement a quad<br />
based solution.</p>
<p>I got a 3Dlabs P10 card in last week, and yesterday I put it through its<br />
paces. Because my time is fairly over committed, first impressions often<br />
determine how much work I devote to a given card. I didn&#8217;t speak to ATI for<br />
months after they gave me a beta 8500 board last year with drivers that<br />
rendered the console incorrectly. <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I was duly impressed when the P10 just popped right up with full functional<br />
support for both the fallback ARB_ extension path (without specular<br />
highlights), and the NV10 NVidia register combiners path. I only saw two<br />
issues that were at all incorrect in any of our data, and one of them is<br />
debatable. They don&#8217;t support NV_vertex_program_1_1, which I use for the NV20<br />
path, and when I hacked my programs back to 1.0 support for testing, an<br />
issue did show up, but still, this is the best showing from a new board from<br />
any company other than Nvidia.</p>
<p>It is too early to tell what the performance is going to be like, because they<br />
don&#8217;t yet support a vertex object extension, so the CPU is hand feeding all<br />
the vertex data to the card at the moment. It was faster than I expected for<br />
those circumstances.</p>
<p>Given the good first impression, I was willing to go ahead and write a new<br />
back end that would let the card do the entire Doom interaction rendering in<br />
a single pass. The most expedient sounding option was to just use the Nvidia<br />
extensions that they implement, NV_vertex_program and NV_register_combiners,<br />
with seven texture units instead of the four available on GF3/GF4. Instead, I<br />
decided to try using the prototype OpenGL 2.0 extensions they provide.</p>
<p>The implementation went very smoothly, but I did run into the limits of their<br />
current prototype compiler before the full feature set could be implemented.<br />
I like it a lot. I am really looking forward to doing research work with this<br />
programming model after the compiler matures a bit. While the shading<br />
languages are the most critical aspects, and can be broken out as extensions<br />
to current OpenGL, there are a lot of other subtle-but-important things that<br />
are addressed in the full OpenGL 2.0 proposal.</p>
<p>I am now committed to supporting an OpenGL 2.0 renderer for Doom through all<br />
the spec evolutions. If anything, I have been somewhat remiss in not pushing<br />
the issues as hard as I could with all the vendors. Now really is the<br />
critical time to start nailing things down, and the decisions may stay with<br />
us for ten years.</p>
<p>A GL2 driver won&#8217;t give any theoretical advantage over the current back ends<br />
optimized for cards with 7+ texture capability, but future research work will<br />
almost certainly be moving away from the lower level coding practices, and if<br />
some new vendor pops up (say, Rendition back from the dead) with a next-gen<br />
card, I would strongly urge them to implement GL2 instead of proprietary<br />
extensions.</p>
<p>I have not done a detailed comparison with Cg. There are a half dozen C-like<br />
graphics languages floating around, and honestly, I don&#8217;t think there is a<br />
hell of a lot of usability difference between them at the syntax level. They<br />
are all a whole lot better than the current interfaces we are using, so I hope<br />
syntax quibbles don&#8217;t get too religious. It won&#8217;t be too long before all real<br />
work is done in one of these, and developers that stick with the lower level<br />
interfaces will be regarded like people that write all-assembly PC<br />
applications today. (I get some amusement from the all-assembly crowd, and it<br />
can be impressive, but it is certainly not effective)</p>
<p>I do need to get up on a soapbox for a long discourse about why the upcoming<br />
high level languages MUST NOT have fixed, queried resource limits if they are<br />
going to reach their full potential. I will go into a lot of detail when I<br />
get a chance, but drivers must have the right and responsibility to multipass<br />
arbitrarily complex inputs to hardware with smaller limits. Get over it.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2002/06/27/more-graphics-card-notes/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Matrox Parhelia Report</title>
		<link>http://doom-ed.com/blog/2002/06/25/the-matrox-parhelia-report</link>
		<comments>http://doom-ed.com/blog/2002/06/25/the-matrox-parhelia-report#comments</comments>
		<pubDate>Tue, 25 Jun 2002 13:38:48 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2002/06/25/the-matrox-parhelia-report</guid>
		<description><![CDATA[The Matrox Parhelia Report:
The executive summary is that the Parhelia will run Doom, but it is not
performance competitive with Nvidia or ATI.
Driver issue remain, so it is not perfect yet, but I am confident that Matrox
will resolve them.
The performance was really disappointing for the first 256 bit DDR card. I
tried to set up a &#8220;poster [...]]]></description>
			<content:encoded><![CDATA[<p>The Matrox Parhelia Report:</p>
<p>The executive summary is that the Parhelia will run Doom, but it is not<br />
performance competitive with Nvidia or ATI.</p>
<p>Driver issue remain, so it is not perfect yet, but I am confident that Matrox<br />
will resolve them.</p>
<p>The performance was really disappointing for the first 256 bit DDR card. I<br />
tried to set up a &#8220;poster child&#8221; case that would stress the memory subsystem<br />
above and beyond any driver or triangle level inefficiencies, but I was<br />
unable to get it to ever approach the performance of a GF4.</p>
<p>The basic hardware support is good, with fragment flexibility better than GF4<br />
(but not as good as ATI 8500), but it just doesn&#8217;t keep up in raw performance.<br />
With a die shrink, this chip could probably be a contender, but there are<br />
probably going to be other chips out by then that will completely eclipse<br />
this generation of products.</p>
<p>None of the special features will be really useful for Doom:</p>
<p>The 10 bit color framebuffer is nice, but Doom needs more than 2 bits of<br />
destination alpha when a card only has four texture units, so we can&#8217;t use it.</p>
<p>Anti aliasing features are nice, but it isn&#8217;t all that fast in minimum feature<br />
mode, so nobody is going to be turning on AA. The same goes for &#8220;surround<br />
gaming&#8221;. While the framerate wouldn&#8217;t be 1/3 the base, it would still<br />
probably be cut in half.</p>
<p>Displacement mapping. Sigh. I am disappointed that the industry is still<br />
pursuing any quad based approaches. Haven&#8217;t we learned from the stellar<br />
success of 3DO, Saturn, and NV1 that quads really suck? In any case, we can&#8217;t<br />
use any geometry amplification scheme (including ATI&#8217;s truform) in conjunction<br />
with stencil shadow volumes.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2002/06/25/the-matrox-parhelia-report/feed</wfw:commentRss>
		</item>
		<item>
		<title>Shadow Volume</title>
		<link>http://doom-ed.com/blog/2002/03/15/shadow-volume</link>
		<comments>http://doom-ed.com/blog/2002/03/15/shadow-volume#comments</comments>
		<pubDate>Fri, 15 Mar 2002 17:36:02 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2002/03/15/shadow-volume</guid>
		<description><![CDATA[Mark Kilgard and Cass Everitt at Nvidia have released a paper on shadow volume
rendering with several interesting bits in it. They also include a small
document that I wrote a couple years ago about my discovery process during
the development of some of the early Doom technology.
http://developer.nvidia.com/view.asp?IO=robust_shadow_volumes
8:50 pm addendum: Mark Kilgard at Nvidia said that the current [...]]]></description>
			<content:encoded><![CDATA[<p>Mark Kilgard and Cass Everitt at Nvidia have released a paper on shadow volume<br />
rendering with several interesting bits in it. They also include a small<br />
document that I wrote a couple years ago about my discovery process during<br />
the development of some of the early Doom technology.</p>
<p>http://developer.nvidia.com/view.asp?IO=robust_shadow_volumes</p>
<p>8:50 pm addendum: Mark Kilgard at Nvidia said that the current drivers already<br />
support the vertex program option to be invarint with the fixed function path,<br />
and that it turned out to be one instruction FASTER, not slower.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2002/03/15/shadow-volume/feed</wfw:commentRss>
		</item>
		<item>
		<title>Nvidia vs. ATI</title>
		<link>http://doom-ed.com/blog/2002/02/11/nvidia-vs-ati</link>
		<comments>http://doom-ed.com/blog/2002/02/11/nvidia-vs-ati#comments</comments>
		<pubDate>Mon, 11 Feb 2002 13:43:58 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2002/02/11/nvidia-vs-ati</guid>
		<description><![CDATA[Last month I wrote the Radeon 8500 support for Doom. The bottom line is that
it will be a fine card for the game, but the details are sort of interesting.
I had a pre-production board before Siggraph last year, and we were discussing
the possibility of letting ATI show a Doom demo behind closed doors on it. [...]]]></description>
			<content:encoded><![CDATA[<p>Last month I wrote the Radeon 8500 support for Doom. The bottom line is that<br />
it will be a fine card for the game, but the details are sort of interesting.</p>
<p>I had a pre-production board before Siggraph last year, and we were discussing<br />
the possibility of letting ATI show a Doom demo behind closed doors on it. We<br />
were all very busy at the time, but I took a shot at bringing up support over<br />
a weekend. I hadn&#8217;t coded any of the support for the custom ATI extensions<br />
yet, but I ran the game using only standard OpenGL calls (this is not a<br />
supported path, because without bump mapping everything looks horrible) to see<br />
how it would do. It didn&#8217;t even draw the console correctly, because they had<br />
driver bugs with texGen. I thought the odds were very long against having all<br />
the new, untested extensions working properly, so I pushed off working on it<br />
until they had revved the drivers a few more times.</p>
<p>My judgment was colored by the experience of bringing up Doom on the original<br />
Radeon card a year earlier, which involved chasing a lot of driver bugs. Note<br />
that ATI was very responsive, working closely with me on it, and we were able<br />
to get everything resolved, but I still had no expectation that things would<br />
work correctly the first time.</p>
<p>Nvidia&#8217;s OpenGL drivers are my &#8220;gold standard&#8221;, and it has been quite a while<br />
since I have had to report a problem to them, and even their brand new<br />
extensions work as documented the first time I try them. When I have a<br />
problem on an Nvidia, I assume that it is my fault. With anyone else&#8217;s<br />
drivers, I assume it is their fault. This has turned out correct almost all<br />
the time. I have heard more anecdotal reports of instability on some systems<br />
with Nivida drivers recently, but I track stability separately from<br />
correctness, because it can be influenced by so many outside factors.</p>
<p>ATI had been patiently pestering me about support for a few months, so last<br />
month I finally took another stab at it. The standard OpenGL path worked<br />
flawlessly, so I set about taking advantage of all the 8500 specific features.<br />
As expected, I did run into more driver bugs, but ATI got me fixes rapidly,<br />
and we soon had everything working properly. It is interesting to contrast<br />
the Nvidia and ATI functionality:</p>
<p>The vertex program extensions provide almost the same functionality. The ATI<br />
hardware is a little bit more capable, but not in any way that I care about.<br />
The ATI extension interface is massively more painful to use than the text<br />
parsing interface from nvidia. On the plus side, the ATI vertex programs are<br />
invariant with the normal OpenGL vertex processing, which allowed me to reuse<br />
a bunch of code. The Nvidia vertex programs can&#8217;t be used in multipass<br />
algorithms with standard OpenGL passes, because they generate tiny differences<br />
in depth values, forcing you to implement EVERYTHING with vertex programs.<br />
Nvidia is planning on making this optional in the future, at a slight speed<br />
cost.</p>
<p>I have mixed feelings about the vertex object / vertex array range extensions.<br />
ATI&#8217;s extension seems more &#8220;right&#8221; in that it automatically handles<br />
synchronization by default, and could be implemented as a wire protocol, but<br />
there are advantages to the VAR extension being simply a hint. It is easy to<br />
have a VAR program just fall back to normal virtual memory by not setting the<br />
hint and using malloc, but ATI&#8217;s extension requires different function calls<br />
for using vertex objects and normal vertex arrays.</p>
<p>The fragment level processing is clearly way better on the 8500 than on the<br />
Nvidia products, including the latest GF4. You have six individual textures,<br />
but you can access the textures twice, giving up to eleven possible texture<br />
accesses in a single pass, and the dependent texture operation is much more<br />
sensible. This wound up being a perfect fit for Doom, because the standard<br />
path could be implemented with six unique textures, but required one texture<br />
(a normalization cube map) to be accessed twice. The vast majority of Doom<br />
light / surface interaction rendering will be a single pass on the 8500, in<br />
contrast to two or three passes, depending on the number of color components<br />
in a light, for GF3/GF4 (*note GF4 bitching later on).</p>
<p>Initial performance testing was interesting. I set up three extreme cases to<br />
exercise different characteristics:</p>
<p>A test of the non-textured stencil shadow speed showed a GF3 about 20% faster<br />
than the 8500. I believe that Nvidia has a slightly higher performance memory<br />
architecture.</p>
<p>A test of light interaction speed initially had the 8500 significantly slower<br />
than the GF3, which was shocking due to the difference in pass count. ATI<br />
identified some driver issues, and the speed came around so that the 8500 was<br />
faster in all combinations of texture attributes, in some cases 30+% more.<br />
This was about what I expected, given the large savings in memory traffic by<br />
doing everything in a single pass.</p>
<p>A high polygon count scene that was more representative of real game graphics<br />
under heavy load gave a surprising result. I was expecting ATI to clobber<br />
Nvidia here due to the much lower triangle count and MUCH lower state change<br />
functional overhead from the single pass interaction rendering, but they came<br />
out slower. ATI has identified an issue that is likely causing the unexpected<br />
performance, but it may not be something that can be worked around on current<br />
hardware.</p>
<p>I can set up scenes and parameters where either card can win, but I think that<br />
current Nvidia cards are still a somewhat safer bet for consistent performance<br />
and quality.</p>
<p>On the topic of current Nvidia cards:</p>
<p>Do not buy a GeForce4-MX for Doom.</p>
<p>Nvidia has really made a mess of the naming conventions here. I always<br />
thought it was bad enough that GF2 was just a speed bumped GF1, while GF3 had<br />
significant architectural improvements over GF2. I expected GF4 to be the<br />
speed bumped GF3, but calling the NV17 GF4-MX really sucks.</p>
<p>GF4-MX will still run Doom properly, but it will be using the NV10 codepath<br />
with only two texture units and no vertex shaders. A GF3 or 8500 will be<br />
much better performers. The GF4-MX may still be the card of choice for many<br />
people depending on pricing, especially considering that many games won&#8217;t use<br />
four textures and vertex programs, but damn, I wish they had named it<br />
something else.</p>
<p>As usual, there will be better cards available from both Nvidia and ATI by the<br />
time we ship the game.</p>
<p>8:50 pm addendum: Mark Kilgard at Nvidia said that the current drivers already<br />
support the vertex program option to be invarint with the fixed function path,<br />
and that it turned out to be one instruction FASTER, not slower.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2002/02/11/nvidia-vs-ati/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake 2 Source Code</title>
		<link>http://doom-ed.com/blog/2001/12/21/quake-2-source-code</link>
		<comments>http://doom-ed.com/blog/2001/12/21/quake-2-source-code#comments</comments>
		<pubDate>Fri, 21 Dec 2001 17:07:50 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2001/12/21/quake-2-source-code</guid>
		<description><![CDATA[The Quake 2 source code is now available for download, licensed under the GPL.
ftp://ftp.idsoftware.com/idstuff/source/quake2.zip
As with previous source code releases, the game data remains under the
original copyright and license, and cannot be freely distributed. If you
create a true total conversion, you can give (or sell) a complete package
away, as long as you abide by the GPL [...]]]></description>
			<content:encoded><![CDATA[<p>The Quake 2 source code is now available for download, licensed under the GPL.</p>
<p>ftp://ftp.idsoftware.com/idstuff/source/quake2.zip</p>
<p>As with previous source code releases, the game data remains under the<br />
original copyright and license, and cannot be freely distributed. If you<br />
create a true total conversion, you can give (or sell) a complete package<br />
away, as long as you abide by the GPL source code license. If your projects<br />
use the original Quake 2 media, the media must come from a normal, purchased<br />
copy of the game.</p>
<p>I&#8217;m sure I will catch some flack about increased cheating after the source<br />
release, but there are plenty of Q2 cheats already out there, so you are<br />
already in the position of having to trust the other players to a degree. The<br />
problem is really only solvable by relying on the community to police itself,<br />
because it is a fundamentally unwinnable technical battle to make a completely<br />
cheat proof game of this type. Play with your friends.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2001/12/21/quake-2-source-code/feed</wfw:commentRss>
		</item>
		<item>
		<title>Driver Optimization</title>
		<link>http://doom-ed.com/blog/2001/11/16/driver-optimization</link>
		<comments>http://doom-ed.com/blog/2001/11/16/driver-optimization#comments</comments>
		<pubDate>Fri, 16 Nov 2001 21:22:17 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2001/11/16/driver-optimization</guid>
		<description><![CDATA[Driver optimizations have been discussed a lot lately because of the quake3
name checking in ATI&#8217;s recent drivers, so I am going to lay out my
position on the subject.
There are many driver optimizations that are pure improvements in all cases,
with no negative effects. The difficult decisions come up when it comes to
&#8220;trades&#8221; of various kinds, where [...]]]></description>
			<content:encoded><![CDATA[<p>Driver optimizations have been discussed a lot lately because of the quake3<br />
name checking in ATI&#8217;s recent drivers, so I am going to lay out my<br />
position on the subject.</p>
<p>There are many driver optimizations that are pure improvements in all cases,<br />
with no negative effects. The difficult decisions come up when it comes to<br />
&#8220;trades&#8221; of various kinds, where a change will give an increase in<br />
performance, but at a cost.</p>
<p>Relative performance trades. Part of being a driver writer is being able to<br />
say &#8220;I don&#8217;t care if stippled, anti-aliased points with texturing go slow&#8221;,<br />
and optimizing accordingly. Some hardware features, like caches and<br />
hierarchical buffers, may be advantages on some apps, and disadvantages on<br />
others. Command buffer sizes often tune differently for different<br />
applications.</p>
<p>Quality trades. There is a small amount of wiggle room in the specs for pixel<br />
level variability, and some performance gains can be had by leaning towards<br />
the minimums. Most quality trades would actually be conformance trades,<br />
because the results are not exactly conformant, but they still do &#8220;roughly&#8221;<br />
the right thing from a visual standpoint. Compressing textures automatically,<br />
avoiding blending of very faint transparent pixels, using a 16 bit depth<br />
buffer, etc. A good application will allow the user to make most of these<br />
choices directly, but there is good call for having driver preference panels<br />
to enable these types of changes on naive applications. Many drivers now<br />
allow you to quality trade in an opposite manner &#8212; slowing application<br />
performance by turning on anti-aliasing or anisotropic texture filtering.</p>
<p>Conformance trades. Most conformance trades that happen with drivers are<br />
unintentional, where the slower, more general fallback case just didn&#8217;t get<br />
called when it was supposed to, because the driver didn&#8217;t check for a certain<br />
combination to exit some specially optimized path. However, there are<br />
optimizations that can give performance improvements in ways that make it<br />
impossible to remain conformant. For example, a driver could choose to skip<br />
storing of a color value before it is passed on to the hardware, which would<br />
save a few cycles, but make it impossible to correctly answer<br />
glGetFloatv( GL_CURRENT_COLOR, buffer ).</p>
<p>Normally, driver writers will just pick their priorities and make the trades,<br />
but sometimes there will be a desire to make different trades in different<br />
circumstances, so as to get the best of both worlds.</p>
<p>Explicit application hints are a nice way to offer different performance<br />
characteristics, but that requires cooperation from the application, so it<br />
doesn&#8217;t help in an ongoing benchmark battle. OpenGL&#8217;s glHint() call is the<br />
right thought, but not really set up as flexibly as you would like. Explicit<br />
extensions are probably the right way to expose performance trades, but it<br />
isn&#8217;t clear to me that any conformant trade will be a big enough difference<br />
to add code for.</p>
<p>End-user selectable optimizations. Put a selection option in the driver<br />
properties window to allow the user to choose which application class they<br />
would like to be favored in some way. This has been done many times, and is a<br />
reasonable way to do things. Most users would never touch the setting, so<br />
some applications may be slightly faster or slower than in their &#8220;optimal<br />
benchmark mode&#8221;.</p>
<p>Attempt to guess the application from app names, window strings, etc. Drivers<br />
are sometimes forced to do this to work around bugs in established software,<br />
and occasionally they will try to use this as a cue for certain optimizations.</p>
<p>My positions:</p>
<p>Making any automatic optimization based on a benchmark name is wrong. It<br />
subverts the purpose of benchmarking, which is to gauge how a similar class of<br />
applications will perform on a tested configuration, not just how the single<br />
application chosen as representative performs.</p>
<p>It is never acceptable to have the driver automatically make a conformance<br />
tradeoff, even if they are positive that it won&#8217;t make any difference. The<br />
reason is that applications evolve, and there is no guarantee that a future<br />
release won&#8217;t have different assumptions, causing the upgrade to misbehave.<br />
We have seen this in practice with Quake3 and derivatives, where vendors<br />
assumed something about what may or may not be enabled during a compiled<br />
vertex array call. Most of these are just mistakes, or, occasionally,<br />
laziness.</p>
<p>Allowing a driver to present a non-conformant option for the user to select is<br />
an interesting question. I know that as a developer, I would get hate mail<br />
from users when a point release breaks on their whiz-bang optimized driver,<br />
just like I do with overclocked CPUs, and I would get the same &#8220;but it works<br />
with everything else!&#8221; response when I tell them to put it back to normal. On<br />
the other hand, being able to tweak around with that sort of think is fun for<br />
technically inclined users. I lean towards frowning on it, because it is a<br />
slippery slope from there down in to &#8220;cheating drivers&#8221; of the see-through-<br />
walls variety.</p>
<p>Quality trades are here to stay, with anti-aliasing, anisotropic texture<br />
filtering, and other options being positive trades that a user can make, and<br />
allowing various texture memory optimizations can be a very nice thing for a<br />
user trying to get some games to work well. However, it is still important<br />
that it start from a completely conformant state by default. This is one area<br />
where application naming can be used reasonably by the driver, to maintain<br />
user selected per-application modifiers.</p>
<p>I&#8217;m not fanatical on any of this, because the overriding purpose of software<br />
is to be useful, rather than correct, but the days of game-specific mini-<br />
drivers that can just barely cut it are past, and we should demand more from<br />
the remaining vendors.</p>
<p>Also, excessive optimization is the cause of quite a bit of ill user<br />
experience with computers. Byzantine code paths extract costs as long as they<br />
exist, not just as they are written.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2001/11/16/driver-optimization/feed</wfw:commentRss>
		</item>
		<item>
		<title>Doom 3 on a GeForce 3</title>
		<link>http://doom-ed.com/blog/2001/02/22/doom-3-on-a-geforce-3</link>
		<comments>http://doom-ed.com/blog/2001/02/22/doom-3-on-a-geforce-3#comments</comments>
		<pubDate>Thu, 22 Feb 2001 19:02:26 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2001/02/22/doom-3-on-a-geforce-3</guid>
		<description><![CDATA[I just got back from Tokyo, where I demonstrated our new engine
running under MacOS-X with a GeForce 3 card. We had quite a bit of
discussion about whether we should be showing anything at all,
considering how far away we are from having a title on the shelves, so
we probably aren&#8217;t going to be showing it anywhere [...]]]></description>
			<content:encoded><![CDATA[<p>I just got back from Tokyo, where I demonstrated our new engine<br />
running under MacOS-X with a GeForce 3 card. We had quite a bit of<br />
discussion about whether we should be showing anything at all,<br />
considering how far away we are from having a title on the shelves, so<br />
we probably aren&#8217;t going to be showing it anywhere else for quite<br />
a while.</p>
<p>We do run a bit better on a high end wintel system, but the Apple<br />
performance is still quite good, especially considering the short amount<br />
of time that the drivers had before the event.</p>
<p>It is still our intention to have a simultaneous release of the next<br />
product on Windows, MacOS-X, and Linux.</p>
<p>Here is a dump on the GeForce 3 that I have been seriously working<br />
with for a few weeks now:</p>
<p>The short answer is that the GeForce 3 is fantastic. I haven&#8217;t had such an<br />
impression of raising the performance bar since the Voodoo 2 came out, and<br />
there are a ton of new features for programmers to play with.</p>
<p>Graphics programmers should run out and get one at the earliest possible<br />
time. For consumers, it will be a tougher call. There aren&#8217;t any<br />
applications our right now that take proper advantage of it, but you should<br />
still be quite a bit faster at everything than GF2, especially with<br />
anti-aliasing. Balance that against whatever the price turns out to be.</p>
<p>While the Radeon is a good effort in many ways, it has enough shortfalls<br />
that I still generally call the GeForce 2 ultra the best card you can buy<br />
right now, so Nvidia is basically dethroning their own product.</p>
<p>It is somewhat unfortunate that it is labeled GeForce 3, because GeForce<br />
2 was just a speed bump of GeForce, while GF3 is a major architectural<br />
change. I wish they had called the GF2 something else.</p>
<p>The things that are good about it:</p>
<p>Lots of values have additional internal precision, like texture coordinates<br />
and rasterization coordinates. There are only a few places where this<br />
matters, but it is nice to be cleaning up. Rasterization precision is about<br />
the last thing that the multi-thousand dollar workstation boards still do<br />
any better than the consumer cards.</p>
<p>Adding more texture units and more register combiners is an obvious<br />
evolutionary step.</p>
<p>An interesting technical aside: when I first changed something I was<br />
doing with five single or dual texture passes on a GF to something that<br />
only took two quad texture passes on a GF3, I got a surprisingly modest<br />
speedup. It turned out that the texture filtering and bandwidth was the<br />
dominant factor, not the frame buffer traffic that was saved with more<br />
texture units. When I turned off anisotropic filtering and used<br />
compressed textures, the GF3 version became twice as fast.</p>
<p>The 8x anisotropic filtering looks really nice, but it has a 30%+ speed<br />
cost. For existing games where you have speed to burn, it is probably a<br />
nice thing to force on, but it is a bit much for me to enable on the current<br />
project. Radeon supports 16x aniso at a smaller speed cost, but not in<br />
conjunction with trilinear, and something is broken in the chip that<br />
makes the filtering jump around with triangular rasterization<br />
dependencies.</p>
<p>The depth buffer optimizations are similar to what the Radeon provides,<br />
giving almost everything some measure of speedup, and larger ones<br />
available in some cases with some redesign.</p>
<p>3D textures are implemented with the full, complete generality. Radeon<br />
offers 3D textures, but without mip mapping and in a non-orthogonal<br />
manner (taking up two texture units).</p>
<p>Vertex programs are probably the most radical new feature, and, unlike<br />
most &#8220;radical new features&#8221;, actually turn out to be pretty damn good.<br />
The instruction language is clear and obvious, with wonderful features<br />
like free arbitrary swizzle and negate on each operand, and the obvious<br />
things you want for graphics like dot product instructions.</p>
<p>The vertex program instructions are what SSE should have been.</p>
<p>A complex setup for a four-texture rendering pass is way easier to<br />
understand with a vertex program than with a ton of texgen/texture<br />
matrix calls, and it lets you do things that you just couldn&#8217;t do hardware<br />
accelerated at all before. Changing the model from fixed function data<br />
like normals, colors, and texcoords to generalized attributes is very<br />
important for future progress.</p>
<p>Here, I think Microsoft and DX8 are providing a very good benefit by<br />
forcing a single vertex program interface down all the hardware<br />
vendor&#8217;s throats.</p>
<p>This one is truly stunning: the drivers just worked for all the new<br />
features that I tried. I have tested a lot of pre-production 3D cards, and it<br />
has never been this smooth.</p>
<p>The things that are indifferent:</p>
<p>I&#8217;m still not a big believer in hardware accelerated curve tessellation.<br />
I&#8217;m not going to go over all the reasons again, but I would have rather<br />
seen the features left off and ended up with a cheaper part.</p>
<p>The shadow map support is good to get in, but I am still unconvinced<br />
that a fully general engine can be produced with acceptable quality using<br />
shadow maps for point lights. I spent a while working with shadow<br />
buffers last year, and I couldn&#8217;t get satisfactory results. I will revisit<br />
that work now that I have GeForce 3 cards, and directly compare it with my<br />
current approach.</p>
<p>At high triangle rates, the index bandwidth can get to be a significant<br />
thing. Other cards that allow static index buffers as well as static vertex<br />
buffers will have situations where they provide higher application speed.<br />
Still, we do get great throughput on the GF3 using vertex array range<br />
and glDrawElements.</p>
<p>The things that are bad about it:</p>
<p>Vertex programs aren&#8217;t invariant with the fixed function geometry paths.<br />
That means that you can&#8217;t mix vertex program passes with normal<br />
passes in a multipass algorithm. This is annoying, and shouldn&#8217;t have<br />
happened.</p>
<p>Now we come to the pixel shaders, where I have the most serious issues.<br />
I can just ignore this most of the time, but the way the pixel shader<br />
functionality turned out is painfully limited, and not what it should have<br />
been.</p>
<p>DX8 tries to pretend that pixel shaders live on hardware that is a lot<br />
more general than the reality.</p>
<p>Nvidia&#8217;s OpenGL extensions expose things much more the way they<br />
actually are: the existing register combiners functionality extended to<br />
eight stages with a couple tweaks, and the texture lookup engine is<br />
configurable to interact between textures in a list of specific ways.</p>
<p>I&#8217;m sure it started out as a better design, but it apparently got cut and cut<br />
until it really looks like the old BumpEnvMap feature writ large: it does<br />
a few specific special effects that were deemed important, at the expense<br />
of a properly general solution.</p>
<p>Yes, it does full bumpy cubic environment mapping, but you still can&#8217;t<br />
just do some math ops and look the result up in a texture. I was<br />
disappointed on this count with the Radeon as well, which was just<br />
slightly too hardwired to the DX BumpEnvMap capabilities to allow<br />
more general dependent texture use.</p>
<p>Enshrining the capabilities of this mess in DX8 sucks. Other companies<br />
had potentially better approaches, but they are now forced to dumb them<br />
down to the level of the GF3 for the sake of compatibility. Hopefully<br />
we can still see some of the extra flexibility in OpenGL extensions.</p>
<p>The future:</p>
<p>I think things are going to really clean up in the next couple years. All<br />
of my advocacy is focused on making sure that there will be a<br />
completely clean and flexible interface for me to target in the engine<br />
after DOOM, and I think it is going to happen.</p>
<p>The market may have shrunk to just ATI and Nvidia as significant<br />
players. Matrox, 3D labs, or one of the dormant companies may surprise<br />
us all, but the pace is pretty frantic.</p>
<p>I think I would be a little more comfortable if there was a third major<br />
player competing, but I can&#8217;t fault Nvidia&#8217;s path to success.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2001/02/22/doom-3-on-a-geforce-3/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Birth of Doom 3</title>
		<link>http://doom-ed.com/blog/2000/06/01/the-birth-of-doom-3</link>
		<comments>http://doom-ed.com/blog/2000/06/01/the-birth-of-doom-3#comments</comments>
		<pubDate>Thu, 01 Jun 2000 00:51:45 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/06/01/the-birth-of-doom-3</guid>
		<description><![CDATA[Well, this is going to be an interesting .plan update.
Most of this is not really public business, but if some things aren&#8217;t stated
explicitly, it will reflect unfairly on someone.
As many people have heard discussed, there was quite a desire to remake DOOM
as our next project after Q3. Discussing it brought an almost palpable thrill
to most [...]]]></description>
			<content:encoded><![CDATA[<p>Well, this is going to be an interesting .plan update.</p>
<p>Most of this is not really public business, but if some things aren&#8217;t stated<br />
explicitly, it will reflect unfairly on someone.</p>
<p>As many people have heard discussed, there was quite a desire to remake DOOM<br />
as our next project after Q3. Discussing it brought an almost palpable thrill<br />
to most of the employees, but Adrian had a strong enough dislike for the idea<br />
that it was shot down over and over again.</p>
<p>Design work on an alternate game has been going on in parallel with the<br />
mission pack development and my research work.</p>
<p>Several factors, including a general lack of enthusiasm for the proposed plan,<br />
the warmth that Wolfenstien was met with at E3, and excitement about what<br />
we can do with the latest rendering technology were making it seem more and<br />
more like we weren&#8217;t going down the right path.</p>
<p>I discussed it with some of the other guys, and we decided that it was<br />
important enough to drag the company through an unpleasant fight over it.</p>
<p>An ultimatum was issued to Kevin and Adrian(who control >50% of the company):<br />
We are working on DOOM for the next project unless you fire us.</p>
<p>Obviously no fun for anyone involved, but the project direction was changed,<br />
new hires have been expedited, and the design work has begun.</p>
<p>It wasn&#8217;t planned to announce this soon, but here it is: We are working on a<br />
new DOOM game, focusing on the single player game experience, and using brand<br />
new technology in almost every aspect of it. That is all we are prepared to<br />
say about the game for quite some time, so don&#8217;t push for interviews. We<br />
will talk about it when things are actually built, to avoid giving<br />
misleading comments.</p>
<p>It went smoother than expected, but the other shoe dropped yesterday.</p>
<p>Kevin and Adrian fired Paul Steed in retaliation, over my opposition.</p>
<p>Paul has certainly done things in the past that could be grounds for<br />
dismissal, but this was retaliatory for him being among the &#8220;conspirators&#8221;.</p>
<p>I happen to think Paul was damn good at his job, and that he was going to be<br />
one of the most valuable contributors to DOOM.</p>
<p>We need to hire two new modeler/animator/cinematic director types. If you<br />
have a significant commercial track record in all three areas, and consider<br />
yourself at the top of your field, send your resume to Kevin Cloud.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/06/01/the-birth-of-doom-3/feed</wfw:commentRss>
		</item>
		<item>
		<title>Comments on the Latest Cards</title>
		<link>http://doom-ed.com/blog/2000/05/17/comments-on-the-latest-cards</link>
		<comments>http://doom-ed.com/blog/2000/05/17/comments-on-the-latest-cards#comments</comments>
		<pubDate>Wed, 17 May 2000 21:10:18 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/05/17/comments-on-the-latest-cards</guid>
		<description><![CDATA[I have gotten a lot of requests for comments on the latest crop of video
cards, so here is my initial technical evaluation. We have played with
some early versions, but this is a paper evaluation. I am not in a position
to judge 2D GDI issues or TV/DVD issues, so this is just 3D commentary.
Nvidia
Marketing silliness: saying [...]]]></description>
			<content:encoded><![CDATA[<p>I have gotten a lot of requests for comments on the latest crop of video<br />
cards, so here is my initial technical evaluation. We have played with<br />
some early versions, but this is a paper evaluation. I am not in a position<br />
to judge 2D GDI issues or TV/DVD issues, so this is just 3D commentary.</p>
<p>Nvidia<br />
Marketing silliness: saying &#8220;seven operations on a pixel&#8221; for a dual texture<br />
chip. Yes, I like NV_register_combiners a lot, but come on&#8230;</p>
<p>The DDR GeForce is the reining champ of 3D cards. Of the shipping boards, it<br />
is basically better than everyone at every aspect of 3D graphics, and<br />
pioneered some features that are going to be very important: signed pixel<br />
math, dot product blending, and cubic environment maps.</p>
<p>The GeForce2 is just a speed bumped GeForce with a few tweaks, but that&#8217;s not<br />
a bad thing. Nvidia will have far and away the tightest drivers for quite<br />
some time, and that often means more than a lot of new features in the real<br />
world.</p>
<p>The nvidia register combiners are highly programmable, and can often save a<br />
rendering pass or allow a somewhat higher quality calculation, but on the<br />
whole, I would take ATI&#8217;s third texture for flexibility.</p>
<p>Nvidia will probably continue to hit the best framerates in benchmarks at low<br />
resolution, because they have flexible hardware with geometry acceleration<br />
and well-tuned drivers.</p>
<p>GeForce is my baseline for current rendering work, so I can wholeheartedly<br />
recommend it.</p>
<p>ATI<br />
Marketing silliness: &#8220;charisma engine&#8221; and &#8220;pixel tapestry&#8221; are silly names<br />
for vertex and pixel processing that are straightforward improvements over<br />
existing methods. Sony is probably to blame for starting that.</p>
<p>The Radeon has the best feature set available, with several advantages over<br />
GeForce:</p>
<p>A third texture unit per pixel<br />
Three dimensional textures<br />
Dependent texture reads (bump env map)<br />
Greater internal color precision.<br />
User clip planes orthogonal to all rasterization modes.<br />
More powerful vertex blending operations.<br />
The shadow id map support may be useful, but my work with shadow buffers have<br />
shown them to have significant limitations for global use in a game.</p>
<p>On paper, it is better than GeForce in almost every way except that it is<br />
limited to a maximum of two pixels per clock while GeForce can do four. This<br />
comes into play when the pixels don&#8217;t do as much memory access, for example<br />
when just drawing shadow planes to the depth/stencil buffer, or when drawing<br />
in roughly front to back order and many of the later pixels depth fail,<br />
avoiding the color buffer writes.</p>
<p>Depending on the application and algorithm, this can be anywhere from<br />
basically no benefit when doing 32 bit blended multi-pass, dual texture<br />
rendering to nearly double the performance for 16 bit rendering with<br />
compressed textures. In any case, a similarly clocked GeForce(2) should<br />
somewhat outperform a Radeon on today&#8217;s games when fill rate limited. Future<br />
games that do a significant number of rendering passes on the entire world<br />
may go back in ATI&#8217;s favor if they can use the third texture unit, but I doubt<br />
it will be all that common.</p>
<p>The real issue is how quickly ATI can deliver fully clocked production boards,<br />
bring up stable drivers, and wring all the performance out of the hardware.<br />
This is a very different beast than the Rage128. I would definitely recommend<br />
waiting on some consumer reviews to check for teething problems before<br />
upgrading to a Radeon, but if things go well, ATI may give nvidia a serious<br />
run for their money this year.</p>
<p>3DFX<br />
Marketing silliness: Implying that a voodoo 5 is of a different class than a<br />
voodoo 4 isn&#8217;t right. Voodoo 4 max / ultra / SLI / dual / quad or something<br />
would have been more forthright.</p>
<p>Rasterization feature wise, voodoo4 is just catching up to the original TNT.<br />
We finally have 32 bit color and stencil. Yeah.</p>
<p>There aren&#8217;t any geometry features.</p>
<p>The T buffer is really nothing more than an accumulation buffer that is<br />
averaged together during video scanout. This same combining of separate<br />
buffers can be done by any modern graphics card if they are set up for it<br />
(although they will lose two bits of color precision in the process). At<br />
around 60 fps there is a slight performance win by doing it at video scannout<br />
time, but at 30 fps it is actually less memory traffic to do it explicitly.<br />
Video scan tricks also usually don&#8217;t work in windowed modes.</p>
<p>The real unique feature of the voodoo5 is subpixel jittering during<br />
rasterization, which can&#8217;t reasonably be emulated by other hardware. This<br />
does indeed improve the quality of anti-aliasing, although I think 3dfx might<br />
be pushing it a bit by saying their 4 sample jittering is as good as 16<br />
sample unjittered.</p>
<p>The saving grace of the voodoo5 is the scalability. Because it only uses SDR<br />
ram, a dual chip Voodoo5 isn&#8217;t all that much faster than some other single<br />
chip cards, but the quad chip card has over twice the pixel fill rate of the<br />
nearest competitor. That is a huge increment. Voodoo5 6000 should win every<br />
benchmark that becomes fill rate limited.</p>
<p>I haven&#8217;t been able to honestly recommend a voodoo3 to people for a long<br />
time, unless they had a favorite glide game or wanted early linux Xfree 4.0<br />
3D support. Now (well, soon), a Voodoo5 6000 should make all of today&#8217;s<br />
games look better than any other card. You can get over twice as many pixel<br />
samples, and have them jittered and blended together for anti-aliasing.</p>
<p>It won&#8217;t be able to hit Q3 frame rates as high as GeForce, but if you have a<br />
high end processor there really may not be all that much difference for you<br />
between 100fps and 80fps unless you are playing hardcore competitive and<br />
can&#8217;t stand the occasional drop below 60fps.</p>
<p>There are two drawbacks: it&#8217;s expensive, and it won&#8217;t take advantage of the<br />
new rasterization features coming in future games. It probably wouldn&#8217;t be<br />
wise to buy a voodoo5 if you plan on keeping it for two years.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/05/17/comments-on-the-latest-cards/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mojave Desert</title>
		<link>http://doom-ed.com/blog/2000/05/14/mojave-desert</link>
		<comments>http://doom-ed.com/blog/2000/05/14/mojave-desert#comments</comments>
		<pubDate>Sun, 14 May 2000 07:13:45 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/05/14/mojave-desert</guid>
		<description><![CDATA[I stayed a couple days after E3 to attend the SORAC amateur rocket launch.
I have provided some sponsorship to two of the teams competing for the CATS
(Cheap Access to Space) rocketry prize, and it was a nice opportunity to get
out and meet some of the people.
It is interesting how similar the activity is around an [...]]]></description>
			<content:encoded><![CDATA[<p>I stayed a couple days after E3 to attend the SORAC amateur rocket launch.<br />
I have provided some sponsorship to two of the teams competing for the CATS<br />
(Cheap Access to Space) rocketry prize, and it was a nice opportunity to get<br />
out and meet some of the people.</p>
<p>It is interesting how similar the activity is around an experimental rocket<br />
launch, going to a race track with an experimental car, and putting out a<br />
beta version of new software is. Lots of &#8220;twenty more minutes!&#8221;, and lots<br />
of well-wishers waiting around while the people on the critical path sweat<br />
over what they are doing.</p>
<p>Mere minutes before we absolutely, positively needed to leave to catch our<br />
plane flight, they started the countdown. The rocket launched impressively,<br />
but broke apart at a relatively low altitude. Ouch. It was a hybrid, so<br />
there wasn&#8217;t really an explosion, but watching the debris rain down wasn&#8217;t<br />
very heartening. Times like that, I definitely appreciate working in<br />
software. &#8220;Run it again, with a breakpoint!&#8221;</p>
<p>Note to self: pasty-skinned programmers ought not stand out in the Mojave<br />
desert for multiple hours.</p>
<p>http://www.space-frontier.org/Events/CATSPRIZE_1/<br />
http://www.energyrs.com/sorac/sorac.htm<br />
http://www.jpaerospace.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/05/14/mojave-desert/feed</wfw:commentRss>
		</item>
		<item>
		<title>Quake 1 Utilities</title>
		<link>http://doom-ed.com/blog/2000/05/09/quake-1-utilities</link>
		<comments>http://doom-ed.com/blog/2000/05/09/quake-1-utilities#comments</comments>
		<pubDate>Tue, 09 May 2000 18:02:51 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/05/09/quake-1-utilities</guid>
		<description><![CDATA[And the Q1 utilities are now also available under the GPL in
source/q1tools_gpl.tgz.
]]></description>
			<content:encoded><![CDATA[<p>And the Q1 utilities are now also available under the GPL in<br />
source/q1tools_gpl.tgz.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/05/09/quake-1-utilities/feed</wfw:commentRss>
		</item>
		<item>
		<title>QC Files</title>
		<link>http://doom-ed.com/blog/2000/05/08/qc-files</link>
		<comments>http://doom-ed.com/blog/2000/05/08/qc-files#comments</comments>
		<pubDate>Tue, 09 May 2000 00:41:25 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/05/08/qc-files</guid>
		<description><![CDATA[The .qc files for quake1/quakeworld are now available under the GPL
in source/qw-qc.tar.gx on out ftp site. This was an oversight on my
part in the original release.
Thanks to the QuakeForge team for doing the grunt work of the preparation.
]]></description>
			<content:encoded><![CDATA[<p>The .qc files for quake1/quakeworld are now available under the GPL<br />
in source/qw-qc.tar.gx on out ftp site. This was an oversight on my<br />
part in the original release.</p>
<p>Thanks to the QuakeForge team for doing the grunt work of the preparation.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/05/08/qc-files/feed</wfw:commentRss>
		</item>
		<item>
		<title>More Bits per Color</title>
		<link>http://doom-ed.com/blog/2000/04/29/more-bits-per-color</link>
		<comments>http://doom-ed.com/blog/2000/04/29/more-bits-per-color#comments</comments>
		<pubDate>Sat, 29 Apr 2000 05:23:08 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/04/29/more-bits-per-color</guid>
		<description><![CDATA[We need more bits per color component in our 3D accelerators.
I have been pushing for a couple more bits of range for several years now,
but I now extend that to wanting full 16 bit floating point colors throughout
the graphics pipeline. A sign bit, ten bits of mantissa, and five bits of
exponent (possibly trading a bit [...]]]></description>
			<content:encoded><![CDATA[<p>We need more bits per color component in our 3D accelerators.</p>
<p>I have been pushing for a couple more bits of range for several years now,<br />
but I now extend that to wanting full 16 bit floating point colors throughout<br />
the graphics pipeline. A sign bit, ten bits of mantissa, and five bits of<br />
exponent (possibly trading a bit or two between the mantissa and exponent).<br />
Even that isn&#8217;t all you could want, but it is the rational step.</p>
<p>It is turning out that I need a destination alpha channel for a lot of the<br />
new rendering algorithms, so intermediate solutions like 10/12/10 RGB<br />
formats aren&#8217;t a good idea. Higher internal precision with dithering to 32<br />
bit pixels would have some benefit, but dithered intermediate results can<br />
easily start piling up the errors when passed over many times, as we have<br />
seen with 5/6/5 rendering.</p>
<p>Eight bits of precision isn&#8217;t enough even for full range static image<br />
display. Images with a wide range usually come out fine, but restricted<br />
range images can easily show banding on a 24-bit display. Digital television<br />
specifies 10 bits of precision, and many printing operations are performed<br />
with 12 bits of precision.</p>
<p>The situation becomes much worse when you consider the losses after multiple<br />
operations. As a trivial case, consider having multiple lights on a wall,<br />
with their contribution to a pixel determined by a texture lookup. A single<br />
light will fall off towards 0 some distance away, and if it covers a large<br />
area, it will have visible bands as the light adds one unit, two units, etc.<br />
Each additional light from the same relative distance stacks its contribution<br />
on top of the earlier ones, which magnifies the amount of the step between<br />
bands: instead of going 0,1,2, it goes 0,2,4, etc. Pile a few lights up like<br />
this and look towards the dimmer area of the falloff, and you can believe you<br />
are back in 256-color land.</p>
<p>There are other more subtle issues, like the loss of potential result values<br />
from repeated squarings of input values, and clamping issues when you sum up<br />
multiple incident lights before modulating down by a material.</p>
<p>Range is even more clear cut. There are some values that have intrinsic<br />
ranges of 0.0 to 1.0, like factors of reflection and filtering. Normalized<br />
vectors have a range of -1.0 to 1.0. However, the most central quantity in<br />
rendering, light, is completely unbounded. We want a LOT more than a 0.0 to<br />
1.0 range. Q3 hacks the gamma tables to sacrifice a bit of precision to get<br />
a 0.0 to 2.0 range, but I wanted more than that for even primitive rendering<br />
techniques. To accurately model the full human sensable range of light<br />
values, you would need more than even a five bit exponent.</p>
<p>This wasn&#8217;t much of an issue even a year ago, when we were happy to just<br />
cover the screen a couple times at a high framerate, but realtime graphics<br />
is moving away from just &#8220;putting up wallpaper&#8221; to calculating complex<br />
illumination equations at each pixel. It is not at all unreasonable to<br />
consider having twenty textures contribute to the final value of a pixel.<br />
Range and precision matter.</p>
<p>A few common responses to this pitch:</p>
<p>&#8220;64 bits per pixel??? Are you crazy???&#8221; Remember, it is exactly the same<br />
relative step as we made from 16 bit to 32 bit, which didn&#8217;t take all<br />
that long.</p>
<p>Yes, it will be slower. That&#8217;s ok. This is an important point: we can&#8217;t<br />
continue to usefully use vastly greater fill rate without an increase in<br />
precision. You can always crank the resolution and multisample anti-alaising<br />
up higher, but that starts to have diminishing returns well before you use of<br />
the couple gigatexels of fill rate we are expected to have next year. The<br />
cool and interesting things to do with all that fill rate involves many<br />
passes composited into less pixels, making precision important.</p>
<p>&#8220;Can we just put it in the texture combiners and leave the framebuffer at 32<br />
bits?&#8221; No. There are always going to be shade trees that overflow a given<br />
number of texture units, and they are going to be the ones that need the<br />
extra precision. Scales and biases between the framebuffer and the higher<br />
precision internal calculations can get you some mileage (assuming you can<br />
bring the blend color into your combiners, which current cards can&#8217;t), but<br />
its still not what you want. There are also passes which fundamentally<br />
aren&#8217;t part of a single surface, but still combine to the same pixels, as<br />
with all forms of translucency, and many atmospheric effects.</p>
<p>&#8220;Do we need it in textures as well?&#8221; Not for most image textures, but it<br />
still needs to be supported for textures that are used as function look<br />
up tables.</p>
<p>&#8220;Do we need it in the front buffer?&#8221; Probably not. Going to a 64 bit front<br />
buffer would probably play hell with all sorts of other parts of the system.<br />
It is probably reasonable to stay with 32 bit front buffers with a blit from<br />
the 64 bit back buffer performing a lookup or scale and bias operation before<br />
dithering down to 32 bit. Dynamic light adaptation can also be done during<br />
this copy. Dithering can work quite well as long as you are only performing<br />
a single pass.</p>
<p>I used to be pitching this in an abstract &#8220;you probably should be doing this&#8221;<br />
form, but two significant things have happened that have moved this up my hit<br />
list to something that I am fairly positive about.</p>
<p>Mark Peercy of SGI has shown, quite surprisingly, that all Renderman surface<br />
shaders can be decomposed into multi-pass graphics operations if two<br />
extensions are provided over basic OpenGL: the existing pixel texture<br />
extension, which allows dependent texture lookups (matrox already supports a<br />
form of this, and most vendors will over the next year), and signed, floating<br />
point colors through the graphics pipeline. It also makes heavy use of the<br />
existing, but rarely optimized, copyTexSubImage2D functionality for<br />
temporaries.</p>
<p>This is a truly striking result. In retrospect, it seems obvious that with<br />
adds, multiplies, table lookups, and stencil tests that you can perform any<br />
computation, but most people were working under the assumption that there<br />
were fundamentally different limitations for &#8220;realtime&#8221; renderers vs offline<br />
renderers. It may take hundreds or thousands of passes, but it clearly<br />
defines an approach with no fundamental limits. This is very important.<br />
I am looking forward to his Siggraph paper this year.</p>
<p>Once I set down and started writing new renderers targeted at GeForce level<br />
performance, the precision issue has started to bite me personally. There<br />
are quite a few times where I have gotten visible banding after a set of<br />
passes, or have had to worry about ordering operations to avoid clamping.<br />
There is nothing like actually dealing with problems that were mostly<br />
theoretical before&#8230;</p>
<p>64 bit pixels. It is The Right Thing to do. Hardware vendors: don&#8217;t you be<br />
the company that is the last to make the transition.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/04/29/more-bits-per-color/feed</wfw:commentRss>
		</item>
		<item>
		<title>A Trip Down The Graphics Pipeline</title>
		<link>http://doom-ed.com/blog/2000/04/06/a-trip-down-the-graphics-pipeline</link>
		<comments>http://doom-ed.com/blog/2000/04/06/a-trip-down-the-graphics-pipeline#comments</comments>
		<pubDate>Thu, 06 Apr 2000 11:43:29 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/04/06/a-trip-down-the-graphics-pipeline</guid>
		<description><![CDATA[Whenever I start a new graphics engine, I always spend a fair amount of time
flipping back through older graphics books. It is always interesting to see
how your changed perspective with new experience impacts your appreciation of
a given article.
I was skimming through Jim Blinn&#8217;s &#8220;A Trip Down The Graphics Pipeline&#8221;
tonight, and I wound up laughing out [...]]]></description>
			<content:encoded><![CDATA[<p>Whenever I start a new graphics engine, I always spend a fair amount of time<br />
flipping back through older graphics books. It is always interesting to see<br />
how your changed perspective with new experience impacts your appreciation of<br />
a given article.</p>
<p>I was skimming through Jim Blinn&#8217;s &#8220;A Trip Down The Graphics Pipeline&#8221;<br />
tonight, and I wound up laughing out loud twice.</p>
<p>From the book:</p>
<p>P73: I then empirically found that I had to scale by -1 in x instead of in z,<br />
and also to scale the xa and xf values by -1. (Basically I just put in enough<br />
minus signs after the fact to make it work.) Al Barr refers to this technique<br />
as &#8220;making sure you have made an even number of sign errors.&#8221;</p>
<p>P131: The only lines that generate w=0 after clipping are those that pass<br />
through the z axis, the valley of the trough. These lines are lines that<br />
pass exactly through the eyepoint. After which you are dead and don&#8217;t care<br />
about divide-by-zero errors.</p>
<p>If you laughed, you are a graphics geek.</p>
<p>My first recollection of a Jim Blinn article many years ago was my skimming<br />
over it and thinking &#8220;My god, what ridiculously picky minutia.&#8221; Over the last<br />
couple years, I found myself haranguing people over some fairly picky issues,<br />
like the LSB errors with cpu vs rasterizer face culling and screen edge<br />
clipping with guard band bit tests. After one of those pitches, I quite<br />
distinctly thought to myself &#8220;My god, I&#8217;m turning into Jim Blinn!&#8221; <img src='http://doom-ed.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/04/06/a-trip-down-the-graphics-pipeline/feed</wfw:commentRss>
		</item>
		<item>
		<title>Startlight Foundation</title>
		<link>http://doom-ed.com/blog/2000/03/27/startlight-foundation</link>
		<comments>http://doom-ed.com/blog/2000/03/27/startlight-foundation#comments</comments>
		<pubDate>Mon, 27 Mar 2000 08:39:12 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/03/27/startlight-foundation</guid>
		<description><![CDATA[Two years ago, Id was contacted by the Startlight Foundation, an organization
that tries to grant wishes to seriously ill kids. (www.starlight.org)
There was a young man with Hodgkin&#8217;s Lymphoma that, instead of wanting to go
to Disneyland or other traditional wishes, wanted to visit Id and talk with
me about programming.
It turned out that Seumas McNally was already [...]]]></description>
			<content:encoded><![CDATA[<p>Two years ago, Id was contacted by the Startlight Foundation, an organization<br />
that tries to grant wishes to seriously ill kids. (www.starlight.org)</p>
<p>There was a young man with Hodgkin&#8217;s Lymphoma that, instead of wanting to go<br />
to Disneyland or other traditional wishes, wanted to visit Id and talk with<br />
me about programming.</p>
<p>It turned out that Seumas McNally was already an accomplished developer.<br />
His family company, Longbow Digital Arts (www.longbowdigitalarts.com), had<br />
been doing quite respectably selling small games directly over the internet.<br />
It bore a strong resemblance to the early shareware days of Apogee and Id.</p>
<p>We spent the evening talking about graphics programmer things &#8212; the relative<br />
merits of voxels and triangles, procedurally generated media, level of detail<br />
management, API and platforms.</p>
<p>We talked at length about the balance between technology and design, and all<br />
the pitfalls that lie in the way of shipping a modern product.</p>
<p>We also took a dash out in my ferrari, thinking &#8220;this is going to be the best<br />
excuse a cop will ever hear if we get pulled over&#8221;.</p>
<p>Longbow continued to be successful, and eventually the entire family was<br />
working full time on &#8220;Treadmarks&#8221;, their new 3D tank game.</p>
<p>Over email about finishing the technology in Treadmarks, Seumas once said<br />
&#8220;I hope I can make it&#8221;. Not &#8220;be a huge success&#8221; or &#8220;beat the competition&#8221;.<br />
Just &#8220;make it&#8221;.</p>
<p>That is a yardstick to measure oneself by.</p>
<p>It is all too easy to lose your focus or give up with just the ordinary<br />
distractions and disappointments that life brings. This wasn&#8217;t ordinary.<br />
Seumas had cancer. Whatever problems you may be dealing with in your life,<br />
they pale before having problems drawing your next breath.</p>
<p>He made it.</p>
<p>Treadmarks started shipping a couple months ago, and was entered in the<br />
Independent Games Festival at the Game Developer&#8217;s Conference this last month.<br />
It came away with the awards for technical excellence, game design, and the<br />
grand prize.</p>
<p>I went out to dinner with the McNally family the next day, and had the<br />
opportunity to introduce Anna to them. One of the projects at Anna&#8217;s new<br />
company, Fountainhead Entertainment (www.fountainheadent.com), is a<br />
documentary covering gaming, and she had been looking forward to meeting<br />
Seumas after hearing me tell his story a few times. The McNallys invited<br />
her to bring a film crew up to Canada and talk with everyone whenever she<br />
could.</p>
<p>Seumas died the next week.</p>
<p>I am proud to have been considered an influence in Seumas&#8217; work, and I think<br />
his story should be a good example for others. Through talent and<br />
determination, he took something he loved and made a success out of it in<br />
many dimensions.</p>
<p>http://www.gamedev.net/community/memorial/seumas/ for more information.</p>
]]></content:encoded>
			<wfw:commentRss>http://doom-ed.com/blog/2000/03/27/startlight-foundation/feed</wfw:commentRss>
		</item>
		<item>
		<title>Virtualized Video Card Local Memory is The Right Thing</title>
		<link>http://doom-ed.com/blog/2000/03/07/virtualized-video-card-local-memory-is-the-right-thing</link>
		<comments>http://doom-ed.com/blog/2000/03/07/virtualized-video-card-local-memory-is-the-right-thing#comments</comments>
		<pubDate>Wed, 08 Mar 2000 04:47:56 +0000</pubDate>
		<dc:creator>johnc</dc:creator>
		
		<category><![CDATA[John Carmack]]></category>

		<guid isPermaLink="false">http://doom-ed.com/blog/2000/03/07/virtualized-video-card-local-memory-is-the-right-thing</guid>
		<description><![CDATA[This is something I have been preaching for a couple years, but I
finally got around to setting all the issues down in writing.
First, the statement:
Virtualized video card local memory is The Right Thing.
Now, the argument (and a whole bunch of tertiary information):
If you had all the texture density in the world, how much texture
memory would [...]]]></description>
			<content:encoded><![CDATA[<p>This is something I have been preaching for a couple years, but I<br />
finally got around to setting all the issues down in writing.</p>
<p>First, the statement:</p>
<p>Virtualized video card local memory is The Right Thing.</p>
<p>Now, the argument (and a whole bunch of tertiary information):</p>
<p>If you had all the texture density in the world, how much texture<br />
memory would be needed on each frame?</p>
<p>For directly viewed textures, mip mapping keeps the amount of<br />
referenced texels between one and one quarter of the drawn pixels.<br />
When anisotropic viewing angles and upper level clamping are taken into<br />
account, the number gets smaller. Take 1/3 as a conservative estimate.</p>
<p>Given a fairly aggressive six texture passes over the entire screen,<br />
that equates to needing twice as many texels as pixels. At 1024&#215;768<br />
resolution, well under two million texels will be referenced, no matter<br />
what the finest level of detail is. This is the worst case, assuming<br />
completely unique texturing with no repeating. More commonly, less<br />
than one million texels are actually needed.</p>
<p>As anyone who has tried to run certain Quake 3 levels in high quality<br />
texture mode on an eight or sixteen meg card knows, it doesn’t work out<br />
that way in practice. There is a fixable part and some more<br />
fundamental parts to the fall-over-dead-with-too-many-textures problem.</p>
<p>The fixable part is that almost all drivers perform pure LRU (least<br />
recently used) memory management. This works correctly as long as the<br />
total amount of textures needed for a given frame fits in the card’s<br />
memory after they have been loaded. As soon as you need a tiny bit<br />
more memory than fits on the card, you fall off of a performance cliff.<br />
If you need 14 megs of textures to render a frame, and your graphics<br />
card has 12 megs available after its frame buffers, you wind up loading<br />
14 megs of texture data over the bus every frame, instead of just the 2<br />
megs that don’t fit. Having the cpu generate 14 megs of command<br />
traffic can drop you way into the single digit frame rates on most<br />
drivers.</p>
<p>If an application makes reasonable effort to group rendering by<br />
texture, and there is some degree of coherence in the order of texture<br />
references between frames, much better performance can be gotten with a<br />
swapping algorithm that changes its behavior instead of going into a<br />
full thrash:</p>
<p>While ( memory allocation for new texture fails )<br />
Find the least recently used texture.<br />
If the LRU texture was not needed in the previous frame,<br />
Free it<br />
Else<br />
Free the most recently used texture that isn’t bound to an<br />
active texture unit</p>
<p>Freeing the MRU texture seems counterintuitive, but what it does is<br />
cause the driver to use the last bit of memory as a sort of scratchpad<br />
that gets constantly overwritten when there isn’t enough space. Pure<br />
LRU plows over all the other textures that are very likely going to be<br />
needed at the beginning of the next frame, which will then plow over<br />
all the textures that were loaded on top of them.</p>
<p>If an application uses textures in a completely random order, any given<br />
replacement policy has the some effect…</p>
<p>Texture priority for swapping is a non-feature. There is NO benefit to<br />
attempting to statically prioritize textures for swapping. Either a<br />
texture is going to be referenced in the next frame, or it isn’t.<br />
There aren’t any useful gradations in between. The only hint that<br />
would be useful would be a notice that a given texture is not going to<br />
be in the next frame, and that just doesn’t come up very often or cover<br />
very many texels.</p>
<p>With the MRU-on-thrash texture swapping policy, things degrade<br />
gracefully as the total amount of textures increase but due to several<br />
issues, the total amount of textures calculated and swapped is far<br />
larger than the actual amount of texels referenced to draw pixels.</p>
<p>The primary problem is that textures are loaded as a complete unit,<br />
from the smallest mip map level all the way up to potentially a 2048 by<br />
2048 top level image. Even if you are only seeing 16 pixels of it off<br />
in the distance, the entire 12 meg stack might need to be loaded.</p>
<p>Packing can also cause some amount of wasted texture memory. When you<br />
want to load a two meg texture, it is likely going to require a lot<br />
more than just two megs of free texture memory, because a lot of it is<br />
going to be scattered around in 8k to 64k blocks. At the pathological<br />
limit, this can waste half your texture memory, but more reasonably it<br />
is only going to be 10% or so, and cause a few extra texture swap outs.</p>
<p>On a frame at a time basis, there are often significant amounts of<br />
texels even in referenced mip levels that are not seen. The back sides<br />
of characters, and large textures on floors can often have less than<br />
50% of their texels used during a frame. This is only an issue as they<br />
are being swapped in, because they will very likely be needed within<br />
the next few frames. The result is one big hitch instead of a steady<br />
loading.</p>
<p>There are schemes that can help with these problems, but they have<br />
costs.</p>
<p>Packing losses can be addressed with compaction, but that has rarely<br />
proven to be worthwhile in the history of memory management. A 128-bit<br />
graphics accelerator could compact and sort 10 megs of texture memory<br />
in about 10 msec if desired.</p>
<p>The problems with large textures can be solved by just not using large<br />
textures. Both packing losses, and non- referenced texels can be<br />
reduced by chopping everything up into 64&#215;64 or 128&#215;128 textures. This<br />
requires preprocessing, adds geometry, and requires messy overlap of<br />
the textures to avoid seaming problems.</p>
<p>It is possible to estimate which mip levels will actually be needed and<br />
only swap those in. An application can’t calculate exactly the mip<br />
map levels that will be referenced by the hardware, because there are<br />
slight variations between chips and the slope calculation would add<br />
significant processing overhead. A conservative upper bound can be<br />
taken by looking at the minimum normal distance of any vertex<br />
referencing a given texture in a frame. This will overestimate the<br />
required textures by 2x or so and still leave a big hit when the top<br />
mip level loads for big textures, but it can allow giant cathedral<br />
style scenes to render without swapping.</p>
<p>Clever programmers can always work harder to overcome obstacles, but in<br />
this case, there is a clear hardware solution that gives better<br />
performance than anything possible with software and just makes<br />
everyone’s lives easier: virtualize the card’s view of its local<br />
memory.</p>
<p>With page tables, address fragmentation isn’t an issue, and with the<br />
graphics rasterizer only causing a page load when something from that<br />
exact 4k block is needed, the mip level problems and hidden texture<br />
problems just go away. Nothing sneaky has to be done by the<br />
application or driver, you just manage page indexes.</p>
<p>The hardware requirements are not very heavy. You need translation<br />
lookaside buffers (TLB) on the graphics chip, the ability to<br />
automatically load the TLB from a page table set up in local memory,<br />
and the ability to move a page from AGP or PCI into graphics memory and<br />
update the page tables and reference counts. You don’t even need that<br />
many TLB, because graphics access patterns don’t hop all over the place<br />
like CPU access can. Even with only a single TLB for each texture<br />
bilerp unit, reloads would only account for about 1/32 of the memory<br />
access if the textures were 4k blocked. All you would really want at<br />
the upper limit would be enough TLB for each texture unit to cover the<br />
texels referenced on a typical rasterization scan line.</p>
<p>Some programmers will say “I don’t want the system to manage the<br />
textures, I want full control!” There are a couple responses to that.<br />
First, a page level management scheme has flexibility that you just<br />
can’t get with a software only scheme, so it is a set of brand new<br />
capabilities. Second, you can still just choose to treat it as a fixed<br />
size texture buffer and manage everything yourself with updates.<br />
Third, even if it WAS slower than the craftiest possible software<br />
scheme (and I seriously doubt it), so much of development is about<br />
willingly trading theoretical efficiency for quicker, more robust<br />
development. We don’t code overlays in assembly language any more…</p>
<p>Some hardware designers will say somethin