<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A little niche in a Digital World.</title>
	<atom:link href="http://www.karsten-rohweder.de/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.karsten-rohweder.de</link>
	<description>my irrelevant musings about life, gaming and digital art...</description>
	<lastBuildDate>Mon, 18 Jul 2011 09:06:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Ruby, MySQL and Snow Leopard</title>
		<link>http://www.karsten-rohweder.de/?p=285</link>
		<comments>http://www.karsten-rohweder.de/?p=285#comments</comments>
		<pubDate>Mon, 18 Jul 2011 09:02:01 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=285</guid>
		<description><![CDATA[It should have been a simple excercise. I just wanted to set up a dev environment for a Ruby on Rails app that uses MySQL on my Snow Leopard Macbook 5.5 &#8211; easy, right? I wish&#8230; after much trial-and-error, and many encounters with the dreaded error message: "uninitialized constant MysqlCompat::MysqlRes" &#8230; I finally got everything [...]]]></description>
			<content:encoded><![CDATA[<p>It should have been a simple excercise. I just wanted to set up a dev environment for a Ruby on Rails app that uses MySQL on my Snow Leopard Macbook 5.5 &#8211; easy, right? I wish&#8230; after much trial-and-error, and many encounters with the dreaded error message:</p>
<pre>"uninitialized constant MysqlCompat::MysqlRes"</pre>
<p>&#8230; I finally got everything to work using the following steps:</p>
<ol>
<li>Installing the 64-bit version of MySQL 5.5.14 using the .dmg installer.</li>
<li>removing all possibly pre-existing versions of the mysql gem:
<pre>sudo gem uninstall mysql</pre>
</li>
<li>Installing the correct gem with the following line:
<pre>sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config</pre>
</li>
<li>This trick is missing from most howto&#8217;s: I needed to set the linker path.
<pre>export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/</pre>
</li>
</ol>
<p>After this, you can verify your installation is working with irb:</p>
<pre>Motoko:project-rails karsten$ irb
&gt;&gt; require 'rubygems'
=&gt; false
&gt;&gt; require 'mysql_api'
=&gt; true
&gt;&gt; Mysql.get_client_info
=&gt; "5.5.14"</pre>
<p>Having done this, the rake db creation and migration tasks went smoothly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=285</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>developing a VR tank</title>
		<link>http://www.karsten-rohweder.de/?p=273</link>
		<comments>http://www.karsten-rohweder.de/?p=273#comments</comments>
		<pubDate>Mon, 04 Apr 2011 15:00:37 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[PC development]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=273</guid>
		<description><![CDATA[Last week I finished the most exciting project of my professional life (so far): I got to develop a 180° projection surface virtual reality system, more catchily coined a VR tank. It features: a curved projection surface measuring more than 4 meters in width and 2 meters height a HD stereo rear-projection system consisting of [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I finished the most exciting project of my professional life (so far): I got to develop a 180° projection surface virtual reality system, more catchily coined a <strong>VR tank</strong>. It features:</p>
<ul>
<li>a <strong>curved projection surface</strong> measuring more than 4 meters in width and 2 meters height</li>
<li>a HD stereo rear-projection system consisting of <strong>4 projectors</strong></li>
<li>a 10-camera <strong>VICON </strong>motion capture system</li>
<li>optionally, a <strong>treadmill</strong> to give users an infinite walk-space</li>
</ul>
<p>My part in the project focussed on developing a VR application framework in C++, integrating the open-source Horde3D engine, interfacing with the real-time Vicon data stream and developing a new perspective-based rendering pipeline. It was most satisfying!</p>
<p>Below you can see a video of the system in action (filmed in infrared). The bright things atop the screen are Vicon cameras, their bright glare is infrared only and usually not visible. You can see how the user perspective is dynamically calculated based on head position: the black areas outside his field of view are not visible to the user.</p>
<p><script type='text/javascript' src='http://www.karsten-rohweder.de/wp-content/plugins/hana-flv-player/flowplayer3/example/flowplayer-3.2.6.min.js'></script>
<div >
<div id='hana_flv_flow3_1' style='display:block;width:550px;height:412px;' title=""></div>
</div>

			<script  type='text/javascript'>
		flowplayer('hana_flv_flow3_1', { src: 'http://www.karsten-rohweder.de/wp-content/plugins/hana-flv-player/flowplayer3/flowplayer-3.2.7.swf', wmode: 'transparent' }, { 

    		clip:  { 
    			url: 'http://www.karsten-rohweder.de/wp-content/uploads/2011/04/VRtank.flv',
        		scaling: 'scale', autoPlay: false, autoBuffering: true 

	        }

		}); 
			</script></p>
<p>The objects that the user is interacting with appear to him as floating in front of the screen. The Vicon system does full-body skeleton reconstruction, and we&#8217;re tracking the user&#8217;s hand position to detect object interactions: the spheres &#8220;bounce&#8221; and disappear when he touches them. They seem blurry in the video because the two stereo-separated views are superimposed.</p>
<h3>How does it work?</h3>
<p>We&#8217;re using the Vicon system to implement a 6-degrees-of-freedom headtracker, with which we can approximate the user&#8217;s field of view in the virtual world. Using standard OpenGL cameras, we then render two fixed-fov views, one for each eye. The &#8220;magical ingredient&#8221; is then a GLSL shader to raytrace these world views onto a theoretical cylinder, representing our projection surface. These final images are then drawn (quadbuffered) on a fullscreen quad spanning the projection screen.</p>
<p>The video unfortunately shows only a rather boring environment view &#8211; it&#8217;s amazing how real and immersive more complex environments feel when experienced through our setup.</p>
<p>I&#8217;d like to thank my esteemed colleague Martin Löffler for the productive collaboration and all the fun we had!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=273</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.karsten-rohweder.de/wp-content/uploads/2011/04/VRtank.flv" length="3269160" type="video/x-flv" />
		</item>
		<item>
		<title>Emotional expressions</title>
		<link>http://www.karsten-rohweder.de/?p=258</link>
		<comments>http://www.karsten-rohweder.de/?p=258#comments</comments>
		<pubDate>Thu, 17 Mar 2011 10:03:12 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[3ds Max]]></category>
		<category><![CDATA[Media production]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=258</guid>
		<description><![CDATA[I recently made some short prototype stimulus clips for the EC TANGO research project. The motion capturing was done by a colleague, I then processed the data in MotionBuilder and rendered in 3ds max. I&#8217;m quite pleased with the overall aesthetics of the clips, and surprised how emotionally expressive they are despite using such a [...]]]></description>
			<content:encoded><![CDATA[<p>I recently made some short prototype stimulus clips for the EC TANGO research project. The motion capturing was done by a colleague, I then processed the data in MotionBuilder and rendered in 3ds max. I&#8217;m quite pleased with the overall aesthetics of the clips, and surprised how emotionally expressive they are despite using such a sparse avatar!</p>
<p>Here are some samples I can share, along with a little game: Identify the emotions! <img src='http://www.karsten-rohweder.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<select id="vid1">
<option value="1">Anger</option>
<option value="2">Fear</option>
<option value="3">Happiness</option>
</select>
<p>
<div >
<div id='hana_flv_flow3_2' style='display:block;width:500px;height:375px;' title=""></div>
</div>

			<script  type='text/javascript'>
		flowplayer('hana_flv_flow3_2', { src: 'http://www.karsten-rohweder.de/wp-content/plugins/hana-flv-player/flowplayer3/flowplayer-3.2.7.swf', wmode: 'transparent' }, { 

    		clip:  { 
    			url: 'http://www.karsten-rohweder.de/wp-content/uploads/2011/03/freude_szene4_watermarked.flv',
        		scaling: 'scale', autoPlay: false, autoBuffering: true 

	        }

		}); 
			</script></p>
<select id="vid2">
<option value="1">Anger</option>
<option value="2">Fear</option>
<option value="3">Happiness</option>
</select>
<p>
<div >
<div id='hana_flv_flow3_3' style='display:block;width:500px;height:375px;' title=""></div>
</div>

			<script  type='text/javascript'>
		flowplayer('hana_flv_flow3_3', { src: 'http://www.karsten-rohweder.de/wp-content/plugins/hana-flv-player/flowplayer3/flowplayer-3.2.7.swf', wmode: 'transparent' }, { 

    		clip:  { 
    			url: 'http://www.karsten-rohweder.de/wp-content/uploads/2011/03/furcht_szene3_watermarked.flv',
        		scaling: 'scale', autoPlay: false, autoBuffering: true 

	        }

		}); 
			</script></p>
<select id="vid3">
<option value="1">Anger</option>
<option value="2">Fear</option>
<option value="3">Happiness</option>
</select>
<p>
<div >
<div id='hana_flv_flow3_4' style='display:block;width:500px;height:375px;' title=""></div>
</div>

			<script  type='text/javascript'>
		flowplayer('hana_flv_flow3_4', { src: 'http://www.karsten-rohweder.de/wp-content/plugins/hana-flv-player/flowplayer3/flowplayer-3.2.7.swf', wmode: 'transparent' }, { 

    		clip:  { 
    			url: 'http://www.karsten-rohweder.de/wp-content/uploads/2011/03/wut_szene6_watermarked.flv',
        		scaling: 'scale', autoPlay: false, autoBuffering: true 

	        }

		}); 
			</script></p>
<p><button onclick="solve()" />Solve!</button><br />
<script type="text/javascript" src="http://www.karsten-rohweder.de/wp-content/uploads/2011/03/emogame.js">
</script></p>
<p>Your guess was&#8230; <span style="font-weight:bold" id="answer">???</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=258</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.karsten-rohweder.de/wp-content/uploads/2011/03/freude_szene4_watermarked.flv" length="382066" type="video/x-flv" />
<enclosure url="http://www.karsten-rohweder.de/wp-content/uploads/2011/03/furcht_szene3_watermarked.flv" length="1992445" type="video/x-flv" />
<enclosure url="http://www.karsten-rohweder.de/wp-content/uploads/2011/03/wut_szene6_watermarked.flv" length="456045" type="video/x-flv" />
		</item>
		<item>
		<title>Find of the day: cmd.exe&#8217;s REPLACE</title>
		<link>http://www.karsten-rohweder.de/?p=254</link>
		<comments>http://www.karsten-rohweder.de/?p=254#comments</comments>
		<pubDate>Wed, 16 Mar 2011 10:13:13 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=254</guid>
		<description><![CDATA[Here&#8217;s a surprisingly tough little problem: imagine you have a directory with ca. 90.000 image files, in  my case a frame stack of a video sequence. A selection of these has been processed, and the edited files now reside in a different directory. Now I want to re-build the updated frame stack by copying the [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a surprisingly tough little problem: imagine you have a directory with ca. 90.000 image files, in  my case a frame stack of a video sequence. A selection of these has been processed, and the edited files now reside in a different directory. Now I want to re-build the updated frame stack by copying the files from the old directory to the new one <strong>without prompting and without overwriting</strong>.</p>
<p>Seems easy, right? It would be, if Explorer wouldn&#8217;t crash when trying to copy such a massive amount of files. On the command line, it seems that copy, xcopy and robocopy are not built for this purpose. You can make them<em> overwrite without prompting</em>, but not <em>not overwrite without prompting</em>&#8230;</p>
<p>Enter <strong>replace</strong>. I&#8217;d never heard of the command until today,  but</p>
<pre>replace &lt;source&gt; &lt;destination&gt; /a</pre>
<p>does the trick&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=254</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Elderscrolls fun</title>
		<link>http://www.karsten-rohweder.de/?p=238</link>
		<comments>http://www.karsten-rohweder.de/?p=238#comments</comments>
		<pubDate>Mon, 10 Jan 2011 00:46:46 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=238</guid>
		<description><![CDATA[Here&#8217;s a fun little thing I came up with after solving the GameInformer translation riddle: an online dovahkiin rune writer. You can input arbitrary text, and the web site will find the appropriate runes, as far as they are known. You can try it out here! At the moment it does only phonetic transcription, no translation. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://apoapsis.net/runedict/runedict.html"><img class="alignleft size-full wp-image-242" title="skyrim_logo_alpha" src="http://www.karsten-rohweder.de/wp-content/uploads/2011/01/skyrim_logo_alpha.png" alt="" width="75" height="106" /></a>Here&#8217;s a fun little thing I came up with after solving the GameInformer translation riddle: an online dovahkiin rune writer. You can input arbitrary text, and the web site will find the appropriate runes, as far as they are known. You can <a title="External link" rel="nofollow external" href="http://apoapsis.net/runedict/runedict.html">try it out here</a>!</p>
<p>At the moment it does only phonetic transcription, no translation. Maybe I&#8217;ll add a little translation function later &#8211; shouldn&#8217;t be too hard if the language is just a 1:1 mapping to English&#8230;</p>
<p>Technologies: pure HTML, CSS and Javascript. Time from conception to completion: 4-5 hrs&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=238</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress update woes</title>
		<link>http://www.karsten-rohweder.de/?p=236</link>
		<comments>http://www.karsten-rohweder.de/?p=236#comments</comments>
		<pubDate>Sun, 02 Jan 2011 12:50:10 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=236</guid>
		<description><![CDATA[Bettina and I have organized our wedding on a WordPress-powered website. Being quite new to WordPress, we&#8217;ve been customizing our site theme (twentyten) by directly editing the style.css file. This worked great&#8230; until the WordPress 3.0.4 update came along. The update restored the style.css file back to default, undoing all our changes without so much [...]]]></description>
			<content:encoded><![CDATA[<p>Bettina and I have organized our wedding on a WordPress-powered website. Being quite new to WordPress, we&#8217;ve been customizing our site theme (twentyten) by directly editing the style.css file. This worked great&#8230; until the WordPress 3.0.4 update came along.</p>
<p>The update restored the style.css file back to default, undoing all our changes without so much as making a backup copy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=236</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress and jQuery UI</title>
		<link>http://www.karsten-rohweder.de/?p=231</link>
		<comments>http://www.karsten-rohweder.de/?p=231#comments</comments>
		<pubDate>Fri, 19 Nov 2010 14:34:42 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery ui]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=231</guid>
		<description><![CDATA[While working on a quite large WordPress plugin, I&#8217;ve started to use jQuery UI for all sorts of widgets on the admin panels. At first I was delighted that that WordPress (3.0.1) had the UI libraries pre-packaged, thinking that it would save me the trouble of including them myself. Well, turns out that was wishful [...]]]></description>
			<content:encoded><![CDATA[<p>While working on a quite large WordPress plugin, I&#8217;ve started to use jQuery UI for all sorts of widgets on the admin panels. At first I was delighted that that WordPress (3.0.1) had the UI libraries pre-packaged, thinking that it would save me the trouble of including them myself. Well, turns out that was wishful thinking!</p>
<p>For some reason the WordPress version of jQuery UI is severely stripped down. Out of the box, I couldn&#8217;t use Dialog, Datepicker and Accordion elements. I couldn&#8217;t find a CSS file for it, either. First, I worked around this by downloading the official jQuery UI distro and selectively including the missing elements. What I should have done much sooner is simply ditch the packaged version and use the official one!</p>
<p>To get it to work:</p>
<ul>
<li>download jQuery UI <strong>1.7.3</strong>, with all components selected</li>
<li>in the <em>admin_init </em>action callback, register the script and stylesheet</li>
<li>in the <em>admin_menu </em>callback, enqueue the library, with the packaged jQuery as a dependency:<br />
<span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">wp_enqueue_script( &#8216;my-jquery-ui&#8217;, null, array(&#8216;jquery&#8217;), null, true );</span></li>
</ul>
<p>That way you don&#8217;t even have to explicitly enqueue the base jQuery library, and I haven&#8217;t hit a snag since.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=231</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Vicon System explained</title>
		<link>http://www.karsten-rohweder.de/?p=212</link>
		<comments>http://www.karsten-rohweder.de/?p=212#comments</comments>
		<pubDate>Mon, 25 Oct 2010 09:15:02 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[3ds Max]]></category>
		<category><![CDATA[CGI & SFX]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=212</guid>
		<description><![CDATA[I just finished this a few days ago, and I rather like the final product! *Video: the vicon system explained This clip is intended for use in our section&#8217;s presentations, to explain the operation of the Vicon motion capture system: how the cameras infrared-illuminate the markers, capture their 3d positions, reconstruct a virtual skeleton and [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished this a few days ago, and I rather like the final product!</p>
<p>
<div >
<div id='hana_flv_flow3_5' style='display:block;width:480px;height:360px;' title="*Video:the vicon system explained"></div>
</div>

			<script  type='text/javascript'>
		flowplayer('hana_flv_flow3_5', { src: 'http://www.karsten-rohweder.de/wp-content/plugins/hana-flv-player/flowplayer3/flowplayer-3.2.7.swf', wmode: 'transparent' }, { 

    		clip:  { 
    			url: 'http://www.karsten-rohweder.de/wp-content/uploads/2010/10/Vicon_watermarked_1.f4v',
        		scaling: 'scale', autoPlay: false, autoBuffering: true 

	        }

		}); 
			</script></p>
<p>This clip is intended for use in our section&#8217;s presentations, to explain the operation of the Vicon motion capture system: how the cameras infrared-illuminate the markers, capture their 3d positions, reconstruct a virtual skeleton and compute the joint center trajectories.</p>
<p>Software used: 3ds max for modeling and animation, Composite for assembly and effects (self-illumination glow, z-buffer unsharp masking, lens effects.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=212</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A virtual Vicon camera</title>
		<link>http://www.karsten-rohweder.de/?p=189</link>
		<comments>http://www.karsten-rohweder.de/?p=189#comments</comments>
		<pubDate>Sun, 24 Oct 2010 16:01:15 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[3ds Max]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=189</guid>
		<description><![CDATA[We needed a &#8220;virtual motion lab&#8221; for our presentations, so I had to make a virtual VICON camera in 3dsmax. Fun times! Time from start to modeling finish: roughly two days&#8230; Because this is not a realtime model I used Turbosmooth modeling.]]></description>
			<content:encoded><![CDATA[<p>We needed a &#8220;virtual motion lab&#8221; for our presentations, so I had to make a virtual VICON camera in 3dsmax. Fun times!</p>
<div id="attachment_190" class="wp-caption alignnone" style="width: 310px"><a href="http://www.karsten-rohweder.de/wp-content/uploads/2010/10/Vicon-Model.jpg"><img class="size-medium wp-image-190" title="Vicon-Model" src="http://www.karsten-rohweder.de/wp-content/uploads/2010/10/Vicon-Model-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">No materials yet...</p></div>
<p>Time from start to modeling finish: roughly two days&#8230; Because this is not a realtime model I used Turbosmooth modeling.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=189</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screen-space Ambient Occlusion</title>
		<link>http://www.karsten-rohweder.de/?p=180</link>
		<comments>http://www.karsten-rohweder.de/?p=180#comments</comments>
		<pubDate>Sun, 24 Oct 2010 15:39:18 +0000</pubDate>
		<dc:creator>Karsten</dc:creator>
				<category><![CDATA[PC development]]></category>

		<guid isPermaLink="false">http://www.karsten-rohweder.de/?p=180</guid>
		<description><![CDATA[Screen-space ambient occlusion is all the rage today, and for a reason: it&#8217;s hard to find an approximation of accessibility shading with similar run-time characteristics (most importantly, being independent of scene complexity). Results are fast and consistent, and it looks a lot like global illumination (which, of course, it is not). So, when tasked to make [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_182" class="wp-caption alignright" style="width: 310px"><a href="http://www.karsten-rohweder.de/wp-content/uploads/2010/10/ssao-test.jpg"><img class="size-full wp-image-182" title="ssao-test_sm" src="http://www.karsten-rohweder.de/wp-content/uploads/2010/10/ssao-test_sm.jpg" alt="" width="300" height="299" /></a><p class="wp-caption-text">Shading only with texture or flat color and SSAO. No lighting or other shading used.</p></div>
<p><a href="http://en.wikipedia.org/wiki/Screen_Space_Ambient_Occlusion">Screen-space ambient occlusion</a> is all the rage today, and for a reason: it&#8217;s hard to find an approximation of accessibility shading with similar run-time characteristics (most importantly, being independent of scene complexity). Results are fast and consistent, and it looks a lot like global illumination (which, of course, it is not).</p>
<p>So, when tasked to make our techdemos prettier, this was a pretty obvious venue to explore. Since we already use <a href="http://www.horde3d.org/">Horde 3D</a>, a shader-driven game engine framework, it was mostly a matter of finding sample algorithms and adapting them to our engine. In the picture above you can see the shader in action.</p>
<p>In the demo, you can control the character and walk/run around the famous <a href="http://hdri.cgtechniques.com/~sponza/files/">Sponza atrium</a> (which for some inexplicable reason has filled up with giant blue cubes). Smooth animation blending thanks to the sweet Horde3D framework. Developing the shader took about a week, the demo application ca. 1 day.</p>
<p>The cubes appear a bit out-of-focus because the ambient occlusion map is being rendered at small resolutions, then filtered with a Gaussian blur kernel and up-scaled to reduce the noise that is inherent to the method. Combining the SSAO shader with some actual lighting (that would accentuate the edges) would fix that, but wasn&#8217;t in the scope of the demo.</p>
<p>Code and binary downloads will follow in a few days!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karsten-rohweder.de/?feed=rss2&#038;p=180</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

