<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Mixed Resolution Rendering</title>
	<atom:link href="http://www.jshopf.com/blog/?feed=rss2&#038;p=194" rel="self" type="application/rss+xml" />
	<link>http://www.jshopf.com/blog/?p=194</link>
	<description>real-time graphics nerdery</description>
	<lastBuildDate>Sun, 11 Jul 2010 16:55:23 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Real-Time Rendering &#187; Blog Archive &#187; More GDC conference links</title>
		<link>http://www.jshopf.com/blog/?p=194&#038;cpage=1#comment-184</link>
		<dc:creator>Real-Time Rendering &#187; Blog Archive &#187; More GDC conference links</dc:creator>
		<pubDate>Tue, 14 Apr 2009 03:12:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.jshopf.com/blog/?p=194#comment-184</guid>
		<description>[...] of OpenGL and OpenCL stuff is available on the Khronos web site,  and Jeremy Shopf and Jim Tilander have their respective slides up as well. A Google Search for &#8216;&#8221;GDC [...]</description>
		<content:encoded><![CDATA[<p>[...] of OpenGL and OpenCL stuff is available on the Khronos web site,  and Jeremy Shopf and Jim Tilander have their respective slides up as well. A Google Search for &#8216;&#8221;GDC [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: levelofdetail</title>
		<link>http://www.jshopf.com/blog/?p=194&#038;cpage=1#comment-180</link>
		<dc:creator>levelofdetail</dc:creator>
		<pubDate>Sat, 11 Apr 2009 15:37:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.jshopf.com/blog/?p=194#comment-180</guid>
		<description>I put up a mirror link through Mediafire for anyone who is having problems</description>
		<content:encoded><![CDATA[<p>I put up a mirror link through Mediafire for anyone who is having problems</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: levelofdetail</title>
		<link>http://www.jshopf.com/blog/?p=194&#038;cpage=1#comment-176</link>
		<dc:creator>levelofdetail</dc:creator>
		<pubDate>Thu, 09 Apr 2009 12:55:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.jshopf.com/blog/?p=194#comment-176</guid>
		<description>You&#039;re not the only one having problems. Some people are able to download it fine, while others are not. I&#039;m not totally sure what the problem is yet</description>
		<content:encoded><![CDATA[<p>You&#8217;re not the only one having problems. Some people are able to download it fine, while others are not. I&#8217;m not totally sure what the problem is yet</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jasmin Patry</title>
		<link>http://www.jshopf.com/blog/?p=194&#038;cpage=1#comment-175</link>
		<dc:creator>Jasmin Patry</dc:creator>
		<pubDate>Wed, 08 Apr 2009 23:15:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.jshopf.com/blog/?p=194#comment-175</guid>
		<description>Hi, I attended your GDC talk and found it very informative, but I&#039;m unable to download the slides -- the download stops after a second or two and then times out.  Am I the only one experiencing this?</description>
		<content:encoded><![CDATA[<p>Hi, I attended your GDC talk and found it very informative, but I&#8217;m unable to download the slides &#8212; the download stops after a second or two and then times out.  Am I the only one experiencing this?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: GDC 2009 proceedings &#124; .mischief.mayhem.soap.</title>
		<link>http://www.jshopf.com/blog/?p=194&#038;cpage=1#comment-153</link>
		<dc:creator>GDC 2009 proceedings &#124; .mischief.mayhem.soap.</dc:creator>
		<pubDate>Fri, 27 Mar 2009 08:55:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.jshopf.com/blog/?p=194#comment-153</guid>
		<description>[...] Shopf (ATI): &#8220;Mixed Resolution Rendering&#8221;    Bookmark [...]</description>
		<content:encoded><![CDATA[<p>[...] Shopf (ATI): &#8220;Mixed Resolution Rendering&#8221;    Bookmark [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kayamon</title>
		<link>http://www.jshopf.com/blog/?p=194&#038;cpage=1#comment-152</link>
		<dc:creator>Kayamon</dc:creator>
		<pubDate>Fri, 27 Mar 2009 07:10:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.jshopf.com/blog/?p=194#comment-152</guid>
		<description>Hello,

I figured I&#039;d post a bit about how we did it way back on Call Of Duty 3, just for a laugh.

The basic idea was to assume that the pixel from the low-res particles was correctly rendered. So we start the shader something like this -

float4 lowrescolor = tex2D(lowrescolorTex, UV); //&lt;-- point sampled texture
float lowresdepth = tex2D(lowresdepthTex, UV); //&lt;-- point sampled texture
float highresdepth = tex2D(highresdepthTex, UV); // threshold )
{
   // slow stuff
}

The principle is that we assume most things were rendered with a similar matching depth, and are therefore correct. This allows us to do a dynamic jump/skip for 90%+ of the pixels, and get a big performance boost.

So the question is, what do we do for the slower stuff?
I wrote this stuff before I&#039;d ever heard of bilateral upsamping, so it&#039;s not quite the standard thing you&#039;d expect. But here goes.

The idea was to assume that the pixel we tested first is wrong. So we have to find a pixel that&#039;s less wrong. We read in the 3 neighbouring pixels from the surrounding block, and test them to find the one that&#039;s most-different from this one.

if ( abs( lowresdepth - highresdepth ) &gt; threshold )
{
   // slow stuff
   float4 col1 = tex2D(lowrescolorTex+float4(0.5,0), UV); //&lt;-- point sampled texture
   float4 col2 = tex2D(lowrescolorTex+float4(0,0.5), UV); //&lt;-- point sampled texture
   float4 col3 = tex2D(lowrescolorTex+float4(0.5,0.5), UV); //&lt;-- point sampled texture
   
Now we check these to find the most different. We assume the most different one is the one with the differentest alpha value. Actually, that&#039;s not quite true, as additive particles throw that off a little. So we add A+G, then check for that. The principle is to assume that whatever we had to start with is Wrong, and therefore anything that is as far away as possible is probably fine :-)

Lastly we do some magic to add up the A+G components of each col1/2/3, and do a max() check to find the best one to use.

The critical thing to remember here is that we&#039;re doing an exact 2:1 resample, so rather than trying to use the built-in bilinear filtering, we can just use point filtering, assume everything is either 0%/100% or 50%, and do it ourselves by simply adjusting the UVs cleverly (i.e. remember that by just adding tex(X,Y) and tex(X+0.5, Y), you&#039;ll get the equivalent to bilinear filtering when using point-sampled textures, assuming 2:1 ratio).

We (me@Treyarch, and Jon Menzies@Shaba) managed to jointly implement this in optimized Xbox 360 and RSX assembler, and managed to ship the game at 60Hz.

Hooray!</description>
		<content:encoded><![CDATA[<p>Hello,</p>
<p>I figured I&#8217;d post a bit about how we did it way back on Call Of Duty 3, just for a laugh.</p>
<p>The basic idea was to assume that the pixel from the low-res particles was correctly rendered. So we start the shader something like this -</p>
<p>float4 lowrescolor = tex2D(lowrescolorTex, UV); //&lt;&#8211; point sampled texture<br />
float lowresdepth = tex2D(lowresdepthTex, UV); //&lt;&#8211; point sampled texture<br />
float highresdepth = tex2D(highresdepthTex, UV); // threshold )<br />
{<br />
   // slow stuff<br />
}</p>
<p>The principle is that we assume most things were rendered with a similar matching depth, and are therefore correct. This allows us to do a dynamic jump/skip for 90%+ of the pixels, and get a big performance boost.</p>
<p>So the question is, what do we do for the slower stuff?<br />
I wrote this stuff before I&#8217;d ever heard of bilateral upsamping, so it&#8217;s not quite the standard thing you&#8217;d expect. But here goes.</p>
<p>The idea was to assume that the pixel we tested first is wrong. So we have to find a pixel that&#8217;s less wrong. We read in the 3 neighbouring pixels from the surrounding block, and test them to find the one that&#8217;s most-different from this one.</p>
<p>if ( abs( lowresdepth &#8211; highresdepth ) &gt; threshold )<br />
{<br />
   // slow stuff<br />
   float4 col1 = tex2D(lowrescolorTex+float4(0.5,0), UV); //&lt;&#8211; point sampled texture<br />
   float4 col2 = tex2D(lowrescolorTex+float4(0,0.5), UV); //&lt;&#8211; point sampled texture<br />
   float4 col3 = tex2D(lowrescolorTex+float4(0.5,0.5), UV); //&lt;&#8211; point sampled texture</p>
<p>Now we check these to find the most different. We assume the most different one is the one with the differentest alpha value. Actually, that&#8217;s not quite true, as additive particles throw that off a little. So we add A+G, then check for that. The principle is to assume that whatever we had to start with is Wrong, and therefore anything that is as far away as possible is probably fine <img src='http://www.jshopf.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Lastly we do some magic to add up the A+G components of each col1/2/3, and do a max() check to find the best one to use.</p>
<p>The critical thing to remember here is that we&#8217;re doing an exact 2:1 resample, so rather than trying to use the built-in bilinear filtering, we can just use point filtering, assume everything is either 0%/100% or 50%, and do it ourselves by simply adjusting the UVs cleverly (i.e. remember that by just adding tex(X,Y) and tex(X+0.5, Y), you&#8217;ll get the equivalent to bilinear filtering when using point-sampled textures, assuming 2:1 ratio).</p>
<p>We (me@Treyarch, and Jon Menzies@Shaba) managed to jointly implement this in optimized Xbox 360 and RSX assembler, and managed to ship the game at 60Hz.</p>
<p>Hooray!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
