<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-595994106258820418</atom:id><lastBuildDate>Sun, 07 Apr 2013 11:11:43 +0000</lastBuildDate><category>graphics shadow</category><category>dynamixyz graphics skin rendering environment lighting spherical harmonics</category><category>graphics shadow light pre-pass</category><category>graphics volumetric lines</category><category>game job tip</category><category>Dynamixyz graphics eye iris light scattering</category><category>technology game</category><category>news links</category><category>graphics screen image space survey</category><category>PhD job random</category><category>graphics eye single scattering</category><category>GPU CUDA</category><category>graphics global illumination</category><category>OOP graphics</category><category>Graphics Best Fit Normal Crytek</category><title>Sebh's blog</title><description>Graphics and Games development</description><link>http://sebh-blog.blogspot.com/</link><managingEditor>noreply@blogger.com (sebh)</managingEditor><generator>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-5664467568236949151</guid><pubDate>Sun, 24 Jul 2011 16:38:00 +0000</pubDate><atom:updated>2011-07-24T18:45:41.494+02:00</atom:updated><title>Electricity flow material</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2011/07/electricity-flow-material.html</link><author>noreply@blogger.com (sebh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-5817026720432736794</guid><pubDate>Sun, 26 Jun 2011 11:50:00 +0000</pubDate><atom:updated>2011-06-26T14:10:25.850+02:00</atom:updated><title>PhD 3D Engine - Conclusion</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2011/06/phd-3d-engine-conclusion.html</link><author>noreply@blogger.com (sebh)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-7744337058065191044</guid><pubDate>Fri, 24 Jun 2011 19:19:00 +0000</pubDate><atom:updated>2011-06-24T21:21:52.497+02:00</atom:updated><title>OpenCL Slisesix</title><description>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.</description><link>http://sebh-blog.blogspot.com/2011/06/opencl-slisesix.html</link><author>noreply@blogger.com (sebh)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-3214671766471015332</guid><pubDate>Fri, 10 Jun 2011 08:00:00 +0000</pubDate><atom:updated>2011-06-10T10:24:17.790+02:00</atom:updated><title>OpenCL demo of Iniguo Quilez slisesix - SOON</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2011/06/opencl-demo-of-iniguo-quilez-slisesix.html</link><author>noreply@blogger.com (sebh)</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></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-4518884946159713467</guid><pubDate>Tue, 10 May 2011 11:27:00 +0000</pubDate><atom:updated>2011-05-15T11:50:14.588+02:00</atom:updated><title>New website online - Still no 3D stuff... :-/</title><description>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. ;)</description><link>http://sebh-blog.blogspot.com/2011/05/new-website-online-still-no-3d-stuff.html</link><author>noreply@blogger.com (sebh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-5973350851180648229</guid><pubDate>Sat, 02 Apr 2011 13:04:00 +0000</pubDate><atom:updated>2011-04-02T15:38:30.609+02:00</atom:updated><title>More updates coming soon</title><description>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</description><link>http://sebh-blog.blogspot.com/2011/04/more-updates-coming-soon.html</link><author>noreply@blogger.com (sebh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-739270114557171336</guid><pubDate>Tue, 21 Dec 2010 12:33:00 +0000</pubDate><atom:updated>2010-12-27T13:58:34.011+01:00</atom:updated><title>Symbolic computations</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/12/symbolic-computations.html</link><author>noreply@blogger.com (sebh)</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></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-6508973770157675393</guid><pubDate>Sun, 19 Dec 2010 20:59:00 +0000</pubDate><atom:updated>2010-12-19T22:02:59.156+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Dynamixyz graphics eye iris light scattering</category><title>Eye rendering</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/12/eye-rendering_19.html</link><author>noreply@blogger.com (sebh)</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></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-6152328430487959268</guid><pubDate>Sun, 12 Dec 2010 17:54:00 +0000</pubDate><atom:updated>2010-12-15T16:59:17.074+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>dynamixyz graphics skin rendering environment lighting spherical harmonics</category><title>Skin rendering - environment lighting</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/12/skin-rendering-environment-lighting.html</link><author>noreply@blogger.com (sebh)</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></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-6807501566307369664</guid><pubDate>Sat, 04 Dec 2010 21:13:00 +0000</pubDate><atom:updated>2010-12-05T18:45:32.190+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>GPU CUDA</category><category domain='http://www.blogger.com/atom/ns#'>news links</category><title>Books + interesting CUDA facts</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/12/books-interesting-cuda-facts.html</link><author>noreply@blogger.com (sebh)</author><thr:total>8</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-7143926555301327173</guid><pubDate>Tue, 26 Oct 2010 21:14:00 +0000</pubDate><atom:updated>2010-10-28T23:14:40.308+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Graphics Best Fit Normal Crytek</category><title>Best Fit Normal Map Generator + Source Code</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/10/best-fit-normal-map-generator.html</link><author>noreply@blogger.com (sebh)</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></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-5096420174563244620</guid><pubDate>Sat, 23 Oct 2010 20:00:00 +0000</pubDate><atom:updated>2010-10-28T20:02:58.697+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>news links</category><title>Some more links</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/10/some-more-links.html</link><author>noreply@blogger.com (sebh)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-685756069823448940</guid><pubDate>Wed, 13 Oct 2010 19:43:00 +0000</pubDate><atom:updated>2010-10-14T22:37:25.255+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>PhD job random</category><title>News and random links</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/10/news-and-random-links.html</link><author>noreply@blogger.com (sebh)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-5257506506943920367</guid><pubDate>Tue, 31 Aug 2010 17:43:00 +0000</pubDate><atom:updated>2010-09-03T13:38:48.993+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>graphics eye single scattering</category><title>Eye rendering - first try</title><description>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.</description><link>http://sebh-blog.blogspot.com/2010/08/eye-rendering-first-try.html</link><author>noreply@blogger.com (sebh)</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>7</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-7994188518750326087</guid><pubDate>Fri, 13 Aug 2010 07:12:00 +0000</pubDate><atom:updated>2010-08-18T16:31:37.825+02:00</atom:updated><title>Quackecon 2010: Carmack's keynote</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/08/quackecon-2010.html</link><author>noreply@blogger.com (sebh)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-707677895236850220</guid><pubDate>Thu, 12 Aug 2010 11:51:00 +0000</pubDate><atom:updated>2010-08-13T09:21:00.906+02:00</atom:updated><title>BFN: about Crytek's approach</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/08/bfn-about-cryteks-approach.html</link><author>noreply@blogger.com (sebh)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-4463517843806614985</guid><pubDate>Sun, 08 Aug 2010 16:36:00 +0000</pubDate><atom:updated>2010-08-09T18:23:54.229+02:00</atom:updated><title>Best Fit Normals: playing with the bias vector</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/08/best-fit-normals-playing-with-bias.html</link><author>noreply@blogger.com (sebh)</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></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-3956075484349427355</guid><pubDate>Wed, 04 Aug 2010 12:00:00 +0000</pubDate><atom:updated>2010-08-06T09:43:21.357+02:00</atom:updated><title>Crytek's Best Fit Normals</title><description>&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.</description><link>http://sebh-blog.blogspot.com/2010/08/cryteks-best-fit-normals.html</link><author>noreply@blogger.com (sebh)</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></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-9009665208209421772</guid><pubDate>Sun, 01 Aug 2010 20:21:00 +0000</pubDate><atom:updated>2010-08-05T11:51:54.976+02:00</atom:updated><title>Back from SIGGRAPH 2010</title><description>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;</description><link>http://sebh-blog.blogspot.com/2010/08/back-from-siggraph-2010.html</link><author>noreply@blogger.com (sebh)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-3849600789705057543</guid><pubDate>Thu, 22 Jul 2010 11:09:00 +0000</pubDate><atom:updated>2010-07-22T13:35:24.397+02:00</atom:updated><title>My Siggraph Schedule</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/07/my-siggraph-schedule.html</link><author>noreply@blogger.com (sebh)</author><thr:total>4</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-4783279705668004335</guid><pubDate>Tue, 20 Jul 2010 14:06:00 +0000</pubDate><atom:updated>2010-07-20T16:27:45.880+02:00</atom:updated><title>OpenCL</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/07/opencl.html</link><author>noreply@blogger.com (sebh)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-8053889793103743908</guid><pubDate>Sun, 27 Jun 2010 19:05:00 +0000</pubDate><atom:updated>2010-06-28T09:05:33.095+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>graphics volumetric lines</category><title>Volumetric lines 2 + News</title><description>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;</description><link>http://sebh-blog.blogspot.com/2010/06/volumetric-lines-2-news.html</link><author>noreply@blogger.com (sebh)</author><thr:total>5</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-7202045305249755326</guid><pubDate>Tue, 01 Jun 2010 19:52:00 +0000</pubDate><atom:updated>2010-06-01T22:21:20.588+02:00</atom:updated><title>Knee deep in the dead</title><description>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! :)</description><link>http://sebh-blog.blogspot.com/2010/06/knee-deep-in-dead.html</link><author>noreply@blogger.com (sebh)</author><thr:total>6</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-4523329759975214299</guid><pubDate>Wed, 19 May 2010 09:45:00 +0000</pubDate><atom:updated>2010-05-27T14:12:31.224+02:00</atom:updated><title>Automatic CUDA optimizer</title><description>&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;</description><link>http://sebh-blog.blogspot.com/2010/05/automatic-cuda-optimizer.html</link><author>noreply@blogger.com (sebh)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-595994106258820418.post-8941838673117231967</guid><pubDate>Wed, 21 Apr 2010 17:04:00 +0000</pubDate><atom:updated>2010-04-22T12:01:38.934+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>graphics shadow light pre-pass</category><title>My Relief-Mapped Light Pre-Pass Renderer</title><description>&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! :)</description><link>http://sebh-blog.blogspot.com/2010/04/my-relief-mapped-light-pre-pass.html</link><author>noreply@blogger.com (sebh)</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></item></channel></rss>