<?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-3849594599759469528</id><updated>2012-02-16T23:40:43.967+08:00</updated><title type='text'>MageDx 3D Graphics Engine</title><subtitle type='html'>Recreating the beauty of reality with 0s and 1s</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-7466339240311356035</id><published>2011-07-31T12:08:00.014+08:00</published><updated>2011-11-11T13:51:39.137+08:00</updated><title type='text'>Fast Approximate Anti-Aliasing (FXAA)</title><content type='html'>For the past one year, screen space anti-aliasing techniques has been receiving more research attention, mostly due to the rapid adoption of  deferred lighting/shading (&lt;i&gt;where MSAA is not always applicable&lt;/i&gt;) in modern rendering engines. The latest variant of these techniques such as MLAA, DLAA, and FXAA delivers comparable quality anti-aliasing at lower performance cost than traditional MSAA.&lt;br /&gt;&lt;br /&gt;Since i have switched from a traditional forward renderer to a light pre-pass renderer in MageDx, FXAA seems to be the ideal anti-aliasing solution that i have been looking for.&lt;br /&gt;&lt;br /&gt;My implementation which is based on &lt;a href="http://timothylottes.blogspot.com/2011/07/fxaa-311-released.html"&gt;FXAA 3.11&lt;/a&gt;, uses the settings FXAA_PC, FXAA_QUALITY__PRESET 20 and all input constants set to their default values. Below are 2 comparison screenshots with FXAA enabled/disabled. &lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/PNS1sJoDp5nHMsC2djPAHQ?feat=embedwebsite"&gt;&lt;img height="204" src="https://lh4.googleusercontent.com/-aYU93lDm02M/TjQR5Mn7k4I/AAAAAAAAAb8/ME4qWZWH1f0/s400/fxaa_comparison1.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: x-small; font-style: italic;"&gt;Comparison of a scene with and without FXAA&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://picasaweb.google.com/lh/photo/V2EcrXsuscl8xx4_JwVsSg?feat=embedwebsite"&gt;&lt;img height="177" src="https://lh5.googleusercontent.com/-WjWkhFhbhRo/TjQR57vdGOI/AAAAAAAAAcc/EDagGjdRNNk/s400/fxaa_comparison2.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: x-small; font-style: italic;"&gt;FXAA works well on alphatested polygon edges&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-7466339240311356035?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/7466339240311356035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=7466339240311356035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/7466339240311356035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/7466339240311356035'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2011/07/fast-approximate-anti-aliasing-fxaa.html' title='Fast Approximate Anti-Aliasing (FXAA)'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-aYU93lDm02M/TjQR5Mn7k4I/AAAAAAAAAb8/ME4qWZWH1f0/s72-c/fxaa_comparison1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-6738043750612111238</id><published>2010-12-19T00:27:00.017+08:00</published><updated>2011-11-11T14:15:45.803+08:00</updated><title type='text'>Fast Skin Shading Revisited</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/dAsNDwgRGdIoypywj-Pwmw?feat=embedwebsite"&gt;&lt;img height="225" src="http://lh4.ggpht.com/_g2Sd-4Un3tc/TQ23Om7I1CI/AAAAAAAAAbQ/CUaryOabChI/s400/skinshading2.png" width="400" /&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;A screenshot of the free 3D human head scan model provided by Infinite-Realities rendered in MageDx&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;Sometime last week, i stumbled upon this website called  &lt;a href="http://www.ir-ltd.net/"&gt;Infinite-Realities&lt;/a&gt; and found out that they are offering a free download  of their 3D head scan model. Incidentally around the same time last year, i was working on a &lt;a href="http://magedx.blogspot.com/2009/12/fast-skin-shading-shaderx-7.html"&gt;skin rendering implementation&lt;/a&gt; and was looking around for a detailed 3D human head model (&lt;i&gt;Though in the end i have to make do with an ogre look-alike head&lt;/i&gt;). So over the weekend, i decided to download the 3D head scan model and revisit my skin rendering implementation with it.&lt;br /&gt;&lt;br /&gt;The first improvement i made on the skin rendering was the addition of the stretch correction map mentioned in &lt;a href="http://http.developer.nvidia.com/GPUGems3/gpugems3_ch14.html" target="_blank"&gt;GPU Gems 3&lt;/a&gt;. Because the distance of a surface in texel space and world space can be different, a naive blur in texture space will cause over blurring of texels around curves surfaces such as around the ears and the nose. The stretch correction map compensates for this over blurring by reducing the blur kernel width around curves surfaces.&lt;br /&gt;&lt;br /&gt;The second improvement made was actually a bug fix on the computation of the kelemen/szirmay-kalos specular term. It turns out i was inverting the y-coordinate while sampling into the beckmann distribution texture.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The skin rendering looks more impressive when in motion therefore i have uploaded a video which you can view below. Enjoy!&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe class="youtube-player" frameborder="0" height="300" src="http://www.youtube.com/embed/3vUUkrzj13w?hd=1" title="YouTube video player" type="text/html" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-6738043750612111238?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/6738043750612111238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=6738043750612111238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/6738043750612111238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/6738043750612111238'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2010/12/fast-skin-shading-revisited.html' title='Fast Skin Shading Revisited'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_g2Sd-4Un3tc/TQ23Om7I1CI/AAAAAAAAAbQ/CUaryOabChI/s72-c/skinshading2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-1411417067449586627</id><published>2010-10-09T00:00:00.011+08:00</published><updated>2010-10-09T01:32:40.057+08:00</updated><title type='text'>Lone Wolf Never Dies</title><content type='html'>Back in 2006, i joined a game company called Ksatria Gameworks and worked on my first commercial game project named "Lone Wolf: Flight From The Dark". Sadly, due to insufficient funding, the project was cancelled in 2009. It has been close to two years since, the company is no longer around and all the team members have moved on to bigger and better things in life. But there is still a place where remnants of the lone wolf project still lives on...on youtube! Apparently, videos of the lone wolf project that was previously available on the official website was uploaded to youtube as well and till now they are still viewable! All hail the power of the internet!&lt;br /&gt;&lt;br /&gt;I have gathered all the video links and posted them below for those who are interested in viewing them...though you might want to skip the first minute for a couple of the videos below. (&lt;span style="font-style: italic;"&gt;Ex-Ksatrians will know the reason why :)&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/caJr7psJx-Y?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/caJr7psJx-Y?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/avRJfWFak8c?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/avRJfWFak8c?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7Lh2UW8HpIs?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/7Lh2UW8HpIs?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sDF4JHrk_7s?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/sDF4JHrk_7s?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-1411417067449586627?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/1411417067449586627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=1411417067449586627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/1411417067449586627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/1411417067449586627'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2010/10/lone-wolf-never-dies.html' title='Lone Wolf Never Dies'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-8179058541732652563</id><published>2010-05-16T19:22:00.028+08:00</published><updated>2010-05-23T00:29:24.249+08:00</updated><title type='text'>Ambient Lighting Using Irradiance Environment Maps</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;Back when i was developing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;MageDx&lt;/span&gt; Tech Demo I &amp;amp; II, i had implemented the scene's ambient lighting using a precomputed diffuse convoluted environment map generated from a static &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;HDR&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;skybox&lt;/span&gt;. This solution worked fine until i have added dynamic sky to the engine. The precomputed diffuse convoluted environment map in this case is no longer valid for the scene because of the dynamic nature of the new sky lighting. As a simple temporary workaround, i have used a constant grey color to represent the ambient lighting for the entire scene.&lt;br /&gt;&lt;br /&gt;Over the weekend, i had some free time to spare so i thought it would be a good time to revisit this problem and implement a solution for it. After thinking through some potential solutions, i ended up implementing a slimmed-down version of a rendering technique known as &lt;a href="http://ati.amd.com/developer/gdc/Tatarchuk_Irradiance_Volumes.pdf"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Irradiance&lt;/span&gt; Volumes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In my implementation, instead of generating a grid of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;irradiance&lt;/span&gt; samples  over the entire scene as described in the paper, i have just one sample measuring the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;irradiance&lt;/span&gt; from only the dynamic sky. This  sample is updated whenever the sun moves beyond a certain threshold.   Objects in the scene then samples from this &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;irradiance&lt;/span&gt; sample using their  world normal to get the ambient lighting contribution from the sky.  Below is a screenshot showing the same scene in different ambient lighting conditions.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://picasaweb.google.com/lh/photo/tXBdW4lngD0bpMSwAZLKNQ?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_g2Sd-4Un3tc/S_FkhINUqeI/AAAAAAAAAVM/Jw-h9HWUzcM/s400/skyambient_composite.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Ambient lighting in the scene under different sky lighting conditions&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Because the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;irradiance&lt;/span&gt; sample is sampled using the world normal of an object (&lt;span style="font-style: italic;"&gt;or in this case the per-pixel normal from a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;normalmap&lt;/span&gt; transformed to world space&lt;/span&gt;), the bumpy details of normal mapping are retained for objects in shadowed areas.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/_Rzr38fo6XFZIK2AIJKnGg?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_g2Sd-4Un3tc/S_ePvVzZSsI/AAAAAAAAAWU/_Z0IyQvgC6I/s400/constantambient.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;A constant grey color is used to represent the ambient lighting for the scene, &lt;/span&gt;&lt;span style="font-size:85%;"&gt;objects in the shadows looks flat and dull&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/xhKrKAyNeKlytENXe6gBSg?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S_ePv32Ml1I/AAAAAAAAAWY/JmnT_fzMc2o/s400/shambient.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The same scene with objects sampling from the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;irradiance&lt;/span&gt; sample for ambient lighting. Notice how the details of normal mapping is still visible in &lt;/span&gt;&lt;span style="font-size:85%;"&gt;shadowed areas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Although my implementation is not a full accurate ambient solution, it works well enough for the small outdoor scenes that i have been using so far. Perhaps in the future i might revisit and improve on this solution when i start having more complicated scenes.&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/3849594599759469528-8179058541732652563?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/8179058541732652563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=8179058541732652563' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/8179058541732652563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/8179058541732652563'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2010/05/ambient-lighting-using-irradiance.html' title='Ambient Lighting Using Irradiance Environment Maps'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_g2Sd-4Un3tc/S_FkhINUqeI/AAAAAAAAAVM/Jw-h9HWUzcM/s72-c/skyambient_composite.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-6680036279627508609</id><published>2010-05-06T00:20:00.021+08:00</published><updated>2010-05-11T23:30:36.104+08:00</updated><title type='text'>PhysX Cloth Physics</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/e3UqKBEJttHKADQ3rYVNYw?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S-GONlwH6XI/AAAAAAAAATY/1TpH27BJ1Hs/s400/cloth.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;A screenshot of PhysX cloth simulation in MageDx&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Cloth physics belongs to one of those features that i have been wanting to implement after seeing how they operate in games such as Mirror's Edge and  Batman Arkham Asylum. So after spending a few hours coding after work for about a week or two, i  finally managed to integrate cloth into MageDx using PhysX. In addition to traditional cloth simulation, i have also incorporated softbody and metal deformations, both using PhysX cloth as well. As usual i have uploaded a video showcasing cloth simulation in MageDx which you can find below. Note that the low framerate in the video was caused by FRAPS video capturing while running the tech demo and under normal circumstances the framerate is a steady &gt;60 FPS. Anyway, enjoy the video!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/K8xlYyUMLeU&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/K8xlYyUMLeU&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&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/3849594599759469528-6680036279627508609?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/6680036279627508609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=6680036279627508609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/6680036279627508609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/6680036279627508609'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2010/05/physx-cloth-physics.html' title='PhysX Cloth Physics'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_g2Sd-4Un3tc/S-GONlwH6XI/AAAAAAAAATY/1TpH27BJ1Hs/s72-c/cloth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-5646622004716936750</id><published>2010-04-02T12:24:00.018+08:00</published><updated>2010-04-02T20:37:09.578+08:00</updated><title type='text'>Crepuscular Rays/God Rays</title><content type='html'>Have you ever witness a sunset/sunrise and saw rays of light emitting from the sun through gaps in clouds or between buildings? If you have, lucky you! If not, i hope to show you through the use of computer graphics, the beauty of this natural phenomenon known as crepuscular rays.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Crepuscular rays a.k.a god rays, to put it simply, occurs  when light from the sun is occluded by various mediums (&lt;span style="font-style: italic;"&gt;clouds,  buildings, small atmospheric particles&lt;/span&gt;) and scattered across the  atmosphere. To illustrate these words, below is a screenshot showing c&lt;/span&gt;&lt;span style="font-size:100%;"&gt;repuscular rays&lt;/span&gt; running real-time in MageDx.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_g2Sd-4Un3tc/S7XFW9WSrLI/AAAAAAAAAS0/LHn2pmeIk30/s1600/godrays.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_g2Sd-4Un3tc/S7XFW9WSrLI/AAAAAAAAAS0/LHn2pmeIk30/s400/godrays.png" alt="" id="BLOGGER_PHOTO_ID_5455483521845079218" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;Crepuscular rays running real-time in MageDx Tech Demo&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;My implementation is loosely based around the one described &lt;a href="http://http.developer.nvidia.com/GPUGems3/gpugems3_ch13.html"&gt;here&lt;/a&gt; with a few tweaks mostly pertaining to quality and performance. If you have implemented this technique before, you would almost immediately notice one shortcoming, that is the huge amount of samples (&lt;span style="font-style: italic;"&gt;100 samples and above&lt;/span&gt;) you would have to take in order to generate moderately smooth &lt;/span&gt;&lt;span style="font-size:100%;"&gt;crepuscular rays. This means you are limited to using pixel shader 3.0 and above for this technique, and even then, you hit the instruction count limit pretty fast as you increase the number of samples. Luckily in this case, there is an alternative way of doing the sampling that is described in one of the crytek presentation slides found &lt;a href="http://www.crytek.com/fileadmin/user_upload/inside/presentations/gdc2008/GDC08_SousaT_CrysisEffects.ppt"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;. In short, instead of brute force sampling, we sample using an iterative process. In my case, i iterate over 3 passes with each pass taking 8 samples. The result is comparable to the brute force method quality wise, is way cheaper and fits well within the instruction count limit of pixel shader 2.0. Also described in the slide is a cheap way to generate the occlusion mask provided that you have scene depth stored.&lt;br /&gt;&lt;br /&gt;Screenshots in this case does not do justice to how &lt;/span&gt;&lt;span style="font-size:100%;"&gt;crepuscular rays looks like in real-time. As such, i have included 3 videos showcasing &lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;crepuscular rays in different environments and light settings. Have fun watching!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4nZWVLPx9EY&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4nZWVLPx9EY&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/pB-IaweY0L0&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/pB-IaweY0L0&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/wc5F8ZTb63o&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/wc5F8ZTb63o&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&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/3849594599759469528-5646622004716936750?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/5646622004716936750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=5646622004716936750' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/5646622004716936750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/5646622004716936750'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2010/04/crepuscular-raysgod-rays.html' title='Crepuscular Rays/God Rays'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g2Sd-4Un3tc/S7XFW9WSrLI/AAAAAAAAAS0/LHn2pmeIk30/s72-c/godrays.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-6979865791523533702</id><published>2010-03-16T20:24:00.019+08:00</published><updated>2010-03-16T23:23:53.355+08:00</updated><title type='text'>Screenshot Feast!!!</title><content type='html'>Recently while cleaning up my hard drive, i stumbled upon a folder that contains pictures of my old work pertaining to graphics programming. If my memory serves me well, these screenshots should be taken during the year 2007~2008. Anyway, i hope you (&lt;span style="font-style: italic;"&gt;whoever you are ;) &lt;/span&gt;) enjoyed the screenshots as much as i enjoyed looking through them. Cheers!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/963zkTdYLNR02BqAFC9IQQ?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_g2Sd-4Un3tc/S59_wEn-wCI/AAAAAAAAAQM/l1RzXQ7xrI0/s400/InstancingKitty.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Hardware instancing test using 500 hello kitty boxes/spheres with SSAO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/8RamjJ14HOErdcVlzrehAg?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_g2Sd-4Un3tc/S59_xI4G5FI/AAAAAAAAAQQ/u_6iqpwp0rE/s400/InstancingGrassKitty.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Another hardware instancing test with foliage and one hello kitty sphere :P&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/4jArlW56pVI16MCulktJTw?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S59_xuMJG6I/AAAAAAAAAQU/PBwXfbBN3k4/s400/WeightingGoneWrong.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;When bone weights goes horribly wrong...&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/LrJ_ontu8ZF13xZmizWX5A?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_g2Sd-4Un3tc/S5-EGuJSnCI/AAAAAAAAAQg/h58E8cKn3uM/s400/SnowCover.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;A multi-layered shader where snow is generated according to the slope of the normal and by the blend influence stored in the vertex color&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/sPs9krid5xV9paL01u6s3w?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_g2Sd-4Un3tc/S5-EHWdbyqI/AAAAAAAAAQk/KbFsH5iPaug/s400/VSDCT_castle_bug.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;A strange bug while working on VSDCT (virtual shadow depth cube textures), interestingly it looks like a castle wall during sunset xD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/rBIenI2kBT7--b4O22gA-Q?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_g2Sd-4Un3tc/S5-EHv7XpzI/AAAAAAAAAQo/lAxbRDfsTvU/s400/ice.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Experiment with ice rendering, the shader is a double layered material &lt;/span&gt;&lt;span style="font-size:85%;"&gt;where the top layer distorts the bottom layer using a normal map, giving the illusion of refraction between the 2 layers. Thickness of ice is controlled with vertex color and modulated with a fresnel factor&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/RbGRJKPAo3GXLv-63mi78A?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_g2Sd-4Un3tc/S5-EH7cP4PI/AAAAAAAAAQs/dLOLBORtgHE/s400/ice2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Experiment with ice rendering part 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/W4pg0qIqRYUEtKYWsQYQVQ?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_g2Sd-4Un3tc/S5-Mc5fxZ4I/AAAAAAAAARI/7sCgqXhk0F4/s400/cloud3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Experiment with volumetric cloud rendering, the technique used was based on the chapter "Volumetric Clouds and Mega Particles" found in ShaderX 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/FKaKp56bPY3Ox3vkQjgP2g?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_g2Sd-4Un3tc/S5-EIVApb_I/AAAAAAAAAQw/1gccLAxXkuY/s400/stickman_cloud.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Look in the sky...it's a stickman!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/zhxCpdLHvbUz4xROIfijYA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S5-McabqBPI/AAAAAAAAARA/NcQ_WsTnIDU/s400/cloud.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;More fun with clouds, the technique works well with animated meshes too&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/ZhyHIOlHgy1je9Sno797XA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_g2Sd-4Un3tc/S5-Mcgi7CgI/AAAAAAAAARE/SZ6LxwgtfVs/s400/cloud2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Cotton candy look-alike clouds :) Yummy!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/fTvQsMQsDGLq_i0mgkVrEw?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S5-Mc1rIOgI/AAAAAAAAARM/4h4T6EzcD68/s400/irradiance.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Irradiance volumes 3D grid with uninitialized random values a.k.a "the mentos scene"&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/3849594599759469528-6979865791523533702?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/6979865791523533702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=6979865791523533702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/6979865791523533702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/6979865791523533702'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2010/03/screenshot-feast.html' title='Screenshot Feast!!!'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_g2Sd-4Un3tc/S59_wEn-wCI/AAAAAAAAAQM/l1RzXQ7xrI0/s72-c/InstancingKitty.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-8000007677088013425</id><published>2010-02-16T14:28:00.010+08:00</published><updated>2010-02-16T20:11:33.503+08:00</updated><title type='text'>Sponza Atrium (Improved Version)</title><content type='html'>Earlier this month, i visited &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;crytek's&lt;/span&gt; website and found out that they are offering an improved version of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;sponza&lt;/span&gt; atrium 3D model to the public for FREE! Grab it over &lt;a href="http://www.crytek.com/downloads/technology/"&gt;here&lt;/a&gt; while stock last!&lt;br /&gt;&lt;br /&gt;After a few tweaks to the model in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;maya&lt;/span&gt;, i got it up and running in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;MageDx&lt;/span&gt;. Enjoy the screenshots!&lt;br /&gt;&lt;br /&gt;Special thanks to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Marko&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Dabrovic&lt;/span&gt; for the original &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;sponza&lt;/span&gt; atrium 3D model and Frank &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Meinl&lt;/span&gt; for the improved version!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/8SFKVoSElQwclqmFxDTr4w?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_g2Sd-4Un3tc/S3o6Sf48HmI/AAAAAAAAAOA/V8h27fRY--M/s400/screenshot83.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/UZDaz7PkoKz3-jwefkrOUw?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_g2Sd-4Un3tc/S3o6Sn5rHJI/AAAAAAAAAOE/GdILxCZUAx4/s400/screenshot84.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/NCe9e7vRQd1rtOe9zkdGQA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S3o6Sv1KfXI/AAAAAAAAAOI/TsQxFDqsi8M/s400/screenshot85.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/jFBZGgXfzdPyXy57r6aarw?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S3o6TLTcTAI/AAAAAAAAAOM/TUtnb49t5Eo/s400/screenshot86.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/h6ErKlzE919S_Qy3jP4tWA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S3o6TQSj6-I/AAAAAAAAAOQ/NO2zWua5UFE/s400/screenshot87.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/nXBfUEYqDu6GwOGBejf-vA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_g2Sd-4Un3tc/S3o6khASHrI/AAAAAAAAAOc/38krjJmEewc/s400/screenshot88.png" /&gt;&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/3849594599759469528-8000007677088013425?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/8000007677088013425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=8000007677088013425' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/8000007677088013425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/8000007677088013425'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2010/02/sponza-atrium-improved-version.html' title='Sponza Atrium (Improved Version)'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_g2Sd-4Un3tc/S3o6Sf48HmI/AAAAAAAAAOA/V8h27fRY--M/s72-c/screenshot83.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-1742339462494728424</id><published>2009-12-26T19:59:00.014+08:00</published><updated>2010-01-08T00:21:38.718+08:00</updated><title type='text'>Fast Skin Shading (ShaderX 7)</title><content type='html'>I bought ShaderX 7 a couple of months back, but only recently then i found the time to read through it and one of the articles that got my attention was chapter 2.4 Fast Skin Shading by John Hable, George Borshukov, and Jim Hejl. In the chapter, they  proposed a lightweight skin shading technique based off the one that was used in the NVIDIA human head demo. One of the major differences was replacing the expensive 5 pass gaussian blurs (&lt;span style="font-style: italic;"&gt;14 taps per pass&lt;/span&gt;) with a single blur pass (&lt;span style="font-style: italic;"&gt;with 12 uniquely positioned and weighted taps&lt;/span&gt;). This change significantly improves the performance and in my opinion makes this technique actually usable in current games. &lt;span&gt;Albeit the quality is still not as great as the original&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;In my implementation, i have replaced the usual phong specular with a more physically accurate kelemen/szirmay-kalos specular model as described &lt;a href="http://http.developer.nvidia.com/GPUGems3/gpugems3_ch14.html"&gt;here&lt;/a&gt;. Shadows are rendered into the light map and blurred together, softening the jagged edges. SSAO is then added in the final pass to give more depth to the final render.&lt;br /&gt;&lt;br /&gt;There is still some improvements that could be done, like implementing the stretch correction map to prevent over blurring around the ears and having a better dilation implementation. All in all, I am pretty satisfied with the result achieved in terms of both quality and performance.&lt;br /&gt;&lt;br /&gt;Time for some screenshots!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/uN_qpEWJLZD9gOiB4pYZKQ?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_g2Sd-4Un3tc/SxvKPx5feTI/AAAAAAAAALg/cfg577r01vA/s400/screenshot78.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Hmm...mean looking&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/C16Y-LtdlQv3zUdXkVf6Ww?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_g2Sd-4Un3tc/SxvKPhLaMWI/AAAAAAAAALc/mE-7rbKnhs0/s400/screenshot77.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Bald and shiny&lt;/span&gt;&lt;/span&gt;!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/qjSPbYHt5EC9Y7wXRI68Bw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_g2Sd-4Un3tc/SxvKP6svUYI/AAAAAAAAALk/WeWAOeUVdZM/s400/screenshot79.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Nice detail around and in the nostrils...&lt;/span&gt;&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/3849594599759469528-1742339462494728424?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/1742339462494728424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=1742339462494728424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/1742339462494728424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/1742339462494728424'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2009/12/fast-skin-shading-shaderx-7.html' title='Fast Skin Shading (ShaderX 7)'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_g2Sd-4Un3tc/SxvKPx5feTI/AAAAAAAAALg/cfg577r01vA/s72-c/screenshot78.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-7506729402111864316</id><published>2009-09-21T19:01:00.006+08:00</published><updated>2009-09-21T23:01:09.153+08:00</updated><title type='text'>Weekend Coding: Anisotropic Filtering</title><content type='html'>After a few weeks of inactivity, i finally took some time off over the weekend to implement anisotropic filtering (&lt;span style="font-style: italic;"&gt;a long overdue feature&lt;/span&gt;) to the engine. Anisotropic filtering has been used in games for a pretty decent amount of time, it is not groundbreaking technology however it is still a nice to have feature (&lt;span style="font-style: italic;"&gt;or rather a need to have feature for high quality 3D rendering&lt;/span&gt;) to include in a 3D engine. For those wondering what is anisotropic filtering here is a short description taken from wikipedia.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left; font-style: italic;"&gt;&lt;span style="font-size:85%;"&gt;In 3D computer graphics, anisotropic filtering (abbreviated AF) is a method of enhancing the image quality of textures on surfaces that are at oblique viewing angles with respect to the camera where the projection of the texture (not the polygon or other primitive on which it is rendered) appears to be non-orthogonal.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Or in layman's term, it makes the graphics prettier :)&lt;br /&gt;&lt;br /&gt;I have included a few screenshots below to show the quality improvement by applying anisotropic filtering. Trilinear and anisotropic filtering 16x was used for figure 1 and 2 respectively. Notice how the ground, brick and roof textures looks much sharper in figure 2 than in figure 1.&lt;br /&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/_g2Sd-4Un3tc/SreDU-e1-LI/AAAAAAAAAJY/UHPsGCQYC4Y/s1600-h/screenshot48.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 265px;" src="http://2.bp.blogspot.com/_g2Sd-4Un3tc/SreDU-e1-LI/AAAAAAAAAJY/UHPsGCQYC4Y/s400/screenshot48.png" alt="" id="BLOGGER_PHOTO_ID_5383916275937704114" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;u style="font-style: italic;"&gt;Figure 1: Trilinear filtering&lt;/u&gt;&lt;/span&gt;&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/_g2Sd-4Un3tc/SreDV-jMZJI/AAAAAAAAAJg/satubf4uqtk/s1600-h/screenshot49.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 265px;" src="http://1.bp.blogspot.com/_g2Sd-4Un3tc/SreDV-jMZJI/AAAAAAAAAJg/satubf4uqtk/s400/screenshot49.png" alt="" id="BLOGGER_PHOTO_ID_5383916293135819922" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;u style="font-style: italic;"&gt;Figure 2: Anisotropic filtering 16x&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Finally to end this post, i have included another screenshot below showing the comparison between the various levels of anisotropic filtering. Cheers!&lt;br /&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/_g2Sd-4Un3tc/SreT5raW-6I/AAAAAAAAAJo/XVfYmsGY0qw/s1600-h/compare.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 197px;" src="http://2.bp.blogspot.com/_g2Sd-4Un3tc/SreT5raW-6I/AAAAAAAAAJo/XVfYmsGY0qw/s400/compare.png" alt="" id="BLOGGER_PHOTO_ID_5383934498659826594" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&lt;u&gt;Comparison of various level of filtering mode. From left to right: Trilinear, Anisotropic 2x, Anisotropic 4x,  Anisotropic 8x,  Anisotropic 16x&lt;/u&gt; &lt;/span&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/3849594599759469528-7506729402111864316?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/7506729402111864316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=7506729402111864316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/7506729402111864316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/7506729402111864316'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2009/09/weekend-coding-anisotropic-filtering.html' title='Weekend Coding: Anisotropic Filtering'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g2Sd-4Un3tc/SreDU-e1-LI/AAAAAAAAAJY/UHPsGCQYC4Y/s72-c/screenshot48.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-7568431751714744575</id><published>2009-07-25T23:23:00.003+08:00</published><updated>2009-07-25T23:35:21.959+08:00</updated><title type='text'>Upcoming Demo Preview: A Bald Guy? Looking At Sunset?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SmskSkgQv8I/AAAAAAAAAJQ/z2QSTYONPlQ/s1600-h/screenshot47.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SmskSkgQv8I/AAAAAAAAAJQ/z2QSTYONPlQ/s400/screenshot47.png" alt="" id="BLOGGER_PHOTO_ID_5360281433350521058" border="0"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-7568431751714744575?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/7568431751714744575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=7568431751714744575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/7568431751714744575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/7568431751714744575'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2009/07/upcoming-demo-preview-bald-guy.html' title='Upcoming Demo Preview: A Bald Guy? Looking At Sunset?'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g2Sd-4Un3tc/SmskSkgQv8I/AAAAAAAAAJQ/z2QSTYONPlQ/s72-c/screenshot47.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-2531040355958453242</id><published>2009-07-20T04:36:00.024+08:00</published><updated>2009-07-23T08:23:15.408+08:00</updated><title type='text'>Real-Time Water Rendering with Reflection and Refraction Demo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SmenRMWCUHI/AAAAAAAAAI0/uplqS0LMsrs/s1600-h/water.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SmenRMWCUHI/AAAAAAAAAI0/uplqS0LMsrs/s400/water.png" alt="" id="BLOGGER_PHOTO_ID_5360281433350521058" border="0"&gt;&lt;/a&gt;&lt;br /&gt;After a week of preparation, i am proud to present my first public tech demo "Real-Time Water Rendering with Reflection and Refraction". Built using the new and improved MageDx 3D graphics engine, the demo showcases the following graphical features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Water rendering with reflection and refraction (obviously)&lt;/li&gt; &lt;li&gt;Atmospheric scattering&lt;/li&gt; &lt;li&gt;Parallel-split shadow mapping&lt;/li&gt; &lt;li&gt;High dynamic range lighting (using the Phong shading model)&lt;/li&gt; &lt;li&gt;Depth of field&lt;/li&gt; &lt;li&gt;Screen space motion blur&lt;/li&gt; &lt;li&gt;Screen space ambient occlusion&lt;/ul&gt; There are a couple of features that did not make it in due to time constraints (example: god rays, sub-surface scattering), i guess i just have to cover them in future demos then.&lt;br /&gt;&lt;br /&gt;Download link: &lt;a href="http://www.fileden.com/files/2009/7/22/2518234/MageDx%20Water%20Demo.zip" title="MageDx Water Demo.zip"&gt; MageDx Water Demo (8.79MB) &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Controls]&lt;br /&gt;&lt;br /&gt;W  - Move forward&lt;br /&gt;S  - Move backward&lt;br /&gt;A  - Move Left&lt;br /&gt;D  - Move Right&lt;br /&gt;Mouse  - Look around&lt;br /&gt;F11  - Take screenshot&lt;br /&gt;1  - Toggles shadows on/off&lt;br /&gt;2  - Toggles depth of field on/off&lt;br /&gt;3  - Toggles screen space ambient occlusion on/off&lt;br /&gt;4  - Toggles motion blur on/off&lt;br /&gt;5  - Toggles day-night cycle on/off&lt;br /&gt;&lt;br /&gt;NOTE : The demo requires a graphics card that supports shader model 3.0 and should run fine on both ATI and NVIDIA cards.&lt;br /&gt;If you face any difficulty running the demo, make sure you have the latest DirectX runtime and video card drivers installed.&lt;br /&gt;For those unable to run the demo, i have uploaded a short video footage below. Enjoy!&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rJadsveak84&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/rJadsveak84&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-2531040355958453242?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/2531040355958453242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=2531040355958453242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/2531040355958453242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/2531040355958453242'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2009/07/real-time-water-rendering-with.html' title='Real-Time Water Rendering with Reflection and Refraction Demo'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g2Sd-4Un3tc/SmenRMWCUHI/AAAAAAAAAI0/uplqS0LMsrs/s72-c/water.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-8248172676798852941</id><published>2009-07-13T23:15:00.010+08:00</published><updated>2009-07-14T19:55:01.202+08:00</updated><title type='text'>Bought a Nvidia 260GTX :) / Atmospheric scattering</title><content type='html'>&lt;u&gt;Bought a Nvidia 260GTX :)&lt;/u&gt;&lt;br /&gt;My old graphics card (a Nvidia 8800gts 320) died recently while trying to do a video capture. Poor card started to chew out weird colored pixels and never recovered. Since the warranty for the card has expired a long time ago, I decided to purchase a new one. The revised Nvidia 260GTX with its 216 shader cores, low power consumption on idle (when compared to ATI's equivalent offer the HD4870) and lower temperature on load are the deciding factors I bought one eventually. After testing out the card in a couple of games, I must say I am very impressed with the performance delivered. In fallout 3, I was able to max out the graphics settings at screen resolution of 1680x1050 and the game was still fully playable. In MageDx tech demo II, it doubled the frame rate I got with the 8800 gts 320, going from an average 50~60fps to an impressive 110~120fps. I would recommend this card to anyone looking for an upgrade but beware of the size of the card, measuring at 10.5 inches (26.7cm) long, this card is definitely not for those who has a small casing.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Atmospheric scattering&lt;/u&gt;&lt;br /&gt;Over the weekend, I have added atmospheric scattering to MageDx. My implementation is based on the paper &lt;a href="http://ati.amd.com/developer/gdc/2002/GDC_02_HoffmanPreetham.pdf"&gt;"Rendering outdoor light scattering in real time by Hoffman, N., Preetham, A.J."&lt;/a&gt;. Getting the sky to display correctly was pretty tricky, it took me quite a bit of time tweaking the rayleigh/mie parameters to get nice sky blue color shown in the screenshot below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_g2Sd-4Un3tc/Slxro4yTRbI/AAAAAAAAAIM/v_GlIgjSztU/s1600-h/screenshot34.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_g2Sd-4Un3tc/Slxro4yTRbI/AAAAAAAAAIM/v_GlIgjSztU/s400/screenshot34.jpg" alt="" id="BLOGGER_PHOTO_ID_5358276006846350770" border="0" /&gt;&lt;/a&gt;To see the full effect of atmospheric scattering, i recommend looking at the video i have uploaded below. The video shows a simple day-night cycle simulation complete with dynamic lighting and shadowing.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/G1BthilEg04&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/G1BthilEg04&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;Thats it for now! Back to more coding...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-8248172676798852941?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/8248172676798852941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=8248172676798852941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/8248172676798852941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/8248172676798852941'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2009/07/bought-nvidia-260gtx-atmospheric.html' title='Bought a Nvidia 260GTX :) / Atmospheric scattering'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g2Sd-4Un3tc/Slxro4yTRbI/AAAAAAAAAIM/v_GlIgjSztU/s72-c/screenshot34.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-2959901645068832824</id><published>2009-06-29T22:43:00.021+08:00</published><updated>2009-06-30T19:12:33.965+08:00</updated><title type='text'>MageDx Level Editor</title><content type='html'>&lt;div style="text-align: left;"&gt;Prior to MageDx Tech Demo II, all the levels for my tech demos were build using Autodesk 3ds Max. Initially, this approach worked fine for small scenes, but as i started to create larger scenes, frequent editing and exporting of levels became a big time waster. There was also the need to have 3ds Max installed on the system in order to make any changes. Obviously, a better of way of doing things had to be found. After a few months of work, i am proud to introduce the MageDx level editor.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SkkBAf1fp_I/AAAAAAAAAHs/u9Lz2E7gbzw/s1600/editor0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 265px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SkkBAf1fp_I/AAAAAAAAAHs/u9Lz2E7gbzw/s400/editor0.jpg" alt="" id="BLOGGER_PHOTO_ID_5352810740164044786" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;A screenshot of MageDx level editor in action&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Build upon the MageDx 3D graphics engine and utilizing wxWidgets for the GUI, the MageDx level editor is a WYSIWYG (&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;W&lt;/span&gt;hat &lt;span style="font-weight: bold;"&gt;Y&lt;/span&gt;ou &lt;span style="font-weight: bold;"&gt;S&lt;/span&gt;ee &lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;s &lt;span style="font-weight: bold;"&gt;W&lt;/span&gt;hat &lt;span style="font-weight: bold;"&gt;Y&lt;/span&gt;ou &lt;span style="font-weight: bold;"&gt;G&lt;/span&gt;et&lt;/span&gt;) editor that allows for fast and easy creation, manipulation and edition of objects in a level.&lt;br /&gt;&lt;br /&gt;Notable features of the editor includes:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;WYSIWYG&lt;/u&gt;&lt;br /&gt;As mentioned previously, everything (&lt;span style="font-style: italic;"&gt;including &lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;lighting, shadowing and other graphical effects&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; you see in the editor will be what you will be getting in the final game. T&lt;span&gt;&lt;span&gt;his greatly improves work flow as there is no longer any need to toggle between 3ds Max and the final game for visual verification of the level.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Real-time preview system&lt;/u&gt;&lt;br /&gt;The WYSIWYG portion takes care of the visual part. But how about game play? This is where the real-time preview system kicks in. This system allows users to play their level straight from the editor itself. This allows for fast prototyping and testing of game play, a major time saver for game/level designers.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;u&gt;Component based entity system&lt;/u&gt;&lt;br /&gt;While not an editor feature, by exposing the functionality to add/remove components in the level editor, users are able to create customized objects with unique properties, all without touching a single piece of source code.&lt;br /&gt;&lt;br /&gt;The development of the level editor helped to cut down the time it took to develop MageDx Tech Demo II substantially, which is pretty important since i am doing all this as a hobby on my free time. By using the editor, future demos (&lt;span style="font-style: italic;"&gt;if any&lt;/span&gt;) should be done much quickly.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Videos will be posted on a later date to showcase some of the functionality of the MageDx level editor.&lt;/div&gt;&lt;div&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/3849594599759469528-2959901645068832824?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/2959901645068832824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=2959901645068832824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/2959901645068832824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/2959901645068832824'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2009/06/magedx-level-editor.html' title='MageDx Level Editor'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g2Sd-4Un3tc/SkkBAf1fp_I/AAAAAAAAAHs/u9Lz2E7gbzw/s72-c/editor0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-3538861431186666556</id><published>2009-05-21T19:48:00.019+08:00</published><updated>2009-05-25T21:42:00.525+08:00</updated><title type='text'>MageDx Tech Demo II</title><content type='html'>After 2 months of midnight coding (&lt;span style="font-style: italic;"&gt;and constant hair pulling&lt;/span&gt;), i am proud to present MageDx tech demo II!!! Graphically, tech demo II is pretty much the same as tech demo I with the few exceptions listed below&lt;br /&gt;&lt;ul&gt;&lt;li&gt;unit cube clipping has been implemented on parallel-spiit shadow mapping to improve the quality of shadow rendering&lt;/li&gt;&lt;li&gt;occlusion radius for screen space ambient occlusion has been fine-tuned for the scene&lt;/li&gt;&lt;li&gt;reduce bleeding effect on the boundaries for depth of field&lt;/li&gt;&lt;li&gt;improved occlusion culling&lt;/li&gt;&lt;li&gt;better looking 3D models with proper specular maps :)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;New to MageDx is the integration of PhysX physics engine by NVIDIA. The integration took about a week and was pretty much easy and painless, though it took about another week to optimize it fully for the engine. This makes for some interesting physics simulations which will be shown later in the videos below.&lt;br /&gt;&lt;br /&gt;Also new to MageDx is the asset converter which is conveniently named MageDx asset converter (MDAC). Basically the asset converter converts an Autodesk FBX file to an internal file format that can used by the engine to load in 3D models. It also performs vertex cache optimizations on the meshes using Tootle provided by ATI/AMD.&lt;br /&gt;&lt;br /&gt;The most notable feature (or in this case tool) that took most of my development time was the MageDx WYSIWYG level editor. The development of the editor allows for fast and easy manipulating and editing of objects in a level and was used to create the level seen in tech demo II. More information on the editor however will come in a later post (&lt;span style="font-style: italic;"&gt;as there is quite a significant amount of stuff to talk about and i do not want to lengthen this post any further&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;That is it! Time for videos and screenshots!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;P.S. The hello kitty box is an insider joke&lt;/span&gt; =P&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/9o_kHXi-4oA&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/9o_kHXi-4oA&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zypFnEzJcts&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/zypFnEzJcts&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_g2Sd-4Un3tc/ShfJhywxUII/AAAAAAAAADo/02d0dtksYUc/s1600-h/screenshot17.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_g2Sd-4Un3tc/ShfJhywxUII/AAAAAAAAADo/02d0dtksYUc/s400/screenshot17.png" alt="" id="BLOGGER_PHOTO_ID_5338957465670209666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfJg5Lb74I/AAAAAAAAADg/XpgcZIRTkMc/s1600-h/screenshot18.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfJg5Lb74I/AAAAAAAAADg/XpgcZIRTkMc/s400/screenshot18.png" alt="" id="BLOGGER_PHOTO_ID_5338957450212798338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_g2Sd-4Un3tc/ShfLM0Mw2bI/AAAAAAAAAEg/eM0eVQNXljE/s1600-h/screenshot7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_g2Sd-4Un3tc/ShfLM0Mw2bI/AAAAAAAAAEg/eM0eVQNXljE/s400/screenshot7.png" alt="" id="BLOGGER_PHOTO_ID_5338959304302057906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_g2Sd-4Un3tc/ShqfG-opw9I/AAAAAAAAAEw/vwCNvEynluY/s1600-h/screenshot10.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_g2Sd-4Un3tc/ShqfG-opw9I/AAAAAAAAAEw/vwCNvEynluY/s400/screenshot10.png" alt="" id="BLOGGER_PHOTO_ID_5339755250442683346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g2Sd-4Un3tc/ShqfFyeXaRI/AAAAAAAAAEo/_F_jN0Fdbd8/s1600-h/screenshot14.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_g2Sd-4Un3tc/ShqfFyeXaRI/AAAAAAAAAEo/_F_jN0Fdbd8/s400/screenshot14.png" alt="" id="BLOGGER_PHOTO_ID_5339755229998442770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfLMpFAEJI/AAAAAAAAAEY/cNdfueUWXIM/s1600-h/screenshot9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfLMpFAEJI/AAAAAAAAAEY/cNdfueUWXIM/s400/screenshot9.png" alt="" id="BLOGGER_PHOTO_ID_5338959301316710546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g2Sd-4Un3tc/ShfLMElZU2I/AAAAAAAAAEQ/3ALxpnbf15I/s1600-h/screenshot11.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_g2Sd-4Un3tc/ShfLMElZU2I/AAAAAAAAAEQ/3ALxpnbf15I/s400/screenshot11.png" alt="" id="BLOGGER_PHOTO_ID_5338959291520471906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g2Sd-4Un3tc/ShfLLLyxItI/AAAAAAAAAEI/mrXEfzLGhaA/s1600-h/screenshot12.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_g2Sd-4Un3tc/ShfLLLyxItI/AAAAAAAAAEI/mrXEfzLGhaA/s400/screenshot12.png" alt="" id="BLOGGER_PHOTO_ID_5338959276275737298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfLKRZlZ3I/AAAAAAAAAEA/WKxM_82Q2BE/s1600-h/screenshot13.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfLKRZlZ3I/AAAAAAAAAEA/WKxM_82Q2BE/s400/screenshot13.png" alt="" id="BLOGGER_PHOTO_ID_5338959260600854386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfJjbTJIwI/AAAAAAAAAD4/bxoTsM70BPM/s1600-h/screenshot15.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfJjbTJIwI/AAAAAAAAAD4/bxoTsM70BPM/s400/screenshot15.png" alt="" id="BLOGGER_PHOTO_ID_5338957493731664642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfJimswzDI/AAAAAAAAADw/WL3y3srS3Cw/s1600-h/screenshot16.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/ShfJimswzDI/AAAAAAAAADw/WL3y3srS3Cw/s400/screenshot16.png" alt="" id="BLOGGER_PHOTO_ID_5338957479612042290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_g2Sd-4Un3tc/ShfJgKw_mTI/AAAAAAAAADY/WiImNjlc42o/s1600-h/screenshot19.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_g2Sd-4Un3tc/ShfJgKw_mTI/AAAAAAAAADY/WiImNjlc42o/s400/screenshot19.png" alt="" id="BLOGGER_PHOTO_ID_5338957437753858354" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-3538861431186666556?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/3538861431186666556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=3538861431186666556' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/3538861431186666556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/3538861431186666556'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2009/05/magedx-tech-demo-ii.html' title='MageDx Tech Demo II'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g2Sd-4Un3tc/ShfJhywxUII/AAAAAAAAADo/02d0dtksYUc/s72-c/screenshot17.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-1509632819815290045</id><published>2009-03-12T01:56:00.015+08:00</published><updated>2009-03-12T04:28:39.754+08:00</updated><title type='text'>MageDx Tech Demo</title><content type='html'>After almost 6 months of silence...finally an update!&lt;br /&gt;Over the past 3 weeks, i have been actively working on MageDx (&lt;span style="font-style: italic;"&gt;For those wondering what MageDx is, it is basically a 3D rendering engine that i have been continuously working on during my free time)&lt;/span&gt;. However, the code has not been maintained for quite some time and i am basically rewriting almost the entire engine again. I must say i am pretty satisfied with the result given the short period of development time.&lt;br /&gt;&lt;br /&gt;So far i have the following features implemented on the engine side:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Abstraction of graphics renderer&lt;/li&gt;&lt;li&gt;Transparent shader data binding&lt;/li&gt;&lt;li&gt;Post processing effect system&lt;/li&gt;&lt;/ul&gt;and on the graphics side:&lt;ul&gt;&lt;li&gt;High dynamic range lighting with eye adaptation&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Phong shader with support up to 4* per-pixel attenuated lights *(extendable)&lt;/li&gt;&lt;li&gt;HDR Environment lighting using convoluted diffuse maps&lt;/li&gt;&lt;li&gt;Parallel-split shadow mapping&lt;/li&gt;&lt;li&gt;Depth of field&lt;/li&gt;&lt;li&gt;Screen space ambient occlusion&lt;/li&gt;&lt;li&gt;Screen space motion blur (camera only)&lt;/li&gt;&lt;li&gt;Pre-Z pass (depth is used to rebuild world position)&lt;/li&gt;&lt;/ul&gt;Features W.I.P:&lt;ul&gt;&lt;li&gt;Vertex arrays supporting flexible vertex formats&lt;/li&gt;&lt;li&gt;New geometry format using Autodesk FBX&lt;/li&gt;&lt;li&gt;Improved material/shader system&lt;/li&gt;&lt;li&gt;Effect state manager&lt;/li&gt;&lt;li&gt;Real-time atmospheric scattering&lt;/li&gt;&lt;/ul&gt;I guess that is pretty much it for now, time for some screenshots. :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SbgckHlpoPI/AAAAAAAAACA/rCeZvMsVpZo/s1600-h/screenshot58.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SbgckHlpoPI/AAAAAAAAACA/rCeZvMsVpZo/s400/screenshot58.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027167321334002" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_g2Sd-4Un3tc/SbgcwocFvlI/AAAAAAAAACI/-e8D23GkVpw/s1600-h/screenshot59.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://2.bp.blogspot.com/_g2Sd-4Un3tc/SbgcwocFvlI/AAAAAAAAACI/-e8D23GkVpw/s400/screenshot59.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027382298033746" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g2Sd-4Un3tc/Sbgc2upy6fI/AAAAAAAAACQ/OnGBOb6LhYo/s1600-h/screenshot60.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://3.bp.blogspot.com/_g2Sd-4Un3tc/Sbgc2upy6fI/AAAAAAAAACQ/OnGBOb6LhYo/s400/screenshot60.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027487045347826" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_g2Sd-4Un3tc/SbgdIt4VUVI/AAAAAAAAACg/6pppovRi5dg/s1600-h/screenshot64.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://2.bp.blogspot.com/_g2Sd-4Un3tc/SbgdIt4VUVI/AAAAAAAAACg/6pppovRi5dg/s400/screenshot64.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027796075532626" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g2Sd-4Un3tc/SbgdIjCG2fI/AAAAAAAAACo/6lrpGQmF7Zc/s1600-h/screenshot65.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://3.bp.blogspot.com/_g2Sd-4Un3tc/SbgdIjCG2fI/AAAAAAAAACo/6lrpGQmF7Zc/s400/screenshot65.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027793163737586" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_g2Sd-4Un3tc/Sbgc7GrG0FI/AAAAAAAAACY/Wa45giRsT7c/s1600-h/screenshot63.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://1.bp.blogspot.com/_g2Sd-4Un3tc/Sbgc7GrG0FI/AAAAAAAAACY/Wa45giRsT7c/s400/screenshot63.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027562212773970" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g2Sd-4Un3tc/SbgdIxm9OzI/AAAAAAAAACw/sN3mx5kUkAU/s1600-h/screenshot66.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://3.bp.blogspot.com/_g2Sd-4Un3tc/SbgdIxm9OzI/AAAAAAAAACw/sN3mx5kUkAU/s400/screenshot66.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027797076392754" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g2Sd-4Un3tc/SbgdJBEUJbI/AAAAAAAAAC4/0kBvEBHkRWA/s1600-h/screenshot67.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://3.bp.blogspot.com/_g2Sd-4Un3tc/SbgdJBEUJbI/AAAAAAAAAC4/0kBvEBHkRWA/s400/screenshot67.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027801226061234" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g2Sd-4Un3tc/SbgdJDOU-9I/AAAAAAAAADA/HOt2mEIQJPg/s1600-h/screenshot68.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://3.bp.blogspot.com/_g2Sd-4Un3tc/SbgdJDOU-9I/AAAAAAAAADA/HOt2mEIQJPg/s400/screenshot68.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027801804930002" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_g2Sd-4Un3tc/SbgdOmBVAiI/AAAAAAAAADI/6iQFTRdfUDU/s1600-h/screenshot69.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://2.bp.blogspot.com/_g2Sd-4Un3tc/SbgdOmBVAiI/AAAAAAAAADI/6iQFTRdfUDU/s400/screenshot69.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027897044992546" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SbgdOpJbBhI/AAAAAAAAADQ/GDEKOvd6_Yg/s1600-h/screenshot70.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://4.bp.blogspot.com/_g2Sd-4Un3tc/SbgdOpJbBhI/AAAAAAAAADQ/GDEKOvd6_Yg/s400/screenshot70.jpg" alt="" id="BLOGGER_PHOTO_ID_5312027897884247570" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-1509632819815290045?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/1509632819815290045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=1509632819815290045' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/1509632819815290045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/1509632819815290045'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2009/03/magedx-tech-demo.html' title='MageDx Tech Demo'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g2Sd-4Un3tc/SbgckHlpoPI/AAAAAAAAACA/rCeZvMsVpZo/s72-c/screenshot58.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-5490409516734800938</id><published>2008-08-23T22:44:00.000+08:00</published><updated>2008-08-23T22:46:03.417+08:00</updated><title type='text'>I'm still alive...</title><content type='html'>Just a quick update to remind myself i need to update this blog with more stuff soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-5490409516734800938?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/5490409516734800938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=5490409516734800938' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/5490409516734800938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/5490409516734800938'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2008/08/im-still-alive.html' title='I&apos;m still alive...'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-3040022364587139825</id><published>2008-06-06T14:40:00.004+08:00</published><updated>2008-06-06T16:02:06.971+08:00</updated><title type='text'>First post!</title><content type='html'>Let me officially start this blog by first introducing myself. My name is meide, i'm a 24 years old male, born in Singapore and currently working as a graphics programmer at Ksatria Gameworks. During my free time (which is getting lesser nowadays) i will be working on my own game engine called MageDx.&lt;br /&gt;&lt;br /&gt;By this time you might be wondering... doesn't MageDx sounds familar?  (Hint : Look all the way up ;) ) That's right! This blog was specifically created for MageDx! Here, i will be posting mostly on the progress of the development of the engine. (I used to have a website for MageDx which you can find &lt;a href="http://members.fortunecity.com/magedx/"&gt;here&lt;/a&gt;, but i found it too troublesome to maintain, that's why i decided to move my stuff here)&lt;br /&gt;&lt;br /&gt;Of course, being a graphics programmer and a gamer, i'm also interested in anything that has to do with graphics and games in general as well so expect to see posts that covers these topics as well.  I guess that's about it for my first official post, till next time then.&lt;br /&gt;&lt;br /&gt;&lt;shameless&gt;Btw Ksatria Gameworks is hiring! go to &lt;a href="http://www.ksatria.com/Careers.html"&gt;http://www.ksatria.com/Careers.html&lt;/a&gt; for more details! &lt;/shameless&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-3040022364587139825?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/3040022364587139825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=3040022364587139825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/3040022364587139825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/3040022364587139825'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2008/06/first-post.html' title='First post!'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3849594599759469528.post-2926937650828404983</id><published>2008-06-06T11:26:00.002+08:00</published><updated>2008-06-06T11:29:14.440+08:00</updated><title type='text'>Test!</title><content type='html'>Hello World! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3849594599759469528-2926937650828404983?l=magedx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://magedx.blogspot.com/feeds/2926937650828404983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3849594599759469528&amp;postID=2926937650828404983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/2926937650828404983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3849594599759469528/posts/default/2926937650828404983'/><link rel='alternate' type='text/html' href='http://magedx.blogspot.com/2008/06/test.html' title='Test!'/><author><name>Mei De, Koh</name><uri>http://www.blogger.com/profile/10091465586350172887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
