<?xml version="1.0" encoding="UTF-8"?>
<rss 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/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>omino pixel blog</title>
	
	<link>http://omino.com/pixelblog</link>
	<description>pixels, motion, and scripting</description>
	<lastBuildDate>Tue, 10 Jan 2012 05:45:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<copyright>Copyright © omino pixel blog 2012 </copyright>
	<managingEditor>poly@omino.com (omino pixel blog)</managingEditor>
	<webMaster>poly@omino.com (omino pixel blog)</webMaster>
	<image>
		<url>http://omino.com/pixelblog/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>omino pixel blog</title>
		<link>http://omino.com/pixelblog</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle />
	<itunes:summary>pixels, motion, and scripting</itunes:summary>
	<itunes:keywords />
	<itunes:category text="Society &amp; Culture" />
	<itunes:author>omino pixel blog</itunes:author>
	<itunes:owner>
		<itunes:name>omino pixel blog</itunes:name>
		<itunes:email>poly@omino.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://omino.com/pixelblog/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/OminoPixelBlog" /><feedburner:info uri="ominopixelblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>AE: A Silly MIDI Trick</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/PwML071sPt8/</link>
		<comments>http://omino.com/pixelblog/2012/01/07/ae-a-silly-midi-trick/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 01:22:19 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[bach]]></category>
		<category><![CDATA[midi]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=574</guid>
		<description><![CDATA[For amusement purposes only&#8230; after importing a MIDI file as keyframes (see earlier post), I rendered it back out using After Effects as a synthesizer, with the provided Tone audio effect. two_part_sines_21.mp4 click forhttp://omino.com/pixelblog/wp-content/uploads/2012/01/two_part_sines_21.mp4 This was done by setting the Tone frequency expressions to reconstruct the appropriate musical pitch: on = effect("ch_1_vel")("Slider").value ? 1 : [...]]]></description>
			<content:encoded><![CDATA[<p>For amusement purposes only&#8230; after importing a MIDI file as keyframes (<a href="http://omino.com/pixelblog/2011/12/26/ae-hello-again-midi/">see earlier post</a>), I rendered it back out using After Effects as a synthesizer, with the provided Tone audio effect.</p>
<p><div id="embed_4_1">
    <div
       onclick='document.getElementById("embed_4_1").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2012/01/two_part_sines_21.mp4\" width=\"300\" height=\"116\" controller=\"true\" autoplay=\"true\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:100px ; width:284px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>two_part_sines_21.mp4</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2012/01/two_part_sines_21.mp4</font>
        </div>
    </div>
</div><br />
<br style="height:100px" /></p>
<p>This was done by setting the Tone frequency expressions to reconstruct the appropriate musical pitch:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2012/01/two_sines.png"><img src="http://omino.com/pixelblog/wp-content/uploads/2012/01/two_sines-300x234.png" alt="" title="two_sines" width="300" height="234" class="alignnone size-medium wp-image-578" /></a></p>
<pre>
on = effect("ch_1_vel")("Slider").value ? 1 : 0;
note = effect("ch_1_pitch")("Slider");
on * 440 * Math.pow(2, (note-57)/12)
</pre>
<p>You could change 12 to something else, to hear it performed in some alternate equal-tempered scale. 8 and 17 sound kind-of interesting&#8230;</p>
<p><div id="embed_4_2">
    <div
       onclick='document.getElementById("embed_4_2").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2012/01/two_part_sines_detune_2.mp4\" width=\"300\" height=\"116\" controller=\"true\" autoplay=\"true\"/>";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:100px ; width:284px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>two_part_sines_detune_2.mp4</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2012/01/two_part_sines_detune_2.mp4</font>
        </div>
    </div>
</div><br />
<br style="height:100px" /></p>
<p>And here&#8217;s the self-contained CS5 project to <a href="http://omino.com/pixelblog/wp-content/uploads/2012/01/two_part_sines_cs5.aep">download</a>.</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/PwML071sPt8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2012/01/07/ae-a-silly-midi-trick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
			
		<enclosure url="http://omino.com/pixelblog/wp-content/uploads/2012/01/two_part_sines_detune_2.mp4" length="2276915" type="video/mp4" />
	<feedburner:origLink>http://omino.com/pixelblog/2012/01/07/ae-a-silly-midi-trick/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/OminoPixelBlog/~5/IA5d_F-qR1k/two_part_sines_21.mp4" length="2206846" type="video/mp4" /><feedburner:origEnclosureLink>http://omino.com/pixelblog/wp-content/uploads/2012/01/two_part_sines_21.mp4</feedburner:origEnclosureLink></item>
		<item>
		<title>AE: Omino Snake</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/LglDxr8KzMg/</link>
		<comments>http://omino.com/pixelblog/2012/01/05/564/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 05:47:34 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[plug-in]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=564</guid>
		<description><![CDATA[A quick note about one of the plug-ins in the omino suite: Omino Snake! It was written late one night for a specific purpose. I was doing some promotional animations for my friends&#8217; Science Tarot deck, and got to &#8220;High Priestess, Benzene Dream&#8221; in which Friedrich August Kekule von Stradonitz dreams of a snake eating [...]]]></description>
			<content:encoded><![CDATA[<p>A quick note about one of the plug-ins in the <a href="http://omino.com/store/">omino suite</a>: Omino Snake!</p>
<p>It was written late one night for a specific purpose. I was doing some promotional animations for my friends&#8217; <a href="http://www.amazon.com/Science-Tarot-Booklet-Deck/dp/B00475J4C4">Science Tarot</a> deck, and got to &#8220;High Priestess, Benzene Dream&#8221; in which Friedrich August Kekule von Stradonitz dreams of a snake eating its tail. And this was the mystery of the benzene ring-shaped molecule.</p>
<p><iframe width="420" height="315" src="http://www.youtube.com/embed/1C794TJALZw?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p>I wanted the snake to follow along a path. So, Omino Snake wraps any layer along a mask path, like so:</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2012/01/snake_params.png" alt="" title="snake_params" width="366" height="251" class="alignnone size-full wp-image-565" /></p>
<p>The results can be a little bit &#8220;chunky&#8221;; Omino Snake just dices the source image into thin triangles and spreads them out. You can adjust the &#8220;draw step&#8221; parameter to step in smaller amounts to help smooth it.</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2012/01/snake_screenshot_1.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2012/01/snake_screenshot_1-300x199.jpg" alt="" title="snake_screenshot_1" width="300" height="199" class="alignnone size-medium wp-image-566" /></a></p>
<p>You could do the same thing, more or less, by animating with the Puppet tool, but it would be a bit tedious. </p>
<p>And here&#8217;s a little demo of it in action.</p>
<p><iframe width="420" height="315" src="http://www.youtube.com/embed/drU37_UyA6U?rel=0" frameborder="0" allowfullscreen></iframe></p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/LglDxr8KzMg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2012/01/05/564/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2012/01/05/564/</feedburner:origLink></item>
		<item>
		<title>AE: Omino Python, All Free</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/QKtjyPFzBIU/</link>
		<comments>http://omino.com/pixelblog/2011/12/28/ae-omino-python-all-free/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 02:16:34 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=550</guid>
		<description><![CDATA[The Mac OS X version of Omino Python has been updated. An installer for it &#8212; and all my other After Effects plug-ins are in the downloads section here. For anyone just tuning in, Omino Python is an After Effects plug-in that lets you write scripts to draw into a layer of an After Effects [...]]]></description>
			<content:encoded><![CDATA[<p>The Mac OS X version of Omino Python has been updated. An installer for it &#8212; and all my other After Effects plug-ins are in the <a href="http://omino.com/store/">downloads</a> section here.</p>
<p>For anyone just tuning in, Omino Python is an After Effects plug-in that lets you write scripts to draw into a layer of an After Effects composition. It&#8217;s a lot like writing BASIC on your old Apple ][.</p>
<p>Changes to the plug-in are primarily:</p>
<ul>
<li>Fixed a sporadic crash that could happen during text rendering.</li>
<li>No longer install any files in /opt/local or /usr/local. All gone.</li>
<li>Completely unlocked (no license needed for full use). Enjoy!</li>
</ul>
<p>Here&#8217;s a frame from one of the example animations. This is a couple of for-loops in action.</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2011/12/small_fish.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2011/12/small_fish.jpg" width="330" /></a></p>
<p>And here&#8217;s the animation it came from.</p>
<p><div id="embed_12_1">
    <div
       onclick='document.getElementById("embed_12_1").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2011/12/small_fish_sm.mov\" title=\"small_fish_sm.mov\" autoplay=\"true\" controller=\"true\" width=\"320\" height=\"256\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:240px ; width:304px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>small_fish_sm.mov</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2011/12/small_fish_sm.mov</font>
        </div>
    </div>
</div></p>
<p>And here&#8217;s the python <a href="http://hexaflexagon.com/src/after_effects_plugins/omino_suite/examples/ompy/ompy53.py">source code</a>.</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/QKtjyPFzBIU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2011/12/28/ae-omino-python-all-free/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
			
	<feedburner:origLink>http://omino.com/pixelblog/2011/12/28/ae-omino-python-all-free/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/OminoPixelBlog/~5/2mhvAhYu7Vc/small_fish_sm.mov" length="855827" type="video/quicktime" /><feedburner:origEnclosureLink>http://omino.com/pixelblog/wp-content/uploads/2011/12/small_fish_sm.mov</feedburner:origEnclosureLink></item>
		<item>
		<title>AE: Hello again, &amp; MIDI</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/z7jvRykGcOE/</link>
		<comments>http://omino.com/pixelblog/2011/12/26/ae-hello-again-midi/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 20:56:30 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[expressions]]></category>
		<category><![CDATA[extendscript]]></category>
		<category><![CDATA[midi]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=530</guid>
		<description><![CDATA[Edit: See note at end of article for warnings about this script AE CS 5.5 on Mac Hello, pixel pushers and vert herders! Ah, it&#8217;s great to be back in After Effects land. Alas in this last year, the day job (got hired by Skype, acquired by Microsoft) and life in general (after throwing elaborate [...]]]></description>
			<content:encoded><![CDATA[<p><small><em><strong>Edit: See note at end of article for warnings about this script AE CS 5.5 on Mac</strong></em></small></p>
<p>Hello, pixel pushers and vert herders! Ah, it&#8217;s great to be back in After Effects land. Alas in this last year, the day job (got hired by Skype, acquired by Microsoft) and life in general (after throwing elaborate theme-parties for decades, planning a wedding wasn&#8217;t actually that hard, but still) got a little busy, but thankfully again have a little bit of time for my favorite things. That is, pixels.</p>
<p><b>Omino Python</b> Since I released it this year, it&#8217;s been downloaded several thousand times, and about a dozen enthusiastic folks have licensed it. Alas, I don&#8217;t really have the time to either properly promote or properly support this as a paid product&#8230; so I&#8217;ll make it completely free soon.</p>
<p>Ok! So, MIDI!</p>
<h2>What is MIDI</h2>
<p>MIDI is a control protocol and file format invented 20-odd years ago for music playback on synthesizers. It records all the notes. A .mid file is typically quite small, since it has no sound data in it.</p>
<h2>Into After Effects?</h2>
<p>Yes! The attached script lets you read a MIDI file into After Effects, and provides keyframes with all the notes. </p>
<pre>
Install:

1. Download <a href="http://omino.com/pixelblog/wp-content/uploads/2011/12/om_midi.jsx">this file</a>.
2. Put the file in /Applications/Adobe After Effects CS5/Scripts/ScriptUI Panels/
3. Run AE, and under window, choose om_midi.jsx, and dock the panel where you like.
</pre>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2011/12/om_midi_panel.png" alt="Om midi panel" border="0" width="207" height="204" /></p>
<h2>Recipe</h2>
<p>Here&#8217;s one way you could use this script. In the <b>om_midi</b> panel, click the little dot button, and choose a MIDI file. I used one from Wikipedia, <a href="http://en.wikipedia.org/wiki/File:BWV_772_mid.mid">BWV 772</a>, one of JS Bach&#8217;s 2-part inventions.</p>
<p>Then, with a Comp selected, click Apply.</p>
<p>This creates a Null layer named &#8220;midi&#8221; with several Slider effects full of keyframes.</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2011/12/imported_effects.png"><img src="http://omino.com/pixelblog/wp-content/uploads/2011/12/imported_effects.png" width="600" /></a></p>
<p>This particular MIDI file kept the left and right hands in separate channels, which is nice! The &#8220;pitch&#8221; effect has keyframes at the beginning of each note with a value of 60 for middle C, 61 for C-sharp, and so on. Here we can see the left and right hands&#8217; keyframes.</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2011/12/imported_keyframes.png"><img src="http://omino.com/pixelblog/wp-content/uploads/2011/12/imported_keyframes.png" width="600" /></a></p>
<p>A fun way to use these keyframes is to drive the Position property of another layer. I took a photo of my hand, and set the Position expression and Opacity expressions:</p>
<pre>
Position:
 transform.position + 5*(0,thisComp.layer("midi").effect("ch_0_pitch")("Slider")-60)

Opacity:
  transform.opacity * thisComp.layer("midi").effect("ch_0_vel")("Slider")
</pre>
<p>So the hand will move 5 pixels for each semitone, centered on Middle-C (60).<br />
Then I rendered the audio as AIFF and added it to the comp. (I used Propellerheads Reason. Yeah&#8230; if you&#8217;re using MIDI you need yet another set of software to manipulate it.)</p>
<p>And here is the result animation:</p>
<p><div id="embed_16_1">
    <div
       onclick='document.getElementById("embed_16_1").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2011/12/BWV_772.mov\" controller=\"true\" width=\"480\" height=\"176\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:160px ; width:464px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>BWV_772.mov</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2011/12/BWV_772.mov</font>
        </div>
    </div>
</div></p>
<h2>More Notes</h2>
<p>This is just the simplest usage. A more elaborate deployment might be to export just 1 part of a complex sound-track work as MIDI, to get some of the cues into your AE timeline. With more complex scripts or expressions, you could to much more than just move the hands around.</p>
<p>The script <em>will</em> put multiple keyframes with the same time-value! In the example above, you can see the hands flicker slightly as the final chord begins. Most of the the part invention has just 1 note per hand, which was nice for the demo.</p>
<p>Also, inside the script is a general-purpose MIDI file reader, which you could use for other purposes. I&#8217;ve generated Illustrator pictures from scores, for example, full of circles and triangles. Drop me an email or comment if you want help using it! It&#8217;s pretty fun.</p>
<h3>Update 2012.01.08 Warning about AE CS 5.5 on Mac</h3>
<p>Under Mac OS X AE CS 5.5, when you <em>choose</em> the file, it <em>deletes it</em>! This is a CS5.5 bug. (Works fine in CS5.)</p>
<p>Best workaround is to use AE CS 5 or AE CS 4.<br />
Another workaround is:
<ul>
<li>make a copy of the file, like myfile_copy.mid</li>
<li>Select it in the script UI</li>
<li>recopy the file (selecting it deleted it)</li>
<li>click apply and all is well.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/z7jvRykGcOE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2011/12/26/ae-hello-again-midi/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
			
		<enclosure url="http://en.wikipedia.org/wiki/File:BWV_772_mid.mid" length="24362" type="audio/midi" />
	<feedburner:origLink>http://omino.com/pixelblog/2011/12/26/ae-hello-again-midi/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/OminoPixelBlog/~5/QrDE5Pvfuow/BWV_772.mov" length="10206926" type="video/quicktime" /><feedburner:origEnclosureLink>http://omino.com/pixelblog/wp-content/uploads/2011/12/BWV_772.mov</feedburner:origEnclosureLink></item>
		<item>
		<title>AE &amp; Python</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/YAIfwhyqGvE/</link>
		<comments>http://omino.com/pixelblog/2011/02/16/ae-python/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 16:19:01 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=525</guid>
		<description><![CDATA[I was going to provide another example or two of Python scripting, today, but was sidetracked by a little bit of historical research on Python in After Effects. The examples will wait a little longer&#8230; Useful Things Yes, indeed, everything old is new again. Just about the time I started using After Effects, I had [...]]]></description>
			<content:encoded><![CDATA[<p>I was going to provide another example or two of Python scripting, today, but was sidetracked by a little bit of historical research on Python in After Effects. The examples will wait a little longer&#8230;</p>
<p><b>Useful Things</b></p>
<p>Yes, indeed, everything old is new again. Just about the time I started using After Effects, I had heard of &#8220;Useful Things&#8221;, but didn&#8217;t really know what it was. Turns out it was&#8230; Python Scripting for After Effects! It appears to have been quite well-regarded in the AE community, too. Alas, for whatever reasons, that product seems to have faded, been reabsorbed in the various business permutations that are a fact of life.</p>
<p>Omino Python for After Effects, by coincidence and parallel evolution, seems to resemble that fine product in some aspiring ways.</p>
<p><b>Grant Munsey</b></p>
<p>Going back even a tiny bit further, to 2001, we find that Adobe computer scientist Grant Munsey created open source Python bindings for Photoshop and After Effects, as well!</p>
<p>Reading about him, he was a great proponent of open source development, and was a driving force for establishing http://opensource.adobe.com/.</p>
<p>He passed away in 2005; I did not know him. But reading about his long illness, I was touched by this part of his wife&#8217;s account:</p>
<blockquote><p>
We&#8217;ve been using the mouth stick.  It&#8217;s a 16-inch rod with a rubber tip on one end and on the other end a U-shaped plastic thing he  bites on. He can then trace patterns and point to letters on the letter board — very slowly. I asked him what UNIX command you&#8217;d use for getting regular expressions from a text file, and he spelled “GREP”.
</p></blockquote>
<p>And forgive me if I find in this a dark justification for the oft-maligned brevity of UNIX commands.</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/YAIfwhyqGvE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2011/02/16/ae-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2011/02/16/ae-python/</feedburner:origLink></item>
		<item>
		<title>AE: Omino Python</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/UYGZKCoiETA/</link>
		<comments>http://omino.com/pixelblog/2011/02/06/ae-omino-python/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 16:22:27 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=520</guid>
		<description><![CDATA[For immediate download: Omino Python Plug-in for After Effects. This plug-in lets you write a script in Python and then run it on every frame. The script can do drawing, access other layers, and so forth. Because sometimes, you just need to write code to get the job done. Omino Python gives you a straightforward [...]]]></description>
			<content:encoded><![CDATA[<p>For immediate download: <a href="http://omino.com/store/"/>Omino Python Plug-in for After Effects</a>.</p>
<p>This plug-in lets you write a script in Python and then run it on every frame. The script can do drawing, access other layers, and so forth. Because sometimes, you just need to write code to get the job done. Omino Python gives you a straightforward way to provide drawing code directly in your After Effects work flow.</p>
<p>This isn&#8217;t for everyone; but if you have a little bit of scripting experience, Omino Python should be very easy for you to pick up.</p>
<p>Mac OS X on AECS5 only, for now&#8230;</p>
<p>Here&#8217;s a little demo.</p>
<p><iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/bymMHt2-Nwo?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://www.youtube.com/watch?v=PEvjM7QtfIg">Here&#8217;s another youtube demo, too.</a></p>
<p>The download includes plenty of documentation, or you can <a href="http://omino.com/store/downloads/op_2011.02.03/omino_python.pdf">read it right now.</a></p>
<p>I&#8217;ll be posting some tips and examples &#8212; there are so many possibilities opened up! &#8212; but to break the ice, here&#8217;s a simple Omino Python script to do some drawing.</p>
<p>The script in Python. I didn&#8217;t know Python before starting the project, but it&#8217;s a nice easy little language, and quite popular, so there&#8217;s plenty of resources to learn it. It&#8217;s not so different from JavaScript or anything else. No semicolons and no curly braces, though! Here it is:</p>
<pre>
import math
import random

def ompy_main(c):
    ctx = c.layer_out_context

    w = int(c.width)
    h = int(c.height)

    # draw a red circle...
    ctx.set_source_rgb(1,0,0)
    ctx.arc(w/2,h/2,100,0,2 * math.pi)
    ctx.fill()

    # effect parameter controls size
    size = c.floats[0]
    ctx.set_font_size(size)

    # draw a grid of random numbers, spaced by 30
    random.seed(c.frame) # start the random sequence
    for x in range(0,w,30):
        for y in range(0,h,30):
            # random color
            ctx.set_source_rgb(random.random(),random.random(),random.random())
            # random number
            n = str(random.randint(0,9))
            # draw it.
            ctx.move_to(x,y)
            ctx.show_text(n)
</pre>
<p>And here&#8217;s a screen shot showing the output:</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2011/02/op_scrnshot_6.png" alt="Op scrnshot 6" border="0" width="600" height="360" /></p>
<p>Your script can access a collection of parameters &#8212; some floats, some colors, &#038;c &#8212; and use them as needed. In this case, I just used one float parameter to control the size of the random numbers printed. </p>
<p>This is just the beginning! Read the doc for the full story. Try out the plug-in. </p>
<p>More to come!</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/UYGZKCoiETA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2011/02/06/ae-omino-python/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2011/02/06/ae-omino-python/</feedburner:origLink></item>
		<item>
		<title>Walter Murch: Wrong About 3d</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/wdQtUa-j0wI/</link>
		<comments>http://omino.com/pixelblog/2011/01/25/walter-murch-wrong-about-3d/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 15:57:37 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=516</guid>
		<description><![CDATA[Oh, Walter, Walter, Walter! If you have not yet read Walter Murch&#8217;s book &#8220;In the Blink of an Eye&#8221;, get thee to a one-clickery and remedy that. The book is about film editing&#8230; I guess. It&#8217;s an insightful meander about human perception, dreams, storytelling, and the question: &#8220;Why can we understand film-cuts?&#8221; He&#8217;s intelligent and [...]]]></description>
			<content:encoded><![CDATA[<p>Oh, Walter, Walter, Walter!</p>
<p>If you have not yet read Walter Murch&#8217;s book &#8220;In the Blink of an Eye&#8221;, get thee to a <a href="http://www.amazon.com/Blink-Eye-Revised-2nd/dp/1879505622">one-clickery</a> and remedy that.</p>
<p>The book is about film editing&#8230; I guess. It&#8217;s an insightful meander about human perception, dreams, storytelling, and the question: &#8220;Why can we understand film-cuts?&#8221; He&#8217;s intelligent and articulate, and of course he&#8217;s a behind-the-scenes guy who worked on Great Movies so he&#8217;s got cred too. Really thought-provoking and inspiring.</p>
<p>Alas, I fear he is on weak footing with his recent dismissal of stereoscopic movie-making.</p>
<p>Roger Ebert includes a <a href="http://blogs.suntimes.com/ebert/2011/01/post_4.html">letter from Walter Murch</a> in a recent column.</p>
<p>His central thesis: 3d movies don&#8217;t work, because focus and convergence are misaligned, and 600 million years of evolution don&#8217;t support that, so 3d movies give you a headache. That is to say, when the hero-prop thrusts out of the screen til its a foot from your eyes, you need to cross your eyes (convergence) but the actual image is still 50 feet away on the screen (focus). Never happens in nature.</p>
<p>Walter, Walter, Walter! You of all people, who have exploited and shared your deep understanding of just how malleable our percept-system is, should know better! We are more flexible even than evolution requires! By your reasoning a movie closeup shouldn&#8217;t work, because it&#8217;s 50 feet away, but as big as if it was next to you! It makes no sense. And neither do photographs or cave paintings.</p>
<p>Don&#8217;t get me started defending my beloved collection of vintage ViewMaster discs. And why does written language work? Why, why, why.</p>
<p>But it all does. Somehow. And stereoscopic movies are Known To Be Fun.</p>
<p>Every art form has a learning curve. Some art can&#8217;t be enjoyed unless you&#8217;ve built up to it, learned its language.</p>
<p>Every technology has its artifacts, but its the artists who work with them that determine their ultimate value and efficacy.</p>
<p>And, kids these days, they&#8217;ll just keep coming up with new combinations of them. We&#8217;ll never keep up.</p>
<p>Still. I&#8217;m&#8230; sorry that 3d glasses give you a headache. <img src='http://omino.com/pixelblog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/wdQtUa-j0wI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2011/01/25/walter-murch-wrong-about-3d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2011/01/25/walter-murch-wrong-about-3d/</feedburner:origLink></item>
		<item>
		<title>Beziers</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/kzxZMgwHC5I/</link>
		<comments>http://omino.com/pixelblog/2010/12/26/beziers/#comments</comments>
		<pubDate>Mon, 27 Dec 2010 00:47:05 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[bezier curve]]></category>
		<category><![CDATA[math]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=512</guid>
		<description><![CDATA[We most of us use Bezier curves all the time, for masks, shapes, animation curves. They&#8217;re pretty intuitive. Points, control handles&#8230; yeah, you can usually get them to do what you want. To do some math recently, I googled a bit more about them. They&#8217;re named from Pierre Bezier (1910-1999) who popularized them for CAD [...]]]></description>
			<content:encoded><![CDATA[<p>We most of us use Bezier curves all the time, for masks, shapes, animation curves. They&#8217;re pretty intuitive. Points, control handles&#8230; yeah, you can usually get them to do what you want.</p>
<p>To do some math recently, I googled a bit more about them. They&#8217;re named from Pierre Bezier (1910-1999) who popularized them for CAD while designing cars for Renault. The standard &#8220;two-handle&#8221; style used by Adobe apps (and most others) is a &#8220;cubic Bezier&#8221;, because the equation uses some cubes.</p>
<p>To walk a cubic Bezier mathematically, given the four points (two end points, and two intermediate control handles), you can use this Python code, varying t from 0.0 to 1.0:</p>
<pre>
# given points p0, p0Out, and p1In, and p1, and t varying from 0.0 to 1.0...
a0 = (1 - t) ** 3
a1 = 3 * (1 - t) ** 2 * t
a2 = 3 * (1 - t) * t ** 2
a3 = t ** 3
# calculate x and y
x = a0 * p0.x + a1 * p0.xOut + a2 * p1.xIn + a3 * p1.x
y = a0 * p0.y + a1 * p0.yOut + a2 * p1.yIn + a3 * p1.y
</pre>
<p>But that&#8217;s all tricky. Here&#8217;s an intuitive way to visualize just what the heck a Bezier curve really (for really) is:</p>
<p><div id="embed_32_1">
    <div
       onclick='document.getElementById("embed_32_1").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2010/12/beziers3.mov\" width=\"320\" height=\"256\" controller=\"true\" autoplay=\"true\" loop=\"true\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:240px ; width:304px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>beziers3.mov</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2010/12/beziers3.mov</font>
        </div>
    </div>
</div></p>
<p>I did this animation in Python&#8230; stay tuned for <a href="http://www.youtube.com/watch?v=PEvjM7QtfIg">much more</a> on that front.</p>
<p><small>Super kudos to <a href="http://bimixual.org/AnimationLibrary/beziertangents.html">bimixual.org</a> for the clear explanation.</small></p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/kzxZMgwHC5I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/12/26/beziers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
			
	<feedburner:origLink>http://omino.com/pixelblog/2010/12/26/beziers/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/OminoPixelBlog/~5/lWQjdlGwA1I/beziers3.mov" length="547766" type="video/quicktime" /><feedburner:origEnclosureLink>http://omino.com/pixelblog/wp-content/uploads/2010/12/beziers3.mov</feedburner:origEnclosureLink></item>
		<item>
		<title>(AE: expression trivia)</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/CJDJLeoYQMU/</link>
		<comments>http://omino.com/pixelblog/2010/11/22/ae-expression-trivia/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 04:15:47 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[expressions]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=507</guid>
		<description><![CDATA[(The parentheses in the post title mean that this post is essentially parenthetical.) Arggh. Developing Pixel Bender kernels and plug-ins, my test files kept behaving erratically. Expression indexes were to blame. Each time I added or removed a parameter, the numbers all shift. So you see, first enabling the expression produces effect("my_effect")(8). But it depends [...]]]></description>
			<content:encoded><![CDATA[<p>(The parentheses in the post title mean that this post is essentially parenthetical.)</p>
<p>Arggh. Developing Pixel Bender kernels and plug-ins, my test files kept behaving erratically. Expression indexes were to blame. Each time I added or removed a parameter, the numbers all shift.</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2010/11/effect_expr.png" alt="effect_expr.png" border="0" width="600" height="73" /></p>
<p>So you see, first enabling the expression produces <strong><code>effect("my_effect")(8)</code></strong>. But it depends on the <em>exact order</em> of the parameters!</p>
<p>But <code>effect("my_effect")("param 9")</code> depends on the name.</p>
<p>I think I like the second one better, because I&#8217;m pretty good about nailing down my parameter names, but more likely to move them around order-wise.</p>
<p>(See?)</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/CJDJLeoYQMU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/11/22/ae-expression-trivia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2010/11/22/ae-expression-trivia/</feedburner:origLink></item>
		<item>
		<title>AE: Omino Stamp, a Pixel Bender Filter</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/i5vvn_eRfU0/</link>
		<comments>http://omino.com/pixelblog/2010/06/27/ae-omino-stamp-a-pixel-bender-filter/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 05:41:20 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[pixel bender]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=487</guid>
		<description><![CDATA[Early this month, we visited the San Jose Museum of Quilts and Textiles, featuring patterns and clothing by the Hawaiian designer Alfred Shaheen. Great stuff! Yeah, I have a closet full of Hawaiian shirts. (Show show goes til August 8, worth visiting. On the first Friday of the month, many of the galleries on First [...]]]></description>
			<content:encoded><![CDATA[<p>Early this month, we visited the <a href="http://www.sjquiltmuseum.org/exhibitions.html">San Jose Museum of Quilts and Textiles</a>, featuring patterns and clothing by the Hawaiian designer Alfred Shaheen. Great stuff! Yeah, I have a closet full of Hawaiian shirts.</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2010/06/alfred_shaheen_print.jpg" alt="alfred_shaheen_print.jpg" border="0" width="200" height="200" /></p>
<p>(Show show goes til August 8, worth visiting. On the first Friday of the month, many of the galleries on First Street in San Jose, CA are open late, definitely a nice night out.)</p>
<p>Since I adore repetition, and halftoning, I got to wondering if I could recreate some of the patterns programmatically. The &#8220;Omino Stamper&#8221; filter runs in After Effects and attempts to do this.</p>
<p>download ==> <a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/omino_stamp.pbk">omino_stamp.pbk</a>, an After Effects filter.</p>
<p>The idea is pretty simple: draw a &#8220;stamp image&#8221; in a pattern which can be affected by the source image. It&#8217;s a little bit like a particle effect, but more mechanical.</p>
<p>Here&#8217;s the controls and few examples, which look nothing like Hawaiian shirts.</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_screenshot.png" alt="stamper_screenshot.png" border="0" width="389" height="353" /></p>
<p>A quick rundown:</p>
<ul>
<li>The <strong>pattern-</strong> settings adjust the stamping grid</li>
<li>The <strong>stamp-</strong> settings adjust orientation and size of the stampimage image</li>
<li>The <strong>stampOverlaps</strong> setting controls how many nearby stamps are computed for each pixel; slows down the render a bit but is necessary for closely-spaced stamping. (If you see missing corners and such, increase this setting. (Those of you familiar with Pixel Bender will immediately apprehend why this is so. <img src='http://omino.com/pixelblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>The <strong>affectsStampSizeAmount</strong>, <strong>affectsStampColorAmount</strong>, and <strong>affectsStampRotationAmount</strong> settings control the halftoning features of the filter.
</ul>
<p>Here&#8217;s a basic stamp:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_1.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_1.jpg" width="480" /></a></p>
<p>Next, we adjust the bricking a little, to make it less square-y:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_2.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_2.jpg" width="480" /></a></p>
<p>And let the color of the underlying image affect the stamp color:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_3.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_3.jpg" width="480" /></a></p>
<p>How about affect the rotation, instead of the color? Kinda wild:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_4.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_4.jpg" width="480" /></a></p>
<p>Or back to basics, let the underlying image affect the stamping-size:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_5.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/06/stamper_sample_5.jpg" width="480" /></a></p>
<p>Here&#8217;s a festive little animation playing with the effect a bit, and <em>does</em> include a Tiki god or two.</p>
<p><div id="embed_40_1">
    <div
       onclick='document.getElementById("embed_40_1").innerHTML = "<embed src=\"http://www.youtube.com/v/WKJwCt0ik_E&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"640\" height=\"385\"></embed>";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:369px ; width:624px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>WKJwCt0ik_E</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://www.youtube.com/v/WKJwCt0ik_E&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999</font>
        </div>
    </div>
</div></p>
<p>download ==> <a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/omino_stamp.pbk">omino_stamp.pbk</a>, an After Effects filter.</p>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/i5vvn_eRfU0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/06/27/ae-omino-stamp-a-pixel-bender-filter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2010/06/27/ae-omino-stamp-a-pixel-bender-filter/</feedburner:origLink></item>
		<item>
		<title>AE: Short-take, Rain</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/Jtb9hGC3RV0/</link>
		<comments>http://omino.com/pixelblog/2010/06/11/ae-short-take-rain/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 02:22:00 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[rain]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=467</guid>
		<description><![CDATA[Easy Rain Here&#8217;s a cute one. Nothing deep or advanced, but it was fun. It&#8217;s a way to get a very simple and cheap &#8220;rain&#8221; in After Effects. Take a tiny bit of Noise, and blur it in one direction with Fast Blur. This makes very, very dim &#8220;streaks&#8221;. Use Threshold to make them visible [...]]]></description>
			<content:encoded><![CDATA[<h3>Easy Rain</h3>
<p>Here&#8217;s a cute one. Nothing deep or advanced, but it was fun. It&#8217;s a way to get a very simple and cheap &#8220;rain&#8221; in After Effects.</p>
<ol>
<li>Take a tiny bit of <strong>Noise</strong>, and blur it in one direction with <strong>Fast Blur</strong>.</li>
<li>This makes very, very dim &#8220;streaks&#8221;. Use <strong>Threshold</strong> to make them visible again.</li>
<li><strong>Fast Blur</strong> it a little in both directions to make the edges smooth again.</li>
<li>Rotate the whole layer, for angled rain.</li>
</ol>
<p>Easy peasy!</p>
<p><div id="embed_44_1">
    <div
       onclick='document.getElementById("embed_44_1").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2010/06/rain1.mp4\" width=\"320\" height=\"336\" controller=\"true\" autoplay=\"false\" loop=\"true\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:320px ; width:304px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>rain1.mp4</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2010/06/rain1.mp4</font>
        </div>
    </div>
</div></p>
<p>Here&#8217;s the AE setup for it. Trivial! Small adjustments of the parameters can get all sorts of interesting results.</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/rain1_ae_screenshot.png"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/06/rain1_ae_screenshot.png" width="360" /></a></p>
<h3>What about CC Rain?</h3>
<p>Well you know, apart from the joy (cussedness) of doing it the hard way&#8230; CC Rain makes relatively slow well-defined rain streaks. Depending what look you like, combining CC Rain with the more random movement described above is pretty nice, too.</p>
<p><div id="embed_44_2">
    <div
       onclick='document.getElementById("embed_44_2").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2010/06/rain2.mp4\" width=\"320\" height=\"336\" controller=\"true\" autoplay=\"false\" loop=\"true\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:320px ; width:304px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>rain2.mp4</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2010/06/rain2.mp4</font>
        </div>
    </div>
</div></p>
<p>If you like, here&#8217;s the self-contained tiny AE project. ==> <a href="http://omino.com/pixelblog/wp-content/uploads/2010/06/just_rain.aep">just_rain.aep</a></p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/Jtb9hGC3RV0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/06/11/ae-short-take-rain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
			
		<enclosure url="http://omino.com/pixelblog/wp-content/uploads/2010/06/rain2.mp4" length="2693678" type="video/mp4" />
	<feedburner:origLink>http://omino.com/pixelblog/2010/06/11/ae-short-take-rain/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/OminoPixelBlog/~5/15hKErJSfsk/rain1.mp4" length="2336749" type="video/mp4" /><feedburner:origEnclosureLink>http://omino.com/pixelblog/wp-content/uploads/2010/06/rain1.mp4</feedburner:origEnclosureLink></item>
		<item>
		<title>Omino Plugins Link Revision</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/i4xMA7WcIh0/</link>
		<comments>http://omino.com/pixelblog/2010/06/01/omino-plugins-link-revision/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 04:29:40 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=457</guid>
		<description><![CDATA[Just an administrative note. I&#8217;ve got a set of free After Effects plugins available. The old web-page links were a bit confused, especially with respect to which ones work on After Effects CS3 and CS4, and which are for After Effects CS5. The new link is http://omino.com/pixelblog/omino-ae-plugins/, and also appears as a &#8220;Page&#8221; in the [...]]]></description>
			<content:encoded><![CDATA[<p>Just an administrative note. I&#8217;ve got a set of free After Effects plugins available. The old web-page links were a bit confused, especially with respect to which ones work on After Effects CS3 and CS4, and which are for After Effects CS5.</p>
<p>The new link is <a href="http://omino.com/pixelblog/omino-ae-plugins/">http://omino.com/pixelblog/omino-ae-plugins/</a>, and also appears as a &#8220;Page&#8221; in the blog nav column, and should be much clearer.</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/i4xMA7WcIh0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/06/01/omino-plugins-link-revision/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2010/06/01/omino-plugins-link-revision/</feedburner:origLink></item>
		<item>
		<title>AE: Omino Spindala, a Pixel Bender Filter</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/i3J9ibS--_o/</link>
		<comments>http://omino.com/pixelblog/2010/05/17/ae-omino-spindala-a-pixel-bender-filter/#comments</comments>
		<pubDate>Mon, 17 May 2010 07:20:31 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[pixel bender]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=440</guid>
		<description><![CDATA[download ==> omino_spindala_32.pbk, an After Effects filter. Always doing things the hard way. Needed a wheel with some symmetry, like so: How else to do it than by drawing a circle with some blobs, and then treating it with&#8230; a handwritten pixel bender kernel: I started describing its controls, but wouldn&#8217;t it be more fun [...]]]></description>
			<content:encoded><![CDATA[<p>download ==> <a href="http://omino.com/pixelblog/wp-content/uploads/2010/05/omino_spindala.pbk">omino_spindala_32.pbk</a>, an After Effects filter.</p>
<p>Always doing things the hard way. Needed a wheel with some symmetry, like so:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/05/wheel_2.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/05/wheel_2.jpg" width="360" /></a></p>
<p>How else to do it than by drawing a circle with some blobs, and then treating it with&#8230; a handwritten pixel bender kernel:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/05/wheel2_params.gif"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/05/wheel2_params.gif" width="800" /></a></p>
<p>I started describing its controls, but wouldn&#8217;t it be more fun to just try it out? Below is a slightly reduced version of the Pixel Bender kernel running in Flash.</p>
<p>Give it a spin! Try the parameters, or click Scramble a few times, or Go, to let it choose random parameters.</p>
<p><div id="embed_52_1">
    <div
       onclick='document.getElementById("embed_52_1").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2010/05/spindala_for_flash.swf\" width=\"800\" height=\"520\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:504px ; width:784px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>spindala_for_flash.swf</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2010/05/spindala_for_flash.swf</font>
        </div>
    </div>
</div></p>
<p>There&#8217;s no shortage of vaguely-trippy image manglers, these days, but that&#8217;s no reason not to indulge.</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/i3J9ibS--_o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/05/17/ae-omino-spindala-a-pixel-bender-filter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2010/05/17/ae-omino-spindala-a-pixel-bender-filter/</feedburner:origLink></item>
		<item>
		<title>AE: Omino Staragon, A Pixel Bender Filter</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/yynRopRp_xU/</link>
		<comments>http://omino.com/pixelblog/2010/05/03/ae-omino-staragon-a-pixel-bender-filter/#comments</comments>
		<pubDate>Tue, 04 May 2010 00:54:08 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[pixel bender]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[polygons]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=418</guid>
		<description><![CDATA[download: ==> omino staragon 32 6swtGElxOzs click forhttp://www.youtube.com/v/6swtGElxOzs&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999 download: ==> omino staragon 32]]></description>
			<content:encoded><![CDATA[<p>download: ==> <a href="http://omino.com/pixelblog/wp-content/uploads/2010/05/omino_staragon.pbk">omino staragon 32</a> <== a pixel bender filter</p>
<p><a href="http://www.creative-workflow-hacks.com/2010/04/15/a-pixelbender-rounded-rect-generator-for-after-effects/">Just recently, Dale Bradshaw posted a rounded-rect pixel bender plugin.</a> Pretty nifty!</p>
<p>It got me thinking, What about other rounded-corner polygons? It was a bit of a puzzle. As with all Pixel Bender plugins, the question is, What color is this pixel? How does a given pixel know if it&#8217;s inside a rounded-corner pentagon or not?</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2010/05/hex_and_star.png" alt="hex_and_star.png" border="0" width="400" height="219" /></p>
<p>I stuck to regular and stellated polygons to start. One solution goes like so:</p>
<ul>
<li>Divide the plane into pie-slices, one for each edge of the polygon.</li>
<li>For each point, decide which slice you&#8217;re in.</li>
<li>Decide if you&#8217;re inside or outside the edge.</li>
<li>For the rounding&#8230; decide which corner you&#8217;re nearest</li>
<li>Are you in the arc of that corner? If so, decide if you&#8217;re inside the rounding-radius.</li>
</ul>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2010/05/pentagon_pie.jpg" alt="pentagon_pie.jpg" border="0" width="319" height="280" /></p>
<p>Well, that was a bit of obsessive fun. Here&#8217;s a screen shot, including the parameter controls:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/05/screenshot.png"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/05/screenshot.png" width="640" /></a></p>
<p>And here&#8217;s a little demo of it.</p>
<p><div id="embed_56_1">
    <div
       onclick='document.getElementById("embed_56_1").innerHTML = "<embed src=\"http://www.youtube.com/v/6swtGElxOzs&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"640\" height=\"385\"></embed>";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:369px ; width:624px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>6swtGElxOzs</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://www.youtube.com/v/6swtGElxOzs&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999</font>
        </div>
    </div>
</div></p>
<p>download: ==> <a href="http://omino.com/pixelblog/wp-content/uploads/2010/05/omino_staragon.pbk">omino staragon 32</a> <== a pixel bender filter</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/yynRopRp_xU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/05/03/ae-omino-staragon-a-pixel-bender-filter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2010/05/03/ae-omino-staragon-a-pixel-bender-filter/</feedburner:origLink></item>
		<item>
		<title>AE: Omino Glass, A Pixel Bender Filter</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/L41dyZZaAlE/</link>
		<comments>http://omino.com/pixelblog/2010/04/21/ae-omino-glass-a-pixel-bender-filter/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 14:41:32 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[pixel bender]]></category>
		<category><![CDATA[chromatic aberration]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=398</guid>
		<description><![CDATA[download: ==> omino glass 32 click forcontent download: ==> omino glass 32]]></description>
			<content:encoded><![CDATA[<p>download: ==> <a href="http://omino.com/pixelblog/wp-content/uploads/2010/04/omino_glass.pbk">omino glass 32</a> <== a pixel bender filter</p>
<p>There was a flurry of interest in "chromatic aberration" a while back, like <a href="http://aeportal.blogspot.com/2009/03/chromatic-aberrations-seperating-rgb.html">here</a>. I&#8217;d actually played with it a bit, simulating lens-effects, but only now have gotten around to weighing in on it.</p>
<p>The implementations I&#8217;ve seen work by splitting out your RGB and moving them around a little bit independently.</p>
<p>Here&#8217;s my weigh-in: Come on, people! The spectrum has more than three colors!</p>
<p>I find that five to seven is about right. I&#8217;ve implemented this combined with refraction into a pixel bender plugin.</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2010/04/omino_glass_title_card.jpg" alt="omino_glass_title_card.jpg" border="0" width="617" height="258" /></p>
<p>Refraction happens when a ray of light changes its direction as it passes from one substance to another, if they have aaah, varying, that is, if they have different, um, refractive indexes. And that&#8217;s how aaah magnifying glasses work. See.</p>
<p>It looks like this.</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/04/refraction_doodle.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/04/refraction_doodle.jpg" width="360" /></a></p>
<p>The blue lines are rays of light moving up, or cast-sight-rays going down. It&#8217;s all very technical.</p>
<p>But I&#8217;ve got this Pixel Bender filter, right?</p>
<p>The filter takes in two images: a bump map (the refracting surface) and an image to view through the refraction. Here&#8217;s a bump map:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/04/ripples.jpg" alt="ripples.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/04/ripples.jpg" alt="ripples.jpg" width="360" /></a></p>
<p>And here&#8217;s a source image:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/04/chairs.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/04/chairs.jpg" width="360" /></a></p>
<p>Those chairs are known as &#8220;Chadwick Modular Seating&#8221;, from Herman Miller, designed by <a href="http://www.hermanmiller.com/Designers/Chadwick">Don Chadwick</a>, who later designed the Aeron chair, and that room hasn&#8217;t been that empty for, like, six years, after my girlfriend moved in and filled it up with shoes and stuff. So anyway.</p>
<p>And here&#8217;s the image, through the <b>omino_glass</b> Pixel Bender filter:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/04/chairs_and_omino_glass.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/04/chairs_and_omino_glass.jpg" width="360" /></a></p>
<p>Now the fun part. Chromatic aberration happens when different colors are refracted by different amounts. Here&#8217;s the same image with just a touch of chromatic aberration applied:</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2010/04/chairs_and_omino_glass_aberration.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2010/04/chairs_and_omino_glass_aberration.jpg" width="360" /></a></p>
<p>Livens it up a little bit, yes?</p>
<p>The &#8220;flat&#8221; parts of the image, under the non-sloping parts of the bump map, appear undistored, and uncolored. But the distorted parts of the image have their colors splayed out a bit.</p>
<p>That&#8217;s chromatic aberration, comma, simulated.</p>
<p>By the way, you can get this effect in After Effects using <b>CC Glass</b> and overlaying multiple tinted copies, with slightly different settings for Height, and adding them back together. But that&#8217;s a lot of layers and settings to juggle; my pixel bender filter does it all in one at 32bpc instead of 8.</p>
<p>Here&#8217;s a test grid set with no basic refraction, and lots of chromatic aberration. This leaves the central green portion of the spectrum centered on the original image.<img src="http://omino.com/pixelblog/wp-content/uploads/2010/04/test_grid1.jpg" alt="test_grid.jpg" border="0" width="609" height="439" /></p>
<p>The inset image is the bump map.</p>
<p>We can see how <b>omino_glass</b> breaks the spectrum up into seven regions. It&#8217;s arbitrary, but I like the look.</p>
<p>And here&#8217;s a little demo showing the filter in motion, animated in After Effects, out on the &#8216;Tube.</p>
<p><div id="embed_60_1">
    <div
       onclick='document.getElementById("embed_60_1").innerHTML = "<object width=\"500\" height=\"405\"><param name=\"movie\" value=\"http://www.youtube.com/v/pk3N2GU7EwU&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;border=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/pk3N2GU7EwU&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;border=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"500\" height=\"405\"></embed></object>";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:389px ; width:484px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b></b>
            <br /><br />
            <font size="-1" color="#999">click for<br />content</font>
        </div>
    </div>
</div></p>
<p>download: ==> <a href="http://omino.com/pixelblog/wp-content/uploads/2010/04/omino_glass.pbk">omino glass 32</a> <== a pixel bender filter</p>
<p>Other chromatic aberrations of interest, from some of my favorite blogs:<br />
 <a href="http://ae.tutsplus.com/tutorials/motion-graphics/learn-how-to-create-chromatic-aberration/">ae-tuts</a><br />
 <a href="http://maltaannon.com/blog/separating-rgb-channels/">maltaannon</a><br />
 <a href="http://www.gutsblow.com/Archive/9/new-pixel-bender-plugin-separate-rgb">satya meka</a></p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/L41dyZZaAlE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/04/21/ae-omino-glass-a-pixel-bender-filter/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2010/04/21/ae-omino-glass-a-pixel-bender-filter/</feedburner:origLink></item>
		<item>
		<title>Omino Plugins for CS5</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/s2zEjPpBU2U/</link>
		<comments>http://omino.com/pixelblog/2010/04/12/omino-plugins-for-cs5/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 13:37:08 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[after effects]]></category>
		<category><![CDATA[cs5]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=382</guid>
		<description><![CDATA[Glory Time marches forward. Computers are faster, hard drives and screens are bigger, cameras are smaller. My usual settings have grown from 8 bit, 640&#215;480 to 32 bit 720p. (Yeah, I&#8217;ve lost my fear of nonsquare pixels.) Adobe just announced After Effects CS5, and I&#8217;m happy to report that the Omino After Effects Suite is [...]]]></description>
			<content:encoded><![CDATA[<h4>Glory</h4>
<p>Time marches forward. Computers are faster, hard drives and screens are bigger, cameras are smaller.</p>
<p>My usual settings have grown from 8 bit, 640&#215;480 to 32 bit 720p. (Yeah, I&#8217;ve lost my fear of nonsquare pixels.)</p>
<p>Adobe just announced After Effects CS5, and I&#8217;m happy to report that the Omino After Effects Suite is fully ported for Mac OS X, 64-bit, and getting ready to roll.</p>
<p>And they&#8217;ve started their migration from humble 8-bit processes to glamorous 32-bit floating point processes, as well.</p>
<h4>Tragedy</h4>
<p>The great tragedy is that CS5 broke backwards compatibility with CS4 plugins. Oh, there were Reasons, oh yes, there always are. And, oh, they&#8217;ve made it relatively easy for developers to recompile, which I&#8217;ve done. (Worked like a charm.)</p>
<p>But between Apple&#8217;s fickleness (68k, powerPC, Intel) and, now, this&#8230; there&#8217;s a trail of plugin corpses. Great sadness.</p>
<p>Some of my favorite Plugins don&#8217;t even exist for AE Intel Mac. Actually, the only ones I&#8217;ve paid for&#8230; WalkerFx&#8217;s stargate, and dvGarage&#8217;s dvMatte Pro. How I do wail!</p>
<h4>Rays of Hope</h4>
<p>But are <em>things</em>, overall, getting better? Oh yes, much better.</p>
<p>My CS5 plugins are Mac only, for now. </p>
<p>The Mac/Win CS4 versions will remain available. Or should I say, will remain on display in the Marketplace that all may witness their demise and death, their only crime having been to be compiled at the wrong place at the wrong time.</p>
<p><a href="http://omino.com/sw/">http://omino.com/sw/</a>.</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/s2zEjPpBU2U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2010/04/12/omino-plugins-for-cs5/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2010/04/12/omino-plugins-for-cs5/</feedburner:origLink></item>
		<item>
		<title>AE: Scripting Notes</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/cC9XALwxBNU/</link>
		<comments>http://omino.com/pixelblog/2009/08/04/ae-scripting-notes/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 00:40:32 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[extendscript]]></category>
		<category><![CDATA[bug]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=380</guid>
		<description><![CDATA[Just a quick note about a bug and an optimization when scripting After Effects CS4 (and probably earlier versions, too). addProperty() bug When adding several effects, each addition invalidates the object variable references to earlier ones. Here&#8217;s a code fragment which shows the problem and the solution. var comp = app.project.activeItem; var layer = comp.layers.addNull(); [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note about a bug and an optimization when scripting After Effects CS4 (and probably earlier versions, too).</p>
<h3>addProperty() bug</h3>
<p>When adding several effects, each addition invalidates the object variable references to earlier ones. Here&#8217;s a code fragment which shows the problem and the solution.</p>
<pre>
var comp = app.project.activeItem;
var layer = comp.layers.addNull();
layer.name = "null_layer";

var slider1 = layer.Effects.addProperty("Slider Control");
slider1.name = "s1";

var slider2 = layer.Effects.addProperty("Slider Control");
slider2.name = "s2";

// At this point, slider2 is valid, but slider1 is mysteriously not!
// Any action or reference to slider1 will cause an "invalid object" error
//
// What can we do?
//
// Fortunately, they have names by which we can recover them

slider1 = layer.Effects.property("s1");
slider2 = layer.Effects.property("s2");

// Now they're both good to go.
</pre>
<h3>setValueAtTime() Gets very slow!</h3>
<p>If you do a whole lot of <code>setValueAtTime()</code> calls to set keyframes, the script will run very slowly. Fortunately, you can just call <code>setValuesAtTimes()</code>, the plural form, to set many at once, which is much more efficient! Makes the minutes seem like seconds, Captain.</p>
<pre>
// this will be very slow, if myData has more than a few dozen items
for(var i = 0; i < myData.length; i++)
	prop.setValueAtTime(myData[i].t,myData[i].v);

// but if we build up our arrays first...
var timesArray = new Array();
var valuesArray = new Array();
for(var i = 0; i < myData.length; i++)
{
	timesArray.push(myData[i].t);
	valuesArray.push(myData[i].v);
}
// and set them all at once
prop.setValuesAtTime(timesArray,valuesArray);

// it will go lickity-split!
</pre>
<p>(Thanks <a href="http://forums.creativecow.net/thread/2/879907">creative cow thread</a>!)</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/cC9XALwxBNU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2009/08/04/ae-scripting-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2009/08/04/ae-scripting-notes/</feedburner:origLink></item>
		<item>
		<title>AE: Feature Wishes</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/ka9Sx745-kU/</link>
		<comments>http://omino.com/pixelblog/2009/07/06/ae-feature-wishes/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 01:00:11 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[expressions]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=378</guid>
		<description><![CDATA[After Effects is just about my favorite software application. Very elegant model, and a clean &#038; responsive UI. But I think I can articulate two well-considered features that would boost its utility quite generally. Feature Request 1: Foldering When working with many layers, it would often be nice to group several of them together. To [...]]]></description>
			<content:encoded><![CDATA[<p>After Effects is just about my favorite software application. Very elegant model, and a clean &#038; responsive UI.</p>
<p>But I think I can articulate two well-considered features that would boost its utility quite generally.</p>
<h3>Feature Request 1: Foldering</h3>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2009/07/comp-folders.png"><img src="http://omino.com/pixelblog/wp-content/uploads/2009/07/comp-folders.png" width="360" /></a></p>
<p>When working with many layers, it would often be nice to group several of them together. To do this, I&#8217;d like to create a <em>folder</em> for them. This would help manage the grouped layers visually, and collapse to reduce them to a single line item.</p>
<p>You&#8217;d be able to apply effects to the folder. Maybe it&#8217;s called &#8220;groups&#8221;.</p>
<p>This is very similar to a precomp, of course, but you can work on the keyframes locally, instead of switching up and down the tree or using a split view.</p>
<h3>Feature Request 2: Exportable Rigging Properties</h3>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2009/07/comp-rigging.png""><img src="http://omino.com/pixelblog/wp-content/uploads/2009/07/comp-rigging.png"" width="360" /></a></p>
<p>Precomping is great, but it still doesn&#8217;t let you &#8220;rig&#8221; and &#8220;instance&#8221;. In my particular case, I&#8217;ve got two &#8220;claws&#8221; animated. They&#8217;re identical, but need to animate differently. Today, I need to duplicate the layers (either in the comp, or as <em>separate</em> precomps). Which is a shame, because I&#8217;d like to fiddle with the claw design, maybe later, and have my changes affect both!</p>
<p>So, this feature lets you expose a keyframable property on the comp, so that when it&#8217;s nested you can control it from the parent comp.</p>
<p>You can, if you&#8217;re overly clever, use Time Remapping to accomplish this a little bit. But I&#8217;d rather see clearly named &#8220;rigging&#8221; properties on my comp, itself, to animate.</p>
<p>(You could imagine also being able to add rigging properties to a folder, or maybe even any layer. This would be the same functionality as the &#8220;Slider&#8221; effect, but maybe tidier.)</p>
<p>As well as sliders and checkboxes, you could export &#8220;layer&#8221; properties, which pipe in a layer of the parent <em>into</em> the child comp. This lets you create an effect out of a comp. Presets can do this, a little bit, but in a flat, non-tweakable non-instanceable fashion.</p>
<p>I&#8217;ve heard one AE developer refer to a variation on this idea as a &#8220;Capsule&#8221;. The idea he described would require (I think?) you to save a comp into a separate file, before being able to reuse it. I think one of the brilliant project features of After Effects is that you get multiple timelines <em>within one project</em>. I like the One Big File workflow! (I wish 3d apps had this; as far as I know, they all work only on a single timeline per document.)</p>
<h3>Miscellany</h3>
<p>It would be nice to drop in a &#8220;reference&#8221; layer, that could repeate a different layer within the same comp to a different layer order. This would need to be <em>post effects</em> to be useful. It would let you perform different treatments on the same source&#8230; again, without a precomp.</p>
<p>It would also let your manage a folder, and still retain flexibility on its layer order.</p>
<h3>To conclude&#8230;</h3>
<p>After Effects is already quite strong in terms of &#8220;instancing&#8221;. That&#8217;s practically its main power. But it fails for purposes much beyond &#8220;tidiness&#8221;. &#8220;Rigging Properties&#8221; addresses this key omission. </p>
<p>Photoshop recently got &#8220;foldering&#8221;, and lets you set transfer mode and transparency on a group of layers. This is grand! I want it for After Effects.</p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/ka9Sx745-kU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2009/07/06/ae-feature-wishes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2009/07/06/ae-feature-wishes/</feedburner:origLink></item>
		<item>
		<title>AE: Projecting a Movie Onto a Complex Surface</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/z3fzDiQuJNY/</link>
		<comments>http://omino.com/pixelblog/2009/05/23/ae-projecting-a-movie-onto-a-complex-surface/#comments</comments>
		<pubDate>Sun, 24 May 2009 06:31:11 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[pixel bender]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[modo]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=356</guid>
		<description><![CDATA[This is a rendering simulating an image projected onto a simple 3d scene. There&#8217;s nothing too exotic about it, except that the projection was done in 2d, in After Effects. And&#8230; here&#8217;s a moving sequence of the same scene. With old family movies. stage_demo_640_dt-desktop.m4v click forhttp://omino.com/pixelblog/wp-content/uploads/2009/05/stage_demo_640_dt-desktop.m4v The usual way you&#8217;d do this is by rendering [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/projection-frame.jpg" alt="projection_frame.jpg" border="0" width="640" height="480" /></p>
<p>This is a rendering simulating an image projected onto a simple 3d scene. There&#8217;s nothing too exotic about it, except that the projection was done in 2d, in After Effects.</p>
<p>And&#8230; here&#8217;s a moving sequence of the same scene. With old family movies.</p>
<p><div id="embed_76_1">
    <div
       onclick='document.getElementById("embed_76_1").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2009/05/stage_demo_640_dt-desktop.m4v\" width=\"640\" height=\"496\" controller=\"true\" autoplay=\"true\" loop=\"true\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:480px ; width:624px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>stage_demo_640_dt-desktop.m4v</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2009/05/stage_demo_640_dt-desktop.m4v</font>
        </div>
    </div>
</div></p>
<p>The usual way you&#8217;d do this is by rendering a movie, taking it into your 3d program, and projecting it onto a scene through a light source.</p>
<p>For my current project, I needed this effect, but wanted a way to work in After Effects. I did this for workflow reasons: my projection content was all AE authored. But it also turns out to save render time. More than a little.</p>
<p>The trick was to render the scene in 3d as a coordinate-map, in Red and Green. I used Modo, and the projection mode is called &#8220;Front Projection&#8221;, from a spotlight or camera. I projected a red-green ramp onto the scene.</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/gradient.png" alt="gradient.png" border="0" width="240" height="240" /> <a href="http://omino.com/pixelblog/wp-content/uploads/2009/05/stage-lit.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/stage-lit.jpg" width="360" /></a> <a href="http://omino.com/pixelblog/wp-content/uploads/2009/05/stage-rg-lit.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/stage-rg-lit.jpg" width="360" /></a></p>
<p>But we&#8217;re going to use the red and green values as a projection function. Changing the shader to use unattenuated (&#8220;luminous&#8221; @ 1W/steradian in modo) accomplishes this. We&#8217;re rendering geometry, not optics.</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2009/05/stage-rg-projected.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/stage-rg-projected.jpg" width="360" /></a></p>
<p>Then, I wrote a simple Pixel Bender kernel to use the red and green pixel values as coordinates to draw from the source projected image.</p>
<pre>
<languageVersion : 1.0;>
// by david van brink / poly@omino.com / 2009
// http://omino.com/pixelblog/
kernel rg_projection
<  namespace : "omino";    vendor : "omino";    version : 1;
   description : "uses red/green from one image to map another"; >
{
    input image4 src; // Red-green mapping image
    input image4 ref; // image to project
    output pixel4 dst;

    parameter float imageXSize<minValue : 1.0 ;maxValue : 4096.0 ;defaultValue : 256.0 ;>;
    parameter float imageYSize<minValue : 1.0 ;maxValue : 4096.0 ;defaultValue : 256.0 ;>;
    parameter float imageXOffset<minValue : -4096.0 ;maxValue : 4096.0 ;defaultValue : 0.0 ;>;
    parameter float imageYOffset<minValue : -4096.0 ;maxValue : 4096.0 ;defaultValue : 0.0 ;>;

    void
    evaluatePixel() {
        pixel4 a = sampleLinear(src,outCoord());
        float r = a.r * imageXSize + imageXOffset;
        float g = a.g * imageYSize + imageYOffset;

        dst = sampleLinear(ref,float2(r,g));
    }
}
</pre>
<p>To test the Pixel Bender kernel, I ran a reference grid through the red-green ramp.</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/test-grid-gamma.png" alt="test_grid_gamma.png" border="0" width="140" height="140" /><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/test-grid-no-gamma.png" alt="test_grid_no_gamma.png" border="0" width="140" height="140" /><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/test-grid-no-gamma-better-gradient.png" alt="test_grid_no_gamma_better_gradient.png" border="0" width="140" height="140" /></p>
<p>The first one shows gamma correction on the ramp image in After Effects. Under &#8220;Interpret Footage&#8221;, be sure to turn on &#8220;Preserve RGB&#8221;.</p>
<p>The second one reveals that Photoshop&#8217;s default ramp is some sort of s-shaped modified linear function. Creating a custom gradient with more stops along the way helped get the third, which is Good Enough. I went back and redid the scene with the improved red-green gradient.</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/gradient-settings.png" alt="gradient_settings.png" border="0" width="280" height="152" /></p>
<p>And of course, use 32-bit color throughout. 16-bit works ok, too. 8-bit showed definite Squarifying in the projection, though.</p>
<p>To reintroduce the optical nature of the projection, back in After Effects it&#8217;s multiplied by a normally rendered image and, because I still think it&#8217;s pretty neat idea, an ambient occlusion pass as well.</p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/stage-ambient-occlusion.jpg" alt="stage_ambient_occlusion.jpg" border="0" width="439" height="411" /></p>
<p><img src="http://omino.com/pixelblog/wp-content/uploads/2009/05/stage-grid-projected.jpg" alt="stage_grid_projected.jpg" border="0" width="439" height="411" /></p>
<p>And there you have it! 3d projections done all in 2d.</p>
<hr />
<a href="http://omino.com/pixelblog/wp-content/uploads/2009/05/projection_mapping.aep.zip">Download the AE Project</a></p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/z3fzDiQuJNY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2009/05/23/ae-projecting-a-movie-onto-a-complex-surface/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://omino.com/pixelblog/2009/05/23/ae-projecting-a-movie-onto-a-complex-surface/</feedburner:origLink></item>
		<item>
		<title>AE: Fake Spotlights</title>
		<link>http://feedproxy.google.com/~r/OminoPixelBlog/~3/LN69wuK0idk/</link>
		<comments>http://omino.com/pixelblog/2009/04/18/ae-fake-spotlights/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 00:04:23 +0000</pubDate>
		<dc:creator>david van brink</dc:creator>
				<category><![CDATA[after effects]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[lighting]]></category>
		<category><![CDATA[modo]]></category>

		<guid isPermaLink="false">http://omino.com/pixelblog/?p=348</guid>
		<description><![CDATA[Here&#8217;s another variation on additive lighting tricks&#8230; This one is a little experiment using After Effects&#8217; spotlights on still images which have been rendered with similarly-located light sources. Here&#8217;s one of the several still images. And here&#8217;s a short movie showin a little more of the procedure, and some results. spotlights.mp4 click forhttp://omino.com/pixelblog/wp-content/uploads/2009/04/spotlights.mp4]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another variation on additive lighting tricks&#8230;</p>
<p>This one is a little experiment using After Effects&#8217; spotlights on still images which have been rendered with similarly-located light sources.</p>
<p>Here&#8217;s one of the several still images.</p>
<p><a href="http://omino.com/pixelblog/wp-content/uploads/2009/04/trefoil-swarm-pointlight-1.jpg"><img src="http://omino.com/pixelblog/wp-content/uploads/2009/04/trefoil-swarm-pointlight-1.jpg" width="360" /></a></p>
<p>And here&#8217;s a short movie showin a little more of the procedure, and some results.</p>
<p><div id="embed_80_1">
    <div
       onclick='document.getElementById("embed_80_1").innerHTML = "<embed src=\"http://omino.com/pixelblog/wp-content/uploads/2009/04/spotlights.mp4\" width=\"640\" height=\"496\" controller=\"true\" />";'
       style="
        color : white ;
        border : 4px #888 solid ;
        margin : 4px ;
        background : #ddd ;
        background-image : url('http://omino.com/pixelblog/wp-content/plugins/tvStatic128Dark.gif') ;
        cursor:pointer ;
        height:480px ; width:624px ; ">
        <div style="word-wrap : break-word ; font-size:130% ; position : relative ; top : 35% ; text-align : center ; vertical-align : middle">
            <b>spotlights.mp4</b>
            <br /><br />
            <font size="-1" color="#999">click for<br />http://omino.com/pixelblog/wp-content/uploads/2009/04/spotlights.mp4</font>
        </div>
    </div>
</div></p>
<img src="http://feeds.feedburner.com/~r/OminoPixelBlog/~4/LN69wuK0idk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omino.com/pixelblog/2009/04/18/ae-fake-spotlights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
			
		<enclosure url="http://omino.com/pixelblog/wp-content/uploads/2009/04/spotlights.mp4" length="7488255" type="video/mp4" />
		<enclosure url="http://omino.com/pixelblog/wp-content/uploads/2009/04/spotlights.mp4" length="7488255" type="video/mp4" />
	<feedburner:origLink>http://omino.com/pixelblog/2009/04/18/ae-fake-spotlights/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/OminoPixelBlog/~5/gKPt37ll5MM/spotlights.mp4" length="7488255" type="video/mp4" /><feedburner:origEnclosureLink>http://omino.com/pixelblog/wp-content/uploads/2009/04/spotlights.mp4</feedburner:origEnclosureLink></item>
	</channel>
</rss>

