<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8350257063773144600</id><updated>2011-11-24T10:58:39.332-08:00</updated><category term='computer graphics'/><category term='ray tracing'/><category term='linear algebra'/><category term='environment maps'/><category term='color'/><title type='text'>Pete Shirley's Graphics Blog</title><subtitle type='html'>Thoughts on computer graphics in general and rendering in particular.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-9120797712358667281</id><published>2011-11-24T06:02:00.000-08:00</published><updated>2011-11-24T06:28:01.378-08:00</updated><title type='text'>2011 updates</title><content type='html'>This post is an update on various things.  First, as many have heard judging from my emails, I had a serious car accident about 5 weeks ago.  I am back at work at NVIDIA and am 98% recovered.  Lessons: drive carefully and have a car with side air bags :)  Also, for those of you in the car market, here is a great site for&lt;a href="http://www.iihs.org/ratings/default.aspx"&gt; crash ratings&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Happily, Peter-Pike Sloan just joined me as an office mate at NVIDIA!  Feel free to suggest here what problems you think we should work on :)  You can note his new affiliation at google scholar, which has a new cool way to fix attributions etc (so please join and update your data): &lt;a href="http://googlescholar.blogspot.com/2011/11/google-scholar-citations-open-to-all.html"&gt;new google scholar&lt;/a&gt;.  This is part of a trend in NVIDIA hiring the smartest Finns in graphics with &lt;a href="http://research.nvidia.com/users/kari-pulli"&gt;Kari Pulli&lt;/a&gt; leading our vision and computational photography efforts now!&lt;br /&gt;&lt;br /&gt;Peter-Pike and his student Brad Loos have a new paper linked &lt;a href="http://www.cs.utah.edu/%7Eloos/"&gt;here&lt;/a&gt;.  I think this is likely to become one of the most influential rendering papers ever, but even if I turn out to be wrong, it's worth a read.&lt;br /&gt;&lt;br /&gt;While I was on medical leave I wrote a short post-apocalypse novel for my daughter.   It was a lot of fun and I made it a Kindle book (you can read that on anything with a free reader).  It's aimed at 12 year olds, but feel free to read it.  Here is a link to ebook &lt;a href="http://www.amazon.com/dp/B00656UE0E"&gt;The Book of Max&lt;/a&gt;.  Note it is $2.99 and I don't want to make any money off graphics people so email me if you want me to send you a gift chit for it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-9120797712358667281?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/9120797712358667281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=9120797712358667281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/9120797712358667281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/9120797712358667281'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2011/11/2011-updates.html' title='2011 updates'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-1946826460834713396</id><published>2011-02-24T09:27:00.000-08:00</published><updated>2011-02-24T09:30:08.341-08:00</updated><title type='text'>New I3D paper posted</title><content type='html'>I just posted a recent i3d paper:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://research.nvidia.com/publication/local-image-reconstruction-algorithm-stochastic-rendering"&gt;paper page&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The basic idea on this paper is to take a stochastic sampled set of samples from a stochastic rasterizer or a ray tracer and use a signal dependent blur.  The take-away is: you can do a sweep algorithm because front effects back more than vice-versa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-1946826460834713396?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/1946826460834713396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=1946826460834713396' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1946826460834713396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1946826460834713396'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2011/02/new-i3d-paper-posted.html' title='New I3D paper posted'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-863020361294565714</id><published>2011-01-18T09:27:00.000-08:00</published><updated>2011-01-18T09:31:09.286-08:00</updated><title type='text'>Improved code for concentric map</title><content type='html'>If you need to warp points on a square to a disk, many people use Ken Chiu's and my code from jgt:&lt;br /&gt;&lt;br /&gt;/* seedx, seedy is point on [0,1]^2.  x, y is point on radius 1 disk */&lt;br /&gt;void to_unit_disk( double seedx, double seedy, double *x, double *y )&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  double phi, r;&lt;br /&gt;&lt;br /&gt;  double a = 2*seedx - 1;   &gt;/* (a,b) is now on [-1,1]^2 */&lt;br /&gt;  double b = 2*seedy - 1;&lt;br /&gt;&lt;br /&gt;  if (a &gt; -b) {     /* region 1 or 2 */&lt;br /&gt;      if (a &gt; b) { /* region 1, also |a| &gt; |b| */&lt;br /&gt;          r = a;&lt;br /&gt;          phi = (M_PI/4 ) * (b/a);&lt;br /&gt;      }&lt;br /&gt;      else       {  /* region 2, also |b| &gt; |a| */&lt;br /&gt;          phi = (M_PI/4) * (2 - (a/b));&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;  else {        /* region 3 or 4 */&lt;br /&gt;      if (a &lt; b) /* region 3, also |a| &gt;= |b|, a != 0 &lt;br /&gt;           r = -a;&lt;br /&gt;           phi = (M_PI/4) * (4 + (b/a));&lt;br /&gt;      }&lt;br /&gt;      else       {  /* region 4, |b| &gt;= |a|, but a==0 and b==0 could occur.&lt;br /&gt;           r = -b;&lt;br /&gt;           if (b != 0)&lt;br /&gt;               phi = (M_PI/4) * (6 - (a/b));&lt;br /&gt;           else&lt;br /&gt;               phi = 0;&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  *x = r * cos(phi);&lt;br /&gt;  *y = r * sin(phi);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Dave Cline recently sent me a neat  trick that uses negative radii and I think is correct.  Let me know if you try it. (cut and pasted from his mail)&lt;br /&gt;&lt;br /&gt;Vector2 ToUnitDisk(Vector2 O) {&lt;br /&gt;float phi,r;&lt;br /&gt;float a = 2*O.x - 1;&lt;br /&gt;float b = 2*O.y - 1;&lt;br /&gt;if (a*a&gt;  b*b) { // use squares instead of absolute values&lt;br /&gt;   r = a;&lt;br /&gt;   phi = (PI/4)*(b/a);&lt;br /&gt;} else {&lt;br /&gt;   r = b;&lt;br /&gt;   phi = (PI/4)*(a/b) + (PI/2);&lt;br /&gt;}&lt;br /&gt;return Vector2( r*cos(phi), r*sin(phi) );&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-863020361294565714?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/863020361294565714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=863020361294565714' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/863020361294565714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/863020361294565714'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2011/01/improved-code-for-concentric-map.html' title='Improved code for concentric map'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-2964943750638339891</id><published>2010-12-31T16:44:00.000-08:00</published><updated>2010-12-31T16:50:13.166-08:00</updated><title type='text'>Annual post</title><content type='html'>I am barely getting a post in for 2010.  This is my stake in the ground that this blog is the lamest one in the world that is technically still active.  I welcome competition.&lt;br /&gt;&lt;br /&gt;Onto a post.  I think in 2010 we have reached a quiet revolution: we can do tens of millions of rays per second quite easily, which means we can get 16 rays per pixel in a second, even with global illumination.  This means we can do progressive preview "well enough".  If I were to do an MS thesis today, it would be on a UI for such systems.&lt;br /&gt;&lt;br /&gt;A question for the future is whether batch rendering system architecture will start being determined by what is good preview, rather than preview trying to match batch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-2964943750638339891?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/2964943750638339891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=2964943750638339891' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2964943750638339891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2964943750638339891'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2010/12/annual-post.html' title='Annual post'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-740479478503774169</id><published>2009-12-22T10:51:00.000-08:00</published><updated>2009-12-22T10:53:17.239-08:00</updated><title type='text'>Ambient occlusion</title><content type='html'>I am doing some reading on ambient occlusion and I would appreciate pointers to recent papers.  Here is a &lt;a href="http://graphics.cs.williams.edu/papers/AOVTR09/"&gt;TR from Morgan M.&lt;/a&gt; on using the analytic form factor equation which is cool.  Please reply for other things I should read!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-740479478503774169?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/740479478503774169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=740479478503774169' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/740479478503774169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/740479478503774169'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2009/12/ambient-occlusion.html' title='Ambient occlusion'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7576422962461873501</id><published>2009-12-03T12:32:00.000-08:00</published><updated>2009-12-03T12:34:15.610-08:00</updated><title type='text'>Shadow artifact</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_P38A3dpBCqE/SxggtG-90UI/AAAAAAAAACQ/IHczSqxgE9Y/s1600-h/giraffe.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_P38A3dpBCqE/SxggtG-90UI/AAAAAAAAACQ/IHczSqxgE9Y/s320/giraffe.png" alt="" id="BLOGGER_PHOTO_ID_5411110911626563906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here is a photo in my living room of a real shadow from windows.  The multiple panes give a nasty "artifact".  With artificial lighting these are even more common.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7576422962461873501?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7576422962461873501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7576422962461873501' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7576422962461873501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7576422962461873501'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2009/12/shadow-artifact.html' title='Shadow artifact'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_P38A3dpBCqE/SxggtG-90UI/AAAAAAAAACQ/IHczSqxgE9Y/s72-c/giraffe.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-4535011326236276175</id><published>2009-07-31T20:56:00.000-07:00</published><updated>2009-07-31T20:57:44.812-07:00</updated><title type='text'>Ray tracing BOF at SIGGRAPH</title><content type='html'>On Tuesday from 5-6pm in the Sheraton we'll have some ray tracing demos from academics and industry.  We should be able to stay in the room after for more demos and talking.  Should be an informal affair.  Hope to see you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-4535011326236276175?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/4535011326236276175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=4535011326236276175' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4535011326236276175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4535011326236276175'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2009/07/ray-tracing-bof-at-siggraph.html' title='Ray tracing BOF at SIGGRAPH'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-4637556449659395178</id><published>2009-05-15T12:52:00.000-07:00</published><updated>2009-05-16T14:09:19.601-07:00</updated><title type='text'>A neat trick for ray collisions in nonuniform media</title><content type='html'>&lt;a href="http://graphics.uni-ulm.de/"&gt;Mattias Rabb&lt;/a&gt; showed me a really neat trick a few years ago that this post will share.  He found it in a paper I had never seen by Coleman in 1967.  Kudos to Mattias for not only finding this &lt;a href="http://www.osti.gov/energycitations/product.biblio.jsp?osti_id=4537557"&gt;paper&lt;/a&gt;, but managing to find this trick in it (I would not have understood it had he not told me what was there).  It gives a way to compute an unbiased random hitpoint for a light particle and a nonuniform density.&lt;br /&gt;&lt;br /&gt;Recall that for a uniform density volume this can be done analytically.  Given a canonical random  number X (e.g., a call to drand48()), and a medium with interaction coefficient s (the probability of a collision in a small distance d is sd), we have distance = -log(1-X)/s (see Dutre et al., p 241 for a derivation of this classic result).&lt;br /&gt;&lt;br /&gt;In a photon tracing program we would use this as follows:&lt;br /&gt;&lt;br /&gt;X = drand48()&lt;br /&gt;d = -log(1-X)/s&lt;br /&gt;newposition = rayorigin + d*raydirection     // assumes unit length direction&lt;br /&gt;scatter or absorb&lt;br /&gt;&lt;br /&gt;No suppose s(x,y,z) is a function of position like a call to noise or whatever.  Usually we would resort to ray maching with small steps that assume s is locally constant.  This is a pain in the same family as ray epsilons.  But the Coleman paper has a lovely trick when s(x,y,z) is always less than a known smax.  Pretend the medium is all constant smax, take a step as above, and sometimes reject the result:&lt;br /&gt;&lt;br /&gt;d = 0&lt;br /&gt;while (1) {&lt;br /&gt;X = drand48()&lt;br /&gt;d += -log(1-X)/smax&lt;br /&gt;Y = drand48()&lt;br /&gt;newposition = rayorigin + d*raydirection&lt;br /&gt;if (s(newposition)/smax &gt; Y) break&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This takes a bunch of random steps and is unbaised (I would love to see a clean proof of this-- I don't follow Coleman's).  I think it saved us something like 5X in our adjoint photon tracer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-4637556449659395178?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/4637556449659395178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=4637556449659395178' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4637556449659395178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4637556449659395178'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2009/05/neat-trick-for-ray-collisions-in.html' title='A neat trick for ray collisions in nonuniform media'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-5380155464121077093</id><published>2009-04-08T15:05:00.000-07:00</published><updated>2009-04-08T15:13:14.312-07:00</updated><title type='text'>EGSR 2009</title><content type='html'>The deadline for my favorite conference is coming up:&lt;br /&gt;http://iiia.udg.edu/EGSR2009/&lt;br /&gt;From Salt Lake to Barcelona is less then $900 (and I didn't look hard-- maybe much cheaper) so this looks like a feasible year to go!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-5380155464121077093?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/5380155464121077093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=5380155464121077093' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/5380155464121077093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/5380155464121077093'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2009/04/egsr-2009.html' title='EGSR 2009'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-1974564593248872343</id><published>2009-03-31T10:03:00.000-07:00</published><updated>2009-03-31T10:04:34.327-07:00</updated><title type='text'>HPG 2009</title><content type='html'>The new HPG 2009 conference should be an excellent place to submit papers now:&lt;br /&gt;&lt;br /&gt;http://www.highperformancegraphics.org/&lt;br /&gt;&lt;br /&gt;Deadline in about a month.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-1974564593248872343?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/1974564593248872343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=1974564593248872343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1974564593248872343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1974564593248872343'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2009/03/hpg-2009.html' title='HPG 2009'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-6001905684412048395</id><published>2009-03-25T09:53:00.000-07:00</published><updated>2009-03-25T09:57:05.079-07:00</updated><title type='text'>Andrew Kensler's new ray tracer</title><content type='html'>The latest in a long and distinguished line of short ray tracers.  This time with blur!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/%7Eaek/code/card.cpp"&gt;http://www.cs.utah.edu/~aek/code/card.cpp&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Clearly Andrew needs to start doing some demoscene.&lt;br /&gt;&lt;br /&gt;PS-- I am about to head of to EPGPV and EG.  Hope to see some of you over a beer and pretzel in Munich!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-6001905684412048395?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/6001905684412048395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=6001905684412048395' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/6001905684412048395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/6001905684412048395'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2009/03/andrew-kenslers-new-ray-tracer.html' title='Andrew Kensler&apos;s new ray tracer'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7799087893105005081</id><published>2008-10-09T13:50:00.000-07:00</published><updated>2008-10-09T15:22:59.415-07:00</updated><title type='text'>Double-sided dielectrics for ray tracing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_P38A3dpBCqE/SO5wAUIDRmI/AAAAAAAAACI/cMMIgiq8CnU/s1600-h/thind.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_P38A3dpBCqE/SO5wAUIDRmI/AAAAAAAAACI/cMMIgiq8CnU/s320/thind.png" alt="" id="BLOGGER_PHOTO_ID_5255260965892736610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;No, neither I nor this blog is &lt;a href="http://www.youtube.com/watch?v=dGFXGwHsD_A"&gt;dead yet&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sometimes ray tracing models will take a thin dielectric (like a car windshield) and represent it with one surface.  If we assume this dielectric surface is locally planer, then the direction of the ray will not be changed by the double refraction, but it will be offset.  This is shown in the image above.  Our challenge is to calculate the vector &lt;span style="font-weight: bold;"&gt;o&lt;/span&gt; in the figure.  The new origin of the ray will just be &lt;span style="font-weight: bold;"&gt;hit_point+o&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The thickness &lt;span style="font-style: italic;"&gt;t&lt;/span&gt; is provided by the model, possibly with a texture.  First let's find a unit vector parallel to &lt;span style="font-weight: bold;"&gt;o&lt;/span&gt; by subtracting off the portion of &lt;span style="font-weight: bold;"&gt;v&lt;/span&gt; in the direction of &lt;span style="font-weight: bold;"&gt;n&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;a&lt;/span&gt; = &lt;span style="font-weight: bold;"&gt;-&lt;/span&gt;normalize(&lt;span style="font-weight: bold;"&gt;v&lt;/span&gt; - dot(&lt;span style="font-weight: bold;"&gt;v&lt;/span&gt;,&lt;span style="font-weight: bold;"&gt;n&lt;/span&gt;)&lt;span style="font-weight: bold;"&gt;n&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Now we need to find the distance that is the length of &lt;span style="font-weight: bold;"&gt;o&lt;/span&gt;, which is q-w.  We can see that&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;q&lt;/span&gt; = &lt;span style="font-style: italic;"&gt;t&lt;/span&gt; tan(&lt;span style="font-style: italic;"&gt;Theta&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Similarly,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;w&lt;/span&gt; = &lt;span style="font-style: italic;"&gt;t&lt;/span&gt; tan(&lt;span style="font-style: italic;"&gt;Theta'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Snell's law tells us that&lt;br /&gt;&lt;br /&gt;sin(&lt;span style="font-style: italic;"&gt;Theta&lt;/span&gt;) = &lt;span style="font-style: italic;"&gt;ref_Idx&lt;/span&gt; sin(&lt;span style="font-style: italic;"&gt;Theta'&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Assuming v is a unit vector we also have&lt;br /&gt;&lt;br /&gt;cos(Theta) = -dot(&lt;span style="font-weight: bold;"&gt;v,n&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;That allows us (with a bunch of sqrts) to get all the sines and cosines we need above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7799087893105005081?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7799087893105005081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7799087893105005081' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7799087893105005081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7799087893105005081'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2008/10/double-sided-dielectrics-for-ray.html' title='Double-sided dielectrics for ray tracing'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_P38A3dpBCqE/SO5wAUIDRmI/AAAAAAAAACI/cMMIgiq8CnU/s72-c/thind.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-1205009248778584415</id><published>2008-05-23T18:57:00.000-07:00</published><updated>2008-05-23T18:58:57.242-07:00</updated><title type='text'>New pastures</title><content type='html'>It has been months since my last blog post.  My excuse is that I have left my professor job at the University of Utah and joined NVIDIA.   I’ll still be based in Utah and will be an Adjunct Prof at the U.   Many people have been surprised that I have left a job-for-life that I enjoy, and that I have gone to a GPU company.  Given that I went to school at age 5 and have never left, and that I have have been a ray tracing guy for the last 20 years, I can understand their surprise.  This post is to explain why I’ve made this move.  Historically, graphics people have self-selected into interactive and batch programmers based largely on whether responsiveness or visual quality was more important to them, and I’ve been squarely in the latter category.  However, recent GPU graphics has gotten close to the line where I find the visual quality compelling, and I believe it will soon be possible to cross that line.  I think the place to help cross that line is in industry given how close this line is, and given the need for development in the context of compelling geometric models. &lt;br /&gt;&lt;br /&gt;As for NVIDIA, the main question I asked myself to help make the decision was expressed in my last blog post; are hybrid methods a natural architecture for interactive graphics?  After much contemplation, I have concluded the answer is yes.  For complex geometry rasterization and hi-res screens has many advantages over ray tracing for viewing “rays”, and the solution already works.  It is yet to be shown that ray tracing can be similarly efficient for such sampling rates, and I am skeptical that a magic bullet will be found to change that.  I also believe that most lighting effects missing from current games do not need such high geometric complexity give the success of PDI’s renderer which uses lower LODs for illumination.  That being said, is NVIDIA hardware flexible enough to support interesting hybrid algorithms?  Well, I took the job :)  While I cannot yet say if and when NVIDIA is going to use ray tracing, I am confident that we will use whatever is best for getting great interactive graphics, and if ray tracing is part of that solution we will make it fast.  NVIDIA is supportive of me continuing this blog so I hope to get back on track with posts soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-1205009248778584415?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/1205009248778584415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=1205009248778584415' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1205009248778584415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1205009248778584415'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2008/05/new-pastures.html' title='New pastures'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-5799349981940048623</id><published>2008-01-24T16:14:00.000-08:00</published><updated>2008-01-24T16:37:19.848-08:00</updated><title type='text'>Ray tracing for massively multiplayer online role-playing game (MMORPG)?</title><content type='html'>I have been playing various video games lately with an eye to which would benefit most from ray tracing in the near term.  I tried World of Warcraft a couple of days ago (and so did my daughter so I fear I am out $20 a month for the rest of my life).  I speculate that such a MMORPG is perfect for ray tracing now due to 1) it's current emphasis on geometry, and 2) the need to support low-end hardware.&lt;br /&gt;&lt;br /&gt;I'd like to get my hands on a dataset from one of these MMORPG games.  If anybody has a legitimate copy or is in one of the MMORPG companies and would like to help me find out if this is feasible on current medium-end CPUs, let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-5799349981940048623?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/5799349981940048623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=5799349981940048623' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/5799349981940048623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/5799349981940048623'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2008/01/ray-tracing-for-massively-multiplayer.html' title='Ray tracing for massively multiplayer online role-playing game (MMORPG)?'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-3356050438490516162</id><published>2007-11-05T05:40:00.000-08:00</published><updated>2007-11-05T06:05:45.268-08:00</updated><title type='text'>Hybrid algorithms</title><content type='html'>Some movies are made with a "hybrid" algorithm where rasterization is used for the visibility pass and ray tracing is used for some or all of the shading.  This raises two questions:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Why is this done rather than using just one algorithm?&lt;/li&gt;&lt;li&gt;Would this technique be good for games?&lt;/li&gt;&lt;/ol&gt;First question 1: the reason it makes sense to use both is that rasterization is fantastic at dealing with procedural images.  It is the basic Reyes look that is still going strong after almost 25 years: for each patch, dice in micropolygons while applying displacements.  If you do a billion micropolygons, no problem as they are never stored.  The frame buffer is where the action is.  Now suppose you want to do ambient occlusion; the best way to do that is ray tracing.  But ray tracing on procedural geometry is slow.  Using Pharr et al's caching technique is probably the best known method.  But an alternative is just not to apply the displacements and use less geometry as PDI did for the Shrek 2 movie (see their siggraph paper for details).  That idea goes back to at least Cohen's 85 paper where detailed geometry is illuminated by a coarse model. &lt;br /&gt;&lt;br /&gt;Now question 2: would this be good for games.  Nobody knows.  I will give two arguments, one for, and one against.  The reason this will happen is again procedural geometry.  But there will not be so much that it wont fit in core.  Still doing it with rasterization will help locality and something like a DX10 geometry shader can be used, and efficient use of caches is where the action is and will continue to be.  Now an argument against: Whitted-style ray tracing has good locality and thus such complexity is not needed.  Once games use ray tracing they may as well use it for visibility for software simplicity.   My bet is on the latter, but I sure wouldn't give odds.  If graphics teaches us anything, it is that predicting the future is difficult!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-3356050438490516162?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/3356050438490516162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=3356050438490516162' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/3356050438490516162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/3356050438490516162'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/11/hybrid-algorithms.html' title='Hybrid algorithms'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-8676595196815873053</id><published>2007-10-21T05:50:00.000-07:00</published><updated>2007-11-02T05:48:38.189-07:00</updated><title type='text'>Probabilistic reflection/refraction</title><content type='html'>In the response to the previous post, Thomas said he would choose probabilistically.  If you are sending many rays per pixel I definitely agree this is the way to go.  I believe that approach was first suggested in Kajiya's 86 path tracing paper.&lt;br /&gt;&lt;br /&gt;color trace(ray r, depth d)&lt;br /&gt;color c&lt;br /&gt;if (r hits scene at point p)&lt;br /&gt;c = direct_light(p)&lt;br /&gt;if (depth &lt; maxdepth)&lt;br /&gt;  if (random &lt; ks)&lt;br /&gt;       c+= trace(reflected_ray)&lt;br /&gt;   else&lt;br /&gt;       c+= trace(refracted_ray)&lt;br /&gt;else&lt;br /&gt;   c = background(r)&lt;br /&gt;return c&lt;br /&gt;&lt;br /&gt;Note that the weighting is implicit; if you trace reflected_ray a fraction ks of the time, that is just like tracing it every time and weighting it by ks.  And as Thomas said, the best images come when you use Fresnel equations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-8676595196815873053?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/8676595196815873053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=8676595196815873053' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/8676595196815873053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/8676595196815873053'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/10/probabistic-reflectionrefraction.html' title='Probabilistic reflection/refraction'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-5179069852621040137</id><published>2007-10-17T06:33:00.000-07:00</published><updated>2007-10-17T06:44:15.617-07:00</updated><title type='text'>Ray tree pruning</title><content type='html'>A time honored way to speed up your glass is to do "ray tree pruning" and you should do it if you aren't already.  The way Whitted originally implemented his paper was like this:&lt;br /&gt;&lt;br /&gt;color trace(ray r, depth d)&lt;br /&gt;    color c&lt;br /&gt;    if (r hits scene at point p)&lt;br /&gt;        c = direct_light(p)&lt;br /&gt;        if (depth &lt; maxdepth)&lt;br /&gt;           c += ks*trace(reflected_ray) + kt*trace(refracted_ray)&lt;br /&gt;    else&lt;br /&gt;        c = background(r)&lt;br /&gt;    return c&lt;br /&gt;&lt;br /&gt;If you hit glass that will be two branches per recursion level.  The first efficiency improvement would be to only send the rays if ks and kt are non-zero.  But that would not help you for glass.  Instead, you need to kill whole paths down the recursion tree once they are sufficiently attenuated.  For example, if kt=0.05, then after 3 transmissions the coefficient is (0.05)^3 and can be ignored.  To implement this, you need to change the call to include an attenuation argument:&lt;br /&gt;&lt;br /&gt;color trace(ray r, depth d, float atten)&lt;br /&gt;&lt;br /&gt;and add&lt;br /&gt;&lt;br /&gt;if (depth &lt; maxdepth)&lt;br /&gt;   if (atten*ks.max_component() &lt; maxatten)&lt;br /&gt;       c += ks*trace(refected_ray, atten*ks.max_component())&lt;br /&gt;   if (atten*kt.max_component() &lt; maxatten)&lt;br /&gt;       c += kt*trace(refracted_ray, atten*kt.max_component())&lt;br /&gt;&lt;br /&gt;You will be amazed at how much faster a scene like Whitted's glass ball is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-5179069852621040137?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/5179069852621040137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=5179069852621040137' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/5179069852621040137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/5179069852621040137'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/10/ray-tree-pruning.html' title='Ray tree pruning'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7110963462981181204</id><published>2007-10-14T20:34:00.000-07:00</published><updated>2007-10-14T20:37:29.819-07:00</updated><title type='text'>Two recent views on ray tracing vs rasterization</title><content type='html'>&lt;a href="http://blogs.intel.com/research/2007/10/real_time_raytracing_the_end_o.html"&gt;One from Jeffrey Howard at Intel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.beyond3d.com/content/news/511"&gt;one from Dean Calver&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7110963462981181204?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7110963462981181204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7110963462981181204' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7110963462981181204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7110963462981181204'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/10/two-recent-views-on-ray-tracing-vs.html' title='Two recent views on ray tracing vs rasterization'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-9179172838848041740</id><published>2007-08-24T15:19:00.000-07:00</published><updated>2007-08-24T15:26:25.092-07:00</updated><title type='text'>Ray Tracing Shading Language</title><content type='html'>Steve Parker and friends at Utah have developed a ray tracing shading language (RTSL) described in this &lt;a href="http://www.cs.utah.edu/~boulos/papers/rtsl.pdf"&gt;pdf file&lt;/a&gt;.  I am very excited about this work for entirely selfish reasons.  I like ray tracing partially because of the elegant code.  Now add ray packets and SSE and voila-- it makes DirectX code look lovely in comparison.  The initial results are that ray packets and SSE can be relegated to a compiler with little or no loss of performance. and the code is pretty sweet looking. I have been looking over the shoulder of this project writing some RTSL code and it really seems to work as well as reported in the paper.  A surprise to me is that it is much nicer to write than C++ for me because you avoid the blasted C++ header files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-9179172838848041740?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/9179172838848041740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=9179172838848041740' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/9179172838848041740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/9179172838848041740'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/08/ray-tracing-shading-language.html' title='Ray Tracing Shading Language'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7773341526023366035</id><published>2007-08-13T20:45:00.000-07:00</published><updated>2007-08-13T20:50:14.304-07:00</updated><title type='text'>Grid creation paper</title><content type='html'>Here is a&lt;a href="http://www.cs.utah.edu/%7Eshirley/papers/rgrid.pdf"&gt; pdf file&lt;/a&gt; of a new paper by Thiago Ize, Steve Parker, and myself.  It will appear in Ulm at RT07 It does some theory on how to build grids within grids.  It is a follow-on to the classic Jevans and Wyvill paper.  Its main practical result is that for a two level grid of small triangles, use N**(1/5) subdivisions in each dimension, and then in occupied cells use M**(1/3) where M is the number of primitives in that cell.  For single ray code this seems to work quite well.  There is also some analysis for long-skinny triangles (like you might get subdividing a cylinder) which says grids are bad at such scenes.  That being said, BVH with AABB and k-d are probably even worse!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7773341526023366035?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7773341526023366035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7773341526023366035' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7773341526023366035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7773341526023366035'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/08/grid-creation-paper.html' title='Grid creation paper'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-2589851442245157670</id><published>2007-08-10T06:06:00.000-07:00</published><updated>2007-08-10T06:10:03.063-07:00</updated><title type='text'>Results of new poll in</title><content type='html'>This poll was better designed but still had one big flaw-- should have had more years-- people clumped in 2011.  &lt;br /&gt;&lt;br /&gt;For those readers that have not done a ray tracer I recommend Suffern's new book.  He covers a ton of details that are not in other books.  I saw a copy at SIGGRAPH and it lives up to the potential shown by all those chapters he's let me use in classes over the years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-2589851442245157670?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/2589851442245157670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=2589851442245157670' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2589851442245157670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2589851442245157670'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/08/results-of-new-poll-in.html' title='Results of new poll in'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-1574621883628602371</id><published>2007-08-03T09:06:00.000-07:00</published><updated>2007-08-03T09:07:28.503-07:00</updated><title type='text'>New poll</title><content type='html'>Well people are clearly divided on the last poll.  But as pointed out it was ambiguous so here's a new poll that is more straightforward.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-1574621883628602371?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/1574621883628602371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=1574621883628602371' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1574621883628602371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1574621883628602371'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/08/new-poll.html' title='New poll'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7461623554573812307</id><published>2007-07-30T06:28:00.001-07:00</published><updated>2007-07-30T06:34:49.457-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_P38A3dpBCqE/Rq3ondC-klI/AAAAAAAAAAs/V-OzKRz2miE/s1600-h/threesquares2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_P38A3dpBCqE/Rq3ondC-klI/AAAAAAAAAAs/V-OzKRz2miE/s320/threesquares2.png" alt="" id="BLOGGER_PHOTO_ID_5092982518135558738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_P38A3dpBCqE/Rq3ogNC-kkI/AAAAAAAAAAk/wus7Xdd6IWQ/s1600-h/threesquares.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_P38A3dpBCqE/Rq3ogNC-kkI/AAAAAAAAAAk/wus7Xdd6IWQ/s320/threesquares.png" alt="" id="BLOGGER_PHOTO_ID_5092982393581507138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Bram's comments on the last article got me thinking about halftones.  This is probably obvious to most people but it was news to me.  Without good color profiles and calibrated monitors, you of course can't get predictable appearance.  Things like sRGB will help the first but 99% of monitors are not calibrated.  But with halftoning you can (assuming LCDs are well behaved about half tone patterns-- CRTs sure are not) get predictable greyscales.  For example here are two images with a 25% and a 50% greyscale.  (and RE the last article, not which is more of a middle grey).  It just doesn't matter what your gamma is (assuming your black point is dark!) to predict what these greys are.&lt;br /&gt;&lt;br /&gt;This basic idea is often used for gamma estimation-- the best example is Greg Ward's great gamma image.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7461623554573812307?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7461623554573812307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7461623554573812307' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7461623554573812307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7461623554573812307'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/07/brams-comments-on-last-article-got-me.html' title=''/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_P38A3dpBCqE/Rq3ondC-klI/AAAAAAAAAAs/V-OzKRz2miE/s72-c/threesquares2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-8074651882994304052</id><published>2007-07-29T09:35:00.000-07:00</published><updated>2007-07-29T09:43:29.504-07:00</updated><title type='text'>Gamma and textures.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_P38A3dpBCqE/RqzDodC-kjI/AAAAAAAAAAc/GmonPfJdDYA/s1600-h/squares_22.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_P38A3dpBCqE/RqzDodC-kjI/AAAAAAAAAAc/GmonPfJdDYA/s400/squares_22.png" alt="" id="BLOGGER_PHOTO_ID_5092660378408489522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_P38A3dpBCqE/RqzDdNC-kiI/AAAAAAAAAAU/nf8FeYvuQC0/s1600-h/squares_18.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_P38A3dpBCqE/RqzDdNC-kiI/AAAAAAAAAAU/nf8FeYvuQC0/s400/squares_18.png" alt="" id="BLOGGER_PHOTO_ID_5092660185134961186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_P38A3dpBCqE/RqzDN9C-khI/AAAAAAAAAAM/Bzch-YaV3Ac/s1600-h/squares_10.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_P38A3dpBCqE/RqzDN9C-khI/AAAAAAAAAAM/Bzch-YaV3Ac/s400/squares_10.png" alt="" id="BLOGGER_PHOTO_ID_5092659923141956114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gamma correction issues are always a pain.  A review: given 256 grey levels, it makes sense to make them perceptually uniform.  Thus a 20% grey intensity (one fifth the physical intensity of white) should be around 127 as it is perceptually half way between black and white.  But what happens when you want to use it as a texture map in a physically based renderer?  You need to "de-gamma" the image.  If you are using somebody else's renderer, should you do that as a preprocess or might they do it?  For my own purposes in that situation I have made three textures of the grey squares in the macbeth color checker chart.  The grey square in position 3 from the left (i.e., the third darkest) should look mid-grey in your final render.  The 1.0 image has 0.19*255 in that square so it is not gamma corrected (i.e. the byte values are linear in intensity).  Of course to make this all more complicated, a renderer might or might not do something different if there is something in the texture's color profile or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-8074651882994304052?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/8074651882994304052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=8074651882994304052' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/8074651882994304052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/8074651882994304052'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/07/gamma-and-textures.html' title='Gamma and textures.'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_P38A3dpBCqE/RqzDodC-kjI/AAAAAAAAAAc/GmonPfJdDYA/s72-c/squares_22.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-6857501702755321194</id><published>2007-07-21T18:47:00.000-07:00</published><updated>2007-07-21T18:49:51.881-07:00</updated><title type='text'>New poll online</title><content type='html'>Here is a poll to narrow down what the non-random sample of people who look at this blog think.   I am most interested in the percentage that say never (I am guessing 40%) but also interested in the distribution of the other answers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-6857501702755321194?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/6857501702755321194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=6857501702755321194' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/6857501702755321194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/6857501702755321194'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/07/new-poll-online.html' title='New poll online'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7793653403406991251</id><published>2007-07-14T06:52:00.000-07:00</published><updated>2007-07-14T06:57:34.750-07:00</updated><title type='text'>Plucker coords considered harmful</title><content type='html'>Christer Ericson has a terrific article on why scaler triple products are usually preferable to plucker coords &lt;a href="http://realtimecollisiondetection.net/blog/?p=13"&gt;here&lt;/a&gt;.  I couldn't agree more.  Christer has a book on collision detection I have been meaning to order for sometime and his blog content encourages me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7793653403406991251?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7793653403406991251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7793653403406991251' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7793653403406991251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7793653403406991251'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/07/plucker-coords-considered-harmful.html' title='Plucker coords considered harmful'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-1967115238330359455</id><published>2007-07-01T06:55:00.000-07:00</published><updated>2007-07-01T07:04:00.510-07:00</updated><title type='text'>Ratatouille</title><content type='html'>I saw Ratatouille with the family this weekend.  It is the first CG movie that we all really liked a lot.  Brad Bird is really on fire-- I think I liked this movie better than the Iron Giant which was terrific.  One thing I especially liked was the lack of big-name actors who are not voice actors.  Watch the Toy Story movies and the  watch some old Disney (e.g. Jungle Book) and you will see just how much using screen actors for voice talent hurts animated movies.  Spongebob and the Simpsons would be awful if they used Tom Hanks and John Travolta.  I hope Ratatouille makes a zillion dollars and will show that the director and studio is enough to bring in the crowds.&lt;br /&gt;&lt;br /&gt;In addition to being a terrific movie, the rendering passed some threshold for me.  Previous CG movies have always looked flat to me, with Shrek 2/3 being better due to their use of indirect bounces I assume.  But Ratatouille had even more depth.  It is the best looking CG movie I have seen by a long shot.  As much depth as live action I think.  I have no idea what is different, but I have to suspect global illumination given my prejudices.  If it was done with hand-placed fill lights, then the artists must be on performance-enhancing drugs!  If anybody knows please reply.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-1967115238330359455?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/1967115238330359455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=1967115238330359455' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1967115238330359455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1967115238330359455'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/07/ratatouille.html' title='Ratatouille'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7510079246777075849</id><published>2007-06-02T19:57:00.000-07:00</published><updated>2007-06-02T20:10:16.493-07:00</updated><title type='text'>Top utility papers of all time</title><content type='html'>This is heavily biased toward rendering, but here are what I consider the most useful papers at present.  Many great papers have of course been obviated by improvements so this list is far from a "best paper" list.  These are papers worth reading now.&lt;br /&gt;&lt;br /&gt;&lt;a hef=""&gt;Recursively generated B-spline surfaces on arbitrary topological meshes&lt;/a&gt;, Catmull and Clark, 1978. No sign of fading away!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=358882"&gt;An improved illumination model for shaded display&lt;/a&gt; Whitted, 1980.  Beware the 1/r^2 mistake but otherwise about as perfect a paper as there is!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=808590&amp;coll=GUIDE&amp;dl=GUIDE&amp;CFID=20311049&amp;CFTOKEN=26906651"&gt;Distributed Ray Tracing&lt;/a&gt; Cook, 1984.  There are some sampling details you can find elsewhere, but all the basic ideas are here.&lt;br /&gt;&lt;br /&gt;&lt;a href=""&gt;Ray Casting for Modeling Solids&lt;/a&gt;, Roth, 1982.  A sweet CSG algorithm.  &lt;br /&gt;&lt;br /&gt;&lt;a href=""&gt;An Image Synthesizer&lt;/a&gt;, Perlin 1985.  See his later paper and his webpage for more info on noise.&lt;br /&gt;&lt;br /&gt;(more coming later-- suggestions welcome)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7510079246777075849?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7510079246777075849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7510079246777075849' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7510079246777075849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7510079246777075849'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/06/top-utility-papers-of-all-time.html' title='Top utility papers of all time'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-293776735099409499</id><published>2007-05-28T09:15:00.000-07:00</published><updated>2007-05-29T10:21:46.848-07:00</updated><title type='text'>My top utility papers</title><content type='html'>Some of the papers I have worked on have been influential (e.g., Maciel's I3D one) but most of these are superceded by improvements in subsequent papers, or are mainly of theoretical interest.  Here is my current list of the most useful papers that are also easy to implement.  I will include Mike Stark's b-spline paper as soon as I find an online copy.  Note I will not post a list of papers that were a dumb idea!  And also for you new people in the field, take note that half of these were rejected the first time, so never assume the reviewers know what they are talking about (or that they don't!  Just read reviews with a scientist's skepticism).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/gi91.pdf"&gt;A Ray Tracing Framework for Global Illumination&lt;/a&gt;, GI 91.  This paper repeats much of Arvo and Kirk's metahierarchy work which unfortunately I wasn't aware of at the time, but also spells out how to manage the various abstract classes in a distribution ray tracer.  It also includes a better way to sample the disk, later spelled out in a &lt;a href="http://jgt.akpeters.com/papers/ShirleyChiu97/"&gt;jgt paper&lt;/a&gt;.  Most of this stuff is now standard practice, but good if you are new to the field.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/rw91.pdf"&gt;Direct Lighting Calculation by Monte Carlo Integration&lt;/a&gt; EGRW 91.  This paper lays out what to do when you have&lt;br /&gt;more than one light.  The follow-on &lt;a href="http://www.cs.utah.edu/~shirley/papers/tog94.pdf"&gt;TOG 96 article&lt;/a&gt; has some more details, but except for the light grid I think most of them are not worth the added complexity.  I do think there has been little subsequent progress on the "thousands of lights" problem which is a shame, but the &lt;a href="http://www.cs.cornell.edu/~kb/projects/lightcuts/index.htm"&gt;Cornell folks&lt;/a&gt; have recently been doing lots of interesting work on it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/pg97.pdf"&gt;A Practitioners’ Assessment of Light Reflection Models &lt;/a&gt;. Pacific Graphics 97.  Section 5.1 is especially useful.  If you have a bump or displacement map, you really only need a BRDF for the subsurface part, and this one is as simple as they get.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/irradiance.pdf"&gt;The irradiance volume&lt;/a&gt;, CG&amp;A 97.  I think that like ambient occlusion this technique has tons of problems but in practice is "good enough".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/gooch98.pdf"&gt;A Non-Photorealistic Lighting Model For Automatic Technical Illustration&lt;/a&gt;, SIG 02.  Section 4.2 has all you need to know.  Simple hack, seems to work. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/iso/"&gt;Interactive Ray Tracing for Isosurface Rendering&lt;/a&gt;, Viz 98.  This just plain works.  Steve Parker's group still uses the same technique and it shows no signs of losing its utility as it scales so well.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/jgtbrdf.pdf"&gt;An Anisotropic Phong BRDF Model&lt;/a&gt;, JGT 00.  This works surprisingly well in practice.  It is no good for cloth though-- I would love to see a similar model for cloth.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/nighttone.pdf"&gt;A Spatial Post-Processing Algorithm for Images of Night Scenes&lt;/a&gt;, JGT 02.  This still needs to be extended to animation.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~reinhard/cdrom/"&gt;Photographic Tone Reproduction for Computer Graphics&lt;/a&gt;, SIGGRAPH 02.  The first simple model works well on almost all images I have seen.  Erik Reinhard et al.'s book is definitely worth picking up for putting this model in context. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://cag.csail.mit.edu/~amy/papers/box-jgt.pdf"&gt;An efficient and robust ray-box intersection algorithm&lt;/a&gt;.  There is also source code at the JGT site.  This paper made me hate IEEE FP because of negative and positive zero.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~aek/research/triangle.pdf"&gt;Optimizing Ray-Triangle Intersection via Automated Search&lt;/a&gt;, RT06.  This is really just Moller-Trumbore 2.  I was shocked that the automated search actually worked, and unsurprised the subsequent hand tuning did too.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/gi06.pdf"&gt;Image Synthesis Using Adjoint Photons&lt;/a&gt;.  Graphics Interface 06. This paper is how I now think about path tracing, and it maps directly into some pretty sweet code.  The author list is long but Boulos and Morley are really the two principle guys behind it.  It takes advantage of the same properties of light as the dual photography paper.  Jared Johnson, Solomon Boulos, Austin Robison and I have extended this to linearly polarized light which we will write up soon.  I am hoping that a clean extension to fluorescence is also possible.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/papers/bvh.pdf"&gt;Ray Tracing Deformable Scenes using Dynamic Bounding Volume Hierarchies&lt;/a&gt;, ACM TOG 07.  I have been advocating the BVH for years-- maybe I am just too lazy to really learn k-d trees.  But the real advantage of BVH in my opinion is dynamic scenes.  Note that the presentation of the packet-culling is a bit weak.  For more details see &lt;a href="http://www.cs.utah.edu/~boulos/papers/ia.pdf"&gt;this tech report&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-293776735099409499?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/293776735099409499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=293776735099409499' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/293776735099409499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/293776735099409499'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/05/my-top-utility-papers.html' title='My top utility papers'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7870527430880504050</id><published>2007-05-01T15:15:00.000-07:00</published><updated>2007-05-01T16:43:54.810-07:00</updated><title type='text'>Meta-h index rankings</title><content type='html'>A couple of us have been trying to make a more objective (note that does not mean more accurate!) ranking of CS research departments.  We're using the google scholar data combined with the h-index.  Still lots of mistakes I am sure.  Interesting that Greenberg and Hanrahan are in a dead heat for the highest rating in graphics.  Not worth drawing too much conclusion from, but the data is interesting.  I'd like to add more universities and research groups, so feel free to send me updates and suggestions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.utah.edu/~shirley/hindex/"&gt;The data is here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7870527430880504050?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7870527430880504050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7870527430880504050' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7870527430880504050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7870527430880504050'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/05/meta-h-index-rankings.html' title='Meta-h index rankings'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-6057631645863427230</id><published>2007-04-21T08:40:00.000-07:00</published><updated>2007-04-21T08:52:53.352-07:00</updated><title type='text'>tor@brown siggraph page</title><content type='html'>Tim Rowley is once again making his very useful &lt;a href="http://www.cs.brown.edu/~tor/sig2007.html"&gt;siggraph preview&lt;/a&gt; page.  I am especially intrigued by the first paper in the list: Solid Texture Synthesis from 2D Exemplars.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-6057631645863427230?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/6057631645863427230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=6057631645863427230' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/6057631645863427230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/6057631645863427230'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/04/torbrown-siggraph-page.html' title='tor@brown siggraph page'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-1587886374779028810</id><published>2007-03-23T08:34:00.000-07:00</published><updated>2007-03-23T08:40:02.339-07:00</updated><title type='text'>Rainbows in clouds</title><content type='html'>When the sun is behind you and you look at some rainstorms, you see a rainbow.  Since the droplets in a cloud are (I assume) spherical, why don't we see rainbows in clouds?  My hypothesis is that they are there, but they are superimposed on a bright cloud where secondary scattering dominates, so the rainbow is just washed out by contrast.  Recently I was on a flight around noon and could see below me the shadow of my plane and when the clouds became thin enough that primary scattering probably dominates, there was a perfect circular rainbow with the dark terrain below it.  So why no rainbows from thin clouds when the viewer is not on a plane?  My guess is the sky behind it is bright.  But I am unsure.  Another possibility is that what I saw was not a rainbow.  But the ring's angular radius looked about right...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-1587886374779028810?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/1587886374779028810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=1587886374779028810' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1587886374779028810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/1587886374779028810'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/03/rainbows-in-clouds.html' title='Rainbows in clouds'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-4832401068147981294</id><published>2007-03-23T06:10:00.000-07:00</published><updated>2007-03-23T06:12:25.316-07:00</updated><title type='text'>Getting to Ulm from the US</title><content type='html'>For those interested in attending RT07 (see previous post), I found that going through Frankfurt was really easy-- the airport has a train station that will take you straight to downtown Ulm.  If you do that, be aware that train has a reserved seating system (like an airplane or Amtrak).  Hope to see you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-4832401068147981294?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/4832401068147981294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=4832401068147981294' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4832401068147981294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4832401068147981294'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/03/getting-to-ulm-from-us.html' title='Getting to Ulm from the US'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-2678878595897740688</id><published>2007-03-19T12:36:00.000-07:00</published><updated>2007-03-19T13:01:13.964-07:00</updated><title type='text'>IRT 07</title><content type='html'>The interactive ray tracing symposium will be in Ulm, Germany this year:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.uni-ulm.de/rt07"&gt;IRT 07 site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SCHEDULE&lt;br /&gt;JUNE 14, 2007 SUBMISSION DEADLINE&lt;br /&gt;JULY 12, 2007 REVIEWS DUE&lt;br /&gt;JULY 19, 2007 AUTHOR NOTIFICATION&lt;br /&gt;AUGUST 2, 2007 CAMERA-READY COPY&lt;br /&gt;SEPTEMBER 10-12, 2007 SYMPOSIUM IN ULM&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-2678878595897740688?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/2678878595897740688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=2678878595897740688' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2678878595897740688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2678878595897740688'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/03/irt-07.html' title='IRT 07'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-158577034383173828</id><published>2007-03-15T04:41:00.000-07:00</published><updated>2007-03-15T04:56:40.319-07:00</updated><title type='text'>Bounding Volume Hierarchy</title><content type='html'>If I were trapped on a desert island with only one data structure allowed I would bring my trusty BVH.  I have been liking the BVH for some time in spite of all the k-d tree advocates (see the SIGGRAPH 05 notes for a discussion before ray packets were integrated) despite them being "slow".  One reason is simplicity-- dividing on objects leads to cleaner implementations than dividing space, and leads to O(N) bounded memory use.  My basic software rule is &lt;b&gt; KISS rules! &lt;/b&gt;.  Another reason is they handle many dynamic models well as has been shown by the collision detection community.  It turns out they can also be fast.  &lt;br /&gt;&lt;br /&gt;Solomon Boulos and Ingo Wald have done a bunch of nice work to packetize a BVH (a ray packet is a set of rays that are traced together).  The first optimization (and a huge one) is to descend the BVH as soon as any of the rays hit a box.  Maintaining a "first not dead ray" index makes this more efficient.  Another optimization is to use interval arithmetic to test a whole packet against a box for a conservative trivial reject.  See Solomon's tech report for details (it is really simple even though it sounds fancy, and has a nice mapping to C++ code).  Note that both of these optimizations are algorithmic and are mostly orthogonal to SSE optimizations (the descend if one hits optimization makes SSE less helpful).&lt;br /&gt;&lt;br /&gt;Finally, the BVH traversal has a low penalty for false positives on boxes, so conservative boxes like you get for moving objects, and well as the lower intrinsic coherency of secondary packets, are not so bad for the BVH.&lt;br /&gt;&lt;br /&gt;An important disclaimer: I have previously (in the early 90s) been an advocate of k-d, and later the grid.  So maybe this is just the end of the first cycle in my opinion!&lt;br /&gt;&lt;br /&gt;It does help if you use the surface-area heuristic to build (that was what it was first invented for in fact-- the BVH).  Nobody has ever justified to my satisfaction why the SAH greedy algorithm works so well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-158577034383173828?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/158577034383173828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=158577034383173828' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/158577034383173828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/158577034383173828'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/03/bounding-volume-hierarchy.html' title='Bounding Volume Hierarchy'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7524576214759319165</id><published>2007-03-14T17:15:00.000-07:00</published><updated>2007-03-14T17:18:22.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ray tracing'/><title type='text'>New ray packet paper</title><content type='html'>Solomon Boulos and friends have shown that ray packets may work for secondary rays.  Check out the &lt;a href="http://www.cs.utah.edu/~boulos/research.htm"&gt;first paper here&lt;/a&gt;.  As much as I hate the software engineering implications that arise with ray packets, I do like that they can make things faster.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7524576214759319165?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7524576214759319165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7524576214759319165' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7524576214759319165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7524576214759319165'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/03/new-ray-packet-paper.html' title='New ray packet paper'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-2299141372523946677</id><published>2007-03-10T05:02:00.000-08:00</published><updated>2007-03-10T06:36:02.938-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='environment maps'/><title type='text'>Environment map formats</title><content type='html'>As there are no "natural" mappings between the sphere of directions and the square, so there is no standard way to parametrize your environment map.  In the &lt;a href="portal.acm.org/citation.cfm?id=360353&amp;coll=portal&amp;dl=ACM&amp;CFID=16551186&amp;CFTOKEN=93760309"&gt;Original paper&lt;/a&gt; by Blinn and Newell, a cylindrical map was used.  There are many such cylindrical maps out there and have been used for &lt;a href="http://en.wikipedia.org/wiki/Map_projection"&gt; map projection &lt;/a&gt;.  For software renderers these are more intuitive than &lt;a href="http://en.wikipedia.org/wiki/Reflection_mapping"&gt; cube maps &lt;/a&gt; or the &lt;a href="http://www.debevec.org/Probes/"&gt;Disk on square&lt;/a&gt; paramerterization.  In a physically based renderer, you would like to importance sample the environment map.  This is easiest if each texel in the map subtends the same &lt;a href="http://en.wikipedia.org/wiki/Solid_angle"&gt;solid angle&lt;/a&gt; as every other texel.  There is one cylindrical map that does this for a given rectangle.  A well-known version of this projection is the &lt;a href="http://www.petersmap.com/"&gt;Peters Projection&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;Here's an example projection.  The rectangle has parameters [0.1]^2.  Let's take u to the angle phi (longitude): u = phi/(2*pi) = atan2(y,x)/(2*pi) assuming your direction (x,y,z) is a unit vector and z is "up".  Now we have v = f(z).  The simplest such mapping is v = (z+1)/2.  Is there area distortion there?  What is the area of a given pixel in the texture map.  How about the differential area?  Let's say that we have a differential square du*dv in the texture map.  The area on the sphere of that will be sin(theta) * dtheta(v) * dphi(u).&lt;br /&gt;&lt;br /&gt;dphi(u) = 2*pi*du = constant so we can ignore it.&lt;br /&gt;&lt;br /&gt;Since z = cos(theta), the other mapping is &lt;br /&gt;(cos(theta) + 1)/2 = v&lt;br /&gt;so differentiating both sides:&lt;br /&gt;-sin(theta)*dtheta/2 = dv&lt;br /&gt;&lt;br /&gt;As the differential area is proportional to sign theta, each pixel does have the same solid angle.  So this most simple mapping is also a good one!  I am not sure why anybody uses any other in a software renderer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-2299141372523946677?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/2299141372523946677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=2299141372523946677' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2299141372523946677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2299141372523946677'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/03/environment-map-formats.html' title='Environment map formats'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-8549696833115910167</id><published>2007-02-17T06:27:00.000-08:00</published><updated>2007-02-17T06:47:44.011-08:00</updated><title type='text'>Bye-bye z-buffer?</title><content type='html'>The main advantage of the z-buffer in my opinion is that you can stream geometry through it so companies like Pixar can make images of HUGE models.  However, in an interactive setting you don't want to do that, so games use pretty small polygon sets that can fit in main memory.  The image quality in games will be better once ray tracing is interactive.  When will that be?&lt;br /&gt;&lt;br /&gt;Intel has just &lt;a href="http://www.newsfactor.com/story.xhtml?story_id=032003A1JK8W"&gt; demonstrated&lt;/a&gt; a 80 core teraflop chip that looks ideal for ray tracing.  According to &lt;a href="http://www.cs.utah.edu/research/techreports/2006/pdf/UUCS-06-013.pdf"&gt; recent tests&lt;/a&gt;, full ray tracing is about 20 times slower than it needs to be on a 2GHz dual-core opteron 870.  If Intel's numbers are realistic (we'll have to wait to see what the meory implications are) then the slightly smaller &lt;a href="http://uk.theinquirer.net/?article=37548"&gt; Larabee &lt;/a&gt; system will be plenty fast enough for good ray tracing on a single chip.&lt;br /&gt;&lt;br /&gt;What does this mean?  I predict it means the z-buffer will soon exist only in software renderers at studios, so if you are an undergraduate don't bother learning OpenGL unless you need to use it in a project or job soon.  I doubt OpenGL will die entirely due to lagacy issues, but it is not something to learn unless you have to.  I speak as a person that spent much of my early years writing FORTRAN code!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-8549696833115910167?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/8549696833115910167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=8549696833115910167' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/8549696833115910167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/8549696833115910167'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/02/bye-bye-z-buffer.html' title='Bye-bye z-buffer?'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-2402380513221539438</id><published>2007-02-17T06:14:00.000-08:00</published><updated>2007-02-17T06:25:18.705-08:00</updated><title type='text'>Left and right-handed coordinate systems</title><content type='html'>We have hit that time in my class again where we set up viewing frames.  I continue to shun left-handed from my software, but do see why they are popular.&lt;br /&gt;&lt;br /&gt;Let's suppose when looking "into" the screen, you want the y axis to point up and the x axis to point to the right.  If you have a &lt;a href="http://en.wikipedia.org/wiki/Right-hand_rule"&gt;right-handed&lt;/a&gt; system, then the z axis will come out from the screen.  Negative z will go into the screen.  If you implement a z-buffer system you will initialize it with z = -infinity.  In a ray tracer, the viewing rays will have a negative z component.  It does seem "nicer" to have positive z go into the screen.  But at what cost?&lt;br /&gt;&lt;br /&gt;We can have the y axis point down as is done in many device coordinate systems.  That seems worse to me than having z point out from the screen.&lt;br /&gt;&lt;br /&gt;We can have a left-handed system.  This is equivalent to adding one reflection matrix to your system.  Whether that is worth it is a matter of taste.  To me it is not, as it confuses me more than the negative-z problem.  My brain-washing from many courses 20 years ago and geometric software in the intervening years  is all in favor of right-handed systems, while the "which way is z" issue has a lot less congitive cement for me, so I choose to live with negative z going into the screen.  Interestingly, the perspective matrix doesn't change either way!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-2402380513221539438?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/2402380513221539438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=2402380513221539438' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2402380513221539438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2402380513221539438'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/02/left-and-right-handed-coordinate.html' title='Left and right-handed coordinate systems'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-2425384371962509547</id><published>2007-02-09T06:38:00.000-08:00</published><updated>2007-02-09T06:49:21.683-08:00</updated><title type='text'>Pixar's Monte Carlo Patent done?</title><content type='html'>Pixar patented Monte Carlo for graphics back in the mind-1980s, and for reasons I don't know the patent wasn't issued (#&lt;a href="http://www.google.com/patents?vid=USPAT4897806&amp;id=-4UBAAAAEBAJ&amp;dq=pixar+1985"&gt;4897806&lt;/a&gt;) until Jan 1990.  That is in the transitional phase of patent law as I understand it, so it expired 17 years after being issued-- i.e., last month.  So is Monte Carlo now fair game in the US?  I would think so, but there are also patents &lt;a href="http://www.google.com/patents?vid=USPAT5025400&amp;id=uBYMAAAAEBAJ&amp;dq=5025400"&gt;5025400&lt;/a&gt; and &lt;a href="http://www.google.com/patents?vid=USPAT5239624&amp;id=vBYMAAAAEBAJ&amp;dq=5239624"&gt;5239624&lt;/a&gt; that last until 2009 and 2011 respectively.  They seem to my eye to not really claim anything new that was not in the original patent or the fabulous 1984 SIGGRAPH paper.  Anyone have any more informed wisdom on this?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-2425384371962509547?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/2425384371962509547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=2425384371962509547' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2425384371962509547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2425384371962509547'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/02/pixars-monte-carlo-patent-done.html' title='Pixar&apos;s Monte Carlo Patent done?'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-5087463651512218682</id><published>2007-01-30T05:23:00.000-08:00</published><updated>2007-01-30T05:29:21.103-08:00</updated><title type='text'>And a not-so-new paper</title><content type='html'>The architecture of our rendering system is described in a &lt;a href="http://www.cs.utah.edu/~shirley/papers/gi06.pdf"&gt;gi 06 paper&lt;/a&gt;.  Morley and Boulos should get co-first authors for this paper and deserve the bulk of the credit for the system.  I consider this paper a turning point in my thinking about realistic rendering.  The reason is that it addresses media as a first class citizen of rendering in a practical way.  The system doesn't really know the difference between media and surfaces, and overlapping media are not a problem.  So you can add an atmosphere, and then a cloud, and neither the atmosphere nor the cloud need be aware of each other.  Brute force is not an insult-- just ask quicksort!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-5087463651512218682?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/5087463651512218682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=5087463651512218682' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/5087463651512218682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/5087463651512218682'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/01/and-not-so-new-paper.html' title='And a not-so-new paper'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-4302242044200839166</id><published>2007-01-30T05:14:00.000-08:00</published><updated>2007-02-01T21:33:18.095-08:00</updated><title type='text'>New paper</title><content type='html'>I'll indicate new papers we do on this blog with a short post.&lt;br /&gt;&lt;br /&gt;My student &lt;a href="http://www.cs.utah.edu/~bratkova"&gt;Margarita Bratkova&lt;/a&gt; just completed a paper on her work on panoramic maps.  A tech report version is &lt;a href="http://www.cs.utah.edu/~bratkova/research/projects/panorama/panoramaTR.pdf"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-4302242044200839166?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/4302242044200839166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=4302242044200839166' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4302242044200839166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4302242044200839166'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/01/new-paper.html' title='New paper'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-2745061758731024106</id><published>2007-01-22T10:00:00.000-08:00</published><updated>2007-01-22T10:09:02.842-08:00</updated><title type='text'>Intro Graphics Course</title><content type='html'>For the first time in several years I am teaching Intro Graphics.  I am basing this course on the Reyes pipeline as described in the superb  &lt;a href="http://portal.acm.org/citation.cfm?id=37402.37414"&gt;paper&lt;/a&gt;.  Here is my course &lt;a href="http://www.cs.utah.edu/classes/cs5600"&gt;web page&lt;/a&gt;.  If you would like to follow along and do the assignments let me know and I'll link to your page.  Each week there will be one assignment that will take 1-4 hours or so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-2745061758731024106?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/2745061758731024106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=2745061758731024106' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2745061758731024106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/2745061758731024106'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2007/01/intro-graphics-course.html' title='Intro Graphics Course'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-3546649933000865669</id><published>2006-12-15T05:57:00.000-08:00</published><updated>2006-12-15T06:08:23.878-08:00</updated><title type='text'>Gamma correction</title><content type='html'>Most graphics monitors have a "gamma" that gives a rough approximation to their non-linearity.  For example, if we use an internal color space where all of R, G, B are stored as 0 to 1 values, then the physical spectra coming from the red part of the pixel would be:&lt;br /&gt;&lt;br /&gt;output_red( lambda ) = max_output_red(lambda) * pow( R, gamma )&lt;br /&gt;&lt;br /&gt;where gamma is typically a number around 2.0.  Suppose gamma is 2.0.  If we want to display a red that is 1/4 the maximum, the R would would store in a file to send to the display would be 0.5.&lt;br /&gt;&lt;br /&gt;Note that all of this is not to make up for some "defect" in the monitor.  When you use 8-bit per channel color representations, there are only 256 gray levels available.  If you space these out so they LOOK evenly spaced to a human observer, that makes a perceptually uniform set of 256 grays and banding is minimized.  But since human intensity perception is non-linear (think of the "middle gray" photographer's card which is physically about 1/5 the rreflectance of white paper), this means the monitor must be as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-3546649933000865669?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/3546649933000865669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=3546649933000865669' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/3546649933000865669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/3546649933000865669'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2006/12/gamma-correction.html' title='Gamma correction'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-432168463808024013</id><published>2006-11-27T10:06:00.000-08:00</published><updated>2006-11-27T10:09:10.814-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='color'/><title type='text'>Opponent process color space</title><content type='html'>For many applications, opponent process color works better than RGB or other common graphics spaces.  Opponent color encodes a greyscale channel along with two color channels that range red to green and blue to yellow.  A simplified version is:&lt;br /&gt;&lt;br /&gt;V = (R+G+B)/3&lt;br /&gt;RG = R-G&lt;br /&gt;BY = B - (R+G)/2&lt;br /&gt;&lt;br /&gt;Note that the second two channels run -1 to 1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-432168463808024013?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/432168463808024013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=432168463808024013' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/432168463808024013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/432168463808024013'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2006/11/opponent-process-color-space.html' title='Opponent process color space'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-9025676180723223557</id><published>2006-11-23T06:35:00.000-08:00</published><updated>2006-11-23T06:50:27.266-08:00</updated><title type='text'>Moore's Law and Ray Budget</title><content type='html'>Moore's Law states the number of transistors on a chip will rise exponentially, and this has happened fairly steadily.  A variation relates to performance, which for CPUs has doubled every two years or so.  Another variation is that CPU performance per dollar has doubled every 18 months or so.  In practice, the cost law implies you can buy more and better CPUs as time goes on.  Finally, screen resolution has been on its own curve that doubles the number of pixels every 10 years or so.&lt;br /&gt;&lt;br /&gt;What does this mean for rendering?  About 27 years ago Turner Whitted ray traced a 640x480 image at about 1 ray per pixel.  For the same money budget we can get about 18 doubling of performance, but we have 3 doublings or so in the number of pixels.  So now we should be able to do 2.5 million pixels, each with 2^15 = 32k rays.  &lt;br /&gt;&lt;br /&gt;A caveat is that we want to use more objects.  Fortunately, performance in practice is related to the log of the number of objects.&lt;br /&gt;&lt;br /&gt;What does this all mean?  The rendering community should raise its intuition for how many rays per pixel we can use in practice.  In academics, where it is good to think 5-10 years out, we should be looking at another 6 doublings or so, and a million rays per pixel should then be reasonable.&lt;br /&gt;&lt;br /&gt;Another way to compute ray budget is to assume 30Hz interactive ray tracing will become practical at 1 ray per pixel.  For an 8 hour batch run using the same infrastructure, you can send 30*60*60*8 = 864k samples per pixel.  &lt;br /&gt;&lt;br /&gt;Bottom line: batch rendering algorithms should assume a million samples per pixel or so are available, and this should make new algorithmic possibilities practical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-9025676180723223557?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/9025676180723223557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=9025676180723223557' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/9025676180723223557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/9025676180723223557'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2006/11/moores-law-and-ray-budget.html' title='Moore&apos;s Law and Ray Budget'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-3718684443977349813</id><published>2006-11-20T13:08:00.000-08:00</published><updated>2006-11-20T13:27:52.854-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='linear algebra'/><title type='text'>Outer product</title><content type='html'>Given two three vectors the "inner" product is:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;...........|X|&lt;br /&gt;[x y z]|Y| = [xX + yY + zZ]&lt;br /&gt;...........|Z|&lt;br /&gt;&lt;br /&gt;Which we use all the time (dot product).  There is&lt;br /&gt;also an outer product:&lt;br /&gt;&lt;br /&gt;|x|.................|xX xY xZ|&lt;br /&gt;|y|[X Y Z] = |yX yY yZ| &lt;br /&gt;|z|.................|zX zY zZ|&lt;br /&gt;&lt;br /&gt;I'm not sure this is useful for anything in graphics, or even what this thing is operationally.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-3718684443977349813?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/3718684443977349813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=3718684443977349813' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/3718684443977349813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/3718684443977349813'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2006/11/outer-product.html' title='Outer product'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-8730829958127108706</id><published>2006-11-20T06:19:00.000-08:00</published><updated>2006-11-20T06:31:41.937-08:00</updated><title type='text'>More on bilinear patch intersection</title><content type='html'>Because ray - BL patch involve solving a quadratic, I am concerned there will be  "cracking" issues where rays sneak between adjacent patches.  A cure for that would be to do four "ordered edge" tests on the ray and the patch edges.  More information on such tests in in Andrew Kensler's and my recent triangle intersection &lt;a href="http://www.cs.utah.edu/~aek/research/triangle.pdf"&gt; paper&lt;/a&gt;.  Note that Pluecker coordinates are not needed-- the easier to comprehend (for me) triple product test will do the job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-8730829958127108706?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/8730829958127108706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=8730829958127108706' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/8730829958127108706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/8730829958127108706'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2006/11/more-on-bilinear-patch-intersection.html' title='More on bilinear patch intersection'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-4691878299448366437</id><published>2006-11-17T19:31:00.000-08:00</published><updated>2006-11-18T11:15:14.809-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ray tracing'/><title type='text'>Ray tracing bilinear patches</title><content type='html'>I'm going to try to reimplement the displacement map method I did with Brian Smits and Mike Stark a few years ago.  A key part of that method is intersecting bilinear patches.  Given a ray o+tv and a patch with vertices p00, p01, p11, and p10 we have&lt;br /&gt;&lt;br /&gt;o + tv = (1-u)(1-v)&lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;00 + u(1-v)&lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;10 + (1-u)v &lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;01 + uv &lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;11&lt;br /&gt;&lt;br /&gt;This is three equations (x, y, and z) and three unknowns (t, u, v).  The way Brian and I solved this was to eliminate t by using 2 of the equations and then solve the uv system directly.  A similar approach is used in Shaun Ramsey et al.'s jgt paper.  This has always been unsatisfactory to me because it chooses an arbitrary ordering of the dimensions.  Perhaps a numeric solution would be more robust?&lt;br /&gt;&lt;br /&gt;Another possibility is to use Kajiya's old trick.  Consider the ray as the intersection of two planes &lt;br /&gt;&lt;br /&gt;(&lt;span style="font-weight:bold;"&gt;p&lt;/span&gt; - &lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;0) dot &lt;span style="font-weight:bold;"&gt;N&lt;/span&gt;0 = 0&lt;br /&gt;(&lt;span style="font-weight:bold;"&gt;p&lt;/span&gt; - &lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;1) dot &lt;span style="font-weight:bold;"&gt;N&lt;/span&gt;1 = 0&lt;br /&gt;&lt;br /&gt;If you substitute &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;p&lt;/span&gt; = (1-u)(1-v)&lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;00 + u(1-v)&lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;10 + (1-u)v &lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;01 + uv &lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;11&lt;br /&gt;&lt;br /&gt;into both the plane equations above then you get two equations in uv of the form:&lt;br /&gt;Auv + Bu + Cv + D = 0 (1)&lt;br /&gt;auv + bu + cv + d = 0 (2)&lt;br /&gt;&lt;br /&gt;If you solve one of those for u and then plug it into the other, you get a quadratic in v.  That leaves four possibilities of what to do first:&lt;br /&gt;&lt;br /&gt;solve (1) for u&lt;br /&gt;solve (1) for v&lt;br /&gt;solve (2) for u&lt;br /&gt;solve (2) for v&lt;br /&gt;&lt;br /&gt;There is also a degree of freedom for which planes to use.  In any case seems more stable than the three equations, 2 unknowns method above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-4691878299448366437?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/4691878299448366437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=4691878299448366437' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4691878299448366437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/4691878299448366437'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2006/11/ray-tracing-bilinear-patches.html' title='Ray tracing bilinear patches'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-7582751499530296552</id><published>2006-11-17T02:47:00.000-08:00</published><updated>2006-11-17T03:16:30.125-08:00</updated><title type='text'>Image formats for realistic rendering</title><content type='html'>It is remarkable to me that there is no accepted standard for high dynamic range images that is based on CIE standards.  Such a format should support XYZ and scotopic luminance V.  A big dump with four floats per pixel would work fine, although of course more compressed formats are certainly straightforward.  If anyone is aware of such a format that programs such as photoshop can read out of the box, please let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-7582751499530296552?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/7582751499530296552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=7582751499530296552' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7582751499530296552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/7582751499530296552'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2006/11/image-formats-for-realistic-rendering.html' title='Image formats for realistic rendering'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8350257063773144600.post-3079905215671769966</id><published>2006-11-13T09:58:00.000-08:00</published><updated>2006-11-13T10:09:43.717-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='ray tracing'/><title type='text'>How long before interactive ray tracing is on the desktop?</title><content type='html'>Solomon Boulos and friends in our group at Utah have their ray tracer going about 1 frame per second on one core of a  2GHz Opteron 870 with one ray per pixel at a million pixels.  This is with full shadows and reflections so is slower than a lot of the numbers you see in the literature.  For NTSC resolution (640x480) that would be more like 3-4 frames per second.  So we'd need about 8 of those cores for fluid motion.  So we are right on the threshold for such low resolutions.  If Intel comes through with its 60 core chip, and ray tracing maps to it, then HDTV resolution and some multisampling should be straightforward.  The Cell is also a possibility as shown by Carsten Benthin and his collaborators in their recent papers.   We could get ray tracing even sooner if an ASIC is built.  I don't see why a game box based on ray tracing would not be feasible now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8350257063773144600-3079905215671769966?l=psgraphics.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://psgraphics.blogspot.com/feeds/3079905215671769966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8350257063773144600&amp;postID=3079905215671769966' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/3079905215671769966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8350257063773144600/posts/default/3079905215671769966'/><link rel='alternate' type='text/html' href='http://psgraphics.blogspot.com/2006/11/how-long-before-interactive-ray-tracing.html' title='How long before interactive ray tracing is on the desktop?'/><author><name>Peter Shirley</name><uri>http://www.blogger.com/profile/17871569418798062417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
