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

<channel>
	<title>Yakiimo3D &#187; Demo</title>
	<atom:link href="http://www.yakiimo3d.com/category/demo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yakiimo3d.com</link>
	<description>Mostly DirectX 11 Programming</description>
	<lastBuildDate>Sun, 15 May 2011 07:58:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DirectX11 Interop CUDA Mandelbrot Fractal</title>
		<link>http://www.yakiimo3d.com/2011/03/06/directx11-interop-cuda-mandelbrot-fractal/</link>
		<comments>http://www.yakiimo3d.com/2011/03/06/directx11-interop-cuda-mandelbrot-fractal/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 14:36:30 +0000</pubDate>
		<dc:creator>yakiimo02</dc:creator>
				<category><![CDATA[Cuda]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[DirectCompute]]></category>
		<category><![CDATA[DirectX11]]></category>

		<guid isPermaLink="false">http://www.yakiimo3d.com/?p=1516</guid>
		<description><![CDATA[Introduction I updated my DirectCompute Mandelbrot fractal demo to be able to render using both CUDA and DirectCompute. The program is a simple Mandelbrot renderer, but you can dynamically switch between a CUDA and DirectCompute render. Relevant Links http://developer.download.nvidia.com/compute/cuda/sdk/website/Graphics_Interop.html#simpleD3D11Texture The NVIDIA CUDA 3.2 SDK includes a DirectX11 interop sample &#8220;Simple D3D11 Texture&#8221; which I used [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>I updated my DirectCompute Mandelbrot fractal demo to be able to render using both CUDA and DirectCompute. The program is a simple Mandelbrot renderer, but you can dynamically switch between a CUDA and DirectCompute render.</p>
<h2>Relevant Links</h2>
<p><a href="http://developer.download.nvidia.com/compute/cuda/sdk/website/Graphics_Interop.html#simpleD3D11Texture" onclick="pageTracker._trackPageview('/outgoing/developer.download.nvidia.com/compute/cuda/sdk/website/Graphics_Interop.html_simpleD3D11Texture?referer=');">http://developer.download.nvidia.com/compute/cuda/sdk/website/Graphics_Interop.html#simpleD3D11Texture</a><br />
The NVIDIA CUDA 3.2 SDK includes a DirectX11 interop sample &#8220;Simple D3D11 Texture&#8221; which I used as reference. For the 3.2 SDK, I think this is the only CUDA sample using D3D11. The SDK sample uses a ID3D11Texture3D as a CUDA resource while my Mandelbrot fractal program uses a ID3D11Buffer as a CUDA resource.<br />
<br />
<a href="http://developer.nvidia.com/object/cuda-by-example.html" onclick="pageTracker._trackPageview('/outgoing/developer.nvidia.com/object/cuda-by-example.html?referer=');">http://developer.nvidia.com/object/cuda-by-example.html</a><br />
I mainly used the CUDA 3.2 SDK programming manual to learn CUDA, but I also read the NVIDIA &#8220;Cuda by Example&#8221; book on <a href="http://my.safaribooksonline.com/?portal=informit" onclick="pageTracker._trackPageview('/outgoing/my.safaribooksonline.com/?portal=informit&amp;referer=');">Safari Informit</a>. The book is very easy to follow and I read it in one sitting. This book teaches the basics of CUDA in a simple language and I thought it was a good first book.<br />
<br />
<a href="http://www.yakiimo3d.com/2010/02/02/directcompute-mandelbrot-fractal-viewer/">http://www.yakiimo3d.com/2010/02/02/directcompute-mandelbrot-fractal-viewer/</a><br />
My old DirectCompute Mandelbrot fractal viewer. The program has a bug (oh no!) when the screen size dimensions are not divisible by the thread group size dimensions, which I fixed in my new CUDA interop demo.</p>
<h2>Demo Notes</h2>
<p>Took some timings to compare the CUDA DirectX11 interop and DirectCompute performances. Timings were taken on my Geforce GTX 460, Driver 266.58, Vista 64-bit SP2, CUDA SDK 3.2. Neither the CUDA nor DirectCompute implementations have been optimized. With better documentation, better tools and finer control over the program, I think the CUDA program has a better chance of good optimization.</p>
<table>
<tr>
<td>Num Iterations</td>
<td>DirectCompute</td>
<td>CUDA</td>
</tr>
<tr>
<td>8</td>
<td>0.588ms/frame (1700fps)</td>
<td>0.749ms/frame (1335fps)</td>
</tr>
<tr>
<td>256</td>
<td>1.439ms/frame (695fps)</td>
<td>1.639ms/frame (610fps)</td>
</tr>
<tr>
<td>624</td>
<td>3.185ms/frame (314fps)</td>
<td>2.907ms/frame (344fps)</td>
</tr>
<tr>
<td>1024</td>
<td>4.878ms/frame (205fps)</td>
<td>4.274ms/frame (234fps)</td>
</tr>
</table>
<p>
The higher the iteration count, the more work that the compute shader has to do. When the iteration count is low, DirectCompute is faster. When the iteration count becomes higher, CUDA becomes faster than DirectCompute. I&#8217;m assuming this means that with my current code, the CUDA kernel execution is faster, but that there is a fixed cost for DirectX11 interop that makes CUDA initially slower.<br />
<br />
<a href="http://nvidia.fullviewmedia.com/gdc2011/agenda.html" onclick="pageTracker._trackPageview('/outgoing/nvidia.fullviewmedia.com/gdc2011/agenda.html?referer=');">http://nvidia.fullviewmedia.com/gdc2011/agenda.html</a><br />
On Friday, I watched the NVIDIA GDC2011 &#8220;GPU Radiosity: Porting the Enlighten runtime to CUDA&#8221; presentation, and around 28:23, the speaker mentions that &#8220;Switching between D3D and CUDA is expensive (it&#8217;s a power cycle!)&#8221;. I&#8217;m guessing this power mode switch cost is what makes CUDA initially slower in my Mandelbrot fractal program. I watched the entire Enlighten presentation and it was very interesting. The stream had some technical info, but if you are curious about Enlighten tech, there is a DICE&#038;Geomerics Siggraph 2010 presentation that contains even more detailed technical information about Enlighten <a href="http://advances.realtimerendering.com/s2010/index.html" onclick="pageTracker._trackPageview('/outgoing/advances.realtimerendering.com/s2010/index.html?referer=');">http://advances.realtimerendering.com/s2010/index.html</a>.</p>
<h2>Demo</h2>
<p>Source Code &#038; Binary<br />
<a href="http://yakiimo3d.codeplex.com/releases/view/62087" onclick="pageTracker._trackPageview('/outgoing/yakiimo3d.codeplex.com/releases/view/62087?referer=');">http://yakiimo3d.codeplex.com/releases/view/62087</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiimo3d.com/2011/03/06/directx11-interop-cuda-mandelbrot-fractal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DX11 Temporal AA Without Manual Blending</title>
		<link>http://www.yakiimo3d.com/2010/12/05/dx11-temporal-aa-without-manual-blending/</link>
		<comments>http://www.yakiimo3d.com/2010/12/05/dx11-temporal-aa-without-manual-blending/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 10:24:45 +0000</pubDate>
		<dc:creator>yakiimo02</dc:creator>
				<category><![CDATA[Demo]]></category>
		<category><![CDATA[DirectX11]]></category>

		<guid isPermaLink="false">http://www.yakiimo3d.com/?p=1280</guid>
		<description><![CDATA[Introduction I updated my simple Temporal AA demo to include an implementation of Temporal AA without blending. A lot of times, in technical 3D forums, you read about Temporal AA not showing up in screenshots. If you blend jittered frames like in my previous demo then Temporal AA is going to show up in screenshots. [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>I updated my simple Temporal AA demo to include an implementation of Temporal AA without blending. A lot of times, in technical 3D forums, you read about Temporal AA not showing up in screenshots. If you blend jittered frames like in my previous demo then Temporal AA is going to show up in screenshots. However, it&#8217;s also possible to implement Temporal AA without manual blending, and in that case, the AA is not going to appear in screenshots. Over the weekend, I implemented this other version of simple Temporal AA.<br />
<br />
CodePlex link for my program&#8217;s source code and binary are provided at the end of the article.</p>
<h2>Relevant Links</h2>
<p>1) <a href="http://en.wikipedia.org/wiki/Radeon_R420" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Radeon_R420?referer=');">http://en.wikipedia.org/wiki/Radeon_R420</a><br />
The Radeon X700-X850 series apparently featured Temporal AA without blending. Don&#8217;t think it&#8217;s supported on newer graphics cards as my HD5750 with Catalyst 10.10 doesn&#8217;t show an option.<br />
<br />
2) <a href="http://techreport.com/articles.x/6672/22" onclick="pageTracker._trackPageview('/outgoing/techreport.com/articles.x/6672/22?referer=');">http://techreport.com/articles.x/6672/22</a><br />
This Tech Report article has a nice explanation of the Radeon Temporal AA implementation. Mulitisampling patterns are alternated each frame. If vsync is enabled and the app can maintain 60fps, even without manual blending, the eyes will interpolate the jittered frames giving an illusion of higher-sampled anti-aliasing. In the Radeon implementation, 2x MSAA using temporal AA will give an illusion of 4x AA.<br />
<br />
3) <a href="http://forum.beyond3d.com/showthread.php?t=46241" onclick="pageTracker._trackPageview('/outgoing/forum.beyond3d.com/showthread.php?t=46241&amp;referer=');">http://forum.beyond3d.com/showthread.php?t=46241</a><br />
Beyond3D&#8217;s &#8220;List of Rendering Resolutions + basics on hardware scaling, MSAA, framebuffers&#8221; thread mentions both Temporal AA with and without blending.<br />
<br />
4) <a href="http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/">http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/</a><br />
My implementation of Temporal AA with blending. A simple implementation without reprojection, so you get ghosting/blurring.<br />
</p>
<h2>Implementation Details</h2>
<p>The implementation is the same as my last Temporal AA implementation except that I don&#8217;t manually blend the previous and current frame, but let the eye do the interpolation. I added a combobox for selecting the vsync interval. Only vsynced 60fps gives good results; non vsynced 60+fps, vsynced 30fps, vsynced 20fps all give pretty terrible edge flickering. With blending, the artifact is blurring/ghosting, without blending, the artifact seems to be edge flickering.<br />
<br />
Unlike the Radeon implementation, I&#8217;m not alternating MSAA patterns, but just alternating jittered scene renders, so the quality should be equivalent to 2x SSAA (like my previous blended Temporal AA implementation). In the demo, the Temporal AA without blending looks a little bit worse than Temporal AA with blending because I decreased the sub-pixel offset to 0.15 from 0.25. Even at a vsynced 60 fps setting, I can sometimes still see an occasional edge flicker. </p>
<h2>Demo</h2>
<p>Source Code &#038; Binary<br />
<a href="http://yakiimo3d.codeplex.com/releases/view/56973" onclick="pageTracker._trackPageview('/outgoing/yakiimo3d.codeplex.com/releases/view/56973?referer=');">http://yakiimo3d.codeplex.com/releases/view/56973</a><br />
<br />
I would recommend viewing the demo in full-screen mode as this seems to give a more stable frame rate, and less edge flickering. I also fixed my texture mipmap settings and set the anisotropic filter to 16x. Even at this setting, you can still see a tiny bit of reduction in texture aliasing (without noticeable texture blurring from the SSAA, I think) in some parts of the scene, but it&#8217;s not significant and I guess that&#8217;s not the main point of Temporal AA.<br />
<br />
Sorry for the download size. My mesh model data, borrowed from the DirectX SDK samples, is pretty big. Like my previous Temporal AA implementation, DX11 isn&#8217;t necessary for this technique, but my hobby coding is now done using DX11, so that&#8217;s what the demo uses.<br />
</p>
<h2>Final Words</h2>
<p>While I was working on my last Temporal AA demo, another Japanese programmer told me that he saw very little texture aliasing reduction in his Temporal AA test, but I foolishly didn&#8217;t check my code for bugs. Hopefully, I didn&#8217;t make any stupid mistakes this time!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiimo3d.com/2010/12/05/dx11-temporal-aa-without-manual-blending/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DX11 Perspective Matrix Jittering Temporal AA</title>
		<link>http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/</link>
		<comments>http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 17:04:51 +0000</pubDate>
		<dc:creator>yakiimo02</dc:creator>
				<category><![CDATA[Demo]]></category>
		<category><![CDATA[DirectX11]]></category>

		<guid isPermaLink="false">http://www.yakiimo3d.com/?p=1046</guid>
		<description><![CDATA[Introduction Temporal anti-aliasing algorithms are algorithms where you use samples from previously rendered frames in order to perform a temporal form of supersampling. There are different ways to implement temporal AA, and over the weekend, I wrote an implementation of the simple perspective matrix jittering temporal AA. This type of temporal AA is mentioned in [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Temporal anti-aliasing algorithms are algorithms where you use samples from previously rendered frames in order to perform a temporal form of supersampling. There are different ways to implement temporal AA, and over the weekend, I wrote an implementation of the simple perspective matrix jittering temporal AA. This type of temporal AA is mentioned in the Beyond3D forums here (<a href="http://forum.beyond3d.com/showthread.php?t=46241" onclick="pageTracker._trackPageview('/outgoing/forum.beyond3d.com/showthread.php?t=46241&amp;referer=');">http://forum.beyond3d.com/showthread.php?t=46241</a>).<br />
<br />
CodePlex link for my program&#8217;s source code and binary are provided at the end of the article.</p>
<h2>Halo: Reach Temporal AA</h2>
<p><a href="http://www.eurogamer.net/articles/digitalfoundry-halo-reach-tech-analysis-article" onclick="pageTracker._trackPageview('/outgoing/www.eurogamer.net/articles/digitalfoundry-halo-reach-tech-analysis-article?referer=');">http://www.eurogamer.net/articles/digitalfoundry-halo-reach-tech-analysis-article</a> (AA is covered on Page 3.)<br />
Digital Foundry recently published a tech analysis article on Halo: Reach. Based on frame capture analysis and the behavior of the anti-aliasing, they speculated that the anti-aliasing used in Halo: Reach is some kind of temporal anti-aliasing. </p>
<h2>CryEngine3 Temporal AA</h2>
<p><a href="http://advances.realtimerendering.com/s2010/index.html" onclick="pageTracker._trackPageview('/outgoing/advances.realtimerendering.com/s2010/index.html?referer=');">http://advances.realtimerendering.com/s2010/index.html</a><br />
At Siggraph 2010&#8242;s &#8220;Advances in Real-Time Rendering in 3D Graphics and Games&#8221; course, Crytek presented a talk &#8220;CryENGINE 3: Reaching the Speed of Light&#8221; in which they gave some details about their anti-aliasing implementation. Their anti-aliasing is a hybrid solution with 2 different AA algorithms applied to near and distant objects. For near objects, an edge-based post process AA is applied. For distant objects, temporal AA (the temporal reprojection with cache miss approach) is applied.<br />
<br />
The below papers were given as references for temporal reprojection in Crytek&#8217;s talk.<br />
<br />
Accelerating Real-Time Shading with Reverse Reprojection Caching (ACM SIGGRAPH Symposium on Graphics Hardware 2007)<br />
<a href="http://www.cse.ust.hk/~psander/" onclick="pageTracker._trackPageview('/outgoing/www.cse.ust.hk/_psander/?referer=');">http://www.cse.ust.hk/~psander/</a><br />
<a href="http://www.cse.ust.hk/~psander/docs/reproj2.pdf" onclick="pageTracker._trackPageview('/outgoing/www.cse.ust.hk/_psander/docs/reproj2.pdf?referer=');">http://www.cse.ust.hk/~psander/docs/reproj2.pdf</a> (pdf)<br />
and<br />
Spatio-Temporal Upsampling on the GPU (I3D 2010)<br />
<a href="http://www.mpi-inf.mpg.de/~rherzog/" onclick="pageTracker._trackPageview('/outgoing/www.mpi-inf.mpg.de/_rherzog/?referer=');">http://www.mpi-inf.mpg.de/~rherzog/</a><br />
<a href="http://www.mpi-inf.mpg.de/~rherzog/Papers/spatioTemporalUpsampling_preprintI3D2010.pdf" onclick="pageTracker._trackPageview('/outgoing/www.mpi-inf.mpg.de/_rherzog/Papers/spatioTemporalUpsampling_preprintI3D2010.pdf?referer=');">http://www.mpi-inf.mpg.de/~rherzog/Papers/spatioTemporalUpsampling_preprintI3D2010.pdf</a> (pdf)  </p>
<h2>Screen Captures</h2>
<p><a href="http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/aa_none/" rel="attachment wp-att-1070"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/09/aa_none.png" alt="" title="aa_none" width="640" height="480" class="alignnone size-full wp-image-1070" /></a><br />
No AA<br />
<a href="http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/msaa_2x-2/" rel="attachment wp-att-1071"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/09/msaa_2x.png" alt="" title="msaa_2x" width="640" height="480" class="alignnone size-full wp-image-1071" /></a><br />
MSAA 2x<br />
<a href="http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/msaa_4x-2/" rel="attachment wp-att-1072"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/09/msaa_4x.png" alt="" title="msaa_4x" width="640" height="480" class="alignnone size-full wp-image-1072" /></a><br />
MSAA 4x<br />
<a href="http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/temporal_aa/" rel="attachment wp-att-1073"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/09/temporal_aa.png" alt="" title="temporal_aa" width="640" height="480" class="alignnone size-full wp-image-1073" /></a><br />
Temporal AA 2x<br />
</p>
<h2>Comments On the Screen Captures</h2>
<p><strong>(2010/10/02 added comment)</strong><br />
<a href="http://www.yakiimo3d.com/2010/10/02/temporal-aa-texture-mipmap-settings/">http://www.yakiimo3d.com/2010/10/02/temporal-aa-texture-mipmap-settings/</a><br />
<strong>Texture filtering was not properly set up when I took the above pics. If texture filtering is properly enabled, the aliasing inside the textures becomes gone. With mipmapping-enabled, the effects of temporal AA on texture aliasing becomes minimal.</strong><br />
<br />
My implementation of temporal AA blends together 2 samples and should be roughly equivalent to a 2 sample SSAA in terms of quality. For comparison, I also implemented hardware MSAA 2x and hardware MSAA 4x. In the above screenshots, you can see that for long edges, MSAA 2x and temporal AA 2x are around the same quality. MSAA 4x results in much cleaner long edges than both temporal AA and MSAA 2x. <strike>If you look at the inside of the textures, you will notice that temporal AA 2x results in much cleaner straight lines and less overall aliasing compared to both MSAA 2x and MSAA 4x. </strike>Temporal AA is a form of supersampling and is able to reduce pixel shader aliasing on surfaces and not just jaggies on edges. However, for the above picture, if texture mipmapping had been properly enabled, the hardware texture filter would have taken care of the aliasing.<br />
<br />
<strike>In my Japanese blog, I posted screenshots comparing the different AA algorithm&#8217;s results on a grid-patterned texture. Temporal AA works really well for this type of high frequency texture. While neither MSAA 2x nor MSAA 4x are able to reduce the aliasing much, temporal AA successfully reduces the moire pattern and the aliasing.<br />
<a href="http://d.hatena.ne.jp/yakiimo02/20100926/1285523408" onclick="pageTracker._trackPageview('/outgoing/d.hatena.ne.jp/yakiimo02/20100926/1285523408?referer=');">http://d.hatena.ne.jp/yakiimo02/20100926/1285523408</a></strike><br />
<br />
MSAA uses multiple depth samples, but only a single pixel shader sample, while temporal AA, like SSAA, uses multiple pixel shader samples. This means that temporal AA effectively operates at a high resolution compared to screen size and allows the algorithm to reduce aliasing on detailed polygon surfaces requiring more info than a pixel can hold.<br />
<br />
The perspective matrix jittering temporal AA algorithm is cheap and works great on still pictures. However, it has problems once the camera starts moving (especially in sideways motions) because the difference between the previous frame&#8217;s pixels and the current frame&#8217;s pixels becomes large and as a result when the 2 frames are blended, the resulting screen is blurry with slight halo traces of the last frame.</p>
<p></p>
<h2>Implementation Details</h2>
<p><a href="http://glprogramming.com/red/chapter10.html" onclick="pageTracker._trackPageview('/outgoing/glprogramming.com/red/chapter10.html?referer=');">http://glprogramming.com/red/chapter10.html</a><br />
Chapter 10 of the OpenGL Redbook explains the OpenGL accumulation buffer AA algorithm.<br />
<a href="http://www.cse.msu.edu/~cse872/tutorial5.html" onclick="pageTracker._trackPageview('/outgoing/www.cse.msu.edu/_cse872/tutorial5.html?referer=');">http://www.cse.msu.edu/~cse872/tutorial5.html</a><br />
Found out that the Redbook explains the OpenGL accumulation buffer AA algorithm from this Michigan State University&#8217;s CSE 872 Advanced Computer Graphics class&#8217;s tutorial.<br />
<br />
Chapter 10 of the OpenGL Redbook has an explanation on using perspective matrix jittering in order to perform anti-aliasing through the accumulation buffer. In the Redbook example, they re-render the scene n-sample times, each time with the perspective matrix jittered by a small sub-pixel amount, and blend the result into the OpenGL accumulation buffer. This subpixel n-sample blending is equivalent to SSAA and gets you an anti-aliased image. The technique requires re-drawing the scene n-sample times within a single frame and is prohibitively costly for most real-time applications.<br />
<br />
My temporal AA implementation is a 2-sample perspective matrix jittered AA with one sample taken from the previously rendered frame and one sample from the current frame. The implementation requires an extra rendertarget the same size as the framebuffer in order to store the previous frame&#8217;s color buffer (assuming the current frame&#8217;s rendertarget is already necessary and so free). Even frames and odd frames are renderered with a different subpixel jitter value and are blended together in a fullscreen post process pass. Same as the OpenGL accumulation buffer AA, the temporal blending of 2 subpixel jittered color buffers should give similiar results to SSAA 2x. The only tricky part about the implementation for me was figuring out how to create a perspective projection matrix that jitters the rendered image by a screenspace subpixel amount. The function that performs this calculation is shown below.<br />
</p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">// From temporalAA.cpp</span><br />
<span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp; &nbsp; Based on the OpenGL Red Book Chapter 10.<br />
&nbsp; &nbsp; http://glprogramming.com/red/chapter10.html<br />
*/</span><br />
D3DXMATRIX TemporalAA<span style="color: #008080;">::</span><span style="color: #007788;">JitteredFrustum</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">float</span> left, <span style="color: #0000ff;">float</span> right, <span style="color: #0000ff;">float</span> bottom,<br />
&nbsp; &nbsp; <span style="color: #0000ff;">float</span> top, <span style="color: #0000ff;">float</span> fNear, <span style="color: #0000ff;">float</span> fFar, <span style="color: #0000ff;">float</span> pixdx, <br />
&nbsp; &nbsp; <span style="color: #0000ff;">float</span> pixdy, <span style="color: #0000ff;">float</span> eyedx, <span style="color: #0000ff;">float</span> eyedy, <span style="color: #0000ff;">float</span> focus, <span style="color: #0000ff;">const</span> CameraInfo<span style="color: #000040;">&amp;</span> cameraInfo<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">float</span> xwsize, ywsize<span style="color: #008080;">;</span> <br />
&nbsp; &nbsp; <span style="color: #0000ff;">float</span> dx, dy<span style="color: #008080;">;</span><br />
<br />
&nbsp; &nbsp; xwsize <span style="color: #000080;">=</span> right <span style="color: #000040;">-</span> left<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; ywsize <span style="color: #000080;">=</span> top <span style="color: #000040;">-</span> bottom<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666;">// translate the screen space jitter distances into near clipping plane distances</span><br />
&nbsp; &nbsp; dx <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span>pixdx<span style="color: #000040;">*</span>xwsize<span style="color: #000040;">/</span>cameraInfo.<span style="color: #007788;">fBackBufferW</span> <span style="color: #000040;">+</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eyedx<span style="color: #000040;">*</span>fNear<span style="color: #000040;">/</span>focus<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; dy <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span>pixdy<span style="color: #000040;">*</span>ywsize<span style="color: #000040;">/</span>cameraInfo.<span style="color: #007788;">fBackBufferH</span> <span style="color: #000040;">+</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eyedy<span style="color: #000040;">*</span>fNear<span style="color: #000040;">/</span>focus<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
&nbsp; &nbsp; D3DXMATRIX mPerspective<span style="color: #008080;">;</span><br />
<br />
&nbsp; &nbsp; D3DXMatrixPerspectiveOffCenterLH<span style="color: #008000;">&#40;</span> <span style="color: #000040;">&amp;</span>mPerspective, left <span style="color: #000040;">+</span> dx, right <span style="color: #000040;">+</span> dx, bottom <span style="color: #000040;">+</span> dy, top <span style="color: #000040;">+</span> dy, fNear, fFar <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> mPerspective<span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p></p>
<h2>Perspective Matrix Jittering Temporal AA Demo</h2>
<p>The background model used in the demo is the &#8220;powerplant&#8221; sdkmesh model included with the DirectX June 2010 SDK. It&#8217;s used in the DX11 Cascaded Shadowmaps demo.<br />
<br />
In my demo, the frame sometimes jumps when you are moving the camera. I use the DXUT CFirstPersonCamera and same thing occurs for the Cascaded Shadowmaps demo and is not an artifact of temporal AA.<br />
<br />
Source Code &#038; Binary<br />
<a href="http://yakiimo3d.codeplex.com/releases/view/53001" onclick="pageTracker._trackPageview('/outgoing/yakiimo3d.codeplex.com/releases/view/53001?referer=');">http://yakiimo3d.codeplex.com/releases/view/53001</a></p>
<h2>Conclusions</h2>
<p>The perspective matrix jittering temporal AA is easy to implement, cheap and provides anti-aliasing qualities similiar to SSAA 2x. However, the current implementation suffers from distracting screen blurring once the camera starts moving. I haven&#8217;t really read up on temporal reprojection yet, but it might be interesting to implement AA using it and see how the results compare to this implementation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiimo3d.com/2010/09/28/dx11-perspective-matrix-jittering-temporal-aa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DX11 Order Independent Transparency with MSAA</title>
		<link>http://www.yakiimo3d.com/2010/07/25/dx11-order-independent-transparency-with-msaa/</link>
		<comments>http://www.yakiimo3d.com/2010/07/25/dx11-order-independent-transparency-with-msaa/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 11:42:16 +0000</pubDate>
		<dc:creator>yakiimo02</dc:creator>
				<category><![CDATA[Demo]]></category>
		<category><![CDATA[DirectX11]]></category>

		<guid isPermaLink="false">http://www.yakiimo3d.com/?p=855</guid>
		<description><![CDATA[Introduction I extended my DX11 OIT demo (http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/) to support MSAA. CodePlex link for my program&#8217;s source code and binary are provided at the end of the article. Relevant Links 1) http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/ Blog article for my original DX11 OIT demo. My original demo has no support for MSAA, so jaggies are very noticeable along the [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>I extended my DX11 OIT demo (<a href="http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/">http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/</a>) to support MSAA.<br />
<br />
CodePlex link for my program&#8217;s source code and binary are provided at the end of the article.</p>
<h2>Relevant Links</h2>
<p>1) <a href="http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/">http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/</a><br />
Blog article for my original DX11 OIT demo. My original demo has no support for MSAA, so jaggies are very noticeable along the edges of the colored quads.<br />
<br />
2) <a href="http://developer.amd.com/documentation/presentations/Pages/default.aspx" onclick="pageTracker._trackPageview('/outgoing/developer.amd.com/documentation/presentations/Pages/default.aspx?referer=');">http://developer.amd.com/documentation/presentations/Pages/default.aspx</a><br />
ATI&#8217;s conference presentation list contains a link to their &#8220;GDC 2010: OIT and GI using DX11 linked lists&#8221; presentation ppt. My original demo and this MSAA supported version are both based on this presentation. </p>
<h2>Screen Captures</h2>
<p><a href="http://www.yakiimo3d.com/2010/07/25/dx11-order-independent-transparency-with-msaa/msaa_none/" rel="attachment wp-att-862"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/07/msaa_none.png" alt="" title="msaa_none" width="656" height="517" class="alignnone size-full wp-image-862" /></a><br />
<a href="http://www.yakiimo3d.com/2010/07/25/dx11-order-independent-transparency-with-msaa/msaa_2x/" rel="attachment wp-att-863"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/07/msaa_2x.png" alt="" title="msaa_2x" width="656" height="517" class="alignnone size-full wp-image-863" /></a><br />
<a href="http://www.yakiimo3d.com/2010/07/25/dx11-order-independent-transparency-with-msaa/msaa_4x/" rel="attachment wp-att-864"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/07/msaa_4x.png" alt="" title="msaa_4x" width="656" height="517" class="alignnone size-full wp-image-864" /></a><br />
<a href="http://www.yakiimo3d.com/2010/07/25/dx11-order-independent-transparency-with-msaa/msaa_8x/" rel="attachment wp-att-865"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/07/msaa_8x.png" alt="" title="msaa_8x" width="656" height="517" class="alignnone size-full wp-image-865" /></a><br />
<br />
From top to bottom. MSAA none. MSAA 2x. MSAA 4x. MSAA 8x. I notice big quality improvements between none, 2x and 4x, but not too much between 4x and 8x. I think the anti-aliasing starts to look pretty nice around 4x. Notice that with increased sampling, the image quality improves, but the fps also drops.<br />
</p>
<h2>Implementation Details</h2>
<p>Not too many changes were necessary to the original demo in order to add MSAA support. The main change was adding the SV_COVERAGE and SV_SAMPLEINDEX semantic parameters to my pixel shader input structures and using their information.<br />
</p>
<h3>Changes to StoreFragments.hlsl</h3>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">struct</span> ScenePS_Input<br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; float4 pos &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080;">:</span> SV_POSITION<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; float4 color &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080;">:</span> COLOR0<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; uint nCoverage &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #008080;">:</span> SV_COVERAGE<span style="color: #008080;">;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">// Bit set according to which samples are covered.</span><br />
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></div></div>
<p>I added a nCoverage SV_COVERAGE parameter to give me information about which samples are covered by the current fragment. For example, bit 1, 4 of nCoverage are set if samples 1 and 4 are covered. Now, in addition to storing each fragment&#8217;s color and depth, I also store the fragment&#8217;s sample coverage information.</p>
<h3>Changes to SortFragmentsAndRender.hlsl</h3>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">struct</span> QuadPS_Input <br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; float4 pos&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080;">:</span> SV_POSITION<span style="color: #008080;">;</span> <br />
&nbsp; &nbsp; uint nSampleIndex &nbsp; &nbsp; &nbsp; <span style="color: #008080;">:</span> SV_SAMPLEINDEX<span style="color: #008080;">;</span> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666;">// specify to run pixel shader per sample instead of per pixel &nbsp; </span><br />
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
...<br />
<span style="color: #666666;">// Read and store linked list data to the temporary buffer.</span><br />
<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span> nNext <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #208080;">0xFFFFFFFF</span> <span style="color: #008000;">&#41;</span> <br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; FragmentLink element <span style="color: #000080;">=</span> FragmentLinkSRV<span style="color: #008000;">&#91;</span>nNext<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; aData<span style="color: #008000;">&#91;</span> nNumFragment <span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> element.<span style="color: #007788;">fragmentData</span><span style="color: #008080;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666;">// Use sample only if the fragment covered it.</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> aData<span style="color: #008000;">&#91;</span> nNumFragment <span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDepthAndCoverage</span> <span style="color: #000040;">&amp;</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span>input.<span style="color: #007788;">nSampleIndex</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; anIndex<span style="color: #008000;">&#91;</span> nNumFragment <span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> nNumFragment<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">++</span>nNumFragment<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; nNext <span style="color: #000080;">=</span> element.<span style="color: #007788;">nNext</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>The SV_SAMPLEINDEX semantic was added to DX10.1 and can be used in DX11. By adding a pixel shader input parameter with the SV_SAMPLEINDEX semantic, it&#8217;s possible to make the pixel shader run once per sample instead of once per pixel. By running the sorting &#038; blending pixel shader per sample and discarding the samples not covered by the fragment, it&#8217;s possible to get MSAA anti-aliasing even with the StructuredBuffer input fragment data.</p>
<h2>OIT with MSAA Demo</h2>
<p>Source Code &#038; Binary<br />
<a href="http://yakiimo3d.codeplex.com/releases/view/49570" onclick="pageTracker._trackPageview('/outgoing/yakiimo3d.codeplex.com/releases/view/49570?referer=');">http://yakiimo3d.codeplex.com/releases/view/49570</a><br />
The demo starts with a default setting of 4x MSAA. Open the Change Device menu and change the MSAA setting using the Multisample Count combobox.<br />
</p>
<h2>Comments</h2>
<p>This demo was my first time using the SV_SAMPLEINDEX pixel shader semantic and processing pixel per sample instead of per pixel. It&#8217;s apparently useful for other stuff such as deferred rendering MSAA, so I&#8217;ll probably find myself using it again some time in the future. Also, I bought the XBOX Live Arcade game Limbo and played it while taking a break from writing this blog post. From what I&#8217;ve played so far, it&#8217;s a dark, but very artistic and beautiful game. So far, I&#8217;m glad I bought it. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiimo3d.com/2010/07/25/dx11-order-independent-transparency-with-msaa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DX11 Order Independent Transparency</title>
		<link>http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/</link>
		<comments>http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 03:44:41 +0000</pubDate>
		<dc:creator>yakiimo02</dc:creator>
				<category><![CDATA[Demo]]></category>
		<category><![CDATA[DirectX11]]></category>

		<guid isPermaLink="false">http://www.yakiimo3d.com/?p=759</guid>
		<description><![CDATA[Introduction This is my implementation of the ATI DX11 linked list OIT algorithm. The DirectX11 SDK OIT sample is pretty slow (a compute shader usage sample), but have read from numerous sources that the ATI OIT algorithm is pretty fast (it is), so I decided to try implementing it. Lots of people have already implemented [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>This is my implementation of the ATI DX11 linked list OIT algorithm. The DirectX11 SDK OIT sample is pretty slow (a compute shader usage sample), but have read from numerous sources that the ATI OIT algorithm is pretty fast (it is), so I decided to try implementing it. Lots of people have already implemented ATI&#8217;s linked list OIT and have made public their implementations so I had a lot of good references for my simple implementation.<br />
<br />
CodePlex link for my program&#8217;s source code and binary are provided at the end of the article.</p>
<h2>Relevant Links</h2>
<p>1) <a href="http://developer.amd.com/documentation/presentations/Pages/default.aspx" onclick="pageTracker._trackPageview('/outgoing/developer.amd.com/documentation/presentations/Pages/default.aspx?referer=');">http://developer.amd.com/documentation/presentations/Pages/default.aspx</a><br />
ATI&#8217;s conference presentation list contains a link to their &#8220;GDC 2010: OIT and GI using DX11 linked lists&#8221; presentation ppt. This demo is an implementation of the algorithm described in this presentation.<br />
<br />
2) <a href="http://www4.atword.jp/cathy39/category/direct3d11/oit-direct3d11/" onclick="pageTracker._trackPageview('/outgoing/www4.atword.jp/cathy39/category/direct3d11/oit-direct3d11/?referer=');">http://www4.atword.jp/cathy39/category/direct3d11/oit-direct3d11/</a><br />
GPU Pro contributor Kaori Kubota-san&#8217;s linked list OIT implementation. She walks through the linked list OIT implementation pretty carefully and her explanations are interspersed with source code. Couldn&#8217;t find sample code for stuff like D3D11_BUFFER_UAV_FLAG_COUNTER, so her explanations were very helpful. My implementation is based on the ATI presentation ppt and her blog posts.<br />
<br />
3) <a href="http://orenk2k.blogspot.com/2010/03/oit-order-independent-transparency.html" onclick="pageTracker._trackPageview('/outgoing/orenk2k.blogspot.com/2010/03/oit-order-independent-transparency.html?referer=');">http://orenk2k.blogspot.com/2010/03/oit-order-independent-transparency.html</a><br />
A blog post about a linked-list OIT implementation. Good explanations.<br />
<br />
4) <a href="http://sites.google.com/site/monshonosuana/directxno-hanashi-1/directx-110" onclick="pageTracker._trackPageview('/outgoing/sites.google.com/site/monshonosuana/directxno-hanashi-1/directx-110?referer=');">http://sites.google.com/site/monshonosuana/directxno-hanashi-1/directx-110</a><br />
A Japanese graphics programming website recently posted a linked list OIT implementation. Good explanations (in Japanese) with source code and binary.<br />
<br />
5) <a href="http://www.uraldev.ru/articles/id/36" onclick="pageTracker._trackPageview('/outgoing/www.uraldev.ru/articles/id/36?referer=');">http://www.uraldev.ru/articles/id/36</a><br />
Another linked list OIT implementation. Article is in Russian, so I used google translate to read it. Nice article with source code and binary provided. Learned about the implementation from the author&#8217;s blog post comment here <a href="http://www.wolfgang-engel.info/blogs/?p=116" onclick="pageTracker._trackPageview('/outgoing/www.wolfgang-engel.info/blogs/?p=116&amp;referer=');">http://www.wolfgang-engel.info/blogs/?p=116</a><br />
<br />
6) <a href="http://joescg.blogspot.com/2010/01/oita-buffer-demo.html" onclick="pageTracker._trackPageview('/outgoing/joescg.blogspot.com/2010/01/oita-buffer-demo.html?referer=');">http://joescg.blogspot.com/2010/01/oita-buffer-demo.html</a><br />
Another Russian OIT implementation. Good explanations read using google translate again. Learned about the implementation from here <a href="http://www.geeks3d.com/forums/index.php/topic,861.0.html" onclick="pageTracker._trackPageview('/outgoing/www.geeks3d.com/forums/index.php/topic_861.0.html?referer=');">http://www.geeks3d.com/forums/index.php/topic,861.0.html</a><br />
<br />
7) <a href="http://www.yakiimo3d.com/2010/06/19/dx11-high-quality-global-illumination-rendering-using-rasterization/">http://www.yakiimo3d.com/2010/06/19/dx11-high-quality-global-illumination-rendering-using-rasterization/</a><br />
The DX11 linked list technique can be used to speed up algorithms besides alpha blending. Toshiya Hachisuka-san&#8217;s “High-Quality Global Illumination Rendering Using Rasterization” algorithm can be sped up using ATI&#8217;s StructuredBuffer linked list technique.</p>
<h2>A Screen Captures From My OIT Demo</h2>
<p><a href="http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/regular/" rel="attachment wp-att-764"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/07/regular.png" alt="" title="regular" width="656" height="517" class="alignnone size-full wp-image-764" /></a><br />
<br />
Regular alpha blending using ID3D11BlendState. Notice that the far section of the blue quad is incorrectly rendered over the red quad. Since each colored quad is drawn in a single draw call, it&#8217;s not possible to sort the geometry to get correct alpha blending.<br />
<br />
<a href="http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/oit/" rel="attachment wp-att-763"><img src="http://www.yakiimo3d.com/wp-content/uploads/2010/07/oit.png" alt="" title="oit" width="656" height="517" class="alignnone size-full wp-image-763" /></a><br />
<br />
Rendered with the OIT algorithm. In the first pass, all pixel fragments are stored into a large StructuredBuffer. In the 2nd pass, the stored pixel fragments are read and sorted per-pixel inside a pixel shader program and everything is correctly rendered.<br />
</p>
<h2>Implementation Details</h2>
<p>Other websites already explain the linked list OIT algorithm, so not going to do that in this blog post. On my ATI HD5750, with the DirectX SDK OIT sample, I get a fps of around 10 fps at a screen size of 320&#215;240. With my ATI OIT implementation, I get a fps of around 700 fps at a screen size of 640&#215;480. With regular ID3D11BlendState alpha blending, I get a fps around 3000 fps at a screen size of 640&#215;480.</p>
<h2>OIT Demo</h2>
<p>Source Code &#038; Binary<br />
<a href="http://yakiimo3d.codeplex.com/releases/view/49213" onclick="pageTracker._trackPageview('/outgoing/yakiimo3d.codeplex.com/releases/view/49213?referer=');">http://yakiimo3d.codeplex.com/releases/view/49213</a><br />
</p>
<h2>Comments</h2>
<p>It&#8217;s been over 3 months since my last demo. For the past month, I had been feeling somewhat down, but now I feel much better, so maybe I will be more productive. Not sure what I want to implement next. Maybe a translucent material demo based on this OIT demo. Or maybe experiment with DX11 tesselation and implement a DX11 Phong Tesselation demo. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

