<?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>Airtight Interactive</title>
	<atom:link href="http://www.airtightinteractive.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.airtightinteractive.com</link>
	<description>Felix Turner&#039;s blog about technology &#38; design.</description>
	<lastBuildDate>Thu, 12 Apr 2012 06:42:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>I Killed Krauss!</title>
		<link>http://www.airtightinteractive.com/2012/04/i-killed-krauss/</link>
		<comments>http://www.airtightinteractive.com/2012/04/i-killed-krauss/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 20:41:40 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[Elsewhere]]></category>
		<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1247</guid>
		<description><![CDATA[This cartoon manages to be quite profound in just 3 panels. From Tom the Dancing Bug by Ruben Bolling. I can imagine a Charlie Kaufman-esque sci-fi movie based on this concept.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2012/04/tim_tripp.jpg" alt="" title="tim_tripp" width="590" height="246" class="alignnone size-full wp-image-1248" /></p>
<p>This cartoon manages to be quite profound in just 3 panels. From <a href="http://www.gocomics.com/tomthedancingbug/2012/02/24">Tom the Dancing Bug</a> by Ruben Bolling. I can imagine a Charlie Kaufman-esque sci-fi movie based on this concept.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2012/04/i-killed-krauss/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Are Ideas Really Worthless?</title>
		<link>http://www.airtightinteractive.com/2012/03/are-ideas-really-worthless/</link>
		<comments>http://www.airtightinteractive.com/2012/03/are-ideas-really-worthless/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 22:02:11 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[Useful]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1229</guid>
		<description><![CDATA[It&#8217;s received wisdom among startup types that: &#8220;Ideas are worthless, it&#8217;s the execution that counts&#8221;. It&#8217;s become so much of a cliche that the great pop-sci middle-brow heavy-weight Malcolm Gladwell has just written a New Yorker article about it. Now obviously there is some truth to this. It&#8217;s easy to say &#8211; &#8220;Let&#8217;s build a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2012/03/851653674_009b0f34be_b-590x442.jpg" alt="http://www.flickr.com/photos/sadi-junior/" title="Image by Sadi Junior Photography" width="590" height="442" class="alignnone size-large wp-image-1230" /></p>
<p>It&#8217;s received wisdom among startup types that: &#8220;Ideas are worthless, it&#8217;s the execution that counts&#8221;. It&#8217;s become so much of a cliche that the great pop-sci middle-brow heavy-weight Malcolm Gladwell has just written a <a href="http://www.newyorker.com/reporting/2008/05/12/080512fa_fact_gladwell?currentPage=all">New Yorker article</a> about it.</p>
<p>Now obviously there is some truth to this. It&#8217;s easy to say &#8211; &#8220;Let&#8217;s build a website exactly like Tumblr, but for recipes!&#8221; And then <a href="http://pinterest.com/">do nothing about it</a>. This happens to me multiple times a day. </p>
<p>However there is a counter argument: <strong>without the right idea, any amount of execution is worthless.</strong></p>
<p>I have personally seen it many times. Brilliant technologists who build a startup around an idea that just doesn&#8217;t make much sense. It either doesn&#8217;t fulfill a need, or it cannot be explained in one sentence, or it is just too similar to ideas many other startups are executing on at the same time.</p>
<p>So yes, the execution is incredibly important &#8211; but so is finding the right idea to execute on. Building a technically or aesthetically wonderful product is a waste of time if nobody wants to use it.</p>
<p>The hard part is figuring out which are the good ideas and which are the bad. Doing this requires a combination of intuition, research and general knowledge of the world around you.</p>
<p>Flickr founder Caterina Fake voiced a <a href="http://caterina.net/archive/001196.html">similar opinion</a> a while ago that resonated with me:</p>
<blockquote><p>&#8220;Much more important than working hard is knowing how to find the right thing to work on. Paying attention to what is going on in the world. Seeing patterns. Being able to read what people want.&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2012/03/are-ideas-really-worthless/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Loop Waveform Visualizer</title>
		<link>http://www.airtightinteractive.com/2012/01/loop-waveform-visualizer/</link>
		<comments>http://www.airtightinteractive.com/2012/01/loop-waveform-visualizer/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 19:02:54 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1215</guid>
		<description><![CDATA[Chrome&#8217;s new Web Audio API allows us to do some pretty amazing audio stuff directly in the browser. Specifically the RealtimeAnalyserNode Interface provides real-time frequency and time-domain audio analysis which allows you to display &#8216;graphic equalizer&#8217; style level bar charts and waveforms of an audio source. Chrome&#8217;s drag-and-drop file handling also allows you to drag [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://airtightinteractive.com/demos/js/reactive/"><img src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2012/01/loop.jpg" alt="" title="loop" width="590" height="376" class="alignnone size-full wp-image-1216" /></a></p>
<p>Chrome&#8217;s new <a href="http://chromium.googlecode.com/svn/trunk/samples/audio/index.html">Web Audio API</a> allows us to do some pretty amazing audio stuff directly in the browser. Specifically the <a href="https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#RealtimeAnalyserNode-section">RealtimeAnalyserNode Interface</a> provides real-time frequency and time-domain audio analysis which allows you to display &#8216;graphic equalizer&#8217; style level bar charts and waveforms of an audio source. Chrome&#8217;s drag-and-drop file handling also allows you to drag and play MP3 files from the desktop. This gives a lot of potential to build very cool realtime audio visualizations in the browser, which was previously only possible using Processing or similar.</p>
<p>The <a href="http://airtightinteractive.com/demos/js/reactive/">Loop Waveform Visualizer</a> uses a combination of level and waveform data to produce a circular audio visualization of any MP3. Use the mouse to tilt and the mousewheel to zoom. </p>
<p><strong>To run this, you need a WebGL capable machine and the latest Chrome.</strong> Also be aware that it won&#8217;t look as good when running under Windows, since Chrome&#8217;s WebGL implementation on Windows does not suport line thickness (among other issues).  It works better if you use a track that has a high dynamic range (meaning the volume of the track changes a lot over time).</p>
<p>The current time slice is rendered in the center, then displaced outwards over time. The level determines the brightness, thickness and Z scale of the loops. The Z displacement gives a nice &#8216;bounce to the beat&#8217; effect. The waveform shape is drawn into the loop which means you can almost &#8216;see&#8217; the sound. As with most visualizations, there was a lot of parameter tweaking to give a nice feel. I&#8217;m very happy with the performance of this piece &#8211; on my box it&#8217;s stays pretty solid at 60FPS. This is partially due to the fact that no new 3D objects are created over time. The 160 loops are created on initialization, then have their geometry modified each frame.</p>
<p>I have some plans to improve this piece, including adding post-processing effects, volume sensitivity controls, auto camera movement etc. Let me know if you have any more suggestions for improvement in the comments.</p>
<p>Creative Commons audio sample is from <a href="http://freemusicarchive.org/music/Beytah/Bleep_or_Die/10_-_Beytah_-_Screw_Base">“Screw Base” by Beytah</a>. Built with <a href="https://github.com/mrdoob/three.js/">Three.js</a>. Source is accessible from the demo URL.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2012/01/loop-waveform-visualizer/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Los Angeles WebGL Meetup Recap</title>
		<link>http://www.airtightinteractive.com/2011/12/los-angeles-webgl-meetup-recap/</link>
		<comments>http://www.airtightinteractive.com/2011/12/los-angeles-webgl-meetup-recap/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 22:53:10 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Useful]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1204</guid>
		<description><![CDATA[The first Los Angeles WebGL Meetup was a big success! Thanks to everyone who showed up. The purpose of this meetup is to discuss interactive 3D graphics in the browser, using WebGL, Stage3D and even Unity3D. Bartek Drozdz and I put the meetup together so that we can all learn from each other and make [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/12/webgl.jpg" alt="" title="webgl" width="590" height="293" class="alignnone size-full wp-image-1208" /></p>
<p>The first <a href="http://www.meetup.com/LA-WebGL-Meetup/">Los Angeles WebGL Meetup</a> was a big success! Thanks to everyone who showed up.</p>
<p>The purpose of this meetup is to discuss interactive 3D graphics in the browser, using WebGL, Stage3D and even Unity3D. <a href="http://www.everyday3d.com/">Bartek Drozdz</a> and I put the meetup together so that we can all learn from each other and make some good connections. These technologies came out very recently and there is a lot of potential to make some very cool stuff. </p>
<p>For the first meetup, I gave a presentation on the current state of interactive web 3D. View the demos <a href="http://airtightinteractive.com/webgltalk/">here</a>. View the slides from the talk <a href="http://airtightinteractive.com/webgltalk/Web3DPresentation.pdf">here</a> (PDF).</p>
<p>Bartek gave a presentation on his <a href="https://github.com/drojdjou/J3D">J3D</a> WebGL 3D engine. View the slides from the talk <a href="http://www.everyday3d.com/webgl_camp_4.pdf">here</a> (PDF). </p>
<p>We plan on doing the next meetup sometime in January. If you are in the area and want to learn about next-generation 3D in the browser, or give a presentation &#8211; please <a href="http://www.meetup.com/LA-WebGL-Meetup/">join us</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2011/12/los-angeles-webgl-meetup-recap/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Stage3D vs WebGL Performance</title>
		<link>http://www.airtightinteractive.com/2011/10/stage3d-vs-webgl-performance/</link>
		<comments>http://www.airtightinteractive.com/2011/10/stage3d-vs-webgl-performance/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 07:51:41 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1152</guid>
		<description><![CDATA[So you want to build some crazy next-gen 3D graphics in the browser? Right now there are 2 good options available: Flash 11&#8242;s Stage3D versus JavaScript&#8217;s native WebGL. Demos and Source Code To compare the performance of both options I built a couple of simple demos that show 100 semi-transparent cubes with Additive Blending and 2 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-1181" title="stage3d_Webgl" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/10/stage3d_Webgl1.png" alt="" width="590" height="300" /></p>
<p>So you want to build some crazy next-gen 3D graphics in the browser? Right now there are 2 good options available: Flash 11&#8242;s <a href="http://www.adobe.com/devnet/flashplayer/stage3d.html">Stage3D</a> versus JavaScript&#8217;s native <a href="http://en.wikipedia.org/wiki/WebGL">WebGL</a>.</p>
<h3>Demos and Source Code</h3>
<p>To compare the performance of both options I built a couple of simple demos that show 100 semi-transparent cubes with Additive Blending and 2 point lights.The purpose of these demos is to compare 2 equivalent 3D scenes built with the 2 technologies.</p>
<ul>
<li><a href="http://airtightinteractive.com/demos/flash/stage3d/cubes/">Stage3D Demo</a> | <a href="http://airtightinteractive.com/demos/flash/stage3d/cubes/cubes_stage3d.zip">Source Code</a></li>
<li><a href="http://airtightinteractive.com/demos/js/cubes/">WebGL Demo</a> | <a href="http://airtightinteractive.com/demos/js/cubes/cubes_webgl.zip">Source Code</a></li>
</ul>
<p>If you are getting low frame rates, try reducing the size of the browser window. On the Stage3D demo, check the debug panel DRIV field for if it says &#8220;OpenGL&#8221; or &#8220;Software&#8221; (see below for what this means).</p>
<h3>Building the Demos</h3>
<p>For these demos I used <strong>Away3D 4</strong> for Stage3D and <strong>Three.js</strong> for WebGL.</p>
<p><a href="http://away3d.com/comments/away3d-4-0-alpha-release-broomstick">Away3D 4</a> is the latest version of the popular Flash 3D engine, built to utilize Stage3D. Away3D has a great <a href="http://away3d.com/forum">online community</a> and a well maintained set of <a href="http://away3d.com/livedocs/away3d-core-fp11/">API docs</a>. Away3D 4 is currently in alpha and some features are missing, for example there is no Particle System object and the filters/shaders support is pretty limited. <a href="http://www.adobe.com/devnet/flashplayer/articles/creating-games-away3d.html">Use this tutorial</a> to get started with Away3D 4.</p>
<p><a href="https://github.com/mrdoob/three.js/blob/master/README.md">Three.js</a> is an open source WebGL 3D engine that has an energetic community who are constantly adding new features. There are <a href="http://fhtr.org/BasicsOfThreeJS/#1">plenty of tutorials</a> showing how to get started with Three.js.</p>
<h3>Code Comparison</h3>
<p>Away3D and Three.js have very similar logical models and syntax. For example to create a Cube in Away3D, you do this:</p>
<pre><code>var cube:Cube = new Cube(material, 100,100,100);
view.scene.addChild(cube); </code></pre>
<p>To do the same in Three.js, you do this:</p>
<pre><code>var geometry = new THREE.CubeGeometry(100, 100, 100);
var cube = new THREE.Mesh(geometry, material);
scene.add(cube); </code></pre>
<h3>Supported Platforms</h3>
<p>To run with hardware acceleration, Stage3D requires Flash 11 and a recent graphics card. If Stage3D cannot use hardware rendering it will fall back to software rendering which is around 5-10 times slower. For a list of Stage3D unsupported GPUs, <a href="http://kb2.adobe.com/cps/921/cpsid_92103.html">check here</a>. You can <a href="http://www.mcfunkypants.com/2011/flash11-stage3d-tutorial-handling-init-errors/">manually detect</a> for software rendering mode, and handle it appropriately. Stage3D uses OpenGL on Mac and DirectX on Windows. The big advantage for Stage3D is that it will run in IE.</p>
<p>WebGL requires no plugins and is currently supported in Chrome, Firefox, Safari and Opera. (But not IE &#8211; cheers Microsoft!). WebGL in Chrome on Windows uses <a href="http://blog.chromium.org/2010/03/introducing-angle-project.html">ANGLE</a> which converts WebGL to DirectX and gives good performance.</p>
<p>On the Mac, both Stage3D and WebGL translate to OpenGL, so there is not much difference in performance. Neither options currently run on mobile devices (iOS / Android), however both are expected to in the future.</p>
<h3>Performance Comparison</h3>
<p>I tested the 2 demos on a MacBook Pro (with an NVIDIA GeForce GT 330M) and a mid-range Windows 7 Dell laptop (with integrated Intel(R) HD Graphics). <strong>Your mileage will vary</strong>.</p>
<table width="100%" border="1" cellspacing="10">
<tbody>
<tr>
<td></td>
<td><strong>Stage3D</strong></td>
<td><strong>WebGL</strong></td>
</tr>
<tr>
<td>Mac / Chrome</td>
<td>60 FPS (OpenGL)</td>
<td>60 FPS</td>
</tr>
<tr>
<td>Mac / Firefox</td>
<td>60 FPS (OpenGL)</td>
<td>60 FPS</td>
</tr>
<tr>
<td>Mac / Safari</td>
<td>60 FPS (OpenGL)</td>
<td>60 FPS</td>
</tr>
<tr>
<td>Windows / Chrome</td>
<td>8 FPS (Software)</td>
<td>50 FPS</td>
</tr>
<tr>
<td>Windows / Firefox</td>
<td>8 FPS (Software)</td>
<td>Does not run</td>
</tr>
<tr>
<td>Windows / IE</td>
<td>12 FPS (Software)</td>
<td>Does not run</td>
</tr>
</tbody>
</table>
<p></br><br />
On the Mac, Stage3D and WebGL both perform well. On Windows, Stage3D performs well if you have supported hardware, otherwise poorly.  On Windows, WebGL performs well in Chrome, otherwise it does not run. It&#8217;s interesting that Windows / Chrome with WebGL gives good performance even with an integrated GPU.</p>
<p>On the Mac, the Stage3D demo is slower to initialize and the frame-rate has more stutters than the WebGL equivalent. Stage3D gives more interesting color blending and specular highlights.</p>
<h3>Summary</h3>
<p>Stage3D and WebGL are both great technologies for delivering interactive 3D content in the browser. Away3D and Three.js provide surprisingly similar APIs for developing 3D content.</p>
<p>When the hardware supports it, both options give great performance. Unfortunately neither option runs well across the most common hardware configurations. If you want to target the general population, you will need to provide alternative content for non-supported machines.</p>
<p>Stage3D&#8217;s software mode is a nice idea, in that it will show 3D content on unsupported machines. The problem is that the performance is unusably slow. Is it better to show something that performs badly, or to redirect to alternative content?</p>
<p>Since Chrome is a free install on Mac and Windows, you could argue that using WebGL gives a broader reach with decent performance. Perhaps we will start seeing more &#8216;View this site in Chrome&#8217; banners?</p>
<p>Want more stuff like this? <a href="http://www.twitter.com/felixturner">Follow me on Twitter</a>.</p>
<p><strong>UPDATE</strong> &#8211; There are many comments reporting 60FPS with Windows/Stage3D. The numbers above do not claim to represent a broad range of machine configurations, just what I observed on the 2 machines closest to me. My test PC laptop has an integrated GPU and therefore does not support Stage3D hardware mode. It is a mid-range laptop, less than 6 months old and as such is probably a good indication of where the general public is at.</p>
<p><strong>UPDATE 2</strong> &#8211; I&#8217;ve updated the demos to allow you to add more cubes, so please go crazy with 1000s of cubes! I also added a mouse look and updated Three.js to r46. On my MBP, WebGL handles 1000 cubes a lot better than Stage3D.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2011/10/stage3d-vs-webgl-performance/feed/</wfw:commentRss>
		<slash:comments>56</slash:comments>
		</item>
		<item>
		<title>View All Your Tweets On One Page with AllMyTweets</title>
		<link>http://www.airtightinteractive.com/2011/06/view-all-your-tweets-on-one-page-with-allmytweets/</link>
		<comments>http://www.airtightinteractive.com/2011/06/view-all-your-tweets-on-one-page-with-allmytweets/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 23:54:57 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Useful]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1106</guid>
		<description><![CDATA[Trying to find that cool URL that you posted to Twitter a few months ago? Want to easily archive all your tweets? Now you can with AllMyTweets. AllMyTweets displays all your tweets on one page. Just enter your Twitter user name. All of the data is pulled from Twitter&#8217;s public API, so no authentication is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.allmytweets.net"><img src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/06/alltweets1.jpg" alt="" title="alltweets" width="590" height="231" class="alignnone size-full wp-image-1112" /></a>Trying to find that cool URL that you posted to Twitter a few months ago? Want to easily archive all your tweets? Now you can with <a href="http://www.allmytweets.net">AllMyTweets</a>. AllMyTweets displays all your tweets on one page. Just enter your Twitter user name. All of the data is pulled from Twitter&#8217;s public API, so no authentication is required. To archive your tweets, select all the text on the page, copy it and paste to a text document &#8211; old school style <img src='http://www.airtightinteractive.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Note that Twitter limits the maximum number of tweets returned to 3,200, so if you have more tweets than that you are out of luck. Also the Twitter API is not always completely reliable so you may find the loading hangs sometimes. If this happens, please try again later.</p>
<p>I built this because there I couldn&#8217;t find anything similar on the web, and I figured other people must want to be able to do the same thing. Please put any feedback in the comments. Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2011/06/view-all-your-tweets-on-one-page-with-allmytweets/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Rutt-Etra-Izer</title>
		<link>http://www.airtightinteractive.com/2011/06/rutt-etra-izer/</link>
		<comments>http://www.airtightinteractive.com/2011/06/rutt-etra-izer/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 05:09:58 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1078</guid>
		<description><![CDATA[Rutt-Etra-Izer is a WebGL emulation of the classic Rutt-Etra video synthesizer. This demo replicates the Z-displacement, scanned-line look of the original, but does not attempt to replicate it&#8217;s full feature set. The demo allows you to drag and drop your own images, manipulate them and save the output. Images are generated by scanning the pixels [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://airtightinteractive.com/demos/js/ruttetra/"><img src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/06/girl.jpg" alt="" title="girl" width="590" height="332" class="alignnone size-full wp-image-1094" /></a></p>
<p><a href="http://www.chromeexperiments.com/detail/rutt-etra-izer/"><img class="alignright size-full wp-image-1075" title="white" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/05/white.png" alt="See my Experiment on ChromeExperiments.com" width="160" height="92" /></a> <a href="http://airtightinteractive.com/demos/js/ruttetra/">Rutt-Etra-Izer</a> is a WebGL emulation of the classic <a href="http://www.audiovisualizers.com/toolshak/vidsynth/ruttetra/ruttetra.htm">Rutt-Etra video synthesizer</a>. This demo replicates the Z-displacement, scanned-line look of the original, but does not attempt to replicate it&#8217;s full feature set. </p>
<p>The demo allows you to drag and drop your own images, manipulate them and save the output. Images are generated by scanning the pixels of the input image from top to bottom, with scan-line separated by the &#8216;Line Separation&#8217; amount. For each line generated, the z-position of the vertices is dependent on the brightness of the pixels.</p>
<p><a href="http://airtightinteractive.com/demos/js/ruttetra/">View Demo</a> | <a href="http://airtightinteractive.com/demos/js/ruttetra/source.zip">Download Source</a></p>
<h3>Running the Demo</h3>
<p>To run the demo you need the latest version of Chrome or Firefox, and a fairly new machine. <a href="http://www.doesmybrowsersupportwebgl.com/">Check if your browser supports WebGL here</a>. If it&#8217;s still not working, try restarting your browser.</p>
<p>If you are experiencing slow performance, there are a few things to try:&nbsp;</p>
<ul>
<li>Reduce stage size</li>
<li>Increase line separation</li>
<li>Reduce input image size</li>
</ul>
<h3>Generated Output</h3>
<p>You can view more images generated by this demo in this <a href="http://www.flickr.com/photos/felixturner/sets/72157624013383339/">Flickr set</a>.</p>
<p><a href="http://www.flickr.com/photos/felixturner/5710494901/in/photostream"><img src="http://farm3.static.flickr.com/2653/5710494901_2ca6ddbfb2_z.jpg" alt="" /></a></p>
<p><a href="http://www.flickr.com/photos/felixturner/5708939610/sizes/l/in/set-72157624013383339/"><img src="http://farm3.static.flickr.com/2115/5708939610_be5f47c4d8_z.jpg" alt="" /></a></p>
<p><a href="http://www.flickr.com/photos/felixturner/5708372699/in/set-72157624013383339"><img src="http://farm3.static.flickr.com/2366/5708372699_e939af10f3_z.jpg" alt="" /></a></p>
<p>I also built an audio-reactive version with Processing . View a video of this in action  below:</p>
<p><iframe src="http://player.vimeo.com/video/23619204" width="590" height="332" frameborder="0"></iframe>
<p><a href="http://vimeo.com/23619204">VAC / Rutt-Etra-Izer™</a> from <a href="http://vimeo.com/felixturner">felixturner</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h3>More About Rutt-Etra</h3>
<p>The <a href="http://www.youtube.com/watch?v=EZQiHuTbnes">Rutt-Etra video synthesizer</a> was built by Steve Rutt and Bill Etra in 1972. It was one of the first devices to allow real-time manipulation of live video and helped instigate the video art movement of the 1970s. Unfortunately Steve Rutt <a href="http://www.nytimes.com/2011/05/29/arts/steve-rutt-an-inventor-behind-early-video-animation-dies-at-66.html">recently passed away</a>. His pioneering contributions to the field of video art will be always be remembered.</p>
<p>Anton Marini (Vade) created a fantastic <a href="http://v002.info/?page_id=19">Rutt-Etra Emulator for Quartz Composer</a>. The source code of this demo is inspired by Andy Best&#8217;s <a href="http://andybest.net/2008/11/3d-webcam-lines-additive-blending/">3D Web Cam Lines</a> processing experiment.</p>
<h3>Credits</h3>
<ul>
<li>Built by <a href="http://www.airtight.cc">Airtight</a></li>
<li>Powered by <a href="https://github.com/mrdoob/three.js/">Three.js</a></li>
<li>GUI by <a href="http://dataarts.github.com/dat.gui/">dat.gui</a>	</li>
</ul>
<p><em><strong>UPDATE (June 13):</strong> It appears that saving images from WebGL is broken in Chrome 12. I&#8217;m looking into possible solutions. In the meantime, you can use Firefox instead.</em></p>
<p><em><strong>UPDATE (June 14):</strong> Saving images in now fixed in Chrome 12. The <a href="https://github.com/mrdoob/three.js/issues/264">solution</a> is to call a render() immediately before calling toDataURL(). Thanks again to <a href="https://github.com/alteredq">AlteredQualia</a> and <a href="https://github.com/mrdoob">Mr.doob</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2011/06/rutt-etra-izer/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Nebula &#8211; a Three.js Experiment</title>
		<link>http://www.airtightinteractive.com/2011/05/nebula-a-three-js-experiment/</link>
		<comments>http://www.airtightinteractive.com/2011/05/nebula-a-three-js-experiment/#comments</comments>
		<pubDate>Wed, 04 May 2011 23:10:18 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1051</guid>
		<description><![CDATA[In order to learn Three.js with WebGL I built this particle experiment. The purpose of this demo is to investigate the performance of WebGL in the browser and to get some nice eye-candy in the process. To run WebGL you need the latest version of Chrome or Firefox and a machine that is not more [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/demos/js/nebula/"><img class="alignnone size-full wp-image-1052" title="nebula" src="/wordpress/wp-content/uploads/2011/05/nebula.jpg" alt="" width="590" height="320" /></a></p>
<p><a href="http://www.chromeexperiments.com/detail/nebula/"><img class="alignright size-full wp-image-1075" title="white" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/05/white.png" alt="See my Experiment on ChromeExperiments.com" width="160" height="92" /></a> In order to learn <a href="https://github.com/mrdoob/three.js/#readme">Three.js</a> with WebGL I built this <a href="/demos/js/nebula/">particle experiment</a>. The purpose of this demo is to investigate the performance of WebGL in the browser and to get some nice eye-candy in the process.</p>
<p>To run WebGL you need the latest version of Chrome or Firefox and a machine that is not more than a couple of years old. If you have this and it’s still not working, try restarting your browser.</p>
<p>Note that there is <a href="https://github.com/mrdoob/three.js/issues/175">an issue</a> with Three.js on Windows that causes particles not to be scaled &#8211; meaning the demo does not look as cool on Windows <img src='http://www.airtightinteractive.com/wordpress/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><a href="/demos/js/nebula/">View Demo</a> | <a href="/demos/js/nebula/nebula_source.zip">Download Source</a></p>
<h3>Why WebGL?</h3>
<p>Before anyone mentions it in the comments &#8211; no I don&#8217;t think WebGL is going to replace Flash any time soon. WebGL is an emerging standard and is not currently supported by many browsers. As such it is not suitable for building client websites. Why I am excited about WebGL is that it offers performance similar to Processing in the browser. On my laptop this demo runs fullscreen at 60FPS.</p>
<h3>The Code</h3>
<p>Using Three.js is similar to using Away3D or Papervision, indeed some of the code is ported from those engines. To create a 3D view you need a renderer, a camera, a scene and some 3D objects. Each 3D object consists of some geometry and a material. Three.js allows you to choose between a Canvas renderer and a WebGL renderer. The WebGL renderer is many times faster but does not run in as many browsers. The renderer is a normal HTML element and so you can overlay it with other HTML elements. The dot-screen effect is created by overlaying a transparent PNG via CSS <strong>background-image</strong>.</p>
<p>Nebula is composed of a particle system which loads a <a href="http://www.airtightinteractive.com/demos/js/nebula/img/particle.png">particle png</a> material. Note that individual Particles don&#8217;t work with the WebGL renderer, you need to use a ParticleSystem. The particle movement is very simple. Particles start at the origin point (0,0,0) and are assigned a random speed. Each frame the particle speed is added to the particle position and the code checks to see if the particle has moved beyond a cutoff distance from the center, in which case it is reset back to the center.</p>
<p>There are also a number of sunbeams which are long skinny 2D planes that use a semi transparent flat color material (<strong>MeshBasicMaterial</strong>). Set meshes to be <strong>doubleSided</strong> if you want to see them when they rotate. All materials are set to use <strong>AdditiveBlending</strong> and depth testing is turned off. This improves performance and gives a nice glowy effect. To avoid the caret text cursor I use Aerotwist&#8217;s <a href="http://aerotwist.com/lab/ten-things-i-learned/">stop selection snippet</a>. The code uses jQuery purely for handling div resizing and centering. I use <a href="http://paulirish.com/2011/requestanimationframe-for-smart-animating/">requestAnimationFrame</a> as a more polite way to ask for system resources.</p>
<p>The best way to start learning three.js is to download it and browse the examples. Note that examples that load external files such as 3D models need to be run from a local or remote web server. The <a href="http://webchat.freenode.net/?channels=three.js">three.js IRC channel</a> is a good place to hang out and ask questions. Also check out the super-talented <a href="http://aerotwist.com/">Aerotwist</a>&#8216;s great tutorial called &#8220;<a href="http://aerotwist.com/lab/getting-started-with-three-js/">Getting Started with Three.js</a>&#8220;.</p>
<h3>JavaScript Dev Tools</h3>
<p>I&#8217;m currently using <a href="http://www.aptana.com/products/studio2">Aptana Studio 2</a> for JavaScript development . It&#8217;s an Eclipse based IDE with all the associated pros and cons. I personally like Eclipse since I&#8217;ve been using it for a while and know the shortcuts. An Eclipse IDE is probably overkill for a loosely typed language such as JS. The one feature I require from a code editor is that it correctly handles indentation and includes automatic code formatting. It&#8217;s amazing how many code editors cannot correctly indent the next line when you press return. If anyone knows a good lightweight JS editor that handles indentation properly, I&#8217;d love to hear about it.</p>
<p>For debugging JS I use Chrome&#8217;s Developer Tools and lots of console.log (it&#8217;s the new trace). Chrome&#8217;s Dev Tools are similar to Firebug, but I&#8217;ve pretty much stopped using Firefox since it seems so slow compared to Chrome.</p>
<h3>WebGL for VJing</h3>
<p><iframe src="http://player.vimeo.com/video/22593196" frameborder="0" width="590" height="443"></iframe></p>
<p><a href="http://vimeo.com/22593196">Nebula</a> from <a href="http://vimeo.com/felixturner">felixturner</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>I ended up using this code to build a Video Projection that was shown at the <a href="http://www.veniceartcrawl.com/">Venice Art Crawl</a>. The text overlay was pulled from live audience tweets sent in to answer the question: &#8220;What is the best thing ever?&#8221;. The strobe effect was inspired by &#8216;Enter the Void&#8217; (check this movie out for some truly insane visuals). Thanks to <a href="http://www.merkwelt.com/people/stan/">Stan Wiechers</a> for helping out with the Twitter back-end component.</p>
<p>Hopefully this will inspire someone to get started with Three.js and WebGL. Let me know how you get on!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2011/05/nebula-a-three-js-experiment/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>WebGL Roundup</title>
		<link>http://www.airtightinteractive.com/2011/03/webgl-roundup/</link>
		<comments>http://www.airtightinteractive.com/2011/03/webgl-roundup/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 21:26:51 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Elsewhere]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1028</guid>
		<description><![CDATA[Since the demise of the Flash Player&#8217;s ubiquity, it&#8217;s like the Wild West out there for rich media web developers today. There is a whole world of new technologies that allow for animation and rich interactivity on the web. These include jQuery, Canvas, CSS3 transitions, Unity and WebGL. Unfortunately none of these work across all platforms so [...]]]></description>
			<content:encoded><![CDATA[<p>Since the demise of the Flash Player&#8217;s ubiquity, it&#8217;s like the Wild West out there for rich media web developers today. There is a whole world of new technologies that allow for animation and rich interactivity on the web. These include jQuery, Canvas, CSS3 transitions, Unity and WebGL. Unfortunately none of these work across all platforms so we are back to the days of creating multiple versions of our content and switching them out based on browser detection.</p>
<p>One of the most exciting new technologies is <a href="http://en.wikipedia.org/wiki/WebGL">WebGL</a>. WebGL is a open-standard browser implementation of OpenGL &#8211; the graphics API that is used just about everywhere. The strength of WebGL is that it uses hardware acceleration to allow for complex, high frame-rate 3D animations and games. WebGL is scripted with JavaScript.</p>
<p>WebGL is currently supported in Chrome 9+, Firefox 4+ and Safari OSX 10.6+. Since Google <a href="http://chrome.blogspot.com/2011/02/dash-of-speed-3d-and-apps.html">turned on WebGL support</a> for the current release version of Chrome, this means anyone can view WebGL content on the web for free. As this is a new technology it&#8217;s a little flakey. Some of these demos may hog your machine resources, also you may need to restart your browser now and again.</p>
<h3>Three.js</h3>
<p>WebGL is low level API that provides a lot of flexibility and power with the trade-off that it can take a lot of code to make a <a href="http://learningwebgl.com/lessons/lesson01/index.html">simple scene</a>. Luckily the ubiquitous <a href="http://mrdoob.com/">Mr Doob</a> has built a very nice JavaScript Library that allows you to easily utilize WebGL: <a href="https://github.com/mrdoob/three.js">Three.js</a>. Three.js provides the option to choose a Canvas Renderer or a WebGL renderer. Download the library including many WebGL examples <a href="https://github.com/mrdoob/three.js">here</a>.</p>
<h3>WebGL Demos</h3>
<p>Here are some demos from around the web that show the potential of WebGL. Use the latest <a href="www.google.com/chrome">Google Chrome</a> to view them. Let me know in the comments if I&#8217;ve missed any good ones.</p>
<p><a href="http://alteredqualia.com/">Three.js/WebGL demos</a> from AlteredQualia.</p>
<p><a href="http://alteredqualia.com/"><img class="size-full wp-image-1030" title="AQ" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/03/AQ.jpg" alt="" width="590" height="198" /></a></p>
<p><a href="https://github.com/mrdoob/three.js/#readme">Three.js/WebGL Demos</a></p>
<p><a href="https://github.com/mrdoob/three.js/#readme"><img class="alignnone size-full wp-image-1041" title="three" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/03/three.jpg" alt="" width="590" height="192" /></a></p>
<p><a href="http://fractal.io/">FractalLab</a> &#8211; insane 3D fractal visualizer from <a href="http://www.subblue.com/">subblue</a>.</p>
<p><a href="http://fractal.io/"><img title="subblue" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/03/subblue.jpg" alt="" width="590" height="228" /></a></p>
<p><a href="http://www.dasprinzip.com/prinzipiell/2011/02/21/raymarching/">Demoscene style shader effects</a> from Frank Reitberger.</p>
<p><a href="http://www.dasprinzip.com/prinzipiell/2011/02/21/raymarching/"><img class="alignnone size-full wp-image-1036" title="asmc" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/03/asmc.jpg" alt="" width="590" height="183" /></a></p>
<p><a href="http://www.ibiblio.org/e-notes/webgl/webgl.htm">WebGL demos</a> from Evgeny Demidov</p>
<p><a href="http://www.ibiblio.org/e-notes/webgl/webgl.htm"><img title="inter" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/03/inter.jpg" alt="" width="590" height="180" /></a></p>
<h3>Learn More</h3>
<ul>
<li><a href="http://learningwebgl.com/blog/?p=28"></a><a href="https://github.com/mrdoob/three.js/">Three.js</a> &#8211; get source and examples.</li>
<li><a href="http://learningwebgl.com/blog/?p=28">Learning WebGL</a> &#8211; great set of tutorials for low-level WebGL dev.</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2011/03/webgl-roundup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Glitch Your Images with ImageGlitcher</title>
		<link>http://www.airtightinteractive.com/2011/02/glitch-your-images-with-imageglitcher/</link>
		<comments>http://www.airtightinteractive.com/2011/02/glitch-your-images-with-imageglitcher/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 22:53:15 +0000</pubDate>
		<dc:creator>Felix Turner</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Useful]]></category>

		<guid isPermaLink="false">http://www.airtightinteractive.com/?p=1011</guid>
		<description><![CDATA[ImageGlitcher allows you to glitch any image and save the result. Glitched images look like they are being displayed on a broken analog TV. Check it out here. This demo was built using Peter Nitsch&#8217;s BitmapData.js &#8211; a very useful JS port of ActionScript&#8217;s BitmapData class which makes it easy to manipulate canvas image data. After [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/felixturner/5417120122/sizes/o/in/photostream/"><img class="alignnone size-full wp-image-1016" title="glitch-triptrych_sml" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/02/glitch-triptrych_sml.jpg" alt="" width="590" height="282" /></a></p>
<p><a href="http://www.airtightinteractive.com/demos/js/imageglitcher/">ImageGlitcher</a> allows you to glitch any image and save the result. Glitched images look like they are being displayed on a broken analog TV. <a href="http://www.airtightinteractive.com/demos/js/imageglitcher/">Check it out here</a>.</p>
<p>This demo was built using Peter Nitsch&#8217;s <a href="http://peternitsch.net/bitmapdata.js/">BitmapData.js</a> &#8211; a very useful JS port of ActionScript&#8217;s BitmapData class which makes it easy to manipulate canvas image data. After playing around with it for a while I got some pleasing glitched image results, so I figured it would be useful to wrap it up as a little app. The glitch effect is achieved by:</p>
<ul>
<li>Slicing the image horizontally and randomly offsetting the slices</li>
<li>Randomly selecting a color channel and offsetting again</li>
<li>Brightening the image</li>
<li>Adding a &#8216;scan lines&#8217; overlay.</li>
</ul>
<p><a href="http://www.flickr.com/photos/felixturner/5417139914/sizes/o/in/photostream/"><img class="alignnone size-full wp-image-1018" title="paramount" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/02/paramount.jpg" alt="" width="590" height="382" /></a></p>
<p>All the source code is viewable via &#8216;View Source&#8217;. Surprisingly, cross browser development wasn&#8217;t too much of a pain once I ignored IE. One of the cool features of HTML5 is native drag and drop support. On Chrome and Firefox you can drag in an image from the desktop.</p>
<p>One issue that came up was that the canvas tag does not allow you to getImageData() on images that are from a different web domain. This is supposedly a security feature to prevent hackers copying images, although I fail to understand why. If a hacker has the URL of an image on your website he already has a local copy of the image &#8211; right? Anyway <a href="http://www.maxnov.com/getimagedata/">$.getImageData</a> gets around this feature by routing image data through Google App Engine using JSONP.</p>
<p><a href="http://www.flickr.com/photos/felixturner/5417139886/"><img class="alignnone size-full wp-image-1015" title="face" src="http://www.airtightinteractive.com/wordpress/wp-content/uploads/2011/02/face.jpg" alt="" width="590" height="400" /></a></p>
<p>If I get time there are a few features I want to add in the next version:</p>
<ul>
<li>Add &#8216;Instagram&#8217; style filters</li>
<li>Add more granular filter options</li>
<li>Use web workers to avoid hang time</li>
</ul>
<p>Let me know if you find any issues or if you create any nice images, post a link in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.airtightinteractive.com/2011/02/glitch-your-images-with-imageglitcher/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: www.airtightinteractive.com @ 2012-05-09 19:21:31 -->
