<?xml version="1.0" encoding="utf-8"?>

<feed xmlns="http://www.w3.org/2005/Atom">
<title>idr&#x27;s blog</title>
<link href="http://www.paranormal-entertainment.com/idr/blog/"/>
<link href="http://www.paranormal-entertainment.com/idr/blog/index/graphics.atom" rel="self" type="application/atom+xml"/>
<author>

<name>blogtest</name>

</author>




<id>http://www.paranormal-entertainment.com/idr/blog/</id>

<subtitle type="html">blogtest</subtitle>
<generator uri="http://ikiwiki.info/" version="3.20100831">ikiwiki</generator>
<updated>2011-10-27T03:02:12Z</updated>
<entry>
	<title>No build breaks!</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2011-10-26T22:35:41Z-No_build_breaks/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-10-26T22:35:41Z-No_build_breaks/"/>






	<category term="/tags/graphics" />


	<updated>2011-10-27T03:02:12Z</updated>
	<published>2011-10-26T22:35:41Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;GIT is a wonderful tool.  It enables some really powerful, flexible
working models.  There is one model that is commonly used when
developing a major feature (or large refactor):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create a long series of patches in the order that it makes sense
to develop them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rebase, reorder, and merge patches into the order that it makes
sense to review them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Post patches for review in small, easy to digest groups.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a danger in this process.  While reordering patches it is
very easy to create a tree that won&#39;t build at intermediate commits.
Since the entire group of patches gets pushed at once, this may not
seem like a problem.  However, having intermediate commits not build
makes it impossible to bisect when failures are found later.&lt;/p&gt;

&lt;p&gt;Having every commit along a long patch series build is an absolute
requirement.&lt;/p&gt;

&lt;p&gt;However, it&#39;s kind of a pain in the ass to manually build the tree at
every step.  The emphasis in the previous sentence is &lt;em&gt;manually&lt;/em&gt;.  In
some sense the ideal tool is something like a scripted bisect.  This
doesn&#39;t work, of course, because both ends of the commit sequence, in
bisect terminology, are good.&lt;/p&gt;

&lt;p&gt;To get around this in Mesa, I wrote a script that builds
&lt;code&gt;origin/master&lt;/code&gt; and every commit in some range of SHA1s.  If any build
fails, the script halts.  At the end, it logs the change in the
compiler warnings from &lt;code&gt;origin/master&lt;/code&gt; to each commit (as I write
this, it occurs to me that the warning diffs should be between
sequential commits).  This is useful to prevent new warnings from
creeping in.&lt;/p&gt;

&lt;p&gt;My script is &lt;a href=&quot;http://www.paranormal-entertainment.com/idr/blog/misc/check_all_commits.sh&quot;&gt;available&lt;/a&gt;.
This particular script is very specific to Mesa, but it should be easy
to adapt to other projects.  The script is run as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;check_all_commits.sh /path/to/source /path/to/build firstSHA..lastSHA
&lt;/code&gt;&lt;/pre&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-10-26T22:35:41Z-No_build_breaks/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-10-26T22:35:41Z-No_build_breaks/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>SIGGRAPH 2011: Day 4</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-18T17:04:41Z-SIGGRAPH_2011:_Day_4/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-18T17:04:41Z-SIGGRAPH_2011:_Day_4/"/>






	<category term="/tags/SIGGRAPH" />

	<category term="/tags/graphics" />


	<updated>2011-08-18T17:43:21Z</updated>
	<published>2011-08-18T17:04:41Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;(Better never than late... or something...)&lt;/p&gt;

