<?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-595994106258820418</id><updated>2012-01-26T16:58:39.185+01:00</updated><category term='graphics shadow'/><category term='dynamixyz graphics skin rendering environment lighting spherical harmonics'/><category term='graphics shadow light pre-pass'/><category term='graphics volumetric lines'/><category term='game job tip'/><category term='Dynamixyz graphics eye iris light scattering'/><category term='technology game'/><category term='news links'/><category term='graphics screen image space survey'/><category term='PhD job random'/><category term='graphics eye single scattering'/><category term='GPU CUDA'/><category term='graphics global illumination'/><category term='OOP graphics'/><category term='Graphics Best Fit Normal Crytek'/><title type='text'>Sebh's blog</title><subtitle type='html'>Graphics and Games development</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-5664467568236949151</id><published>2011-07-24T18:38:00.004+02:00</published><updated>2011-07-24T18:45:41.494+02:00</updated><title type='text'>Electricity flow material</title><content type='html'>&lt;div style="text-align: justify;"&gt;I have added a new article on my website about a simple material featuring electricity flowing down a printed circuit. Everything is &lt;a href="http://sebastien.hillaire.free.fr/index.php?option=com_content&amp;amp;view=article&amp;amp;id=70&amp;amp;Itemid=104"&gt;here &lt;/a&gt;with the traditional executable and source code!&lt;br /&gt;&lt;br /&gt;Basically, instead of this:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sebastien.hillaire.free.fr/images/demo_flowpath/linearflow.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 128px; height: 315px;" src="http://sebastien.hillaire.free.fr/images/demo_flowpath/linearflow.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;You get that:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sebastien.hillaire.free.fr/images/demo_flowpath/pathflow.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 128px; height: 315px;" src="http://sebastien.hillaire.free.fr/images/demo_flowpath/pathflow.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Feel free to improve it and to discuss about it here! :)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-5664467568236949151?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/5664467568236949151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2011/07/electricity-flow-material.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5664467568236949151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5664467568236949151'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2011/07/electricity-flow-material.html' title='Electricity flow material'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-5817026720432736794</id><published>2011-06-26T13:50:00.005+02:00</published><updated>2011-06-26T14:10:25.850+02:00</updated><title type='text'>PhD 3D Engine - Conclusion</title><content type='html'>&lt;div style="text-align: justify;"&gt;I have finally written &lt;a href="http://sebastien.hillaire.free.fr/index.php?option=com_content&amp;amp;view=article&amp;amp;id=69&amp;amp;Itemid=103"&gt;an article on my website &lt;/a&gt;about the engine I have developed for My PhD thesis. This engine made my life easier as a PhD student.&lt;br /&gt;&lt;br /&gt;I have learned a lot during its development:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;first shadow mapping, virtual indirection cubemap&lt;/li&gt;&lt;li&gt;first scripting integration&lt;/li&gt;&lt;li&gt;first record/replay&lt;/li&gt;&lt;/ul&gt;I was then able to quickly:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;design my experiments using scripting&lt;/li&gt;&lt;li&gt;build environments under Maya+MentalRay&lt;br /&gt;&lt;/li&gt;&lt;li&gt;record user's actions in the VE&lt;/li&gt;&lt;li&gt;extract meaningful data for analysis&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;And finally, I was able to put nice screenshots in my papers and became a doctor! :)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-5817026720432736794?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/5817026720432736794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2011/06/phd-3d-engine-conclusion.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5817026720432736794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5817026720432736794'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2011/06/phd-3d-engine-conclusion.html' title='PhD 3D Engine - Conclusion'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-7744337058065191044</id><published>2011-06-24T21:19:00.001+02:00</published><updated>2011-06-24T21:21:52.497+02:00</updated><title type='text'>OpenCL Slisesix</title><content type='html'>The SliseSix OpenCL demo is &lt;a href="http://tinyurl.com/5vphtca"&gt;finally out&lt;/a&gt;! :)&lt;br /&gt;Feel free to discuss it here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-7744337058065191044?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/7744337058065191044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2011/06/opencl-slisesix.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7744337058065191044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7744337058065191044'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2011/06/opencl-slisesix.html' title='OpenCL Slisesix'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-3214671766471015332</id><published>2011-06-10T10:00:00.007+02:00</published><updated>2011-06-10T10:24:17.790+02:00</updated><title type='text'>OpenCL demo of Iniguo Quilez slisesix - SOON</title><content type='html'>&lt;div style="text-align: justify;"&gt;I will soon release an OpenCL implementation of &lt;a href="http://www.iquilezles.org/prods/index.htm"&gt;Iniguo quilez's slisesix demo &lt;/a&gt;. In this demo, you will be able to "interactively" move the camera in the scene.&lt;br /&gt;&lt;br /&gt;I am also currently working on a high-quality/resolution version. It will generate a single screen-shot with depth-of-field and more visual effects impossible to do for a real-time exploration of the scene on my poor nVidia GeforceGTX275.&lt;br /&gt;&lt;br /&gt;The demo will also feature a preview version of nVidia &lt;a href="http://timothylottes.blogspot.com/"&gt;Timothy Lotte's SSAA algo called FXAA3 (preview version)&lt;/a&gt;. He sent me a preview version for testing purposes and was kind enough to  accept me including a preview version in the upcoming download-able demo. By the way, there will be a &lt;a href="http://www.siggraph.org/s2011/content/filtering-approaches-real-time-anti-aliasing-0"&gt;Siggraph course this year on SSAA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here are two screenshots:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-F2nCcJttDuc/TfHS9RNloOI/AAAAAAAAAJs/YzoknFfYPF0/s1600/slicesixOpenCL.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://2.bp.blogspot.com/-F2nCcJttDuc/TfHS9RNloOI/AAAAAAAAAJs/YzoknFfYPF0/s320/slicesixOpenCL.jpg" alt="" id="BLOGGER_PHOTO_ID_5616502160341967074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The demo from shadertoy with fxaa3,volumetric fog and camera control.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Zm2H55GOoHQ/TfHS9zKcBQI/AAAAAAAAAJ0/0FrB-tR-Itc/s1600/slicesixOpenCL_angry.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://3.bp.blogspot.com/-Zm2H55GOoHQ/TfHS9zKcBQI/AAAAAAAAAJ0/0FrB-tR-Itc/s320/slicesixOpenCL_angry.jpg" alt="" id="BLOGGER_PHOTO_ID_5616502169455559938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Dynamic color correction and warm glow to make the monster alive&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-3214671766471015332?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/3214671766471015332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2011/06/opencl-demo-of-iniguo-quilez-slisesix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3214671766471015332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3214671766471015332'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2011/06/opencl-demo-of-iniguo-quilez-slisesix.html' title='OpenCL demo of Iniguo Quilez slisesix - SOON'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-F2nCcJttDuc/TfHS9RNloOI/AAAAAAAAAJs/YzoknFfYPF0/s72-c/slicesixOpenCL.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-4518884946159713467</id><published>2011-05-10T13:27:00.003+02:00</published><updated>2011-05-15T11:50:14.588+02:00</updated><title type='text'>New website online - Still no 3D stuff... :-/</title><content type='html'>My new website is now up at the following address: &lt;a href="http://sebastien.hillaire.free.fr"&gt;http://sebastien.hillaire.free.fr/&lt;/a&gt;. I took my whole Sunday to finalize it (even though the project section is still missing). The website has been designed using Joomla: I recommend you to use it if you want a clean website.&lt;br /&gt;&lt;br /&gt;I will now be able to finish the last article of my PhD requiring a revision. Then I will go back to 3D experiments in-between two sessions of Starcraft2. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-4518884946159713467?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/4518884946159713467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2011/05/new-website-online-still-no-3d-stuff.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4518884946159713467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4518884946159713467'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2011/05/new-website-online-still-no-3d-stuff.html' title='New website online - Still no 3D stuff... :-/'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-5973350851180648229</id><published>2011-04-02T15:04:00.003+02:00</published><updated>2011-04-02T15:38:30.609+02:00</updated><title type='text'>More updates coming soon</title><content type='html'>I know that I have not updated my blog for a while and this is due to many factors: many recent deadlines at work (crunch time ftw), re-design of my personal website (it turns out that it takes a lot of my free time, it should be finished soon), etc. I have also spent a lot of time updating my knowledge of ASM (never used during my PhD!) and experimenting with a particular focus on low level optimizations using MMX and SSE. Applications of this at work were really successful! :)&lt;br /&gt;&lt;br /&gt;I will refocus soon on 3D experiments and, hopefully, I will be able to show you something about my work at &lt;a href="http://www.dynamixyz.com/main/index.php?lang=en"&gt;Dynamixyz&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Stay tuned! :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-5973350851180648229?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/5973350851180648229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2011/04/more-updates-coming-soon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5973350851180648229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5973350851180648229'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2011/04/more-updates-coming-soon.html' title='More updates coming soon'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-739270114557171336</id><published>2010-12-21T13:33:00.007+01:00</published><updated>2010-12-27T13:58:34.011+01:00</updated><title type='text'>Symbolic computations</title><content type='html'>&lt;div style="text-align: justify;"&gt;Just found a good &lt;span style="font-style: italic;"&gt;symbolic (algebraic) computation &lt;/span&gt;program that can help you to develop/visualize/simplify your formulas. The graphical interface is name XCAS and uses the GIAC engine. You can download everything &lt;a href="http://www-fourier.ujf-grenoble.fr/%7Eparisse/giac.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;As an example, you can "pre-compute" rotation matrix from Euler's angles for a 3 bands spherical harmonics vector and visualize it as following:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TRCextzTqOI/AAAAAAAAAJY/tfcBi-Zj8Bo/s1600/shroteuler9coeff.jpg"&gt;&lt;img style="cursor: pointer; width: 330px; height: 91px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/TRCextzTqOI/AAAAAAAAAJY/tfcBi-Zj8Bo/s320/shroteuler9coeff.jpg" alt="" id="BLOGGER_PHOTO_ID_5553112917493393634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Good to start optimizing things...&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Miscellaneous&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Please, spread the word: &lt;a href="http://gpupro3.blogspot.com/2010/11/gpu-pro-3-call-for-authors.html"&gt;GPU Pro 3: Call for Authors&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://kesen.realtimerendering.com/i3d2011Papers.htm"&gt;I3D 2011 papers&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.junauza.com/2010/12/top-50-programming-quotes-of-all-time.html"&gt;Funny programming quotes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-739270114557171336?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/739270114557171336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/12/symbolic-computations.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/739270114557171336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/739270114557171336'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/12/symbolic-computations.html' title='Symbolic computations'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9PzXIqCKLU8/TRCextzTqOI/AAAAAAAAAJY/tfcBi-Zj8Bo/s72-c/shroteuler9coeff.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-6508973770157675393</id><published>2010-12-19T21:59:00.003+01:00</published><updated>2010-12-19T22:02:59.156+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamixyz graphics eye iris light scattering'/><title type='text'>Eye rendering</title><content type='html'>&lt;div style="text-align: justify;"&gt;Some more rendering R&amp;amp;D I am on: eye rendering.&lt;br /&gt;&lt;br /&gt;here  are the supported features: light refraction at cornea for point/spot  and environment lighting, light concentration, light scattering in the  iris, procedural description of the organic structure of the iris.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TQULYuBObyI/AAAAAAAAAIg/bP_-krM-ZDQ/s1600/brownEye.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/TQULYuBObyI/AAAAAAAAAIg/bP_-krM-ZDQ/s320/brownEye.bmp" alt="" id="BLOGGER_PHOTO_ID_5549854635101941538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A brown eye&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_9PzXIqCKLU8/TQULY3Wq1cI/AAAAAAAAAIo/oGURzoTpfrE/s1600/fantasyEye.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/TQULY3Wq1cI/AAAAAAAAAIo/oGURzoTpfrE/s320/fantasyEye.bmp" alt="" id="BLOGGER_PHOTO_ID_5549854637607802306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A fantasy eye&lt;br /&gt;&lt;div style="text-align: left;"&gt;I hope you like it! ;)&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-6508973770157675393?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/6508973770157675393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/12/eye-rendering_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6508973770157675393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6508973770157675393'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/12/eye-rendering_19.html' title='Eye rendering'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9PzXIqCKLU8/TQULYuBObyI/AAAAAAAAAIg/bP_-krM-ZDQ/s72-c/brownEye.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-6152328430487959268</id><published>2010-12-12T18:54:00.010+01:00</published><updated>2010-12-15T16:59:17.074+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dynamixyz graphics skin rendering environment lighting spherical harmonics'/><title type='text'>Skin rendering - environment lighting</title><content type='html'>&lt;div style="text-align: justify;"&gt;In parallel to the development of the graphical pipeline of &lt;a href="http://dynamixyz.com/"&gt;Dynamixyz&lt;/a&gt;, my work also involved some R&amp;amp;D on rendering. I may show some of my work here when my technical director allows me to do it.&lt;br /&gt;&lt;br /&gt;Some results showing the GPU Gems 3 skin rendering method but this time no point or spot light: only environment lighting using spherical harmonics! Below, some screenshots showing a head model lit by its surrounding environment (with an without light directional light occlusion.) Of course, this is rendered in real-time and with gamma correction. These screenshots emphasize the importance of using a ambient lighting model that takes into account incoming light directions of the environment as well as directional occlusions.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/TQUNDc8ZFEI/AAAAAAAAAJA/K4aufHHJaJY/s1600/simpleEnvLightingWithoutSHocclusion.bmp"&gt;&lt;img style="cursor: pointer; width: 156px; height: 156px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/TQUNDc8ZFEI/AAAAAAAAAJA/K4aufHHJaJY/s320/simpleEnvLightingWithoutSHocclusion.bmp" alt="" id="BLOGGER_PHOTO_ID_5549856468764267586" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/TQUND15vz3I/AAAAAAAAAJI/sbg-eXUfWDQ/s1600/simpleEnvLightingWithSHocclusion.bmp"&gt;&lt;img style="cursor: pointer; width: 156px; height: 156px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/TQUND15vz3I/AAAAAAAAAJI/sbg-eXUfWDQ/s320/simpleEnvLightingWithSHocclusion.bmp" alt="" id="BLOGGER_PHOTO_ID_5549856475464060786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Environment lighting with a cube-map having a&lt;br /&gt;pure red color on a single face.&lt;br /&gt;(left without, and right with directional light occlusion)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/TQUNCrbcxaI/AAAAAAAAAIw/EqHt_IBI1Xk/s1600/envLightingWithoutSHocclusion.bmp"&gt;&lt;img style="cursor: pointer; width: 156px; height: 156px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/TQUNCrbcxaI/AAAAAAAAAIw/EqHt_IBI1Xk/s320/envLightingWithoutSHocclusion.bmp" alt="" id="BLOGGER_PHOTO_ID_5549856455472760226" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/TQUNDETjgnI/AAAAAAAAAI4/AOXLsZpjKRQ/s1600/envLightingWithSHocclusion.bmp"&gt;&lt;img style="cursor: pointer; width: 156px; height: 156px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/TQUNDETjgnI/AAAAAAAAAI4/AOXLsZpjKRQ/s320/envLightingWithSHocclusion.bmp" alt="" id="BLOGGER_PHOTO_ID_5549856462150533746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Environment lighting with a cube-map from &lt;a href="http://www.humus.name/"&gt;Humus&lt;/a&gt;.&lt;br /&gt;(left without, and right with directional light occlusion)&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;This is static and I am working on an idea to make everything dynamic. The occlusion is computed on the GPU using rasterization instead of ray tracing.&lt;br /&gt;&lt;br /&gt;The head model is a free scan released by &lt;a href="http://www.ir-ltd.net/infinite-3d-head-scan-released/"&gt;Infinite-Realities&lt;/a&gt;. Thanks to you Mr. Lee Perry Smith!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-6152328430487959268?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/6152328430487959268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/12/skin-rendering-environment-lighting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6152328430487959268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6152328430487959268'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/12/skin-rendering-environment-lighting.html' title='Skin rendering - environment lighting'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9PzXIqCKLU8/TQUNDc8ZFEI/AAAAAAAAAJA/K4aufHHJaJY/s72-c/simpleEnvLightingWithoutSHocclusion.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-6807501566307369664</id><published>2010-12-04T22:13:00.006+01:00</published><updated>2010-12-05T18:45:32.190+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GPU CUDA'/><category scheme='http://www.blogger.com/atom/ns#' term='news links'/><title type='text'>Books + interesting CUDA facts</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hi followers!&lt;br /&gt;&lt;br /&gt;I know I am still not updating often this blog. In majority, this is, again, due to my new work and the preparation of my PhD thesis defense. So, I am doing a lot of interesting stuff at work that I may share in here some day. Besides, concerning my PhD, my last paper has been successfully  presented last week at &lt;a href="http://www.comp.polyu.edu.hk/conference/vrst2010/index.html"&gt;VRST2010&lt;/a&gt; by my advisor (I was not able to go myself). This paper was about simulating the Human visual system using the new visual attention model I have proposed to predict user's gaze during real-time first-person navigation in interactive 3D virtual environments. Also, my last collaboration ended with a paper accepted for publication in the &lt;a href="http://www.computer.org/portal/web/tvcg/"&gt;IEEE TVCG&lt;/a&gt; journal. This paper is about real-time haptic interaction with fluids: my small contribution is a cheap fluid rendering method. I may talk about it here soon. I now only have to think about my PhD defense presentation! :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note on CUDA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have read the two books about CUDA (&lt;a href="http://www.amazon.com/Programming-Massively-Parallel-Processors-Hands/dp/0123814723/ref=pd_bxgy_b_img_b"&gt;1&lt;/a&gt; and &lt;a href="http://www.amazon.com/CUDA-Example-Introduction-General-Purpose-Programming/dp/0131387685/ref=sr_1_1?ie=UTF8&amp;amp;qid=1291498220&amp;amp;sr=8-1"&gt;2&lt;/a&gt;). They are pretty amazing book for learning the basics but I was still hungry after that. So I have decided to read more documents like the nVidia best practice recommendations. I was surprised to see that these books/documents advice a set of "simple" rules to follow in order to get good performance such as "Increasing occupancy is the only way to improve latency hiding". But, as exposed in this &lt;a href="http://www.cs.berkeley.edu/%7Evolkov/volkov10-GTC.pdf"&gt;very good presentation&lt;/a&gt;, you have to be careful with these advices. It reveals another set of rules for better performance with lower occupancy. Overall, like with every computing systems, you should always try several codes and use the one which give the best performance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Amazing books&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- This book about the &lt;a href="http://www.amazon.com/Masters-Doom-Created-Transformed-Culture/dp/0812972155/ref=sr_1_1?ie=UTF8&amp;amp;qid=1291498709&amp;amp;sr=8-1"&gt;two Id johns&lt;/a&gt; is very well written! I could not stop reading it!&lt;br /&gt;&lt;br /&gt;- Are you looking for a book to learn physically-based rendering methods? Stop searching and buy &lt;a href="http://www.amazon.com/Physically-Based-Rendering-Second-Implementation/dp/0123750792/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1291499424&amp;amp;sr=1-1"&gt;this one&lt;/a&gt;! An incredible amount of methods are covered in this book with a new presentation style I have just discovered: literate programming. The book covers a large range of knowledge: from the basics (ray tracing, collision, etc) to the advanced one (metropolis light transport, sub-surface scattering, spherical harmonics, etc). There are all Math equations and corresponding source code! Perfect!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-6807501566307369664?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/6807501566307369664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/12/books-interesting-cuda-facts.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6807501566307369664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6807501566307369664'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/12/books-interesting-cuda-facts.html' title='Books + interesting CUDA facts'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-7143926555301327173</id><published>2010-10-26T23:14:00.028+02:00</published><updated>2010-10-28T23:14:40.308+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics Best Fit Normal Crytek'/><title type='text'>Best Fit Normal Map Generator + Source Code</title><content type='html'>&lt;div style="text-align: justify;"&gt;The BFN generator is finally here! I have found time for this tonight.&lt;br /&gt;&lt;br /&gt;So, this small application allows you to generate each face of a BFN cube-map. If you want to encode the BFN only as the length of the best fit normal or transform it to a 2D texture (as suggested in Crytek's presentation), you will have a little bit of work to do but it should not be such a big deal. You can select the resolution of the cube-map as well as the bias vector at compilation time.&lt;br /&gt;&lt;br /&gt;Some screen-shots for 256x256x6 cube-maps:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_9PzXIqCKLU8/TMdE65VWQPI/AAAAAAAAAHc/xR0_v6u0edM/s1600/raw+front.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 173px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/TMdE65VWQPI/AAAAAAAAAHc/xR0_v6u0edM/s320/raw+front.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466445861404914" border="0" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_9PzXIqCKLU8/TMdE6mDTotI/AAAAAAAAAHU/gtVHs-hMBrU/s1600/raw+back.jpg"&gt;&lt;img style="cursor: pointer; width: 182px; height: 173px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/TMdE6mDTotI/AAAAAAAAAHU/gtVHs-hMBrU/s320/raw+back.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466440685462226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;At the origin: the BFN cube-map with a bias vector=vec3(0.5,0.5,0.5).&lt;br /&gt;in the +X direction: the regular normalization cube-map.&lt;br /&gt;In the +X+Y direction: a BFN cubemap with a bias vector=vec3(0.5,0.5,8.0/255.0). It results in less precision for normals having negative Z value and more precision for normals having positive Z value.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/TMdFR8gg9MI/AAAAAAAAAIU/KotT9YvzeVk/s1600/diffN+usual.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 320px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/TMdFR8gg9MI/AAAAAAAAAIU/KotT9YvzeVk/s320/diffN+usual.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466841850541250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;The reconstruction error of the regular normalization cube-map as compared to the ground-truth normal map. (scale factor of 50)&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdFRjs8QjI/AAAAAAAAAIM/ID8ABxckWWc/s1600/diffN+bfnB.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdFRco5WtI/AAAAAAAAAIE/jhCKY1L5zD4/s1600/diffN+bfn.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 320px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdFRco5WtI/AAAAAAAAAIE/jhCKY1L5zD4/s320/diffN+bfn.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466833295760082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;The reconstruction error of the BFN cube-map with bias a vector=vec3(0.5,0.5,0.5).&lt;br /&gt;Some reconstruction errors are still visible. (scale factor of 50)&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdFRjs8QjI/AAAAAAAAAIM/ID8ABxckWWc/s1600/diffN+bfnB.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 318px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdFRjs8QjI/AAAAAAAAAIM/ID8ABxckWWc/s320/diffN+bfnB.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466835191775794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;The reconstruction error of the BFN cube-map with bias a vector=vec3(0.5,0.5,8.0/255.0).&lt;br /&gt;No more error patterns are visible. (scale factor of 50)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/TMdFRNxwrzI/AAAAAAAAAH8/m8DCQK7w5Ec/s1600/diffN+back.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 270px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/TMdFRNxwrzI/AAAAAAAAAH8/m8DCQK7w5Ec/s320/diffN+back.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466829306408754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Reconstruction error on the back faces (scale factor of 50). There is a large error when using a bias vector of (0.5,0.5,8.0/255.0). However, it is not important since only the positive Z values are important when storing normals for a light pre-pass or deferred renderer.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/TMdE70FwICI/AAAAAAAAAH0/CJSwJP-ryr4/s1600/specUsual.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 320px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/TMdE70FwICI/AAAAAAAAAH0/CJSwJP-ryr4/s320/specUsual.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466461633683490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Error when computing a specular lob with the regular normalization cube-map. The specular exponent is 64.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdE7A1e8hI/AAAAAAAAAHs/JGurLIN4oYM/s1600/specularBFN.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 149px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdE7A1e8hI/AAAAAAAAAHs/JGurLIN4oYM/s320/specularBFN.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466447875240466" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdE6-ZfG7I/AAAAAAAAAHk/SC9J0Pmg3zk/s1600/specBFNB.jpg"&gt;     &lt;img style="cursor: pointer; width: 156px; height: 149px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/TMdE6-ZfG7I/AAAAAAAAAHk/SC9J0Pmg3zk/s320/specBFNB.jpg" alt="" id="BLOGGER_PHOTO_ID_5532466447220939698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;No noticeable difference when changing the bias vector of the BFN.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;You can download the source &lt;/span&gt;&lt;a href="http://sebastien.hillaire.free.fr/download/BFN.zip"&gt;here&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;And finally, the important references :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.3443"&gt;Amantide ray marching&lt;/a&gt; paper.&lt;/li&gt;&lt;li&gt;Crytek's presentation from SIGGRAPH 2010 as well as their 2D BFN texture (which I recommend) can be downloaded &lt;a href="http://advances.realtimerendering.com/s2010/index.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-7143926555301327173?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/7143926555301327173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/10/best-fit-normal-map-generator.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7143926555301327173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7143926555301327173'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/10/best-fit-normal-map-generator.html' title='Best Fit Normal Map Generator + Source Code'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9PzXIqCKLU8/TMdE65VWQPI/AAAAAAAAAHc/xR0_v6u0edM/s72-c/raw+front.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-5096420174563244620</id><published>2010-10-23T22:00:00.009+02:00</published><updated>2010-10-28T20:02:58.697+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news links'/><title type='text'>Some more links</title><content type='html'>&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Just in case you are still not aware of the &lt;a href="http://www.gamasutra.com/view/feature/3687/sponsored_feature_common_.php"&gt;Load-Hit-Store issue&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;SIGGRAPH Asia &lt;a href="http://www.siggraph.org/asia2010/content/attendees/technical-papers"&gt;Papers &lt;/a&gt;and &lt;a href="http://www.siggraph.org/asia2010/content/attendees/technical-sketches-posters"&gt;Sketches&lt;/a&gt; are available.&lt;/li&gt;&lt;li&gt;An alternative to the shell based method to render &lt;a href="http://www.gamedev.net/reference/programming/features/GPUFur/default.asp"&gt;fur&lt;/a&gt;. [&lt;a href="http://www.youtube.com/watch?v=xM2_9X-QvfQ"&gt;Video&lt;/a&gt;]&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Oh, by the way, my tool to generate the Best fit normals cube map will be available shortly (together with C++ sources). Many people asked me about it... Now, I just need to write a blog post and put it on my personal website for download.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-5096420174563244620?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/5096420174563244620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/10/some-more-links.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5096420174563244620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5096420174563244620'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/10/some-more-links.html' title='Some more links'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-685756069823448940</id><published>2010-10-13T21:43:00.012+02:00</published><updated>2010-10-14T22:37:25.255+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PhD job random'/><title type='text'>News and random links</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hi everyone!&lt;br /&gt;&lt;br /&gt;I am currently very busy because of the end of my PhD thesis and my new job! This is why I am not currently very active.&lt;br /&gt;&lt;br /&gt;So, as I said, my PhD is over. The manuscript is currently proofread by my two advisors. I will defend my PhD on January 21st 2010.&lt;br /&gt;&lt;br /&gt;I finally had a phone interview with the game company that contacted me 2 times last year. Despite the fact that "I have a very interesting profile", they told me that I still "have to get more experience"... So sad... :/ So this is what I am doing right now by working at &lt;a href="http://dynamixyz.com/main/index.php?lang=en"&gt;Dynamixyz &lt;/a&gt;as a R&amp;amp;D engineer. It is a new French start-up so you can imagine that there is a lot of work to do!! :) I am mainly involved in the development of the CG part of their facial animation tools pipeline.&lt;br /&gt;&lt;br /&gt;I want to finish this post with these interesting/funny random links:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Interesting paper from Insomniac on &lt;a href="http://www.insomniacgames.com/research_dev/articles/2010/152553296"&gt;2 band spherical harmonics&lt;/a&gt;  with truncated triple product.&lt;/li&gt;&lt;li&gt;&lt;a href="http://johnlindquist.com/category/patterncraft/"&gt;Patterncraft &lt;/a&gt;or how to teach design patterns using Starcraft2! Much more fun than typical school use cases! :)&lt;/li&gt;&lt;li&gt;The &lt;a href="http://www.gameblog.fr/blogs/eska/"&gt;blog &lt;/a&gt;of a French guy working at Crytek. Sorry, it is in French. :)&lt;/li&gt;&lt;li&gt;Game design fundamentals &lt;a href="http://www.raphkoster.com/2010/10/12/the-fundamentals-of-game-design/"&gt;blog post&lt;/a&gt;&lt;/li&gt;&lt;li&gt;16bits ALU in Minecraft &lt;a href="http://www.youtube.com/watch?v=LGkkyKZVzug"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Log out fail in &lt;a href="http://29.media.tumblr.com/tumblr_l9vy6xve1d1qzpwi0o1_r1_500.jpg"&gt;MoH&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Amazing dance animations in this TF2 &lt;a href="http://www.youtube.com/watch?v=Nds1T7U9FqY"&gt;video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;What is exactly a doctorate? &lt;a href="http://gizmodo.com/5613794/what-is-exactly-a-doctorate"&gt;Answer&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-685756069823448940?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/685756069823448940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/10/news-and-random-links.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/685756069823448940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/685756069823448940'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/10/news-and-random-links.html' title='News and random links'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-5257506506943920367</id><published>2010-08-31T19:43:00.012+02:00</published><updated>2010-09-03T13:38:48.993+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics eye single scattering'/><title type='text'>Eye rendering - first try</title><content type='html'>I was in holidays near Deauville (France) last week, that's why I remains quiet.&lt;br /&gt;&lt;br /&gt;I have started working on an eye rendering method inspired by the one presented in this &lt;a href="http://www.computer.org/portal/web/csdl/doi/10.1109/TVCG.2009.24"&gt;paper&lt;/a&gt;. As you can see on the next screen-shots, I have some interesting first results. The characteristics of the eye is taken from biologists reports papers. The iris is rendering using the &lt;a href="http://www.computer.org/portal/web/csdl/doi/10.1109/MCG.2008.16"&gt;subsurface texture mapping &lt;/a&gt;method simulating single scattering in participating medium (in this case, the iris). The light refraction at the cornea is taken into account in a different way than what is done in the eye paper (their refraction function). The sclera (the white part) is currently not shaded.&lt;br /&gt;&lt;br /&gt;I hope you like it!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/TH1B0YwAkCI/AAAAAAAAAG0/v0ZtUpMzPrA/s1600/FourierOpacityMapping+2010-08-31+19-36-37-17.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 114px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/TH1B0YwAkCI/AAAAAAAAAG0/v0ZtUpMzPrA/s320/FourierOpacityMapping+2010-08-31+19-36-37-17.jpg" alt="" id="BLOGGER_PHOTO_ID_5511633887224172578" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/TH1B0j49BFI/AAAAAAAAAG8/5yKR-kCYwjw/s1600/FourierOpacityMapping+2010-08-31+19-39-53-49.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 114px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/TH1B0j49BFI/AAAAAAAAAG8/5yKR-kCYwjw/s320/FourierOpacityMapping+2010-08-31+19-39-53-49.jpg" alt="" id="BLOGGER_PHOTO_ID_5511633890214478930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Blue iris rendering with refraction.&lt;br /&gt;(click on the picture for higher resolution)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/TH1B01ZqE2I/AAAAAAAAAHE/JQT4aPVAoRk/s1600/FourierOpacityMapping+2010-08-31+19-37-51-50.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 114px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/TH1B01ZqE2I/AAAAAAAAAHE/JQT4aPVAoRk/s320/FourierOpacityMapping+2010-08-31+19-37-51-50.jpg" alt="" id="BLOGGER_PHOTO_ID_5511633894915052386" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/TH1B1juI0II/AAAAAAAAAHM/5XgZ6JXXkPg/s1600/FourierOpacityMapping+2010-08-31+19-38-28-33.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 114px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/TH1B1juI0II/AAAAAAAAAHM/5XgZ6JXXkPg/s320/FourierOpacityMapping+2010-08-31+19-38-28-33.jpg" alt="" id="BLOGGER_PHOTO_ID_5511633907348983938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Green and Brown eyes.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I have set-up the scattering/extinction parameters rapidly so you may not found the color of this eyes really "realistic"! I still have to improve the current algorithm and I have some interesting idea for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-5257506506943920367?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/5257506506943920367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/eye-rendering-first-try.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5257506506943920367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5257506506943920367'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/eye-rendering-first-try.html' title='Eye rendering - first try'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9PzXIqCKLU8/TH1B0YwAkCI/AAAAAAAAAG0/v0ZtUpMzPrA/s72-c/FourierOpacityMapping+2010-08-31+19-36-37-17.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-7994188518750326087</id><published>2010-08-13T09:12:00.007+02:00</published><updated>2010-08-18T16:31:37.825+02:00</updated><title type='text'>Quackecon 2010: Carmack's keynote</title><content type='html'>&lt;div style="text-align: justify;"&gt;Every developers familiar with virtual texturing would have though: "this is a real scalable technology"! Carmack just proved it with his iPhone4 &lt;a href="http://kotaku.com/5611523/id-unleashes-rage-on-the-iphone"&gt;Rage demo&lt;/a&gt; running at 60fps!&lt;br /&gt;&lt;br /&gt;By the way, I am looking for a full video of the keynote. I, I mean google, can't find it...&lt;br /&gt;&lt;br /&gt;Also, John now has a &lt;a href="http://twitter.com/id_aa_carmack"&gt;twitter &lt;/a&gt;which would work as his old .plan files! Back to good old time?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-7994188518750326087?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/7994188518750326087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/quackecon-2010.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7994188518750326087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7994188518750326087'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/quackecon-2010.html' title='Quackecon 2010: Carmack&apos;s keynote'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-707677895236850220</id><published>2010-08-12T13:51:00.004+02:00</published><updated>2010-08-13T09:21:00.906+02:00</updated><title type='text'>BFN: about Crytek's approach</title><content type='html'>&lt;div style="text-align: justify;"&gt;In my case, I have computed the best fist RGB value given a bias vector and, of course, the direction to fit. The BFN are stored in a cube map.&lt;br /&gt;&lt;br /&gt;Crytek's &lt;a href="http://advances.realtimerendering.com/s2010/Kaplanyan-CryEngine3%28SIGGRAPH%202010%20Advanced%20RealTime%20Rendering%20Course%29.pdf"&gt;approach &lt;/a&gt;is only storing the length of the best fitting vector for the requested normal direction. Furthermore, as explained in the notes (slide 94), &lt;span style="font-style: italic;"&gt;8-bits precision is sufficient if the best fit length is stored for the normal divided by maximum component&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;As pointed out by Vince on my first post about BFN, there is some symmetry on each cube face. Indeed, the cubemap can be compressed into a single 2D texture (slide 94). This allows to save video memory at the cost of several ALU operations in the fragment shader (slide 95).&lt;br /&gt;&lt;br /&gt;When using this final representation as a 2D texture, it is not possible to change the bias vector as I have proposed in my previous post. However, results seems to be good enough with Crytek's approach... (slides 42-43) Is it worth the cost to use a cubemap? My next step will be to compare the image quality with or without changing the bias vector in my deferred relief mapped renderer.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-707677895236850220?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/707677895236850220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/bfn-about-cryteks-approach.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/707677895236850220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/707677895236850220'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/bfn-about-cryteks-approach.html' title='BFN: about Crytek&apos;s approach'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-4463517843806614985</id><published>2010-08-08T18:36:00.042+02:00</published><updated>2010-08-09T18:23:54.229+02:00</updated><title type='text'>Best Fit Normals: playing with the bias vector</title><content type='html'>&lt;div style="text-align: justify;"&gt;Yesterday night, I have first implemented the Amantide ray marching method to compute the best fit normal (BFN) cube map. The gain in performance is, as expected, major. I can now generate a large cube map in few minutes (instead of hours).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Second, I was thinking about changing the bias vector in order to get precision where it matter, similarly to the quantization approach presented by Crytek in this old &lt;a href="http://www.crytek.com/fileadmin/user_upload/inside/presentations/2009/A_bit_more_deferred_-_CryEngine3.ppt"&gt;presentation&lt;/a&gt; slide 13. This, in order to get more precision (more direction) in the usual normal direction: along the Z axis. I found that it is hard to choose a good bias value. In the case where negative Z value are ignored (there is some games engine in this case but I can't remember which), choosing a bias of 0.0 would be just perfect. Then, I suppose one could choose the bias value visually, or image difference error from key view points. Also, encoding objects normal map using such a bias should be of higher quality because normal maps rarely contain normals with negative Z.&lt;br /&gt;&lt;br /&gt;Enough talking, here are some screenshot:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/TGAX_mIYLyI/AAAAAAAAAGk/mF3yl0BfOy4/s1600/facePXbfn256_.jpg"&gt;&lt;img style="cursor: pointer; width: 256px; height: 256px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/TGAX_mIYLyI/AAAAAAAAAGk/mF3yl0BfOy4/s320/facePXbfn256_.jpg" alt="" id="BLOGGER_PHOTO_ID_5503425125981630242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A view of the BFN cube map face (positive Z)&lt;br /&gt;with a bias factor of 16 on the Z axis.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/TGARdFd7-lI/AAAAAAAAAGE/fHGIRok_TCo/s1600/32bias128.jpg"&gt;&lt;img style="cursor: pointer; width: 161px; height: 155px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/TGARdFd7-lI/AAAAAAAAAGE/fHGIRok_TCo/s320/32bias128.jpg" alt="" id="BLOGGER_PHOTO_ID_5503417936028367442" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/TGARcx3ptJI/AAAAAAAAAF8/aWJmcN6pnEk/s1600/32bias2.jpg"&gt;&lt;img style="cursor: pointer; width: 160px; height: 154px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/TGARcx3ptJI/AAAAAAAAAF8/aWJmcN6pnEk/s320/32bias2.jpg" alt="" id="BLOGGER_PHOTO_ID_5503417930767512722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Bias modification example. &lt;span style="font-weight: bold;"&gt;Left&lt;/span&gt;: BFN with usual bias,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Right&lt;/span&gt;: BFN with Bias of 2 on the Z axis&lt;br /&gt;(poor precision for normal with negative Z).&lt;br /&gt;(32*32 cube map)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TGAReALROMI/AAAAAAAAAGc/MLyrFPXUMVw/s1600/withwithout_bias16.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 267px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/TGAReALROMI/AAAAAAAAAGc/MLyrFPXUMVw/s320/withwithout_bias16.jpg" alt="" id="BLOGGER_PHOTO_ID_5503417951787759810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Visualization of the reconstruction error (multiplied here by 70)&lt;br /&gt;as compared to the true direction.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Front box&lt;/span&gt;: BFN with Bias of 16 on the Z axis&lt;br /&gt;(poor precision for normal with negative Z), &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Far box&lt;/span&gt;: BFN with usual bias. (256*256 cube map)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/TGARdclL7PI/AAAAAAAAAGM/4XQal9DwXao/s1600/errorbias16.jpg"&gt;&lt;img style="cursor: pointer; width: 160px; height: 160px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/TGARdclL7PI/AAAAAAAAAGM/4XQal9DwXao/s320/errorbias16.jpg" alt="" id="BLOGGER_PHOTO_ID_5503417942232788210" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/TGARd6y6sDI/AAAAAAAAAGU/0FOf6jLzz4s/s1600/errorbias128.jpg"&gt;  &lt;img style="cursor: pointer; width: 160px; height: 159px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/TGARd6y6sDI/AAAAAAAAAGU/0FOf6jLzz4s/s320/errorbias128.jpg" alt="" id="BLOGGER_PHOTO_ID_5503417950343442482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Visualization of the reconstruction error on the positive Z face.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Left&lt;/span&gt;: BFN with Bias of 16 on the Z axis,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Right&lt;/span&gt;: BFN with usual bias. (256*256 cube map)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;A you can see on the last figure, you can get more precision on a simple 256 BFN cube map by simply changing the bias on the Z axis.&lt;br /&gt;&lt;br /&gt;The presentation of Anton about this is now available on the course &lt;a href="http://advances.realtimerendering.com/"&gt;website&lt;/a&gt;. I will have a deeper look at the details (I was implementing this methods based only on my memory and ideas since SIGGRAPH). Interestingly, it seems that they  do not use a cubemap but a 2D texture...&lt;br /&gt;&lt;br /&gt;As always, feel free to discuss and to ask me for the BFN cubemap textures (at any resolution now :D) if you want to try this in your engine (some developers from video game studios requested these textures last time).&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-4463517843806614985?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/4463517843806614985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/best-fit-normals-playing-with-bias.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4463517843806614985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4463517843806614985'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/best-fit-normals-playing-with-bias.html' title='Best Fit Normals: playing with the bias vector'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9PzXIqCKLU8/TGAX_mIYLyI/AAAAAAAAAGk/mF3yl0BfOy4/s72-c/facePXbfn256_.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-3956075484349427355</id><published>2010-08-04T14:00:00.018+02:00</published><updated>2010-08-06T09:43:21.357+02:00</updated><title type='text'>Crytek's Best Fit Normals</title><content type='html'>&lt;div style="text-align: justify;"&gt;Among the SIGGRAPH presentations, there was one about Crytek's rendering  methods. One interesting techniques quickly presented was &lt;span style="font-style: italic;"&gt;best fit normals (BFN)&lt;/span&gt;. This methods is aimed to improve normal precision when stored in the RGB8 format.&lt;br /&gt;&lt;br /&gt;When using traditional scaled&amp;amp;biased normals in RGB8 format, some  accuracy errors can occur because of the low precision of the RGB8  format related to the scale&amp;amp;bias. For example, considering a  256*256*6 cube map, 393216 directions can be represented. However, due to  the low precision of RGB8 format, only 219890 (55.9%) of these  directions are effectively represented (many similar directions being  represented by the same compressed value). In this case, I have computed  that only 1.31% of the full 256*256*256 voxel possibilities of the RGB8  values are used. Also, I have computed that each voxel effectively used represents meanly 1.788 directions.&lt;br /&gt;&lt;br /&gt;The idea behind the BFN approach is to search for the voxel that will best represent (fit) a given direction: it may be a non-normalized vector. Using this method with a 256*256*6 cube map, I have found that 387107  (98.4%) of directions are effectively represented. Furthermore, in this case, each voxel used represents meanly 1.016  directions. Thus, using such a method results in a more accurate reconstruction of normals (see screen-shots). Moreover, compression is a single cubemap lookup, and reconstruction is an unbias and normalize.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/TFlk6NedyGI/AAAAAAAAAFc/-rZyOVGIt24/s1600/bfn_comp.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/TFlk6NedyGI/AAAAAAAAAFc/-rZyOVGIt24/s320/bfn_comp.jpg" alt="" id="BLOGGER_PHOTO_ID_5501539371022403682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Left: BFN cubemap, Right: scale&amp;amp;bias cubemap&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/TFlk6dm5XDI/AAAAAAAAAFk/LNe8MOE3Ga8/s1600/bfn_error.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 130px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/TFlk6dm5XDI/AAAAAAAAAFk/LNe8MOE3Ga8/s320/bfn_error.jpg" alt="" id="BLOGGER_PHOTO_ID_5501539375352732722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Reconstruction error (absolute value scaled by 70) for BFN (left) and&lt;br /&gt;scale&amp;amp;bias normal (right)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So how to generate each cube face? Currrently, I am using the brut force  method which is horribly slow: for each direction on the cube face, I  parse each voxel of the RGB8 volume to search for the one which match the best.  One faster method I plan to implement later is to use the Amantide ray  marching method to ray march the voxel volume along the ray direction and find the best  representative one.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;How can this method be used?&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Better normal map encoding: when computing object normal map, instead of converting from floating point normal map to scaled&amp;amp;biased normal, do a texture look up in the BFN cube map texture.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Deferred rendering: high quality normal buffer in RGB8!  :) It could also be possible to pack a normal in a 32F channel.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Any other ideas?&lt;/li&gt;&lt;/ul&gt;So when I will have time, don't know when because the end of my PhD is approaching quickly, I plan to implement Amantide's methods to accelerate the computation. Then, maybe use a better representation instead of a cube map.&lt;br /&gt;&lt;br /&gt;If you have questions or want access to the cubemap textures, send me an email. As always, feel free to discuss here about this method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-3956075484349427355?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/3956075484349427355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/cryteks-best-fit-normals.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3956075484349427355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3956075484349427355'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/cryteks-best-fit-normals.html' title='Crytek&apos;s Best Fit Normals'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9PzXIqCKLU8/TFlk6NedyGI/AAAAAAAAAFc/-rZyOVGIt24/s72-c/bfn_comp.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-9009665208209421772</id><published>2010-08-01T22:21:00.006+02:00</published><updated>2010-08-05T11:51:54.976+02:00</updated><title type='text'>Back from SIGGRAPH 2010</title><content type='html'>Wow, SIGGRAPH was awesome!&lt;br /&gt;&lt;br /&gt;I saw and learn so many things that I can't list them here. All I can say is that it was nice attending movies (Weta, Pixar, ILM, Dreamworks, etc), games (Crytek, Dice, Valve, etc) as well as researchers presentations. Now I can put a face on those names I often encounter when reading research papers or presentations.&lt;br /&gt;&lt;br /&gt;Here are some links with very interesting courses and presentations about graphics:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://repi.blogspot.com/2010/08/siggraph-2010-talks-by-dice.html"&gt;Dice presentations&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Advances in real-time 3D rendering &lt;a href="http://www.advances.realtimerendering.com/"&gt;course&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Beyond programmable shading &lt;a href="http://bps10.idav.ucdavis.edu/"&gt;course&lt;/a&gt;. (This year theme was really oriented towards future hardware evolution)&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;New&lt;/span&gt;: Physically Based Shading Models &lt;a href="http://renderwonk.com/publications/s2010-shading-course/"&gt;course&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;New&lt;/span&gt;: Stylized Rendering in Games &lt;a href="http://graphics.cs.williams.edu/courses/SRG10/"&gt;course&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;New&lt;/span&gt;: GI across Industries &lt;a href="http://www.graphics.cornell.edu/%7Ejaroslav/gicourse2010/index.htm"&gt;courses&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-9009665208209421772?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/9009665208209421772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/back-from-siggraph-2010.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/9009665208209421772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/9009665208209421772'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/08/back-from-siggraph-2010.html' title='Back from SIGGRAPH 2010'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-3849600789705057543</id><published>2010-07-22T13:09:00.003+02:00</published><updated>2010-07-22T13:35:24.397+02:00</updated><title type='text'>My Siggraph Schedule</title><content type='html'>&lt;div style="text-align: justify;"&gt;Here is my schedule:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sunday&lt;/span&gt;: Avatar in Depth,&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Monday&lt;/span&gt;: All about Avatar, Detailed Surfaces, Volume and Precipitation, Real-time Live Demo,&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Tuesday&lt;/span&gt;: Simulation in Production, Computer Animation Festival, Blowing $h!t up, Real-time Live Demo,&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wednesday&lt;/span&gt;: Advances in Real-Time Rendering in 3D Graphics and Games I and II,&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Thursday&lt;/span&gt;: Beyond Programmable Shading I and II.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;There is a lot of uncertainty for some sessions because many are overlapping with others I am interested in (hair rendering, stylized rendering, global illumination, physically based shading, etc). It is really hard to make my final choice.&lt;br /&gt;&lt;br /&gt;Moreover, two friends are presenting this year:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://nicolas.stoiber.free.fr/"&gt;&lt;span style="font-weight: bold;"&gt;Nicolas Stoiber&lt;/span&gt;&lt;/a&gt;, PhD student at Orange Labs like me: &lt;span style="font-style: italic;"&gt;The Mimic Game: Real-Time Recognition and  Imitation of Emotional  Facial Expressions.&lt;/span&gt; (He will write an article here about his very interesting work after SIGGRAPH)&lt;span style="font-style: italic;"&gt;,&lt;br /&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/name/nm3590655/"&gt;&lt;span style="font-weight: bold;"&gt;Guillaume François&lt;/span&gt;&lt;/a&gt;, shader writer at Weta Digital : &lt;span style="font-style: italic;"&gt;Importance Sampling for Production Rendering.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;I wish them good luck with their presentation. I hope one day I could contribute to SIGGRAPH to. Indeed, my PhD was not really suited for such graphic/animation research... Maybe during my future job!!&lt;br /&gt;&lt;br /&gt;I will post here about SIGGRAPH during the next week if I can find time between sessions and SIGGRAPH night parties. :)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-3849600789705057543?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/3849600789705057543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/07/my-siggraph-schedule.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3849600789705057543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3849600789705057543'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/07/my-siggraph-schedule.html' title='My Siggraph Schedule'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-4783279705668004335</id><published>2010-07-20T16:06:00.002+02:00</published><updated>2010-07-20T16:27:45.880+02:00</updated><title type='text'>OpenCL</title><content type='html'>&lt;div style="text-align: justify;"&gt;Before I even did something with CUDA, I have decided to move to OpenCL. Just because I prefer the GLSL-like approach to load program instead of using an additional dedicated compiler. I am close to finish my C++ library with nice classes encapsulating OpenCL objects (And I am using the C interface). It looks really like what I did for my Shader manager (like in the demos on my personal website). I will post it here soon in case someone want to get it and modify it. Also, choosing OpenCL is for the ability to use any platforms, not only nVidia. The current problem is that I don't have a single clue about how ATI parallel architecture is (their Stream Computing technology).&lt;br /&gt;&lt;br /&gt;In addition to a review and my PhD thesis I have to finish writing, I am also preparing my travel to Los Angeles for SIGGRAPH 2010. I will post my schedule tomorrow in a second post.&lt;br /&gt;&lt;br /&gt;Bonus:&lt;br /&gt;- a nice real-time CUDA ray-tracer called &lt;a href="http://igad.nhtv.nl/%7Ebikker/"&gt;brigade&lt;/a&gt;.&lt;br /&gt;- a new &lt;a href="http://blog.icare3d.org/2010/07/opengl-40-abuffer-v20-linked-lists-of.html"&gt;A-Buffer method &lt;/a&gt;using per-pixel linked list to manage dynamic allocation of pages containing depth layers. In OpenGL! :)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-4783279705668004335?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/4783279705668004335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/07/opencl.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4783279705668004335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4783279705668004335'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/07/opencl.html' title='OpenCL'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-8053889793103743908</id><published>2010-06-27T21:05:00.006+02:00</published><updated>2010-06-28T09:05:33.095+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics volumetric lines'/><title type='text'>Volumetric lines 2 + News</title><content type='html'>Hello!&lt;br /&gt;&lt;br /&gt;Sorry for the long time silence but I have been very busy recently: PhD writing, not accepted paper I have to modify, internship students to take care, researchers who want to use my engine, etc... Now it's better, I will have more free time by the end of the week.&lt;br /&gt;&lt;br /&gt;So what are the news! Volume Lines 2 demo is &lt;a href="http://sebastien.hillaire.free.fr/"&gt;&lt;span style="text-decoration: underline;"&gt;on-line&lt;/span&gt;&lt;/a&gt;. In fact, I have submitted it to GpuPro2 but it was not accepted: I expected this answer because indeed the method is pretty simple. The results are nicer than previous volumetric lines but it requires geometry shaders and it is more computationally expensive.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Also, I started to work in Virtual Textures few weeks ago. I have the low resolution feedback buffer working with required pages to load, indirection table, etc. Just need to load required pages from the disk to GPU &lt;span style="font-style: italic;"&gt;virtual &lt;/span&gt;memory in a separate thread together with a LRU cache. I will work again on it soon.&lt;br /&gt;&lt;br /&gt;The development of my light-pre pass renderer with relief mapping is... well... deferred. :/ I have a lot of optimization ideas and I hope I can show you more about it soon.&lt;br /&gt;&lt;br /&gt;Finally, I will go to Siggraph 2010 this year as an attendee! :) Many &lt;a href="http://www.siggraph.org/s2010/for_attendees/courses"&gt;courses &lt;/a&gt;and &lt;a href="http://www.siggraph.org/s2010/for_attendees/talks"&gt;talks &lt;/a&gt;to attend! It will be hard to attend every sessions I would like to but, I will do my best. I may talk about this conference, show some pictures and report about courses/talks on this blog. Maybe I will be able to meet some of you overthere! :D&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-8053889793103743908?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/8053889793103743908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/06/volumetric-lines-2-news.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/8053889793103743908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/8053889793103743908'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/06/volumetric-lines-2-news.html' title='Volumetric lines 2 + News'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-7202045305249755326</id><published>2010-06-01T21:52:00.003+02:00</published><updated>2010-06-01T22:21:20.588+02:00</updated><title type='text'>Knee deep in the dead</title><content type='html'>Some pointers on fast but pretty good reviews of old IdTech and their adaptions to iPhone!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fabiensanglard.net/wolf3d/index.php"&gt;Wolfenstein3D iPhone&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fabiensanglard.net/doomIphone/doomClassicRenderer.php"&gt;Doom PC&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fabiensanglard.net/doomIphone/index.php"&gt;Doom iPhone&lt;/a&gt;&lt;br /&gt;&lt;a href="http://fabiensanglard.net/quakeSource/index.php"&gt;Quake PC&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ah those &lt;a href="http://www.youtube.com/watch?v=bikRw6aN3ME&amp;amp;feature=related"&gt;good old days&lt;/a&gt;... I was so young when I played Doom the first time on a friend's computer. By the way, everyone should read Micheal Abrash's &lt;a href="http://www.amazon.com/Michael-Abrashs-Graphics-Programming-Special/dp/1576101746"&gt;Black Book &lt;/a&gt;full of anecdotes and in-depth details about Quake renderer algorithms. For instance, you would learn that John Carmack bet that he could implement dynamic lighting in the quake engine in less than an hour. Indeed, he failed but of only few minutes (3 to 7, I can't remember). But hell yeah! In an hour! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-7202045305249755326?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/7202045305249755326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/06/knee-deep-in-dead.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7202045305249755326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7202045305249755326'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/06/knee-deep-in-dead.html' title='Knee deep in the dead'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-4523329759975214299</id><published>2010-05-19T11:45:00.009+02:00</published><updated>2010-05-27T14:12:31.224+02:00</updated><title type='text'>Automatic CUDA optimizer</title><content type='html'>&lt;div style="text-align: justify;"&gt;A promising automatic CUDA optimizer has been proposed by Huiyang Zhou &lt;span style="font-style: italic;"&gt;et al.&lt;/span&gt; as you can read on his website&lt;a href="http://www.eecs.ucf.edu/%7Ezhou/pldi10.pdf"&gt;&lt;/a&gt;: &lt;a href="http://www.eecs.ucf.edu/%7Ezhou/"&gt;http://www.eecs.ucf.edu/~zhou/&lt;/a&gt; (with downloadable &lt;a href="http://www.eecs.ucf.edu/%7Ezhou/pldi10.pdf"&gt;paper&lt;/a&gt;). Also, they plan to extend their compiler to OpenCL and I am sure this could also be done for DX11 ComputeShader.&lt;br /&gt;&lt;br /&gt;The performance are interesting since they are able to achieved  as good to better performance as compared to manually optimized programs (something which takes time). Bonus: the code of this open source compiler will be available soon.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Update&lt;/span&gt;: the code is available &lt;a href="http://code.google.com/p/gpgpucompiler/"&gt;here&lt;/a&gt;. (&lt;a href="http://ompf.org/forum/viewtopic.php?f=16&amp;amp;t=1739"&gt;source&lt;/a&gt;)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-4523329759975214299?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/4523329759975214299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/05/automatic-cuda-optimizer.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4523329759975214299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4523329759975214299'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/05/automatic-cuda-optimizer.html' title='Automatic CUDA optimizer'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-8941838673117231967</id><published>2010-04-21T19:04:00.012+02:00</published><updated>2010-04-22T12:01:38.934+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics shadow light pre-pass'/><title type='text'>My Relief-Mapped Light Pre-Pass Renderer</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hi!&lt;br /&gt;&lt;br /&gt;Just to show you some progress I made concerning my new renderer: a light pre-pass renderer with relief-mapping over all surfaces! An important feature of this engine is that each texel in the virtual scene is unique. Indeed, no virtual texture mapping is used but simply large 4096*4096 textures! Because no virtual texturing is used, everything is resident in the GPU video memory.  Texture for dynamically added objects in the VE are allocated in dynamic texture atlases (using a quad-tree to manage texture space use). As a result, when designing a map (under Maya with my exporter), you have to find a good trade-off between texel density in world space and the size of your map. For me, it is important to have unique texel everywhere to achieve this &lt;a href="http://sebastien.hillaire.free.fr/demos/megamap/megamap.htm"&gt;kind of effects&lt;/a&gt; I made before.&lt;br /&gt;&lt;br /&gt;Yesterday, as visible on screen-shots, I have finished implementing Virtual Shadow Depth Cube map as described in ShaderX3. I may test later render to cube map using geometry shader.&lt;br /&gt;&lt;br /&gt;Thank to this light pre-pass engine, I will be able to easily implement/test several rendering methods like soft particles, light propagation volume, SSAO, etc... The only thing I miss in this engine is &lt;span style="font-style: italic;"&gt;spherical-harmonic&lt;/span&gt;- or &lt;span style="font-style: italic;"&gt;Source&lt;/span&gt;-like lightmaps (I wish I had a Beast or Turtle license for this). Currently, it is a Quake3-like lightmap: no directional information about incoming light on surfaces.&lt;br /&gt;&lt;br /&gt;With this engine I plan to develop a simple &lt;span style="font-style: italic;"&gt;Quake3-like-death-match-with-bots &lt;/span&gt;game as a simple demo. If some artist read this post and are interested in designing a death match map, please send me an email. The only thing you would need is Maya2008.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/S88wRciQ6xI/AAAAAAAAAFE/s7C_-lAMXtI/s1600/shadow1.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/S88wRciQ6xI/AAAAAAAAAFE/s7C_-lAMXtI/s320/shadow1.jpg" alt="" id="BLOGGER_PHOTO_ID_5462637949299518226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Black lightmap, two shadowed point light sources&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/S88wR80TiYI/AAAAAAAAAFM/PrJw0OrquIs/s1600/shadow2.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/S88wR80TiYI/AAAAAAAAAFM/PrJw0OrquIs/s320/shadow2.jpg" alt="" id="BLOGGER_PHOTO_ID_5462637957965121922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Black lightmap, two shadowed point light sources&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S88wSGvnQAI/AAAAAAAAAFU/8syldK9iRdY/s1600/shlighting.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S88wSGvnQAI/AAAAAAAAAFU/8syldK9iRdY/s320/shlighting.jpg" alt="" id="BLOGGER_PHOTO_ID_5462637960629796866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Grey lightmap: directional indirect lighting using&lt;br /&gt;spherical harmonic volume.&lt;br /&gt;For this, I use the library I have &lt;a href="http://sebastien.hillaire.free.fr/demos/sh/sh.htm"&gt;developed&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;In these screenshots, I only used a uniformly colored lightmap because I did not found time to generate one for this level. And also because I just finished adding point light sources support which will be used for direct illumination (lightmap will only contains emissive surface and global illumination). Next move is adding spot lights and optimizing shaders as well as the way meshes are processed by the engine.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Feel free to ask me some questions! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-8941838673117231967?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/8941838673117231967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/04/my-relief-mapped-light-pre-pass.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/8941838673117231967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/8941838673117231967'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/04/my-relief-mapped-light-pre-pass.html' title='My Relief-Mapped Light Pre-Pass Renderer'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9PzXIqCKLU8/S88wRciQ6xI/AAAAAAAAAFE/s7C_-lAMXtI/s72-c/shadow1.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-8663281353832487983</id><published>2010-04-09T18:59:00.035+02:00</published><updated>2010-04-12T13:34:25.796+02:00</updated><title type='text'>Spherical Harmonics Lighting</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hello everyone!&lt;br /&gt;&lt;br /&gt;It's time for another post on another rendering method! :) Currently, I am working on a light pre-pass renderer. I have just finished to include SH lighting inside.&lt;br /&gt;&lt;br /&gt;There exist several methods to compute the lighting solution of a virtual environment. Some methods are fully dynamic (IdTech4, CryEngine) or fully/partially static (idTech3, UnrealEngine). For fully dynamic methods, since the lighting solution is often unified, there is no problem to compute the lighting of dynamic objects. However, for static methods, there can be several problems.&lt;br /&gt;&lt;br /&gt;Let's take the case of an environment having its lighting solution stored in a static lightmap. When you add dynamic objects in the virtual environment, you have to compute their lighting solution. But how can we compute the light that reach each dynamic object using only their position/orientation and the surrounding environment?&lt;br /&gt;&lt;br /&gt;Common methods are using probe or light volume. For instance, in Quake3, a light volume is define for the entire environment and each Voxel stores an ambient color plus a directional colored source (&lt;a href="http://www.mralligator.com/q3/#Lightvols"&gt;Quake3 map Specs&lt;/a&gt;). Another solution is to used probes positioned by artists in the virtual environment (&lt;a href="http://www.valvesoftware.com/publications/2006/SIGGRAPH06_Course_ShadingInValvesSourceEngine.pdf"&gt;Source engine&lt;/a&gt;). At each of this location, irradiance can be computed and stored in several formats (SH, directional light, Source basis, etc).&lt;br /&gt;&lt;br /&gt;For my light pre-pass renderer, I decided to use a light volume having each Voxel containing a 2 bands spherical harmonics as visible on the next screen-shots.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try  {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/S79dZtw4v_I/AAAAAAAAAE0/bhutbPo9kM8/s1600/vamre+2010-04-09+13-54-22-03.bmp"&gt;&lt;img style="cursor: pointer; width: 190px; height: 152px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/S79dZtw4v_I/AAAAAAAAAE0/bhutbPo9kM8/s320/vamre+2010-04-09+13-54-22-03.bmp" alt="" id="BLOGGER_PHOTO_ID_5458183969759084530" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S79dZYX-0MI/AAAAAAAAAEs/uTUaanfxBkE/s1600/vamre+2010-04-09+13-54-23-48.bmp"&gt;&lt;img style="cursor: pointer; width: 190px; height: 152px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S79dZYX-0MI/AAAAAAAAAEs/uTUaanfxBkE/s320/vamre+2010-04-09+13-54-23-48.bmp" alt="" id="BLOGGER_PHOTO_ID_5458183964017479874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;A quake3 map with it's corresponding SH volume.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try  {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S79dNF1n8jI/AAAAAAAAAEE/WxQZKk6tsSc/s1600/vamre+2010-04-09+13-49-51-70.bmp"&gt;&lt;img style="cursor: pointer; width: 190px; height: 152px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S79dNF1n8jI/AAAAAAAAAEE/WxQZKk6tsSc/s320/vamre+2010-04-09+13-49-51-70.bmp" alt="" id="BLOGGER_PHOTO_ID_5458183752883106354" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/S79dNolrRkI/AAAAAAAAAEM/j4A3wIZBIVs/s1600/vamre+2010-04-09+13-49-53-51.bmp"&gt;&lt;img style="cursor: pointer; width: 190px; height: 152px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/S79dNolrRkI/AAAAAAAAAEM/j4A3wIZBIVs/s320/vamre+2010-04-09+13-49-53-51.bmp" alt="" id="BLOGGER_PHOTO_ID_5458183762211456578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;My test map with its corresponding SH volume.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;For each dynamic object, the SH volume is sampled on the CPU using tri-linear interpolation (using object's position). The final SH contribution is added during the final pass of the light pre-pass pipeline according to the normals stored in the g-buffer (And in my renderer, each surface is rendered using relief mapping).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S79dNwyk8xI/AAAAAAAAAEU/dg5Z6LrXMeY/s1600/vamre+2010-04-09+12-07-34-23.bmp"&gt;&lt;img style="cursor: pointer; width: 190px; height: 152px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S79dNwyk8xI/AAAAAAAAAEU/dg5Z6LrXMeY/s320/vamre+2010-04-09+12-07-34-23.bmp" alt="" id="BLOGGER_PHOTO_ID_5458183764413051666" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/S79dOA4xNcI/AAAAAAAAAEc/c43q9Jzt7II/s1600/vamre+2010-04-09+12-07-35-68.bmp"&gt;&lt;img style="cursor: pointer; width: 190px; height: 152px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/S79dOA4xNcI/AAAAAAAAAEc/c43q9Jzt7II/s320/vamre+2010-04-09+12-07-35-68.bmp" alt="" id="BLOGGER_PHOTO_ID_5458183768733988290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/S79dOV_P4jI/AAAAAAAAAEk/Qoo1jtu0yJw/s1600/vamre+2010-04-09+13-47-48-55.bmp"&gt;&lt;img style="cursor: pointer; width: 190px; height: 152px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/S79dOV_P4jI/AAAAAAAAAEk/Qoo1jtu0yJw/s320/vamre+2010-04-09+13-47-48-55.bmp" alt="" id="BLOGGER_PHOTO_ID_5458183774398308914" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/S79daVygdXI/AAAAAAAAAE8/fHyGYE7BMgI/s1600/vamre+2010-04-09+13-47-45-68.bmp"&gt;&lt;img style="cursor: pointer; width: 190px; height: 152px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/S79daVygdXI/AAAAAAAAAE8/fHyGYE7BMgI/s320/vamre+2010-04-09+13-47-45-68.bmp" alt="" id="BLOGGER_PHOTO_ID_5458183980503299442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;A dynamic object lit only by dynamic lights (left) and&lt;br /&gt;using the SH volume (right).&lt;br /&gt;Note that the lighting information stored in the lightmap now&lt;br /&gt;affects the object final look.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;The SH volume is computed as a pre-process. For each Voxel, I render the virtual environment in a cube map as in my previous &lt;a href="http://sebastien.hillaire.free.fr/demos/sh/sh.htm"&gt;demo&lt;/a&gt;. Finally, the surrounding colored environment stored in this cube map is transformed into the SH basis and stored in its corresponding SH volume Voxel.&lt;br /&gt;&lt;br /&gt;I plan to store only global illumination in the lightmap of my environments so the SH volume will only contains global illumination contribution. Then, direct lighting will be computed on static/dynamic objects using standard unified light rendering and shadowing. I also plan to add Crytek's light propagation volume later...&lt;br /&gt;&lt;br /&gt;I will continue to work on this engine in parallel to the writing of my PhD thesis, other little demos I have in my pipeline and future job research.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-8663281353832487983?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/8663281353832487983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/04/spherical-harmonics-lighting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/8663281353832487983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/8663281353832487983'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/04/spherical-harmonics-lighting.html' title='Spherical Harmonics Lighting'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9PzXIqCKLU8/S79dZtw4v_I/AAAAAAAAAE0/bhutbPo9kM8/s72-c/vamre+2010-04-09+13-54-22-03.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-3711961295670740979</id><published>2010-04-09T10:00:00.019+02:00</published><updated>2010-04-09T19:12:13.531+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics volumetric lines'/><title type='text'>New volumetric lines method</title><content type='html'>Hi readers,&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I have been working on many things recently. One of these things is a new volumetric line algorithm!&lt;br /&gt;My &lt;a href="http://sebastien.hillaire.free.fr/demos/simplevolumeline/vline.htm"&gt;previous method &lt;/a&gt;(basically the same as the one proposed in ShaderX7) was really fast and yields good looking result. I think that's why it was successfully used in the &lt;a href="http://pewpewgame.blogspot.com/2010/01/volumetric-lines-2.html"&gt;iPhone game PewPew&lt;/a&gt;. The only thing about this method is that you should avoid looking lines along their direction because, in this case, the trick I use become visible. Also, it was not possible to shade the line based on its thickness from current viewpoint.&lt;br /&gt;Another method has been proposed by &lt;a href="http://developer.download.nvidia.com/SDK/9.5/Samples/samples.html#cg_VolumeLine"&gt;Tristan Lorach &lt;/a&gt;to change volumetric lines appearance based on the angle between view and line directions. However, line appearance was represented by only 16 texture tiles and interpolation between them was visible.&lt;br /&gt;&lt;br /&gt;The new method I propose is able to render capsule like volumetric lines with any width and for any point of view, i.e. you can look inside/through the line. It also allows the use of thickness based visual effects.&lt;br /&gt;&lt;br /&gt;Here is the overall algorithm of my new method:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Extrude an OOBB around the volumetric line having the same width as the line. This is done using a geometry shader computing triangles strips from a single line.&lt;/li&gt;&lt;li&gt;Compute closest and farthest intersections between view ray and capsule using geometric  methods and/or quadratic functions resolution. This is done in the OOBB frame reference.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Compute thickness based on capsule intersections and environment depth map.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Shade the volumetric line based on it's thickness.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;It is pretty simple but efficient. I will not go into the details right now: there will be a post on my &lt;a href="http://sebastien.hillaire.free.fr/"&gt;website &lt;/a&gt;soon. I will just show some early screenshots from the current version:&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/S77e5QpOTxI/AAAAAAAAADM/0_mP_fOxfoU/s1600/FourierOpacityMappingDEBUG+2010-04-09+09-39-31-30.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/S77e5QpOTxI/AAAAAAAAADM/0_mP_fOxfoU/s320/FourierOpacityMappingDEBUG+2010-04-09+09-39-31-30.jpg" alt="" id="BLOGGER_PHOTO_ID_5458044873721401106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The capsules representing the volumetric lines&lt;br /&gt;filled with a white color&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S77e7EwEjHI/AAAAAAAAADs/jCDXYisTJWc/s1600/FourierOpacityMappingDEBUG+2010-04-09+09-48-31-09.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S77e7EwEjHI/AAAAAAAAADs/jCDXYisTJWc/s320/FourierOpacityMappingDEBUG+2010-04-09+09-48-31-09.jpg" alt="" id="BLOGGER_PHOTO_ID_5458044904888634482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;line radius can be changed&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S77e56nlzvI/AAAAAAAAADU/r1bHyDiLs20/s1600/FourierOpacityMappingDEBUG+2010-04-09+09-39-50-52.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S77e56nlzvI/AAAAAAAAADU/r1bHyDiLs20/s320/FourierOpacityMappingDEBUG+2010-04-09+09-39-50-52.jpg" alt="" id="BLOGGER_PHOTO_ID_5458044884988841714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Thickness based shading and intersection with the environment&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S77e6YYXmlI/AAAAAAAAADc/f739QCXspG8/s1600/FourierOpacityMappingDEBUG+2010-04-09+09-40-35-08.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S77e6YYXmlI/AAAAAAAAADc/f739QCXspG8/s320/FourierOpacityMappingDEBUG+2010-04-09+09-40-35-08.jpg" alt="" id="BLOGGER_PHOTO_ID_5458044892978059858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/S77e67i2O4I/AAAAAAAAADk/j894CJ37vjo/s1600/FourierOpacityMappingDEBUG+2010-04-09+09-40-39-22.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/S77e67i2O4I/AAAAAAAAADk/j894CJ37vjo/s320/FourierOpacityMappingDEBUG+2010-04-09+09-40-39-22.jpg" alt="" id="BLOGGER_PHOTO_ID_5458044902417251202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;View from above and under the ground&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S78tBUZaFvI/AAAAAAAAAD8/k_vqu4079UE/s1600/frominside.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S78tBUZaFvI/AAAAAAAAAD8/k_vqu4079UE/s320/frominside.jpg" alt="" id="BLOGGER_PHOTO_ID_5458130774074726130" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;The thickness is correct,&lt;br /&gt;even if the camera is inside the volumetric lines&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-3711961295670740979?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/3711961295670740979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/04/new-volumetric-lines-method.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3711961295670740979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3711961295670740979'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/04/new-volumetric-lines-method.html' title='New volumetric lines method'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9PzXIqCKLU8/S77e5QpOTxI/AAAAAAAAADM/0_mP_fOxfoU/s72-c/FourierOpacityMappingDEBUG+2010-04-09+09-39-31-30.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-4654439557085885167</id><published>2010-03-22T22:27:00.007+01:00</published><updated>2010-03-22T23:27:37.614+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GPU CUDA'/><title type='text'>Learning CUDA</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hi there!&lt;br /&gt;&lt;br /&gt;I did not post here for a while because I am very busy right now! I am working on my last paper for my PhD thesis and the deadline is by the end of march... I had do conduct an experiment, process some data and now I am parsing the ANOVA results and this in parallel to the writing of the paper. After this last deadline, I will begin to write my PhD manuscript in English! :) So exciting!&lt;br /&gt;&lt;br /&gt;During the few free time I found (almost at night), I test Battlefield Bad Company 2 with friends. Also, I implement spherical harmonic lighting for the purpose of ambient lighting of dynamically moving objects in the current  "3d engine" I develop (a light pre-pass renderer with relief-mapping on all surfaces and other cool features).&lt;br /&gt;&lt;br /&gt;And, as written in the title, I am currently learning CUDA! Indeed, I have bought the new book by David Kirk and &lt;span class="ptBrand"&gt;Wen-mei W. Hwu called&lt;a href="http://www.amazon.com/Programming-Massively-Parallel-Processors-Hands/dp/0123814723/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1269293221&amp;amp;sr=8-1"&gt; &lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.amazon.com/Programming-Massively-Parallel-Processors-Hands/dp/0123814723/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1269293221&amp;amp;sr=8-1"&gt;Programming  Massively Parallel Processors: A Hands-on Approach&lt;/a&gt;. I found this book well written and it nicely introduces CUDA. Good job authors! I only had a large overview of the CUDA architecture but now it is clear in details.&lt;br /&gt;The first thing I did is to take an example in the nVidia CUDA browser and make it independent of their &lt;span style="font-style: italic;"&gt;cutil &lt;/span&gt;library and others. To build and run my example, You should just need to install the &lt;a href="http://developer.nvidia.com/object/cuda_3_0_downloads.html"&gt;CUDA Toolkit&lt;/a&gt;. You can download this simple program &lt;a href="http://sebastien.hillaire.free.fr/tmp/CUDA_GL_EmptyProject.zip"&gt;HERE&lt;/a&gt;. It features a simple grid of points which height is computed using CUDA and stored in a VBO. The result is finally displayed using OpenGL. Only Debug and Release configurations work (32 and 64bits). Emulation profiles will not compile right now. Also, the CUDA code is nicely separated from the c++ code, something I did not find in every web examples. The other libraries used are glut, glu and glew (everything is in the zip file).&lt;br /&gt;So when I will have finished to read the book (and implemented their examples), I may start writing a little demo... :D&lt;br /&gt;&lt;br /&gt;See you soon!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-4654439557085885167?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/4654439557085885167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/03/learning-cuda.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4654439557085885167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4654439557085885167'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/03/learning-cuda.html' title='Learning CUDA'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-7575651892136211342</id><published>2010-02-19T16:58:00.007+01:00</published><updated>2010-02-19T17:23:17.758+01:00</updated><title type='text'>Trailer of Amnesia:The Dark Descent</title><content type='html'>&lt;div style="text-align: justify;"&gt;Trailer is &lt;a href="http://frictionalgames.blogspot.com/2010/02/closer-look-at-teaser-and-more.html"&gt;HERE&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This link features the teaser of the upcoming game from the talented developers of the &lt;span style="font-style: italic;"&gt;Penumbra&lt;/span&gt; series: &lt;span style="font-style: italic;"&gt;Amnesia: The Dark Descent&lt;/span&gt;. I have found this teaser really impressive. This is a good example of a nice sounds, visuals and interactions integration!&lt;br /&gt;&lt;br /&gt;You can also pre-order the game. And &lt;span id="PreOrderMessage"&gt;If they reach &lt;span class="text_important"&gt;2000&lt;/span&gt; pre-orders before the 31st of May, the game will get &lt;a href="http://www.amnesiagame.com/" onclick="PopText('Message1'); return false;"&gt;extra content&lt;/a&gt;!&lt;/span&gt; I did not played the Penumbra series excepted the demo but I want to try this one so I have pre-ordered the game.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Do not hesitate to spread the word!&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-7575651892136211342?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/7575651892136211342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/02/trailer-of-amnesiathe-dark-descent.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7575651892136211342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7575651892136211342'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/02/trailer-of-amnesiathe-dark-descent.html' title='Trailer of Amnesia:The Dark Descent'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-3493879987414599451</id><published>2010-02-12T11:06:00.016+01:00</published><updated>2010-02-16T17:20:07.530+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics shadow'/><title type='text'>Fourier Opacity Mapping rocks!</title><content type='html'>&lt;div style="text-align: justify;"&gt;The up-coming I3D conference on interactive 3D Graphics and Games will feature several interesting papers! For instance, this year will features papers such as " Cascaded Light Propagation Volumes for Real-Time Indirect Illumination" by Anton Kaplanyan (Crytek) or "Interactive Volume Caustics in Single-Scattering Media" by Wei Hu&lt;i&gt;.&lt;/i&gt; Another paper I found very interesting is the one proposed by Jon Jansen and Louis Bavoil (Yeah a French guy),  both at nVidia, called "Fourier Opacity Mapping". I could not resist implementing this nice paper.&lt;br /&gt;&lt;br /&gt;Fourier Opacity Mapping (FOM) is about approximating light attenuation through a volume made of particles. Let's consider a spot light: the authors proposed to reconstruct the light transmittance function along each ray using a Fourier series. The coefficients of the Fourier series are stored in the fourier opacity map in light view space. This map is generated using usual particles rendering with transformation in the Fourier basis of extinction coefficients in the fragment program. Then, when rendering the particles from view, the corrected light attenuation for each particle can be recovered. I will not go into the details here. You can read the paper &lt;a href="http://www.sci.utah.edu/%7Ebavoil/"&gt;here&lt;/a&gt; and my report on my personal &lt;a href="http://sebastien.hillaire.free.fr/"&gt;webpage&lt;/a&gt;. Indeed, you can see a video of my implementation of FOM &lt;a href="http://www.youtube.com/watch?v=yZqrpynYBMI"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here are some screenshots of my implementation (Top: without FOM, Bottom with FOM):&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/S3U0Gcb_7FI/AAAAAAAAACs/1Du-OPyPrVw/s1600-h/1-without.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/S3U0Gcb_7FI/AAAAAAAAACs/1Du-OPyPrVw/s320/1-without.bmp" alt="" id="BLOGGER_PHOTO_ID_5437309410437229650" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/S3U0GjkGO2I/AAAAAAAAAC0/qF-droDecAk/s1600-h/1-with.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/S3U0GjkGO2I/AAAAAAAAAC0/qF-droDecAk/s320/1-with.bmp" alt="" id="BLOGGER_PHOTO_ID_5437309412350245730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;A simple particle chain. Notice the correct order of light attenuation.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/S3U0FmipwrI/AAAAAAAAACc/G0iTdOVcKRk/s1600-h/c2-without.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/S3U0FmipwrI/AAAAAAAAACc/G0iTdOVcKRk/s320/c2-without.bmp" alt="" id="BLOGGER_PHOTO_ID_5437309395969622706" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/S3U0F1mMMtI/AAAAAAAAACk/ChB5No4MtRQ/s1600-h/c2-with.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/S3U0F1mMMtI/AAAAAAAAACk/ChB5No4MtRQ/s320/c2-with.bmp" alt="" id="BLOGGER_PHOTO_ID_5437309400010994386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Colored light attenuation through a particle block.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/S3VLLgI3SWI/AAAAAAAAAC8/QHOmK3vTQUk/s1600-h/r-without.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/S3VLLgI3SWI/AAAAAAAAAC8/QHOmK3vTQUk/s320/r-without.bmp" alt="" id="BLOGGER_PHOTO_ID_5437334786097498466" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/S3VLLy_HRRI/AAAAAAAAADE/vvj2c63LoeI/s1600-h/r-with.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/S3VLLy_HRRI/AAAAAAAAADE/vvj2c63LoeI/s320/r-with.bmp" alt="" id="BLOGGER_PHOTO_ID_5437334791156876562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;A grey smoke volume with some red particles. Notice that the red particles attenuate the light correctly: they only affect the color of particles that receive the light after them.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I know that my screenshots are not really eye candy but they show that this method is really efficient to simulate colored light extinction when passing through a volume of particle. Furthermore, if you want an exemple of good use by skilled artist, just have a look at the game &lt;span style="font-style: italic;"&gt;Batman Arkham Asylum&lt;/span&gt; which implements this method.&lt;br /&gt;&lt;br /&gt;~~UPDATE~~&lt;br /&gt;My report is finally available on my website together with demo and open source code. :)&lt;br /&gt;You need a recent video card to run the demo since it uses GLSL 1.5 and render data into 6 buffers in one pass.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-3493879987414599451?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/3493879987414599451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/02/fourier-opacity-mapping-rocks.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3493879987414599451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/3493879987414599451'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/02/fourier-opacity-mapping-rocks.html' title='Fourier Opacity Mapping rocks!'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9PzXIqCKLU8/S3U0Gcb_7FI/AAAAAAAAACs/1Du-OPyPrVw/s72-c/1-without.bmp' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-5759523533028264274</id><published>2010-01-19T17:21:00.046+01:00</published><updated>2010-01-25T16:49:08.194+01:00</updated><title type='text'>The engine I have developed for my PhD thesis</title><content type='html'>I am going to present you the engine I have develop for all my experiments during my PhD thesis in virtual reality. My subject is : "Using Gaze Tracking Systems and Visual Attention Models to Improve Interaction and Rendering of Virtual Environments". You can find and read more about my work on this &lt;a href="http://www.irisa.fr/bunraku/Sebastien.Hillaire/"&gt;webpage&lt;/a&gt;. As a consequence, I work a lot with gaze tracking systems and visual attention models but I am not going to extend more on this here.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;My PhD is about virtual reality so I needed an engine to render my Virtual Environments (VE)  and conduct my experiments. I like to do things on the GPU so almost everything is computed on GPU. I wanted the engine to display point and spot lights that could be static or dynamic. Also, I wanted the model inside the environment to be simulated physically. Every experiment I were going to be very different so I needed the engine to be easily script-able. Finally, I needed to replay all experiment sessions so I wanted to be able to replay recorded navigations and interactions to apply coslty algorithms in order to study users' gaze behavior. Finally, I wanted to be able to create my own VE very easily.&lt;br /&gt;&lt;br /&gt;I have developed this engine during 2 months in summer 2008 from scratch. If you would look at the code, you would see really a lot of classes with nice client interface accessible from the engine interface. But maybe you'll be sad to not see cache friendly structures such as structure of array. I have to admit, I did not take the time to optimize...&lt;br /&gt;&lt;br /&gt;I did not show this engine before because the virtual environment were used for double blinded publications in conference and journal.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 153);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;The virtual environment editor : Maya&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;At this time, I was learning Maya by myself: this is a pretty nice 3D modeling software simple to use for basic 3D. I decided to use it to create my VE. So I have developed my own exporter. It can export the whole geometry, point light, spot light as well as phong materials. Also, because I wanted to be able to use a lightmap, the world lightmap is rendered by &lt;span style="font-style: italic;"&gt;Mental Ray &lt;/span&gt;in HDR format. &lt;span style="font-style: italic;"&gt;This lightmap only contains global illumination! &lt;/span&gt;Thus, each light is rendered as usual (diffuse+specular) and, finally, global illumination is added to the scene. The drawback of this is that static lights cannot be turn off.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 153);"&gt;Phong Materials&lt;/span&gt;&lt;br /&gt;Here are the components of the Phong material I selected from the long list of Maya:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Diffuse color (can be a texture or a single color)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Specular color (can be a texture or a single color)&lt;/li&gt;&lt;li&gt;Specular exponent&lt;/li&gt;&lt;li&gt;Local normal (can be a texture or will be flat)&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 153);"&gt;Lights&lt;/span&gt;&lt;br /&gt;I wanted each light to be rendered the same way as when using Mental Ray. Thus I decided to use the same parameters as in Maya. Then I simply wrote a shader corresponding to point and spot light.&lt;br /&gt;Here are the spot light parameters:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Transformation matrix&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Color &amp;amp; intensity&lt;/li&gt;&lt;li&gt;Decay rate (in fact, I force this to be quadratic in maya and in the engine)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Penumbra angle &amp;amp; cone angle&lt;/li&gt;&lt;li&gt;Drop off&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt; Here are the point light parameters:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Position&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Color &amp;amp; intensity&lt;/li&gt;&lt;li&gt;Decay rate (in fact, I force this to be quadratic in Maya and in the engine)&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Indeed, a quadratic extinction of light intensity (close to what happens physically) means that each light can interact with ALL object in the VE. To avoid this problem, I compute the distance from the light center where a surface will receive only 5% of light. Then, I attenuate linearly the intensity from the center of the light to this distance. This methods allows me to compute an Axis-Aligned Bounding Box (AABB) for each lights to accelerate the rendering process by using frustum culling.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 153);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;The rendering engine&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;As an addicted to OpenGL, I decided to use OpenGL! :) I also decided that the engine will be based on the zPrePass architecture (like the Doom3 engine). So the final rendering is obtained by summing the contribution of each light by rendering each meshes they interact with (after a zPre pass). Static lights come from the exported VE and, then, dynamic lights can be added from the script. The engine behave similarly concerning static and dynamic meshes.&lt;br /&gt;&lt;br /&gt;For shadows, I use a simple depth map for spot lights and a &lt;span style="font-style: italic;"&gt;virtual depth cube map &lt;/span&gt;for point lights. I only use native hardware shadow map filtering. Not very eye candy but it is enough for the experiment I needed to conduct.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 153);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Physics&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I use the PhysX API from nVidia. Only rigid body interactions are simulated in my case. Each dynamic objects added to the simulation can be added to the PhysX engine if needed according to one of 4 shape type: bounding box, bounding sphere, convex or general triangle mesh.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 153);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Scripts&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;For the script, I chose Lua together with LuaBind (to simplify functions and classes registration).  From the script, you can add and manipulate light and model. The script can also receive mouse and keyboard signals and each frame, a specific update function is called. For instance, here is a small piece of Lua code I use to position a spot light to look like a flashlight the user is holding up:&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; if(flashLightOn==true)&lt;/code&gt;&lt;br /&gt;&lt;code&gt; then&lt;/code&gt;&lt;br /&gt;&lt;code&gt; local viewCam = getViewPointOrientPos();&lt;/code&gt;&lt;br /&gt;&lt;code&gt; local target = Vector3(0.0,0.0,-5.0);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; viewCam:transformBackFromLocalSpace(target);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; local origin = Vector3(-0.2,-0.1,0.0);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; viewCam:transformBackFromLocalSpace(origin);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; flashLight:setIntensity(10.0);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; flashLight:setPosTargetUp(origin,target,Vector3(0.0,1.0,0.0));&lt;/code&gt;&lt;br /&gt;&lt;code&gt; else&lt;/code&gt;&lt;br /&gt;&lt;code&gt; flashLight:setIntensity(0.0);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; end&lt;/code&gt;&lt;br /&gt;As an example, I have also developed some Lua classes that control some robot which follow a predefined path made of way points. I have to say that Lua is a very powerful and easy to use script language.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 153);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Record/Replay feature&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;My engine is able to record and replay navigation sessions in the VE. For each frame, I do not record everything. For instance, I only record the event when an dynamic object's position has been changed: everything is recorded as an event. I do not interpolate each frame because, for my experiments, I only need each frame that were displayed to the viewer.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 153);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Gaze-Tracking&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;My PhD is about gaze tracking so my engine takes into account gaze tracking. Currently, I have a class communicating with the TobiiX50 soft/hardware. This class is handled by a &lt;span style="font-style: italic;"&gt;GazeTrackerManager &lt;/span&gt;which allows to easily add support for another type of gaze tracking system.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 153);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Some Results&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The q3dm1 map in Maya during editing:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/S1X0WmohUDI/AAAAAAAAAB8/yj8j3m7Lrvs/s1600-h/q3dm1Maya.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 204px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/S1X0WmohUDI/AAAAAAAAAB8/yj8j3m7Lrvs/s320/q3dm1Maya.bmp" alt="" id="BLOGGER_PHOTO_ID_5428513595029803058" border="0" /&gt;&lt;/a&gt;The q3dm1 map rendered in my engine with HDR lightmap generated by &lt;span style="font-style: italic;"&gt;MentalRay &lt;/span&gt;(no lights here, everything is baked in the lightmap). The screenshot is a bit over-exposed due to the automatic luminosity adaptation (a lot of screen area are black).&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/S1X0PZdrA5I/AAAAAAAAAB0/-vGB9sD1PQs/s1600-h/q3dm1Engine.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_9PzXIqCKLU8/S1X0PZdrA5I/AAAAAAAAAB0/-vGB9sD1PQs/s320/q3dm1Engine.bmp" alt="" id="BLOGGER_PHOTO_ID_5428513471235556242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The house VE used in one of my experiment during editing in &lt;span style="font-style: italic;"&gt;Maya&lt;/span&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/S1X0a_JDtKI/AAAAAAAAACE/sXbwcvxr8Dk/s1600-h/maya+2010-01-19+18-24-06-46.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 235px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/S1X0a_JDtKI/AAAAAAAAACE/sXbwcvxr8Dk/s320/maya+2010-01-19+18-24-06-46.bmp" alt="" id="BLOGGER_PHOTO_ID_5428513670328202402" border="0" /&gt;&lt;/a&gt;The house VE rendered in my engine with HDR GI lightmap generated by MentalRay:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/S1X0gHIqPYI/AAAAAAAAACM/usk9y0fcRko/s1600-h/vamre+2010-01-19+18-25-24-59.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/S1X0gHIqPYI/AAAAAAAAACM/usk9y0fcRko/s320/vamre+2010-01-19+18-25-24-59.bmp" alt="" id="BLOGGER_PHOTO_ID_5428513758373363074" border="0" /&gt;&lt;/a&gt;A game where you have to destroy ships with your gaze:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/S1me624_W-I/AAAAAAAAACU/Ae1Nz5nEC3s/s1600-h/ad80ead54c6448c584649b82161ad568_tie+vs+x.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/S1me624_W-I/AAAAAAAAACU/Ae1Nz5nEC3s/s320/ad80ead54c6448c584649b82161ad568_tie+vs+x.JPG" alt="" id="BLOGGER_PHOTO_ID_5429545559775992802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A video is available on my &lt;a href="http://www.youtube.com/user/hillairesebastien"&gt;youtube space&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I am currently changing the zPrePass renderer for a Light-Pre Pass rendering process. I have to say that it is very interesting! I already have point lights working and performance are impressive! I will talk about this later but I have to try to publish something with it before. :)&lt;br /&gt;&lt;br /&gt;Do not hesitate if you have questions or if you want some piece of code. &lt;span style="font-style: italic;"&gt;I plan to release the source of this engine at the end of my PhD.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-5759523533028264274?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/5759523533028264274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2010/01/engine-i-have-developed-for-my-phd.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5759523533028264274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/5759523533028264274'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2010/01/engine-i-have-developed-for-my-phd.html' title='The engine I have developed for my PhD thesis'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9PzXIqCKLU8/S1X0WmohUDI/AAAAAAAAAB8/yj8j3m7Lrvs/s72-c/q3dm1Maya.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-2065136262003398821</id><published>2009-12-30T22:54:00.009+01:00</published><updated>2010-01-02T07:58:07.885+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology game'/><title type='text'>What do you think about OnLive?</title><content type='html'>&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="viddler" height="288" width="437"&gt;&lt;param name="movie" value="http://www.viddler.com/player/751c3d65/"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="flashvars" value="fake=1"&gt;&lt;embed src="http://www.viddler.com/player/751c3d65/" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" flashvars="fake=1" name="viddler" height="288" width="437"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Do you know &lt;a href="http://www.onlive.com/index.html"&gt;OnLive&lt;/a&gt;? It's a company that is going to provide a technology that will (?) allow people to play games on a computer or a tv (Hmm ok). The tricky part is the fact that you would not need a high-end PC (GPU, CPU, etc) to play, for instance, Crysis. Basically, their software will send your actions on input devices to their servers which will compute the image frames for you. Then, all these frames would be sent back to your computer as a video stream.&lt;br /&gt;&lt;br /&gt;The concept is very interesting : you just need to rent a server and you don't need to upgrade your computer. Also, I am sure that they will provide a game catalog like Steam does.&lt;br /&gt;&lt;br /&gt;However, to my opinion, this system will not work because:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;According to OnLive, you will have to be less than 1000 miles away from a server to play. As a result, they will need a lot of servers to provide *good* pings to costumers. It seems that they consider a ping of 80ms as the limit. So, quality of service will depend a lot on your distance to a server.&lt;/li&gt;&lt;li&gt;I am sure they have new efficient technologies to compress frames into a video stream but is their method lossless? What final resolution can you get? Full HD? (again, this will surely depends on your distance to a server)&lt;/li&gt;&lt;li&gt;As an avid player of FPS, I think that a target ping of 80ms is not enough. Even for a  RTS with a lot of micro-actions, fighting game or a car race game you will feel it. And I am not speaking about lags. If you don't play those kind of CPU/GPU time consuming games, may be you don't need a high-end hardware...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I really hope that I am wrong about this technology... Anyway, I wish the OnLive team "Good Luck"!!!  :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-2065136262003398821?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/2065136262003398821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2009/12/what-do-you-think-about-onlive.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/2065136262003398821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/2065136262003398821'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2009/12/what-do-you-think-about-onlive.html' title='What do you think about OnLive?'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-7623486895223192035</id><published>2009-12-22T14:47:00.008+01:00</published><updated>2009-12-30T23:44:42.235+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP graphics'/><title type='text'>Efficient OOP + Publications repositories</title><content type='html'>&lt;div style="text-align: justify;"&gt;A very interesting presentation has been en-lighted by &lt;a href="http://farrarfocus.blogspot.com/"&gt;Atom&lt;/a&gt;: &lt;a href="http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf"&gt;Pitfalls of Object Oriented Programming &lt;/a&gt;by Tony Albrecht from SCEE. I was aware of the problems exposed in this presentation, however, to my opinion, this is the best presentation so far that explains and details the &lt;span style="font-style: italic;"&gt;cach miss &lt;/span&gt;optimization problem on a simple example. I will not extend more on the presentation: it is clear enough. If you wonder what is a &lt;span style="font-style: italic;"&gt;Structure-Of-Array&lt;/span&gt; (in contrary to &lt;span style="font-style: italic;"&gt;Array-Of-Structure&lt;/span&gt;) and why some people says OOP can be considered as evil (the presentation expose one reason) you should read it now! :)&lt;br /&gt;&lt;br /&gt;This presentation can be found on &lt;a href="http://research.scee.net/presentations"&gt;SCEE presentation repository&lt;/a&gt;. Here are two more repositories I found very interesting: &lt;a href="http://www.valvesoftware.com/publications.html"&gt;Valve &lt;/a&gt;and &lt;a href="http://www.bungie.net/Inside/publications.aspx"&gt;Bungie&lt;/a&gt;. If you know other interesting publication repositories, please post them.&lt;br /&gt;&lt;br /&gt;Bonus: Siggraph 2009 course &lt;span style="font-style: italic;"&gt;Advances in Real-Time Rendering in 3D Graphics and Games&lt;/span&gt; &lt;a href="http://www.bungie.net/News/content.aspx?type=topnews&amp;amp;link=Siggraph_09"&gt;repository&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-7623486895223192035?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/7623486895223192035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2009/12/efficient-oop-presentation-repositories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7623486895223192035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7623486895223192035'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2009/12/efficient-oop-presentation-repositories.html' title='Efficient OOP + Publications repositories'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-6265051355075401935</id><published>2009-12-16T21:14:00.006+01:00</published><updated>2009-12-30T23:45:13.685+01:00</updated><title type='text'>News from France</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Since my last post, I am back in France! I was in Japan for a Japanese-French research collaboration during one month (November). Maybe I will speak about this work once it is published in a conference or journal. Anyway, I have to say that Japan is a really impressive country! So many place to visit! (temples, tokyo tower, etc). Also food is really good and not expensive! I really recommend traveling in Japan: people are really respectful and will help you even if they can't speak English. To my opinion, each gamer, game developer which travel to Japan should visit Akihabara (called "The electric town"). A lot of games, arcade games, electric shop with very low price, etc. You can even buy an old megadrive for 0.8 euro! :)&lt;br /&gt;&lt;br /&gt;Finally, I decided that it was a good time to change my computer. Indeed, my old graphics card caused me too much troubles: random colored pixels, triangles stretched to infinity (only with DirectX, not OpenGL) and even black death screens! I decided to buy hardware pieces that have a good performance/price ratio: Intel i5, geForceGTX275 as the main components.&lt;br /&gt;Now I plan to learn DirectX with this computer. I am using OpenGL for 7 years and it is time for me to learn something else.&lt;br /&gt;&lt;br /&gt;See you next news!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-6265051355075401935?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/6265051355075401935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2009/12/news.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6265051355075401935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6265051355075401935'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2009/12/news.html' title='News from France'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-9216215208426530485</id><published>2009-11-27T06:59:00.006+01:00</published><updated>2009-11-28T16:06:08.391+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics volumetric lines'/><title type='text'>Volumetric lines</title><content type='html'>&lt;div style="text-align: justify;"&gt;Four years ago, A method to render volumetric lines has been proposed by Tristan Lorach at nVidia (&lt;a href="http://developer.download.nvidia.com/SDK/9.5/Samples/samples.html#cg_VolumeLine"&gt;link&lt;/a&gt;). I have found this method very interesting but, to my opinion, texture interpolation simulating change in point of view were too visible. Three years ago, I decided to propose my own volumetric line rendering method as visible on my &lt;a href="http://sebastien.hillaire.free.fr/demos/simplevolumeline/vline.htm"&gt;website&lt;/a&gt;. My method does not allow as much visual effect as the one of nVidia but at least you can change the appearance of lines using a simple 2D square texture. Each line is rendered using 6 triangles and all computations are done in the vertex program. The drawback with my method is that when lines' width is very large and their direction is parrallel to the view direction, the trick I use is visible. However, for line which are not large, this problem is rarely noticeable.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sebastien.hillaire.free.fr/demos/simplevolumeline/taille%202.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 299px;" src="http://sebastien.hillaire.free.fr/demos/simplevolumeline/taille%202.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Screen shot of the volumetric lines.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Because the line on the bottom is large, the trick I use is visible.&lt;/span&gt;&lt;a style="font-weight: bold;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sebastien.hillaire.free.fr/demos/simplevolumeline/tex%203.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 299px;" src="http://sebastien.hillaire.free.fr/demos/simplevolumeline/tex%203.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;In this screenshot, another appearance texture is applied&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Recently, an article published in &lt;a href="http://www.shaderx7.com/TOC.html"&gt;ShaderX7 &lt;/a&gt;proposed a method very similar, if not same, to the one I propose. I should have written an article before... At that time, I was beginning my Master study and I cannot imagine this would be possible.&lt;br /&gt;&lt;br /&gt;Many people write to me in order to discuss this method, and I am really happy to see people using it. I am pleased to announce that my method is use in an iPhone game developed by a French guy as you can read on one if his &lt;a href="http://pewpewgame.blogspot.com/2009/07/volumetric-lines.html"&gt;post&lt;/a&gt; and &lt;a href="http://pewpewgame.blogspot.com/"&gt;blog&lt;/a&gt;. :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-9216215208426530485?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/9216215208426530485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/volumetric-lines.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/9216215208426530485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/9216215208426530485'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/volumetric-lines.html' title='Volumetric lines'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-7795955572761953893</id><published>2009-11-26T05:06:00.010+01:00</published><updated>2009-11-28T16:06:47.392+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics screen image space survey'/><title type='text'>Screen-space buzz survey</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;This post exposes a survey of screen-space methods proposed in the field of CG. I will not go into the details of these methods since that is not the purpose of this post  but I invite you to read these articles since, to my opinion, they are very interesting.&lt;/span&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Screen-space ambient occlusion&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;Many methods have been proposed to render ambient occlusion. The one proposed by Crytek in 2007 became very popular and was named “Screen-Space Ambient Occlusion”. The method was designed to be used in real time in Crysis game.&lt;span style="" lang="EN-US"&gt; To my opinion, the real first paper to propose screen space ambient occlusion was proposed by Luft et al.: Image Enhancement by Unsharp Masking the Depth Buffer.&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; Then, a High quality (but slower) version was proposed by &lt;a href="http://www.sci.utah.edu/%7Ebavoil/"&gt;Louis Bavoil et Miguel Sainz (nVidia)&lt;/a&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;.&lt;br /&gt;It is interesting to note that the screen-space name became more and more popular and started some kind of Buzz! Also, it seems that screen-space and image-space are synonyms. Am I correct?&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;For more links on &lt;span&gt;screen-space &lt;/span&gt;ambient-occlusion please refer to this wikipedia &lt;a href="http://en.wikipedia.org/wiki/Screen_Space_Ambient_Occlusion"&gt;article&lt;/a&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;. Also, many methods have been published in &lt;a href="http://www.shaderx7.com/TOC.html"&gt;ShaderX7&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Screen-space global illumination&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Crytek also proposed a screen-space global illumination method. However, I am not aware of the algorithms they use. I suppose it is a variant of their SSAO using sampled surfaces color as well as its normal direction in order to take into account relative surfaces orientation (refer to their presentation about light propagation volume).&lt;br /&gt;Also, researchers proposed the &lt;a href="http://www.youtube.com/watch?v=8bRkyG3R-eI"&gt;screen-space directional occlusion&lt;/a&gt; method to compute real time global illumination.&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Screen-space fluid and water&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Even fluid got &lt;span&gt;screen-spac-&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;ed&lt;/span&gt;!&lt;br /&gt;Concerning SPH fluid simulation, two methods have been proposed as an alternative to marching-cube-like methods, namely : &lt;a href="http://www.matthiasmueller.info/publications/screenSpaceMeshes.pdf"&gt;Screen-Space Meshes &lt;/a&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;and &lt;a href="http://www.cs.rug.nl/%7Ewladimir/fluidcurvature.pdf"&gt;Screen-Space Fluids Rendering with Curvature Flow&lt;/a&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;.&lt;br /&gt;To render ocean, a &lt;a href="http://www.crytek.com/fileadmin/user_upload/inside/presentations/gdc2008/GDC08_SousaT_CrysisEffects.ppt"&gt;&lt;span&gt;screen-space&lt;/span&gt; grid projection &lt;/a&gt;is used in the Cry Engine&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;. Another screen-space approach has also been proposed on &lt;a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=482962"&gt;gamedev &lt;/a&gt;with really nice looking results&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Screen-space light shaft&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;One article about this in &lt;a href="http://http.developer.nvidia.com/GPUGems3/gpugems3_ch13.html"&gt;GPU Gems 3&lt;/a&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;. &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;Ok they used the word post-process but after reading the article, it sounds a lot like &lt;span&gt;screen-space&lt;/span&gt; to me!&lt;br /&gt;It seems that Crytek uses a similar methods. Obviously, they really love &lt;span&gt;screen-space&lt;/span&gt; methods! :). I agree with them since the methods they use are fast and result in eye-candy effects!&lt;/span&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Image-space sub surface scattering&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;And last but not the least, &lt;a href="http://www.computer.org/portal/web/csdl/doi/10.1109/MCG.2009.11"&gt;Image-Space Subsurface Scattering for Interactive Rendering of Deformable Translucent Objects&lt;/a&gt;.&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Wouhaou! So many screen-space methods! I wonder what’s next… Also, you can read this other interesting discussion I have found&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;a href="http://c0de517e.blogspot.com/2009/08/this-years-buzzword-image-space.html"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; to complete this survey&lt;a href="http://c0de517e.blogspot.com/2009/08/this-years-buzzword-image-space.html"&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-7795955572761953893?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/7795955572761953893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/screen-space-buzz-survey.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7795955572761953893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7795955572761953893'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/screen-space-buzz-survey.html' title='Screen-space buzz survey'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-6417614969667000561</id><published>2009-11-24T03:58:00.014+01:00</published><updated>2009-12-30T23:46:30.693+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics global illumination'/><title type='text'>My first attempt to global illumination</title><content type='html'>&lt;div style="text-align: justify;"&gt;I was really impressed by the work of Anton Kaplanyan from Crytek on light propagation volume (LPV) for massive lighting and global illumination! So I decided to do a quick test implementation of this method to experiment it by myself. Here are the  result:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9PzXIqCKLU8/SwtPr9u-joI/AAAAAAAAAAw/3RCWN5ucBA8/s1600/DIRECTonly.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_9PzXIqCKLU8/SwtPr9u-joI/AAAAAAAAAAw/3RCWN5ucBA8/s320/DIRECTonly.bmp" alt="" id="BLOGGER_PHOTO_ID_5407503394312982146" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Direct lighting&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9PzXIqCKLU8/SwtP5bBaorI/AAAAAAAAAA4/f7B7osgx-PQ/s1600/DIRECT%2BGI.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_9PzXIqCKLU8/SwtP5bBaorI/AAAAAAAAAA4/f7B7osgx-PQ/s320/DIRECT%2BGI.bmp" alt="" id="BLOGGER_PHOTO_ID_5407503625513247410" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Direct lighting + global illumination&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9PzXIqCKLU8/SwtQDzLdQOI/AAAAAAAAABA/0Sd2ndZXU-w/s1600/GIonly.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_9PzXIqCKLU8/SwtQDzLdQOI/AAAAAAAAABA/0Sd2ndZXU-w/s320/GIonly.bmp" alt="" id="BLOGGER_PHOTO_ID_5407503803796504802" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Global illumination only&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9PzXIqCKLU8/SwtQMIeSxaI/AAAAAAAAABI/tHwBuPQxl50/s1600/Exagerated+GI.bmp"&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/_9PzXIqCKLU8/SwtQMIeSxaI/AAAAAAAAABI/tHwBuPQxl50/s320/Exagerated+GI.bmp" alt="" id="BLOGGER_PHOTO_ID_5407503946951607714" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Global illumination x2&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;As a quick test, I considered only one LPV aligned on the AABB of a single object (no cascaded LPV). The LPV is  one voxel larger than the AABB in order to avoid artifact at borders. Then, I just apply the LPV algorithm discribed in the white paper using virtual point lights and co. As I said, this is a basic test implementation so no SH gradients are used to avoid back face lighting and other artifacts.&lt;br /&gt;&lt;br /&gt;The light is a simple spot without shadows.&lt;br /&gt;&lt;br /&gt;It is interesting to note that without high frequency detailed texture, the GI lighting have a "square" look mostly due to the Cartesian cubic sampling. Indeed it seems that this is not visible with nice textures and normal mapping, as you can see on the screen-shots presented in their white paper.&lt;br /&gt;&lt;br /&gt;Because this is a quick test, the code is somewhat ugly :-|, excepted the class to manage the unfolded volumetric texture. That's why I'm not going to publish it. If you are still interested, send me a mail.&lt;br /&gt;&lt;br /&gt;The unfolded volumetric texture I have developed is visible on the bottom of the screenshots. Basically, it represents all slices of the 3D texture. Considering LPV, I also have included a black border color between each slice. Thus, in the shader, I do not have to test if my border samples come from the right slice during the gathering process. However, one step of the gathering process involves now rendering a quad overlapping each unfolded slice (one quad per slice) and not overlapping the black borders.&lt;br /&gt;&lt;br /&gt;Ok I could give you computation time for each step of the method but as I said the code is note optimized, there is still a lot of tests (even in shaders!) and I am on a laptop PC...&lt;br /&gt;&lt;br /&gt;Next step: implement  this method as presented in the paper with cascaded LPV, importance sampling of virtual point lights, etc. I plan to implement this in my small engine I am using now for my PhD (will speak about it later). I don't know when I will do this since the pressure increases as the end of my PhD come closer.&lt;br /&gt;&lt;br /&gt;Thanks for reading!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-6417614969667000561?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/6417614969667000561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/my-first-attempt-to-global-illumination.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6417614969667000561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/6417614969667000561'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/my-first-attempt-to-global-illumination.html' title='My first attempt to global illumination'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9PzXIqCKLU8/SwtPr9u-joI/AAAAAAAAAAw/3RCWN5ucBA8/s72-c/DIRECTonly.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-4462318907921610642</id><published>2009-11-23T05:51:00.010+01:00</published><updated>2010-01-17T19:12:54.697+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game job tip'/><title type='text'>Small tips that could help to get into the game industry</title><content type='html'>&lt;div style="text-align: justify;"&gt;As I said in my welcome post, I would like to get into the game industry after my PhD. If it is your case, you should read this post...&lt;br /&gt;&lt;br /&gt;As you may have noticed, I have a personal web site where I share my work with everyone. All source code of my demos and applications are available. When I started this web site, it was to do like Humus. I really appreciated the demo he developed and the fact that he is sharing his work with the community. It turns out to be a good portfolio...&lt;br /&gt;&lt;br /&gt;Since 2008, I have received 3 serious job offers from game studios (2 of them being very well-known). Unfortunately, I was busy with my PhD but they told me to contact them again later. It seems that game developers in these studios browse the web to find some interesting developers and then report to the HR department.&lt;br /&gt;&lt;br /&gt;I did a phone interview in english with the lead graphic developer of one of these studios during 2h! A really great guy which speak at Siggraph sometimes. I was really impressed because for me getting in touch with this studio was something unreachable! (NB: for a first interview, it turns out to be quite good but it could have been way better. I have to learn and work more!!!)&lt;br /&gt;This studio even contact me a second time! I'm going on site at the beginning of 2010 for another interview. Awesome.&lt;br /&gt;&lt;br /&gt;I will not reveal which studios contact me to not break any chances to get in. Follow this blog to know where I will land! :)&lt;br /&gt;&lt;br /&gt;OK, here are my tips:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;have a website where you show your personal work. But rendering two triangles with bump mapping is not enough. You need to implement more advanced rendering methods and maybe try to improve on it. Also, show some applications you did (games, editors engines, etc). Concerning my web site, I think it would be better with more applications or projects. And also with a cleaner presentation/appearance.&lt;/li&gt;&lt;li&gt;do not hesitate to post your work on &lt;a href="http://www.gamedev.net/"&gt;GameDev&lt;/a&gt;. Or other website with picture of the day.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;I hope this will help concerned people.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-4462318907921610642?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/4462318907921610642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/small-tips-that-could-help-to-get-into.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4462318907921610642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/4462318907921610642'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/small-tips-that-could-help-to-get-into.html' title='Small tips that could help to get into the game industry'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-595994106258820418.post-7017417624497714416</id><published>2009-11-23T03:17:00.007+01:00</published><updated>2009-12-30T23:47:45.495+01:00</updated><title type='text'>Hello world!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Welcome on my first blog!&lt;br /&gt;&lt;br /&gt;Let me introduce myself: my name is Sébastien Hillaire I am a french PhD student in virtual reality at INRIA and Orange Labs at Rennes. I will defend my PhD by the end of 2010.&lt;br /&gt;&lt;br /&gt;After, I would like to get in the game industry as a graphic developer. At home, when I'm not playing guitar or games, I really like to develop some graphics related algorithm. For some examples of my work, check my personal website: &lt;a href="http://sebastien.hillaire.free.fr/"&gt;sebastien.hillaire.free.fr&lt;/a&gt;. I am always available to discuss about graphics. Some people mail me about my demos and I am really happy to help them.&lt;br /&gt;&lt;br /&gt;As I said, I really enjoy playing games! If you want to be a game developer, you have to play games to try new gameplay, see new rendering methods, etc. My favorite game style is FPS. The game I have played the most is Quake3Arena. For me, this is THE perfect simple skill-based gameplay!! I have also really appreciated the FarCry1/Crysis game for the awesome graphics, gameplay possibility and feeling of liberty you get. More recently, another game got my attention: Left4Dead. The cooperative gameplay in this game is just... I don't know which word I could use because this is such a good gameplay idea!&lt;br /&gt;I hope to see more games like these in the future.&lt;br /&gt;&lt;br /&gt;On this blog, I will talk about my PhD experience, graphics related stuff (demo, research papers, etc) and games development.&lt;br /&gt;&lt;br /&gt;Ok, I think this is all for the welcome/introduction post! I hope I will be able to make this blog as interesting as those I follow.&lt;br /&gt;&lt;br /&gt;See you soon,&lt;br /&gt;&lt;br /&gt;Seb&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/595994106258820418-7017417624497714416?l=sebh-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sebh-blog.blogspot.com/feeds/7017417624497714416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/hello-world.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7017417624497714416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/595994106258820418/posts/default/7017417624497714416'/><link rel='alternate' type='text/html' href='http://sebh-blog.blogspot.com/2009/11/hello-world.html' title='Hello world!'/><author><name>sebh</name><uri>http://www.blogger.com/profile/14650504326449432531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_9PzXIqCKLU8/Swn9RFfep3I/AAAAAAAAAAM/Rn7IU5j3pJk/s1600-R/sebh.jpg'/></author><thr:total>1</thr:total></entry></feed>