&lt;p&gt;I had high expectations for &lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/talks/sessions/125&quot;&gt;Hiding
Complexity&lt;/a&gt;,
but I was largely disappointed.  I only stayed for the first two talks.  As
far as I could tell, &lt;em&gt;Occlusion Culling in Alan Wake&lt;/em&gt; summarized the
combination of a bunch of known techniques for occlusion.  Their combination
seems to have the strong &lt;em&gt;disadvantage&lt;/em&gt; that it has a lot of temporal
instability, and this can lead to frame rate jitter.  Even the bit of the talk
about optimizing shadow generation seemed like a subset of the optimizations
from &lt;a href=&quot;http://gamma.cs.unc.edu/ccsv/&quot;&gt;CC Shadow Volumes&lt;/a&gt;.  I&#39;ll have to look at
their I3D paper, &lt;a href=&quot;http://www.cg.tuwien.ac.at/research/publications/2011/bittner-2011-scc/&quot;&gt;Shadow Caster Culling for Efficient Shadow
Mapping&lt;/a&gt;
to be sure.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Increasing Scene Complexity: Distributed Vectorized View Culling&lt;/em&gt; can be
summarized by: we optimized a slow part of our code in all the obvious ways,
and it got a lot faster.  &lt;strong&gt;shock&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After that, I bailed and went to &lt;a href=&quot;http://www.siggraph.org/s2011/content/compiler-techniques-rendering-0&quot;&gt;Compiler Techniques for
Rendering&lt;/a&gt;
(&lt;a href=&quot;http://www.s2001compilers.org/&quot;&gt;slides are also available&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I missed the first couple talks, but I did arrive in time for
&lt;a href=&quot;http://www.cdl.uni-saarland.de/projects/anysl/&quot;&gt;AnySL&lt;/a&gt;.  They have an
interesting project.  It&#39;s essentially an N:M compiler.  It seems like we
should connect their OpenCL work with various open-source efforts that are
underway.  This is especially the case if their claim of beating Intel&#39;s (CPU)
OpenCL compiler on &lt;em&gt;almost&lt;/em&gt; all kernels turns out to be true.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Automatic Bounding of Shaders for Efficient Global Illumination&lt;/em&gt; was
interesting, but I don&#39;t think it has anything directly applicable to our GLSL
compiler work.  However, it did give me some ideas to try for a real-time
light integrator that I&#39;ve been working on.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Compilation for GPU Accelerated Ray Tracing in OptiX&lt;/em&gt; looked mostly
like their talk from SIGGRAPH last year.  I didn&#39;t recall any mention
of the previous
&lt;a href=&quot;http://graphics.stanford.edu/~boulos/papers/rtsl.pdf&quot;&gt;RTSL&lt;/a&gt; work, and
that paper was an interesting read.  There are a couple built-in
functions in that language that are useful.  I&#39;ve open-coded a couple
of them in the past...&lt;/p&gt;

&lt;p&gt;The final session of the conference was &lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/technical-papers/sessions/68&quot;&gt;Real-Time Rendering
Hardware&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Clipless Dual-Space Bounds for Faster Stochastic Rasterization&lt;/em&gt; and 
&lt;em&gt;Decoupled Sampling for Graphics Pipelines&lt;/em&gt; were related pieces of work.  Each
was a different part of solving the automatic defocus and motion blur
problem.  I like the idea of having the hardware assist with these in a
similar way that it helps with antialiasing.  While it&#39;s trivial to expose
MSAA to the developer (it&#39;s mostly transparent), it&#39;s not clear to me how to
expose motion blur or, to a lesser degree, defocus blur.  Given all the weird
ways that people implement animation in real-time systems, how can the API
directly expose a time dimension as a shader parameter?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://intel.ly/spark-s2011/&quot;&gt;&lt;em&gt;Spark: Modular, Composable Shaders for Graphics
Hardware&lt;/em&gt;&lt;/a&gt; echoes a lot of concerns that
I&#39;ve had for a few years.  That people have to machine generate 10,000
shaders or use &lt;code&gt;#define&lt;/code&gt; madness to specialize 10,000 variations of
their shaders shows that we haven&#39;t given them a useful system.  Even
without that it&#39;s pretty much impossible to have separation of
concerns in a shader stack.  They way that
&lt;a href=&quot;http://code.google.com/p/openshadinglanguage/&quot;&gt;OSL&lt;/a&gt; allows shaders to
be composed solves some of this, and Spark takes a different approach.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Physically Based Real-Time Lens Flare Rendering&lt;/em&gt; goes in the &quot;I should try to
implement that&quot; bin.  Bastards!  It was nice ending the conference with pretty
pictures.&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-18T17:04:41Z-SIGGRAPH_2011:_Day_4/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-18T17:04:41Z-SIGGRAPH_2011:_Day_4/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>SIGGRAPH 2011: Day 3</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-12T17:09:18Z-SIGGRAPH_2011:_Day_3/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-12T17:09:18Z-SIGGRAPH_2011:_Day_3/"/>






	<category term="/tags/SIGGRAPH" />

	<category term="/tags/graphics" />


	<updated>2011-08-12T17:11:49Z</updated>
	<published>2011-08-12T17:09:18Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;I went to
&lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/technical-papers/sessions/55&quot;&gt;Surfaces&lt;/a&gt;
just to hear &lt;a href=&quot;http://www.cc.gatech.edu/~topraj/SIGGRAPH11.html&quot;&gt;LR: Compact Connectivity Representation for Triangle
Meshes&lt;/a&gt;.  Their technique is
pretty simple, and achieves really good results.  Their primary insight was
that a lot of mesh connectivvity can be stored &lt;em&gt;implicitly&lt;/em&gt; by the ordering of
the verticies.  If all of your vertex data is a (non-indexed) strip, you get a
lot of information for free.  Like most mesh data structures, they only handle
manifold meshes.  The big disadvantage is that LR doesn&#39;t &quot;yet&quot; handle
updates, but that&#39;s an area of planned future research.&lt;/p&gt;

&lt;p&gt;I also tried to get over to the last bits of &lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/talks/sessions/118&quot;&gt;Mixed
Grill&lt;/a&gt;, but I
only managed to catch &lt;em&gt;High-Resolution Relightable Buildings From
Photographs&lt;/em&gt;.  Their technique is really a novel combination of several known
techniques.  Their results are pretty impressive.&lt;/p&gt;

&lt;p&gt;The last session before lunch was &lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/technical-papers/sessions/56&quot;&gt;Image
Processing&lt;/a&gt;.
I was primarily interested in &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/hoppe/proj/aarecovery/&quot;&gt;Antialiasing
Recovery&lt;/a&gt;,
and it was a really well given talk.  You can tell that a speaker knows their
audience when he starts with, &quot;I understand that there are people like me that
like to take naps during talks, so if you want to get the gist of the paper,
pay attention to these parts.&quot;  Strong work.&lt;/p&gt;

&lt;p&gt;They take an image before and after some filter operation (e.g., thresholding
to black and white) and try to recover antialiasing (smooth edges, really) in
the prefiltered image.  This is acomplished by examining both images for hard
edges and doing neighbor searches and blending in the areas where new hard
edges appear.  On current limitation is the assumption that only two colors
from a pixel&#39;s 8 neighbors contribute to the original smooth edge.  They also
plan to have code available on their project page in a month or so.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://people.csail.mit.edu/sparis/publi/2011/siggraph/&quot;&gt;Local Laplacian Filters: Edge-aware Image Processing with a Laplacian
Pyramid&lt;/a&gt; was a clever
techniqe.  I&#39;ll probably try to play around with it a bit.  There are a few
areas in real-time rendering (e.g., SSAO, some soft-shadow algorithms) where
bilateral filtering is used as an edge-aware filter.  &lt;em&gt;Most&lt;/em&gt; of these are
low-frequency effects where some of the noise isn&#39;t as apparent, but there may
still be some benefit.&lt;/p&gt;

&lt;p&gt;The remaining papers, &lt;em&gt;Domain Transform for Edge-Aware Image and Video
Processing&lt;/em&gt; and &lt;em&gt;Non-Rigid Dense Correspondence With Applications for Image
Enhancement&lt;/em&gt;, produce really good results, but they&#39;re both in area &lt;em&gt;way&lt;/em&gt;
outside my area of expertise.&lt;/p&gt;

&lt;p&gt;I spent the afternoon in the expo hall and at the Animation Theater
&quot;demoscene&quot; session.  Hurray for seeing CNCD / Fairlight on the big screen.
Things have come a long way since &lt;a href=&quot;http://scene.org/dir.php?dir=%2Fmirrors%2Famigascne%2FGroups%2FE%2FEpsilon%2F&quot;&gt;my scene
days&lt;/a&gt;...&lt;/p&gt;

&lt;p&gt;After that, I went to the OpenGL BoF.  Hurray for &lt;a href=&quot;http://www.khronos.org/news/press/khronos-enriches-cross-platform-3d-graphics-with-release-of-opengl-4.2-spec&quot;&gt;OpenGL
4.2&lt;/a&gt;!&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-12T17:09:18Z-SIGGRAPH_2011:_Day_3/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-12T17:09:18Z-SIGGRAPH_2011:_Day_3/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>SIGGRAPH 2011: Day 2</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-10T15:07:17Z-SIGGRAPH_2011:_Day_2/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-10T15:07:17Z-SIGGRAPH_2011:_Day_2/"/>






	<category term="/tags/SIGGRAPH" />

	<category term="/tags/graphics" />


	<updated>2011-08-10T16:38:28Z</updated>
	<published>2011-08-10T15:07:17Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;I started the day with &lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/talks/sessions/115&quot;&gt;Out of
Core&lt;/a&gt;, but I
missed &lt;em&gt;Google Body: 3D Human Anatomy in the Browser&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Over the last few years there have been a lot of papers about real-time global
illumination.  They always start with two caveats: no specular and one bounce.
&lt;em&gt;Interactive Indirect Illumination Using Voxel Cone Tracing&lt;/em&gt; breaks the mold
and goes for two bounces!  Hurray!  They can also handle long-range indirect
illumination better than LPVs, and it runs slightly faster.  Based on their
2009 GigaVoxels work.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Out-of-core Raytracing&lt;/em&gt; was really hard to listen to.  A big chunk of his
presentation was a video of animated slides.  Bad presenter, no biscuit!  Even
more frustrating is that the bulk of the presentation focused on the
performance of his very limited raytracer.  The raytracer can handle a lot of
polygons, but it can&#39;t do shaders, textures, etc.  When asked, he said, &quot;Right
now shading is not implemented in this project.&quot;  Performance comparisons with
other (more capable) raytracers are just not interesting.&lt;/p&gt;

&lt;p&gt;What &lt;em&gt;was&lt;/em&gt; interesting is the paging structure that he developed to make it
work.  The fundamental problem with GPU raytracing is that interesting scenes
are multiple gigabytes, and GPUs can&#39;t handle that much data in a single
batch.  To over come this he developed a novel way of breaking the scene data
into pages and determining which rays needed which pages.  That was the
interesting part, but he only spent a few scant minutes talking about it.&lt;/p&gt;

&lt;p&gt;After that, I headed over to &lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/technical-papers/sessions/49&quot;&gt;Stochastic Rendering &amp;amp;
Visibility&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://fileadmin.cs.lth.se/graphics/research/papers/2011/spatiotemp/&quot;&gt;High-Quality Spatio-Temporal Rendering using Semi-Analytical
Visibility&lt;/a&gt;
is obviously not targeted at real-time rendering, but it seems like some
aspects could be adapted.  One of my favorite things about this presentation
was the rich list of areas for future research.&lt;/p&gt;

&lt;p&gt;Both &lt;a href=&quot;http://graphics.berkeley.edu/papers/Egan-FAS-2011-04/index.html&quot;&gt;Frequency Analysis and Sheared Filtering for Shadow Light Fields
of Complex
Occluders&lt;/a&gt;
and &lt;a href=&quot;http://groups.csail.mit.edu/graphics/tlfr/&quot;&gt;Temporal Light Field Reconstruction for Rendering Distribution
Effects&lt;/a&gt; assumed a lot of
background knowledge that I don&#39;t have.  In particular, all the bits
about the Fourier analysis of occluder depths (which was a pretty key
element!) was completely lost on me.  I did find the medium frequency
artifacts in the former paper interesting.  Who gets medium frequency
noise?!?  It&#39;s always either high frequency or low frequency.  I also
appreciated the background material at the start of the later
presentation.  I&#39;ll probably harvest some of that for my VGP sequence.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Area Perspective Transform: A Homogeneous Transform for Efficient
In-Volume Queries&lt;/em&gt; was an interesting idea that seems to obvious to work. &lt;img src=&quot;http://www.paranormal-entertainment.com/idr/blog/./smileys/smile.png&quot; alt=&quot;:)&quot; /&gt;
It takes a bunch of math operations to intersect a frustum with a bounding
volume, but it&#39;s cheap to intersect an AABB with another bounding volume.
Their solution?  Project the points of the base (the big part) of the frustum
to inifinit so that the lines become parallel (in the limit).  I still need to
read the paper to get all the details.&lt;/p&gt;

&lt;p&gt;There were only a couple of papers that I paid attention to in
&lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/technical-papers/sessions/53&quot;&gt;By-Example Image
Synthesis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Techniques like &lt;a href=&quot;http://www-sop.inria.fr/reves/Basilic/2011/BLRDD11/&quot;&gt;Image-Guided Weathering: A New Approach Applied to Flow
Phenomena&lt;/a&gt; are
increasingly important in games.  They take some examplar images to
generate parameters for a particle simulation, then they use those
parameters to generate new images.  What&#39;s cool about this is that
almost all of the computation is done to &quot;reverse engineer&quot; the
original image.  It ought to be possible to use that data (with some
perturbation of the parameters) to generate new images each time the
game is run.  This is another one that goes on my &quot;to implement&quot; list.&lt;/p&gt;

&lt;p&gt;I was really stoked about &lt;a href=&quot;http://research.microsoft.com/apps/pubs/default.aspx?id=147069&quot;&gt;Discrete Element
Textures&lt;/a&gt;.
One of the authors, &lt;a href=&quot;http://www.liyiwei.org/&quot;&gt;Li-Yi Wei&lt;/a&gt;, presented one of my
favorite SIGGRAPH
&lt;a href=&quot;http://graphics.stanford.edu/papers/tile_mapping_gh2004/&quot;&gt;papers&lt;/a&gt;.  This is
&quot;another&quot; exemplar-based texture synthesis algorithm.  Like some of the
previous work they treat elements in the exemplar as units.  This prevents the
old artifacts of getting half a of a pebble, for example, in your gravel
texture.  I haven&#39;t read all of other previous work, but I thought it was
pretty cool that their work also applies to 3D objects.  The piles of carrots
and plates of spaghetti were pretty cool.&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-10T15:07:17Z-SIGGRAPH_2011:_Day_2/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-10T15:07:17Z-SIGGRAPH_2011:_Day_2/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>SIGGRAPH 2011: Day 1</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-09T21:45:01Z-SIGGRAPH_2011:_Day_1/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-09T21:45:01Z-SIGGRAPH_2011:_Day_1/"/>






	<category term="/tags/SIGGRAPH" />

	<category term="/tags/graphics" />


	<updated>2011-08-09T22:09:30Z</updated>
	<published>2011-08-09T21:45:01Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;I started the day with &lt;a href=&quot;http://advances.realtimerendering.com/&quot;&gt;Advances in Real-Time Rendering in
Games&lt;/a&gt;.  I found it interesting that
&lt;a href=&quot;http://www.bungie.net/projects/reach/default.aspx&quot;&gt;Halo Reach&lt;/a&gt; uses &quot;state
mirroring&quot; to communicate updated world state from the simulation process to
the rendering process.  They&#39;re essentially treating the cores in the Xbox 360
as a distributed system rather than an SMP.  This echos what
&lt;a href=&quot;http://www.timmattson.com/work.shtml&quot;&gt;Matteson&lt;/a&gt; et. al. found while
developing the &lt;a href=&quot;http://techresearch.intel.com/ProjectDetails.aspx?Id=1&quot;&gt;Single-Chip Cloud
Computer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Cars 2 talk started the long train of &quot;we do annoying stuff to work around
the limitations of console GPUs.&quot;  In particular, a large portion of their
stereo rendering algorithm was implemented on the SPUs because the RSX cannot
do scattered writes.  It seems like at least the generation of the item
buffer, which is the mapping of points the reference image to one of the
stereo pairs, could be done on the RSX.  Of course, OpenGL 4.x class GPUs can
do this.  It would be interesting to recast their algorithm using
&lt;a href=&quot;http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt&quot;&gt;&lt;code&gt;GL_ARB_shader_image_load_store&lt;/code&gt;&lt;/a&gt;
(Note: DX people will know this as unordered access views / UAVs).&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://www.littlebigplanet.com/en/2/&quot;&gt;Little Big Planet 2&lt;/a&gt; talk was
pretty cute.  Their voxel algo rithm for doing AO in world space (instead of
screen space) was clever and produces really good results.  Generating one
blob of expensive data and using it for a lot of things usually means you&#39;re
winning.  I&#39;ll also have to add mention to my VGP353 lectures that both LBP1
and LBP2 use variance shadow maps.&lt;/p&gt;

&lt;p&gt;The CryEngine 3 talk moved really fast and spent a lot of time switching
between speakers.  It was hard to get much out of it.  However, I did get a
couple notes for things we need to make better in our driver.&lt;/p&gt;

&lt;p&gt;They showed a bit of HLSL code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;float4 HPos = (vStoWBiasZ + (vStoWBiasX * Vpos.x) + (vStoWBiasY * Vpos.y)) *
    fSceneDepth;
HPos += vCamPos.xyzw;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The initial calculation of &lt;code&gt;HPos&lt;/code&gt; &lt;em&gt;should&lt;/em&gt; be implemented as a single
&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb219756(v=vs.85).aspx&quot;&gt;&lt;code&gt;DP2A&lt;/code&gt;&lt;/a&gt;
instruction on architectures that can do that:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DP2A    HPos, Vpos, vStoWBias, vStoWBiasZ;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We can&#39;t do that with our current compiler, and it would take a lot of work to
do so.  One thing that we would have to do is notice that two independent
&lt;code&gt;float&lt;/code&gt; variables need to be packed into a single &lt;code&gt;vec2&lt;/code&gt;.  Doing that packing
could have repercussions elsewhere in the code.  This is where tree matching
code generators that use dynamic programming and cost functions really shine.&lt;/p&gt;

&lt;p&gt;They CryTek guys also complained about the high latency for frame read back
(up to 4 frames) on desktop GPUs.  They want to do CPU processing on the depth
buffer from a previously rendered frame to do approximate visibility
calculations for later frames.  On consoles, there&#39;s only a single frame of
lag.&lt;/p&gt;

&lt;p&gt;They also mentioned that they have used cascaded shadow maps since Crysis 1.&lt;/p&gt;

&lt;p&gt;I ducked out of &lt;em&gt;Advances in Real-Time Rendering in Games&lt;/em&gt; part way through to
go to &lt;em&gt;Drawing, Painting, and Stylization&lt;/em&gt;.  I caught just the tail end of &lt;em&gt;A
Programmable System for Artist Directed Volumetric Lighting&lt;/em&gt;, and I wish I had
seen the rest of it.&lt;/p&gt;

&lt;p&gt;I actually went to that session to see &lt;em&gt;Coherent Noise for Non-Photorealistic
Rendering&lt;/em&gt;, and I was quite pleased.  There are two main problems with
applying noise to NPR.  Using 3D noise depends on depth, so the frequency of
noise applied to object (e.g., to make lines wavy) depends on the how far away
from the camera it is.  Using 2D noise gives what the authors called the
&quot;shower door effect.&quot;  That is also fail.&lt;/p&gt;

&lt;p&gt;They really want three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cheap to compute&lt;/li&gt;
&lt;li&gt;noise moves with objects&lt;/li&gt;
&lt;li&gt;uniform spectrum in screen space&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The algorithm that they developed accomplishes these goals.  Throughout the
presentation, they showed a bit of UP! with Russel hanging from the garden
hoses below the house.  With their NPR noise applied as the &quot;texture,&quot; the
still image just looked like white noise.  As soon as the animation began, all
of the structure of the image magically appeared.  It was pretty cool.  I&#39;ll
need to implement it and make some piglit test cases.&lt;/p&gt;

&lt;p&gt;The final session of the day was &lt;a href=&quot;http://www.siggraph.org/s2011/for_attendees/talks/sessions/112&quot;&gt;Tiles and Textures and Faces Oh
My!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I enjoyed the &lt;em&gt;Procedural Mosaic Arrangement In &quot;Rio&quot;&lt;/em&gt; talk.  It felt like
their system was perhaps a little over complicated, but that complexity may
give it more flexibility for reuse.  Not only was the technique used for the
mosaic sidewalks in Copacabana but also for &quot;plain&quot; cobblestone streets.  I
would like to have heard more about &lt;em&gt;that&lt;/em&gt;.  This is something that everybody
does in games, and everybody does it poorly.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/3/34/CopacabanaPavement.jpg&quot; width=&quot;400&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There were some bits of &lt;em&gt;Generating Displacement from Normal Maps for Use in
3D Games&lt;/em&gt; that I didn&#39;t fully grok.  Their initial attempt was to reverse the
derivative approximation used to generate the normals and propagate the new
offsets around.  It seems obvious that this wouldn&#39;t work.  They moved on from
that to a polar coordinate integration scheme that wasn&#39;t communicated very
well by the presentation.  I&#39;ll have to read the paper and think about it some
more.&lt;/p&gt;

&lt;p&gt;I first heard about &lt;a href=&quot;http://ptex.us/&quot;&gt;Ptex&lt;/a&gt; at the &quot;open-source in production&quot;
panel last year.  At the time, I had thought that you could implement them in
a fairly straightforward way on a GPU.  &lt;em&gt;Per-Face Texture Mapping for
Real-Time Rendering&lt;/em&gt; follows pretty much what I was thinking, but there are
some differences.&lt;/p&gt;

&lt;p&gt;To maintain some batching, all surfaces with textures of the same aspect ratio
are grouped.  Textures of a particular aspect ratio are stored in a series of
&lt;em&gt;non-mipmapped&lt;/em&gt; texture arrays.  Each texture array corresponds to a
particular mipmap size for that aspect ratio.  That is, all of the 512x512
mipmaps are in one texture array, all of the 256x256 mipmaps are in another,
etc.  When a texture is sampled, the texture is selected (texture array
index), the LODs are calculated (the arrays), everything is sampled, and the
intermipmap blending is done.  This is all open-coded in the shader (via
&lt;code&gt;ptex&lt;/code&gt; function).&lt;/p&gt;

&lt;p&gt;Having this goofy organization means that a texture with a 64x64 base level
doesn&#39;t waste a bunch of space when it&#39;s batched with a texture with a
2048x2048 base level.  It&#39;s the classing time vs. space trade-off.&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-09T21:45:01Z-SIGGRAPH_2011:_Day_1/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-08-09T21:45:01Z-SIGGRAPH_2011:_Day_1/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>ud-chains coming to GLSL compiler near you...</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2011-05-03T23:36:04Z-ud-chains_coming_to_GLSL_compiler_near_you/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-05-03T23:36:04Z-ud-chains_coming_to_GLSL_compiler_near_you/"/>






	<category term="/tags/graphics" />


	<updated>2011-05-04T00:10:58Z</updated>
	<published>2011-05-03T23:36:04Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;I &lt;em&gt;finally&lt;/em&gt; started working on ud-chains for Mesa&#39;s GLSL compiler.  I&#39;m
continually amazed that it works as well as it does without them.  There are
so many ugly hacks and so much ad hoc data-flow analysis that I just couldn&#39;t
put it off any longer.  If you want to cry, take a look at how reaching
definitions are determined in
&lt;a href=&quot;http://cgit.freedesktop.org/mesa/mesa/tree/src/glsl/loop_analysis.cpp&quot;&gt;&lt;code&gt;loop_analysis.cpp&lt;/code&gt;&lt;/a&gt;.
It&#39;s pretty horrible.&lt;/p&gt;

&lt;p&gt;My primary goal is to get enough infrastructure in place to fix that code.  In
addition to the ugliness, it fails on cases like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;void main()
{
    int n = 3;
    int i = 0;

    if (b)
        some_function();

    while (i &amp;lt; n) {
        some_other_function();
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The loop analyzer will have no idea what the values of &lt;code&gt;i&lt;/code&gt; or &lt;code&gt;n&lt;/code&gt; are.  There
are similar issues with identifying values that are constant across all
iterations of the loop.  In this case, flow control inside the loop confuses
the analyzer.&lt;/p&gt;

&lt;p&gt;The first step to this project is to get real basic block tracking.  We have a
mechanism to iterate over instructions as basic blocks (see
&lt;a href=&quot;http://cgit.freedesktop.org/mesa/mesa/tree/src/glsl/ir_basic_block.cpp&quot;&gt;&lt;code&gt;ir_basic_block.cpp&lt;/code&gt;&lt;/a&gt;,
but nothing is &lt;em&gt;stored&lt;/em&gt; about the blocks.  This means we don&#39;t know which
blocks can transfer control to which other blocks.&lt;/p&gt;

&lt;p&gt;I now have some code that creates a the basic block structure of a function.
The next step will be to process the instructions in the basic blocks to track
the (value) definitions within the block.&lt;/p&gt;

&lt;p&gt;In the mean time, I modified the stand-alone compiler to optionally dump a
graph of the basic blocks in &lt;a href=&quot;http://www.graphviz.org/&quot;&gt;dot&lt;/a&gt;.  The results,
even for small shaders, are shockingly cool.&lt;/p&gt;

&lt;p&gt;Here&#39;s the code for the piglit test
&lt;code&gt;glsl-fs-vec4-indexing-temp-dst-in-nested-loop-combined.shader_test&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;uniform float one;
uniform int count1, count2;
uniform vec4 red;

void main()
{
    vec4 array[11];
    array[0] = vec4(0.1, 0,   0,   0) * one;
    array[1] = vec4(0,   0.1, 0,   0) * one;
    array[2] = vec4(0,   0,   0.1, 0) * one;
    array[3] = vec4(0,   0.1, 0,   0) * one;
    array[4] = vec4(0,   0  , 0.1, 0) * one;
    array[5] = vec4(0,   0,   0.1, 0) * one;
    array[6] = vec4(0.1, 0,   0,   0) * one;
    array[7] = vec4(0,   0.1, 0,   0) * one;
    array[8] = vec4(0,   0.1, 0.1, 0) * one;
    array[9] = vec4(0.1, 0.1, 0,   0) * one;
    array[10] = vec4(0.1, 0,   0.1, 0) * one;
    for (int i = 0; i &amp;lt; count1; i++)
        for (int j = 0; j &amp;lt; count2; j++)
            array[i*3+j] += red*float(j+1);
    gl_FragColor = array[0] + array[1] + array[2] + array[3] + array[4] +
        array[5] + array[6] + array[7] + array[8] + array[9] + array[10];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And here is the resulting basic block graph:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.paranormal-entertainment.com/idr/blog/images/basic_blocks.png&quot; width=&quot;329&quot; height=&quot;1171&quot; /&gt;&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-05-03T23:36:04Z-ud-chains_coming_to_GLSL_compiler_near_you/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-05-03T23:36:04Z-ud-chains_coming_to_GLSL_compiler_near_you/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>Linux native games?</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2011-03-14T22:54:21Z-Linux_native_games/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-03-14T22:54:21Z-Linux_native_games/"/>






	<category term="/tags/games" />

	<category term="/tags/graphics" />


	<updated>2011-05-04T00:12:24Z</updated>
	<published>2011-03-14T22:54:21Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;I was talking to Linus and others at Intel&#39;s Open Source Technology Summit
last week, and it occured to me that I have completely lost touch with what&#39;s
available for commercial games that run native on Linux.  The last native game
that I bought / played was &lt;a href=&quot;http://www.paranormal-entertainment.com/idr/blog/www.idsoftware.com/games/enemyterritory/etqw/&quot;&gt;Enemy Territory: Quake
Wars&lt;/a&gt;.  That was a long time
ago.&lt;/p&gt;

&lt;p&gt;I know that &lt;a href=&quot;http://oilrush-game.com/&quot;&gt;OilRush&lt;/a&gt; has recently become available,
and I think a few other &lt;a href=&quot;http://unigine.com/&quot;&gt;Unigen&lt;/a&gt; based games are coming
soon-ish.&lt;/p&gt;

&lt;p&gt;What else is there?&lt;/p&gt;

&lt;p&gt;More importantly, what else is there that I can add to an automated test suite
for my driver?  The easily scriptable timedemo feature of the old Quake3
engine games was the best.&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-03-14T22:54:21Z-Linux_native_games/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-03-14T22:54:21Z-Linux_native_games/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>They must have cheated again</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2011-01-25T18:03:24Z-They_must_have_cheated_again/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-01-25T18:03:24Z-They_must_have_cheated_again/"/>






	<category term="/tags/graphics" />

	<category term="/tags/movies" />


	<updated>2011-01-25T18:22:23Z</updated>
	<published>2011-01-25T18:03:24Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;The list of &lt;a href=&quot;http://www.oscars.org/awards/academyawards/83/nominees.html&quot;&gt;nominees for the 83rd Academy
Awards&lt;/a&gt; was just
posted.  Somehow &lt;a href=&quot;http://www.imdb.com/title/tt1104001/&quot;&gt;TRON: Legacy&lt;/a&gt; isn&#39;t on
the list for Visual Effects.  It&#39;s like 1983 all over again...and what a shitty
year &lt;em&gt;that&lt;/em&gt; was!  It &lt;em&gt;is&lt;/em&gt; nominated for Sound Editing, but WTF?&lt;/p&gt;

&lt;p&gt;My predictions (which I had meant to post &lt;em&gt;weeks ago&lt;/em&gt;) were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt1014759/&quot;&gt;Alice in Wonderland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt0980970/&quot;&gt;The Chronicles of Narnia: The Voyage of the Dawn Treader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt0926084/&quot;&gt;Harry Potter and the Deathly Hallows Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt1375666/&quot;&gt;Inception&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt1104001/&quot;&gt;TRON: Legacy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I haven&#39;t seen Narnia, but that series has gotten Visual Effects nominations
in the past.&lt;/p&gt;

&lt;p&gt;The actual list is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt1014759/&quot;&gt;Alice in Wonderland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt0926084/&quot;&gt;Harry Potter and the Deathly Hallows Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt1212419/&quot;&gt;Hereafter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt1375666/&quot;&gt;Inception&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imdb.com/title/tt1228705/&quot;&gt;Iron Man 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3 out of 5 isn&#39;t too bad, I guess.  I haven&#39;t seen Hereafter, and I wasn&#39;t
that impressed with Iron Man 2.  &lt;em&gt;meh&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I think the winner will be either Inception or Harry Potter.  I think
Inception deserves it, but it may be cursed by having too many other
nominations.  It seems like the Academy tends to vote for movies with only a
few nominations (HP has 2 vs 8 for Inception) in this category.&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-01-25T18:03:24Z-They_must_have_cheated_again/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2011-01-25T18:03:24Z-They_must_have_cheated_again/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>@override</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2010-08-18T20:37:24Z-override/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2010-08-18T20:37:24Z-override/"/>






	<category term="/tags/graphics" />

	<category term="/tags/rant" />


	<updated>2010-08-18T20:56:34Z</updated>
	<published>2010-08-18T20:37:24Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;After &lt;a href=&quot;http://www.paranormal-entertainment.com/idr/blog/posts/2010-03-01T01:31:54Z-How_do_people_seriously_use_Java/&quot;&gt;bashing Java so
brutally&lt;/a&gt;,
I have to add &lt;em&gt;another&lt;/em&gt; thing to the list of Java features that I wish
C++ (or even just a GCC extension) had: &lt;code&gt;@override&lt;/code&gt; notation.  Imagine this
scenario...&lt;/p&gt;

&lt;p&gt;You have a base class that implements a bunch of methods, and some of
the methods have numerous overloads.  We&#39;ll call this class &lt;code&gt;base&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You have a bunch of classes that derive from &lt;code&gt;base&lt;/code&gt;.  Each of the
derived classes only override some of the methods provided by &lt;code&gt;base&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;These derived classes are used by other infrastructure that just takes
pointers to objects of type &lt;code&gt;base&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class base {
    virtual void do_something(float x);
    virtual void do_something(int x);
    virtual void do_something(char *str);
};

class d1 : public base {
    virtual void do_something(float x);
};

class d2 : public base {
    virtual void do_something(int x);
};

class d3 : public base {
    virtual void do_something(char *str);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Everyone with me so far?  Sound like every large C++ you&#39;ve ever seen?
Good.&lt;/p&gt;

&lt;p&gt;Now the signature of some of the methods in &lt;code&gt;base&lt;/code&gt; changes, perhaps by
adding a parameter.  While making that change, n-1 of the derived classes are
correctly modified.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class base {
    virtual void do_something(float x, int y);
    virtual void do_something(int x, int y);
    virtual void do_something(char *str, int y);
};

class d1 : public base {
    virtual void do_something(float x, int y);
};

class d2 : public base {
    virtual void do_something(int x, int y);
};

class d3 : public base {
    virtual void do_something(char *str /* FAIL!!! */ );
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Try to find the bug or go to drinking island?&lt;/p&gt;

&lt;p&gt;In Java this bug would never happen.  All of the &lt;code&gt;do_something&lt;/code&gt;
methods in the derived classed would be annotated with &lt;code&gt;@override&lt;/code&gt;.
When the compiler found &lt;code&gt;do_something&lt;/code&gt; in &lt;code&gt;d3&lt;/code&gt; that didn&#39;t match the
signature of any &lt;code&gt;do_something&lt;/code&gt; in &lt;code&gt;base&lt;/code&gt;, it would complain.  With
C++ you just spend hours trying to track down the bug.&lt;/p&gt;

&lt;p&gt;P.S.: I &lt;em&gt;still&lt;/em&gt; hate Java.&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2010-08-18T20:37:24Z-override/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2010-08-18T20:37:24Z-override/comments.atom" type="application/atom+xml" />

</entry>
<entry>
	<title>GPU Ray Casting of Virtual Globes</title>

	<id>http://www.paranormal-entertainment.com/idr/blog/posts/2010-08-12T17:22:14Z-GPU_Ray_Casting_of_Virtual_Globes/</id>

	<link href="http://www.paranormal-entertainment.com/idr/blog/posts/2010-08-12T17:22:14Z-GPU_Ray_Casting_of_Virtual_Globes/"/>






	<category term="/tags/OpenGL" />

	<category term="/tags/SIGGRAPH" />

	<category term="/tags/graphics" />


	<updated>2011-01-28T23:11:37Z</updated>
	<published>2010-08-12T17:22:14Z</published>

	<content type="html" xml:lang="en">
	&lt;p&gt;I mentioned the GPU Ray Casting of Virtual Globes poster in a &lt;a href=&quot;http://www.paranormal-entertainment.com/idr/blog/posts/2010-07-28T22:12:37Z-SIGGRAPH_2010:_Day_3/&quot;&gt;previous
post&lt;/a&gt;.
The author has since sent me a link to an updated version of an older &lt;a href=&quot;http://blogs.agi.com/insight3d/index.php/2010/04/19/gpu-ray-casting-of-virtual-globes/&quot;&gt;blog
post&lt;/a&gt;
with the poster, a five minute video, and source code.  Cool stuff.  The video
is 18MB, so be prepared.&lt;/p&gt;

&lt;p&gt;Patrick is also working on a book called, &lt;a href=&quot;http://virtualglobeandterrainrendering.blogspot.com/&quot;&gt;&quot;Virtual Globe and Terrain
Rendering&quot;&lt;/a&gt;.
I&#39;ll watch for that at the &lt;em&gt;next&lt;/em&gt; SIGGRAPH.&lt;/p&gt;

	</content>


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2010-08-12T17:22:14Z-GPU_Ray_Casting_of_Virtual_Globes/#comments" type="text/html" />


	<link rel="comments" href="http://www.paranormal-entertainment.com/idr/blog/posts/2010-08-12T17:22:14Z-GPU_Ray_Casting_of_Virtual_Globes/comments.atom" type="application/atom+xml" />

</entry>

</feed>

