<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Softimage Blog</title>
	
	<link>http://www.softimageblog.com</link>
	<description>People and thoughts behind Softimage in production...</description>
	<lastBuildDate>Thu, 24 Mar 2011 20:06:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/xsi-blog/content" /><feedburner:info uri="xsi-blog/content" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Disconnecting Shaders</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/XBAING8OQxI/590</link>
		<comments>http://www.softimageblog.com/archives/590#comments</comments>
		<pubDate>Thu, 24 Mar 2011 20:03:23 +0000</pubDate>
		<dc:creator>Patrick Boucher</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.softimageblog.com/?p=590</guid>
		<description><![CDATA[I rarely talk about short lived timely issues such as this one but it was a bit too pervasive to pass up and the facility here has just been bitten by it. I&#8217;m talking about spontaneously disconnecting shaders. Background info (read these): The issue as described in a thread on the mailing list. A workaround [...]]]></description>
			<content:encoded><![CDATA[<p>I rarely talk about short lived timely issues such as this one but it was a bit too pervasive to pass up and the facility here has just been bitten by it.</p>
<p>I&#8217;m talking about spontaneously disconnecting shaders.</p>
<p>Background info (read these):</p>
<ul>
<li>The issue as described in a <a href="https://groups.google.com/d/topic/xsi_list/zTYf8JvQfhk/discussion">thread on the mailing list</a>.</li>
<li>A workaround as described by <a href="http://xsisupport.wordpress.com/2011/03/12/using-dotxsi-to-clean-up-a-material-library/">eX-SI Support</a></li>
</ul>
<p>The following script partly automates the solution described by eX-SI Support so if you have many libs it almost eliminates human error. It seems to have worked for us so far as a preemptive measure before scenes break or after having spent too much time fixing a scene. Import an asset, material preset or fix a broken scene, go through the hoops. This is <em>not</em> fun but until there is an official fix, we&#8217;re kinda stuck.</p>
<p>Run <code>Application.MatLibFixStep1()</code> which will convert material libraries to external references, prompt you to save the scene and quit Softimage.</p>
<p>Restart Softimage, open the scene you saved previously and run <code>Application.MatLibFixStep2()</code> which will reconvert the material libraries to internal storage.</p>
<p><script src="https://gist.github.com/885737.js?file=MatLibFix.py"></script></p>
<p>Jean-Sebastien&#8217;s workaround is also worth investigating if the above doesn&#8217;t work for you (see the Softimage mailing list thread linked above).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=XBAING8OQxI:fre4c0vHxUA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=XBAING8OQxI:fre4c0vHxUA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=XBAING8OQxI:fre4c0vHxUA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=XBAING8OQxI:fre4c0vHxUA:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=XBAING8OQxI:fre4c0vHxUA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/XBAING8OQxI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/590/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/590</feedburner:origLink></item>
		<item>
		<title>Simulated Shapes in Momentum 2.0</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/fNH5GH-LQHQ/564</link>
		<comments>http://www.softimageblog.com/archives/564#comments</comments>
		<pubDate>Mon, 21 Mar 2011 18:18:26 +0000</pubDate>
		<dc:creator>Helge Mathee</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ICE]]></category>
		<category><![CDATA[Simulation]]></category>

		<guid isPermaLink="false">http://www.softimageblog.com/?p=564</guid>
		<description><![CDATA[Driving rigid bodies' shapes with simulated deformation opens up a whole new set of possibilities!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.exocortex.com/simulation/momentum" target="_blank">Momentum 2.0</a>,  Exocortex&#8217;s new multi-physics system, an integration of the well-known Bullet physics engine for Autodesk&#8217;s Softimage, provides a bunch of features that are not totally obvious at first.</p>
<p><a href="http://www.softimageblog.com/userContent/upload/2011/03/capture096.jpg"><img class="aligncenter size-medium wp-image-587" src="http://www.softimageblog.com/userContent/upload/2011/03/capture096-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>One of the clients showed me a pretty cool use of the geometry stack in conjunction with Momentum&#8217;s DeformRigidBody operator. This operator is able to treat every polygon-island inside a polygonmesh as a separate rigid body, and, since it is connected to the geometry stack, is able to keep the shape of the rigid bodies in sync with the deformation happening below. This way you can create animated shapes, and have them influence the rigid body simulation in Bullet.</p>
<p><span id="more-564"></span></p>
<p>While I implemented this feature, I was not aware of all of the possible uses, of course. Since the interactive creative environment has been introduced into Softimage, the possibilities are endless, and it is very hard to imagine what users will come up with once additions to ICE are released into the community.</p>
<p>The client, who had to deal with a very complex effect for a commercial, used Momentum just for the rigid body simulation, while the deformation was done through ICE. What&#8217;s interesting here is that he is simulating the deformation using a turbulence method, and driving the rigid body engine with this deform.</p>
<p><a href="http://www.softimageblog.com/userContent/upload/2011/03/icetree.jpg"><img class="alignnone size-large wp-image-567" src="http://www.softimageblog.com/userContent/upload/2011/03/icetree-1024x339.jpg" alt="" width="819" height="271" /></a></p>
<p>By offering small building blocks that work well together with ICE, or even integrate into ICE as compounds, Momentum 2.0 opens a whole new world of possibilities for simulation. Goal-based simulation and user driven results are in reach. What thrills me the most though, is to see unexpected setups like this one. The community&#8217;s amount of creativity really produces so much inspiration for developers like myself.</p>
<p>I will continue to talk about techniques and tricks with Momentum on this blog, and try to contribute users&#8217; experiences and solutions.</p>
<p>Here&#8217;s a capture of the effect:</p>
<p><a href="http://www.softimageblog.com/archives/564"><em>Click here to view the embedded video.</em></a></p>
<p>Here&#8217;s a link to Momentum 2.0 product page:</p>
<p><a href="http://www.exocortex.com/simulation/momentum">http://www.exocortex.com/simulation/momentum</a></p>
<p>We have posted a series of other videos, including tutorials, trailers etc on vimeo, you can find them in our Momentum group:</p>
<p><a href="http://vimeo.com/groups/exocortexmomentum">http://vimeo.com/groups/exocortexmomentum</a></p>
<p>This is a good place to stay up to date on new releases and latest information.</p>
<p>Please let me know what you think, I like to be intrigued for other topics and solutions for complex effects.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=fNH5GH-LQHQ:S-dK2513md4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=fNH5GH-LQHQ:S-dK2513md4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=fNH5GH-LQHQ:S-dK2513md4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=fNH5GH-LQHQ:S-dK2513md4:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=fNH5GH-LQHQ:S-dK2513md4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/fNH5GH-LQHQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/564/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/564</feedburner:origLink></item>
		<item>
		<title>Scene Based Event Plugins</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/urlFBmQ8JNQ/553</link>
		<comments>http://www.softimageblog.com/archives/553#comments</comments>
		<pubDate>Fri, 18 Mar 2011 17:06:27 +0000</pubDate>
		<dc:creator>Patrick Boucher</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.softimageblog.com/?p=553</guid>
		<description><![CDATA[Those of you who are long time readers of Softimage Blog (or XSIBlog way back when) might remember a 2006 article by Homam Bahnassi. In the article Homam describes a method to run code stored in annotations in the scene at arbitrary moments by selecting an object and manually invoking code execution. Recently we had [...]]]></description>
			<content:encoded><![CDATA[<p>Those of you who are long time readers of Softimage Blog (or XSIBlog way back when) might remember a 2006 <a href="http://www.softimageblog.com/archives/116">article</a> by Homam Bahnassi. In the article Homam describes a method to run code stored in annotations in the scene at arbitrary moments by selecting an object and manually invoking code execution.</p>
<p><a href="http://www.softimageblog.com/userContent/upload/2011/03/codeRunnerHierarchy.png"><img src="http://www.softimageblog.com/userContent/upload/2011/03/codeRunnerHierarchy.png" alt="" title="codeRunnerHierarchy" width="290" height="386" class="alignright size-full wp-image-554" /></a></p>
<p>Recently we had an issue where a single scene was acting wonky and for it to render we needed to coax it a bit into cooperating with a pre-render script. The production guys fixed their issue but it got me thinking and I decided it might be good to revisit Homam&#8217;s ideas but make it work with the <code>siOnBeginSequence</code> event&#8230; Or maybe even any event.</p>
<p>The idea is to have a single plugin that is extremely simple and that registers into the requested events. When the event is triggered, the plugin will inspect the scene and find any relevant annotation and execute it&#8217;s code. The plugin will find annotations who&#8217;s name matches the name of the event prefixed with <code>run</code>, <code>runOnEndSceneSave</code> for example.</p>
<p>The scene root is inspected for annotations as well as any other model no matter how deeply nested. Annotations&#8217; code is executed depth first so if you had a scene who&#8217;s assets&#8217; code needs to be run before scene code, you&#8217;re good to go. Finally, if any annotation&#8217;s execution fails, execution of all remaining annotations is halted; please debug your code.</p>
<p>The explorer screenshot shows an example where the scene contains code that will run when the scene is saved. The <code>Model</code> annotations that allows the <code>runOnEndFileImport</code> code to be run only once on initial model import. Let&#8217;s break that second example down a bit starting with the <code>runOnEndFileImport</code> code:</p>
<p><script src="https://gist.github.com/876213.js?file=runOnEndFileImport"></script></p>
<p>The <code>flag1</code> parameter of the <code>runOnEndFileImport</code> is used to know if the code has already run once. The problem though, is that if you export the asset, it will export with the flag on and thus would not run on subsequent import. You could rely on the user to remove the flag on export but you could also implement two other event annotations: <code>runOnBeginFileExport</code> to unset the flag and <code>runOnEndFileExport</code> to switch it back on.</p>
<p><script src="https://gist.github.com/876213.js?file=runOnBeginFileExport"></script></p>
<p><script src="https://gist.github.com/876213.js?file=runOnEndFileExport"></script></p>
<p>Have you noticed the <code>Annotation</code> object? Well, I figured that to add some context to the code in the annotation, on top of the standard Softimage objects (like <code>Application</code>), we could probably provide the actual annotation object that is being executed so you can then start rummaging in your scene at the appropriate location if needed.</p>
<p>Finally here is the Gist that implements the actual plugin that does the event registrations and annotation finding and execution. If you need this functionality on more or fewer events, just add or remove the appropriate ones in the <code>ACTIVE_EVENTS</code> list.</p>
<p><script src="https://gist.github.com/876213.js?file=SI_CodeRunner.py"></script></p>
<p>There are most certainly performance limitations to this that I haven&#8217;t investigated or measured. For instance, activating the <code>siOnValueChange</code> event and having tons of annotations in a large scene might not be a good idea.</p>
<p>Finally, if you&#8217;ve got a smarter way to find annotations under an X3DObject, please share!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=urlFBmQ8JNQ:FrIZAZywBoc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=urlFBmQ8JNQ:FrIZAZywBoc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=urlFBmQ8JNQ:FrIZAZywBoc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=urlFBmQ8JNQ:FrIZAZywBoc:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=urlFBmQ8JNQ:FrIZAZywBoc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/urlFBmQ8JNQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/553/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/553</feedburner:origLink></item>
		<item>
		<title>A SetValue decorator</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/giad20l--YA/532</link>
		<comments>http://www.softimageblog.com/archives/532#comments</comments>
		<pubDate>Wed, 19 Jan 2011 18:32:36 +0000</pubDate>
		<dc:creator>Patrick Boucher</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.softimageblog.com/?p=532</guid>
		<description><![CDATA[In a recent post on the Softimage mailing list people were wondering how to temporarily change user preferences. There are many cases where that might be fun to do, think command logging, undo stack or PPG pop ups. So here is a quick revisit of my past post on decorators but this one is very [...]]]></description>
			<content:encoded><![CDATA[<p>In a recent <a href="http://groups.google.com/group/xsi_list/browse_thread/thread/2746d24d3bc4e875/50b113a27a735f01?lnk=gst&#038;q=decorator#50b113a27a735f01">post on the Softimage mailing list</a> people were wondering how to temporarily change user preferences. There are many cases where that might be fun to do, think command logging, undo stack or PPG pop ups.</p>
<p>So here is a quick revisit of my past post on <a href="http://www.softimageblog.com/archives/357">decorators</a> but this one is very generalized.</p>
<p><script src="https://gist.github.com/786568.js?file=SetValue.py"></script></p>
<p>And some example usage&#8230;</p>
<p><script src="https://gist.github.com/786568.js?file=exampleUsage.py"></script></p>
<p>This version of the decorator is fun (Yeah!&#8230; I said <strong>fun</strong>.) because you can change any value in Softimage temporarily, as long as the value can be changed via a <code>Application.SetValue()</code> call.</p>
<p>I think you get the <a href="https://gist.github.com/786568">Gist</a> of it.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=giad20l--YA:TSm8NhMWWC8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=giad20l--YA:TSm8NhMWWC8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=giad20l--YA:TSm8NhMWWC8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=giad20l--YA:TSm8NhMWWC8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=giad20l--YA:TSm8NhMWWC8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/giad20l--YA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/532/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/532</feedburner:origLink></item>
		<item>
		<title>Vintage Softimage – A tribute to Phoenix Tools and Arete</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/vQmWbe2tmHQ/504</link>
		<comments>http://www.softimageblog.com/archives/504#comments</comments>
		<pubDate>Fri, 04 Jun 2010 16:55:40 +0000</pubDate>
		<dc:creator>Stefano Jannuzzo</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Rendering]]></category>
		<category><![CDATA[Texturing]]></category>
		<category><![CDATA[World of VFX]]></category>

		<guid isPermaLink="false">http://www.softimageblog.com/?p=504</guid>
		<description><![CDATA[The middle-aged of you will probably remember those names from the 90s. Phoenix Tools was a plugin company for Softimage 3D, and I was one of the founders. We did good and bad, and we eventually closed down in 2002. Arete had an excellent reputation for their ocean and atmospheric library, called Digital Nature Tools. [...]]]></description>
			<content:encoded><![CDATA[<p>The middle-aged of you will probably remember those names from the 90s.</p>
<p>Phoenix Tools was a plugin company for Softimage 3D, and I was one of the founders. We did good and bad, and we eventually closed down in 2002.</p>
<p>Arete had an excellent reputation for their ocean and atmospheric library, called Digital Nature Tools. I think their main business was in military simulation, however they had a part in every cg-generated ocean in the movies of the 90s.</p>
<p>In 2001 we joined forces to port their software under XSI (I think it was 2.0). Unfortunately, after the first version came out, both companies shut down.</p>
<p>8 years later, I am working on a feature animation with a few shots in water, and I realized I still had on some cd the arete psunami libraries. So, I decided to give it a try. I removed the license check from the shaders and I compiled them with good old Visual Studio 6, linking against the oldest mental ray library I could find (3.3), and in the end it worked. I was kind of touched when I finally saw the displaced grid rendering in Softimage 2010.</p>
<p>I think I will do no harm to anybody releasing these shaders. Both companies are dead since long, and this is my little tribute to them and the talented people who worked there.</p>
<p>The <a href='http://www.softimageblog.com/userContent/upload/2010/06/PT_Arete_Dnt.xsiaddon.zip'>addon is only available for win32</a>, and no, no chances for other platforms. That Arete library is the only one I have. If you do, use it at your own risk (and fun, i would say. There are probably better ways to do oceans nowadays).</p>
<p>And, you know what, I don&#8217;t even know how the full package works. I don&#8217;t have anymore the documentation, nor the scripts we provided. If my old companions will find them, I will post them later.</p>
<p>The basic usage however is easy. You have to connect a DNT_Ocean_Sh and DNT_Time to a DNT_Ocean_Evolver. What come out is the ocean instance, that can then go into the other nodes. Also, you want to apply DNT_Air as environment to have nice reflection and the atmosphere.</p>

<a href='http://www.softimageblog.com/archives/504/arete-1' title='Arete #1'><img width="150" height="103" src="http://www.softimageblog.com/userContent/upload/2010/06/arete.1.jpg" class="attachment-thumbnail" alt="Arete - displacement and optics" title="Arete #1" /></a>
<a href='http://www.softimageblog.com/archives/504/arete-2' title='Arete #2'><img width="150" height="100" src="http://www.softimageblog.com/userContent/upload/2010/06/arete.2.jpg" class="attachment-thumbnail" alt="Arete - Optics only" title="Arete #2" /></a>
<a href='http://www.softimageblog.com/archives/504/arete-3' title='Arete #3'><img width="150" height="99" src="http://www.softimageblog.com/userContent/upload/2010/06/arete.3.jpg" class="attachment-thumbnail" alt="Arete - Bump only rendered with a phong material" title="Arete #3" /></a>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=vQmWbe2tmHQ:lN6ADbcnKVM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=vQmWbe2tmHQ:lN6ADbcnKVM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=vQmWbe2tmHQ:lN6ADbcnKVM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=vQmWbe2tmHQ:lN6ADbcnKVM:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=vQmWbe2tmHQ:lN6ADbcnKVM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/vQmWbe2tmHQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/504/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/504</feedburner:origLink></item>
		<item>
		<title>Sixbirds PixelParticles 1.0</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/Fq4hN0QLN1g/492</link>
		<comments>http://www.softimageblog.com/archives/492#comments</comments>
		<pubDate>Wed, 03 Mar 2010 19:36:35 +0000</pubDate>
		<dc:creator>Helge Mathee</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.xsi-blog.com/?p=492</guid>
		<description><![CDATA[Hey folks, time to release another plugin under the flag of Sixbirds Barcelona! As already shown in a teaser video on vimeo.com, we worked on a plugin to use particles as pixels to unleash the power of ICE to textures. This plugin requires Autodesk Softimage 2010 SP1, Windows 32, 64 or Linux 64 bit. Provided [...]]]></description>
			<content:encoded><![CDATA[<p>Hey folks,</p>
<p>time to release another plugin under the flag of Sixbirds Barcelona!</p>
<p>As already shown in a teaser video on vimeo.com, we worked on a plugin to use particles as pixels to unleash the power of ICE to textures.</p>
<p><span id="more-492"></span>This plugin requires Autodesk Softimage 2010 SP1, Windows 32, 64 or Linux 64 bit.</p>
<p>Provided in the plugin is a C++ operator, a custom ICE-Node, some compounds to drive the pixels as well as a sample project.</p>
<p>So what does it do? Let&#8217;s have a look:</p>
[There is a video that cannot be displayed in this feed. <a href="http://www.softimageblog.com/archives/492">Visit the blog entry to see the video.]</a>
<p>Thanks to Steven Caron for food for thoughts, thanks to all of the beta-testers!</p>
<p>Once again I am proud and happy that the company I work for is enabling me to publish these tools under GPL, so source-code is included!</p>
<p>Please comment, let me know what you think.</p>
<p>Here&#8217;s the download link:</p>
<p><a title="http://www.sixbirds.com/development/sixbirds_pixelparticles.2010_SP1_1.0.xsiaddon.zip" href="http://www.sixbirds.com/development/sixbirds_pixelparticles.2010_SP1_1.0.xsiaddon.zip">http://www.sixbirds.com/development/sixbirds_pixelparticles.2010_SP1_1.0.xsiaddon.zip</a></p>
<p>Later!</p>
<p>Helge @ Sixbirds Barcelona</p>
<p>PS: I noticed during the beta-phase of the plugin that is it fairly easy to create a basic feather system with this setup, I demonstrate this in the vimeo video also. How ironic! :)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=Fq4hN0QLN1g:cbURXdVdOsU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=Fq4hN0QLN1g:cbURXdVdOsU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=Fq4hN0QLN1g:cbURXdVdOsU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=Fq4hN0QLN1g:cbURXdVdOsU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=Fq4hN0QLN1g:cbURXdVdOsU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/Fq4hN0QLN1g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/492/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/492</feedburner:origLink></item>
		<item>
		<title>Constant passes without constant materials</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/kPtx7JeyjO8/467</link>
		<comments>http://www.softimageblog.com/archives/467#comments</comments>
		<pubDate>Fri, 19 Feb 2010 05:17:20 +0000</pubDate>
		<dc:creator>Stefano Jannuzzo</dc:creator>
				<category><![CDATA[Rendering]]></category>

		<guid isPermaLink="false">http://www.xsi-blog.com/?p=467</guid>
		<description><![CDATA[Recently we had to face this interesting problem: extracting a constant pass out of an arbitrarely complex rendertree. In short, we received scenes set up for rendering, with a given number of passes and channels already set up. However, we needed an extra constant pass which was not planned in advance. The rendertrees have all [...]]]></description>
			<content:encoded><![CDATA[<p>Recently we had to face this interesting problem: extracting a constant pass out of an arbitrarely complex rendertree. In short, we received scenes set up for rendering, with a given number of passes and channels already set up. However, we needed an extra constant pass which was not planned in advance.</p>
<p>The rendertrees have all kinds of materials, with bump, transparency and reflection in place.</p>
<p>The most obvious approach to solve the problem is brute force: writing a script that would traverse all the materials, and substitute each material with a constant one, using as color the diffuse color of the original material, and inheriting all the subtrees for the transparency and reflection mixing. This would have required a couple of days of scripting, and, as any brute force approach, is not really elegant.</p>
<p><span id="more-467"></span>Another idea we tried was tuning the normal. We replaced all the lights with a single directional white light, pointing downward. Then, we connected a constant vector to the bump port of each material, pointing upward (0,1,0). The light has no specular contribution and the ambience is set to black. This way, only the diffuse component of the materials is returned, and since the normal always points upward, the incidence with the light is always 1, so all the materials behave like constant.</p>
<p>Unfortunately this method has a major disadvantage: since the direction of the reflected and refracted rays leaving a (reflecting/refracting) material depends on the normal, the result is completely wrong for secondary rays, because we are moving the normal to an arbitrary (up) direction. So, using the bump port was not a solution.</p>
<p>However, this failure pointed us towards a better solution. </p>
<p>Again, we just had to fix the diffuse component. In all the material shaders (except a few exceptions like hair, which we treat separately), the way the diffuse component is computed is as follows:</p>
<ol>
<li>Get the light color</li>
<li>Multiply it by the incidence</li>
<li>Multiply the result by the diffuse color</li>
</ol>
<p>So, if you want to get back the plain diffuse color, you just have to tell the light to return 1 (white) divided by the incidence. This way, the material shader returns diffuse * incidence * (1 / incidence) == diffuse.</p>
<p>This the starting case (a phong sphere &#8211; top), and our first result (bottom)</p>
<p>
<a href="http://www.xsi-blog.com/userContent/upload/2010/02/l_500_333_3B015D1E-4E38-4451-BBA2-75CAE8E4FD9B.jpeg"><img src="http://www.xsi-blog.com/userContent/upload/2010/02/l_500_333_3B015D1E-4E38-4451-BBA2-75CAE8E4FD9B.jpeg" alt="" class="alignnone size-full" /></a><br />
<a href="http://www.xsi-blog.com/userContent/upload/2010/02/l_500_333_7004049C-F9D0-4B35-88DA-C9EFCF4CA49B.jpeg"><img src="http://www.xsi-blog.com/userContent/upload/2010/02/l_500_333_7004049C-F9D0-4B35-88DA-C9EFCF4CA49B.jpeg" alt="" class="alignnone size-full" /></a>
</p>
<p>And this is the rendertree for the light</p>
<p><a href="http://www.xsi-blog.com/userContent/upload/2010/02/l_890_753_AA4C0181-477E-42A4-8F9B-5CEDC53377A1.jpeg"><img src="http://www.xsi-blog.com/userContent/upload/2010/02/l_890_753_AA4C0181-477E-42A4-8F9B-5CEDC53377A1.jpeg" alt="" class="alignnone size-full" /></a></p>
<p>Also in light shaders, the normal can be used (it&#8217;s the lit point normal). The dot product of the normal with the light direction L0 is the incidence, which we then use to divide 1, and return the result as the intensity of the light.</p>
<p>That was ok for a half dome, but what about the rest? A possibility is simply to double the light, specularly to the xz plane, cloning the rendertree (and L0 becoming 0,-1,0 for the other light). That would cover 99% of the cases, being any oriented surface sample being lit only by one of the two lights at most. </p>
<p>The &#8220;at most&#8221; is the remaining problem. If you have a cube, its vertical faces won&#8217;t be lit by any!</p>
<p>So, we have to expand a bit this setup. We start setting up a minimal light rig, ensuring that al least one of the lights will always hit any oriented surface. The minimum number of lights for such a rig is 4, equally distributed in space.</p>
<p>So, we take a tetrahedron of radius 1, centered at the origin, and cluster constrain a directional white light to each vertex, all pointing toward the origin.</p>
<p><a href="http://www.xsi-blog.com/userContent/upload/2010/02/l_523_415_482A408E-88B3-46DD-89EC-C17C7664D474.jpeg"><img src="http://www.xsi-blog.com/userContent/upload/2010/02/l_523_415_482A408E-88B3-46DD-89EC-C17C7664D474.jpeg" alt="" class="alignnone size-full" /></a></p>
<p>Each light has the following rendertree (with a small change for each of them)</p>
<p><a href="http://www.xsi-blog.com/userContent/upload/2010/02/l_1050_630_1071D6AB-AFF9-4021-8AE5-C2E6B5C2DEC7.jpeg"><img src="http://www.xsi-blog.com/userContent/upload/2010/02/l_1050_630_1071D6AB-AFF9-4021-8AE5-C2E6B5C2DEC7.jpeg" alt="" class="alignnone size-full" /></a></p>
<p>This is the tree for light L0: the left side vectors are the four lights positions, set by expression. Since The tetrahedron has radius one, they also represent the direction toward each lights. All their incidence with the normal is computed and sent to a positivity check, and this check drives a switcher between zero and one. So, the sum of these 4 switchers is the number of lights (1 to 3) visible from the rendered point.<br />
This number is multiplied by the light incidence and the result divides 1, as in the single light case.</p>
<p>Why do we need the number of visible light? Since we have 4 lights, the total amount of light that gets received by the point is<br />
L = L0*I0 + L1*I1 + L2*I2 + L3*I3, for each positive Iight. In fact, the material shaders won&#8217;t even query a light if its incidence is negative.<br />
So, as before, we still return 1 divided by the light incidence, but also divided by the number of visible lights, so that the overall sum of the visible lights is always 1.</p>
<p>The other 3 lights have the same rendertree, except the dividing incidence comes from I1, I2, I3 respectively. For instance, this is the tree for light L1.</p>
<p><a href="http://www.xsi-blog.com/userContent/upload/2010/02/l_675_287_B319D53B-A452-40DC-BDC3-5A381C52C2E4.jpeg"><img src="http://www.xsi-blog.com/userContent/upload/2010/02/l_675_287_B319D53B-A452-40DC-BDC3-5A381C52C2E4.jpeg" alt="" class="alignnone size-full" /></a></p>
<p>And finally, we have our constant result. You can download the rig <a href="http://www.xsi-blog.com/userContent/upload/2010/02/TetraLight.emdl.zip">here</a>.</p>
<p><a href="http://www.xsi-blog.com/userContent/upload/2010/02/l_500_333_4E492BE9-0BA1-4BAC-82C8-C7EA69A231EF.jpeg"><img src="http://www.xsi-blog.com/userContent/upload/2010/02/l_500_333_4E492BE9-0BA1-4BAC-82C8-C7EA69A231EF.jpeg" alt="" class="alignnone size-full" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=kPtx7JeyjO8:2y5ldpP3QBE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=kPtx7JeyjO8:2y5ldpP3QBE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=kPtx7JeyjO8:2y5ldpP3QBE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=kPtx7JeyjO8:2y5ldpP3QBE:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=kPtx7JeyjO8:2y5ldpP3QBE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/kPtx7JeyjO8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/467/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/467</feedburner:origLink></item>
		<item>
		<title>Sixbirds Rigging Solvers (UPDATE V1.3)</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/HP8nATQERnQ/426</link>
		<comments>http://www.softimageblog.com/archives/426#comments</comments>
		<pubDate>Tue, 19 Jan 2010 14:58:41 +0000</pubDate>
		<dc:creator>Helge Mathee</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.xsi-blog.com/?p=426</guid>
		<description><![CDATA[Hey folks! Edit: I upgraded the addon to version 1.3, see the 13th solver for new description of the Nulls 2 Nurbssurface. Additionally I fixed two bugs and removed some nasty logmessages from the Null 2 Curve solver. Some solvers are NOT compatible with the version 1.3, so I will keep the link to the [...]]]></description>
			<content:encoded><![CDATA[<p>Hey folks!</p>
<p>Edit: I upgraded the addon to version 1.3, see the 13th solver for new description of the Nulls 2 Nurbssurface. Additionally I fixed two bugs and removed some nasty logmessages from the Null 2 Curve solver. Some solvers are NOT compatible with the version 1.3, so I will keep the link to the previous versions around.</p>
<p>So finally after a good first round here at Sixbirds in Spain we decided to release some of the tools we are using for production to the community. At this point we are sharing our rigging solvers, a collection of custom operators for &#8220;solving&#8221; certain equations, like IK, Bezier projection, curve lookup etc. The collection includes 12 different solvers. Please have a look at this video, which gives you a quick runover of the technology&#8230;</p>
<p><span id="more-426"></span><br />
[There is a video that cannot be displayed in this feed. <a href="http://www.softimageblog.com/archives/426">Visit the blog entry to see the video.]</a></p>
<p>Requirements: Softimage 2010 SP1, Windows 32, 64 or Linux 64 with installed Python 2.52 or higher. For installing python see<br />
<a title="Python Install" href="http://softimage.wiki.softimage.com/index.php/Python#Installation">http://softimage.wiki.softimage.com/index.php/Python#Installation</a></p>
<p>The addon also includes a very handy custom command, called &#8220;sixbirds_rigging_inspect_op&#8221;, which allows you to look at the settings of the solvers without having to dig for them in the explorer. I usually map this command to F4, since I don&#8217;t use the F4 UI Slider feature all that much. Furthermore the addon provides a simple toolbar to apply all of these solvers, and adds a new simple &#8220;bone&#8221; primitive to the Get-&gt;Primitive menu, which is handy when creating custom IK chains. Also the addon will come with a sample project, one scene for each solver demonstrating the features.<br />
The addon is provided under the GPL license, without warranty, and, as we like to say in R&amp;D: As is. Please don&#8217;t ask for fixes or further features at this point, we don&#8217;t have the resources.</p>
<p>All of the solvers are applied by selecting objects in a particular order and creating the solver. I want to quickly summarize these selection orders so you can properly use the addon.</p>
<p>One note: All solvers use X as their main axis. This decision was made since the Softimage Bone primitive uses X as the axis along the bone. So all other solvers use this axis as well. This means, for example, that you will have to rotate controllers or the spline solvers or the squash and stretch for example, if you want the spline to point along Y.</p>
<p>1. SRT Spring<br />
This is a solver which is able to simulate a simple transform based spring. You can select the channels you want to use for simulation (scaling, rotation and/or translation). To apply this solver just select any 3d object and it will create a null as a child of this object with the solver applied.</p>
<p>2. Direction Spring<br />
The direction spring solver simulates a spring which is driven by a global direction, not an orientation. Just select any 3d object and it will create a bone as a child, with the solver applied. To see the difference between the SRT Spring and the Direction Spring just play with it or have a look at the sample scenes.</p>
<p>3. IK 2 Bone<br />
This solver can calculate one of the different outputs of a typical IK chain, but also provides soft stretching and some more features like inverting the solve etc. To use this solver, please select a) the root, b) the effector, c) the upvector and d) the output object. This solver does not create 3d object by itself, so if you want to apply to a bone you will have to create a single bone first (Get-&gt;Primitive-&gt;Bone). The solver also creates a property on the root object to drive all output objects (if you create more than one) in a central place.</p>
<p>4. IK FK 2 Bone<br />
This solver has the most complicated selection order of all solvers provided in the addon. To apply it you nee to select a) The root, b) the IK effector, c) the IK upvector, d) the FK first bone, e) the FK second bone, f) the FK effector (wrist for ex) and g) the output object. This solver, like the IK 2 Bone, does not create output objects itself. This solver also creates a centralized property on the root object.</p>
<p>5. Simple Spline<br />
This solver calculates a transform on a piece-wise-bezier defined by as many 3d objects as you want. The tangent of the bezier are the local X axis of the 3d objects driving the solver. To apply it simply select at least 2 objects (or more) an apply the solver. This solver creates a null as a child object of the first controller. The Simple Spline also creates a property on the first controller, to drive all created output objects in a central place.</p>
<p>6. Rolling Spline<br />
This solver calculates the same bezier transform, but requires a secondary layer of controls to allow for continuous rolling along the spline. For using this solver you need to have a two level hierarchy (like parent_ctrl -&gt; child_ctrl) or at least two controllers. Please select the child controllers ( at least 2 ) and apply the solver. It will create a null as a child of the first selected controller. Please have a look at the sample scene to get a better idea. The rolling spline, as the simple spline, creates a centralized property on the first controller.</p>
<p>7. 4 Point Surface<br />
This solver computes a transform on a iso surface build by 2D bezier curves. These curves are defined by 4 controllers (the corners of the iso surface). To use this solver select 4 objects, it will create a null object as a child of the first corner object.</p>
<p>8. Interpolated Pose<br />
The interpolated pose solver calculates a pose in between two other poses. To use it simply select two 3d objects and apply the solver, it will create a null as a child of the first selected object.</p>
<p>9. Squash and Stretch<br />
This solver can calculate a scaled output transform based on the distance of two objects. The scaling for this effect is done along Y and Z. To apply the solver, select the first object of the distance calculation (hip, for example), the second one (chest) and the parent object for the new null. This can be for example a vertebra on the spine.</p>
<p>10. Null 2 Curve<br />
This solver projects  an object onto a curve. This is useful for facial rigging and for anything that has to travel on a path, while being driver by a visual controller. To use this solver select a) the driver ctrl, b) the upvector ctrl, c) the input curve) and (optionally) d) the output curve. The solver will create a null as a child of the output curve (or the input curve if you just had one curve selected).</p>
<p>11. Curve Sliding<br />
This solver reprojects a curve along itself while maintaining the length. This is useful for keeping the length on a curve, even it is deformed. To use this solver, just select one curve and apply it. If you want to use the sliding on top of enveloping, for example, ensure you have the animation construction mode selected before applying it.</p>
<p>12. Curve Collision<br />
This solver does a simple collision with soft distance of a curve to a nurbs surface. This is useful for having curve being pushed by a teeth proxy in a facial rig, for example. You can use this solver in conjunction with the curve sliding solver. To use it, select a) a curve and b) a nurbs surface. Ensure that the surface is closed, please test with a nurbs sphere first. The collision object is supposed to be really, really simply to give you good feedback.</p>
<p>13. Null 2 Surface<br />
This solver projects  an object onto a nurbssurface. This is useful for facial rigging and for anything that has to travel on a surface, while being driver by a visual controller. To use this solver select a) the driver ctrl, b) the upvector ctrl, c) the input surface) and (optionally) d) the output surface. The solver will create a null as a child of the output surface (or the input surface if you just had one curve selected). The solver uses a relative mapping, similar to a pen table (tablet space to screen space). Feel free to post questions if you need additional assistance.</p>
<p>Ok, after all of this information let&#8217;s have a look at a second video, in which I will go over each solver, reapplying it and test-driving it.</p>
[There is a video that cannot be displayed in this feed. <a href="http://www.softimageblog.com/archives/426">Visit the blog entry to see the video.]</a>
<p>I hope you all enjoy the videos and find something useful in them. We are trying to design more tools in a way that they are easy to share, and we at Sixbirds want to follow that move of being able to publish more production tools.</p>
<p>Please let us know what you think at</p>
<p>development (at) sixbirds.com</p>
<p>Or feel free to post comments here at XSI-BLOG.</p>
<p>Last but not least: Thanks to all of the other providers of free software / plugins and the helpful Softimage Community!</p>
<p>There you go!</p>
<p><a title="sixbirds_rigging_solvers.2010.SP1_1.3.xsiaddon.zip" href="http://www.sixbirds.com/development/sixbirds_rigging_solvers.2010.SP1_1.3.xsiaddon.zip">http://www.sixbirds.com/development/sixbirds_rigging_solvers.2010.SP1_1.3.xsiaddon.zip</a></p>
<p>(older versions:)</p>
<p><a title="sixbirds_rigging_solvers.2010.SP1_1.1.xsiaddon.zip" href="http://www.sixbirds.com/development/sixbirds_rigging_solvers.2010.SP1_1.1.xsiaddon.zip">http://www.sixbirds.com/development/sixbirds_rigging_solvers.2010.SP1_1.1.xsiaddon.zip</a></p>
<p>Best!</p>
<p>Miquel &amp; Helge @ Sixbirds</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=HP8nATQERnQ:ewwf9fJUUH8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=HP8nATQERnQ:ewwf9fJUUH8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=HP8nATQERnQ:ewwf9fJUUH8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=HP8nATQERnQ:ewwf9fJUUH8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=HP8nATQERnQ:ewwf9fJUUH8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/HP8nATQERnQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/426/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/426</feedburner:origLink></item>
		<item>
		<title>PPG Based Particle Animation Work Flow With ICE</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/x-VbCq6zEYA/410</link>
		<comments>http://www.softimageblog.com/archives/410#comments</comments>
		<pubDate>Fri, 07 Aug 2009 21:04:58 +0000</pubDate>
		<dc:creator>Hans Payer</dc:creator>
				<category><![CDATA[ICE]]></category>
		<category><![CDATA[Simulation]]></category>

		<guid isPermaLink="false">http://www.xsi-blog.com/?p=410</guid>
		<description><![CDATA[About a year ago already, XSI 7.0 was released with much expectations and enthusiasm. Most of us, by now, have played with ICE and if you&#8217;re lucky, you even had the chance to squeeze an operator in a real production. Everyone is still marveled when new videos are posted online showing the latest tricks or [...]]]></description>
			<content:encoded><![CDATA[<p>About a year ago already, XSI 7.0 was released with much expectations and enthusiasm. Most of us, by now, have played with ICE and if you&#8217;re lucky, you even had the chance to squeeze an operator in a real production. Everyone is still marveled when new videos are posted online showing the latest tricks or achievements made with ICE. ICE is an amazing design tool and definitely opens many doors for all Softimage users. But for many, they hit a wall; in order to create even the simplest simulation, they have to learn the meaning of vectors, scalar, arrays and how to use them. If you do have the technical chops, great, new things to learn, but for the more artistically skilled users, the hill is steep.</p>
<p>Everyone complained (including me) that the old particle system was too weak, too limited&#8230;. But it was fast to get some things done.  To randomize a value, for example, you simply had to open a property page and set a variance parameter. Partly because ICE is so open, to vary a parameter, you have to search for the desired compound or node modifier, drag &#038; drop, connect ports and then set values in the new compounds. Read me right, ICE is very powerful but if you have to modify dozens of parameters hundreds of times in one typical work day, this work flow becomes redundant an inefficient. There must be a way to be quicker.</p>
<p>Softimage proposed a work flow that can be described as follows: a technical director connects basic nodes, designs compounds and exposes ports. An artist, who is not necessary knowledgeable of ICE, then sets the different values of the exposed parameters. Some problems may arise with this approach. How can a TD predict every alteration needed by the artist? In the context of a particle simulation of falling rain, for example, a TD may have to design his compounds to support, for a simple shot, wind and gravity. Then, another shot may require water splashes from the droplet hitting the ground. Another still, requires the same rain but with the added effect of coagulating droplets on a smooth surface. And so on. You can easily imagine multiple variations of the same effect. So how are TDs supposed to tailor their compounds to fit all of the artists needs? One obvious solution is to build a system of compounds rather than a top level one. Yet the artists would need to be taught and learn how this system works and therefore, learn how to use ICE. Yes, maybe&#8230; but unlikely. I know many technical XSI users that were clueless on how create a simple simulation; artists, even less probable. How can technical directors empower artists without limiting them with a simple set of parameters?  There should be a window to deliver the power of ICE to artists without being too painful.  Artists should be able to easily create simple particle animation. You do not need to be a mechanic to drive a car.</p>
<p>With these observations in mind came the search for a way to simplify the ICE work flow which any Softimage user would understand and produce simulations in no time.  The intent is not to replace the current work flow but to complement it and accelerate the multiple iterations needed in order to design particle simulations. Subsequent refinements, complex connections or relationships can and should be achieved the traditional way by connecting nodes and compounds in the ICE tree. But once a new solution is found, it should be easy to re-integrate it in a simpler work flow system.  It should also be seen as an added value to cut the time to help generate about 75% of particle animation scenarios.</p>
<p>You do not need to look very far to find solutions. By simply looking at the different ways shaders can be modified, it is easy to wonder why ICE property pages were not designed the same way. Isn&#8217;t it faster in many situations to create connections by using the plug icon in a shader&#8217;s property page rather than opening it in the render tree, dragging and dropping a node, then making the connection? It should be the same in ICE property pages. No?</p>
<p><img src="http://www.xsi-blog.com/userContent/upload/2009/08/dk9zhxb_72gnm2jkfk_b.jpg" alt="dk9zhxb_72gnm2jkfk_b" title="dk9zhxb_72gnm2jkfk_b" width="723" height="525" class="aligncenter size-full wp-image-411" /></p>
<p>Also, all parameters affecting the simulation should reside in the same property page. With a typical ICE tree containing easily 20 compounds or more, finding a parameter often requires a search through many compounds. Too many doubles clicks are required to access the compounds&#8217; parameters; why not put them in one location. When a scalar is randomized for example, the parameters associated with randomization should replace the original scalar in the top property page.  You say: isn&#8217;t the top compound intended for that? Yes, but it doesn&#8217;t expose ports automatically. Remember, the goal here is to create particle simulations in a production environment; not to design ICE trees in a R&#038;D context.</p>
<p><img src="http://www.xsi-blog.com/userContent/upload/2009/08/dk9zhxb_73fgm8zwtz_b.jpg" alt="dk9zhxb_73fgm8zwtz_b" title="dk9zhxb_73fgm8zwtz_b" width="502" height="554" class="aligncenter size-full wp-image-412" /></p>
<p>In the following video, I demonstrate a working prototype. It shows the above ideas in action with the exception of having iterations made through parameter contextual menus instead of the plug connection icon menu. The Softimage development kit does not give access to this type of UI widgets for ICE compounds property pages. Also, for clarity&#8217;s sake, it would have been beneficial to have used tabs in the property page to seperate emission, particle type, forces, triggers and events. This was not implemented. This prototype was written about a year and a half ago with a beta version of XSI 7.0 and unfortunately has not been updated to work with the current version of Softimage but would be relatively simple to rewrite. I must also credit my colleagues at the time, Jeff Wilson, who helped with the original concept and Javier von der Pahlen who co-wrote the prototype. It is important also to say that I was an employee of Softimage at the time when that prototype was written. As a long time user of Softimage&#8217;s products, I was trying to push solutions that made the work of technical directors easier. Unfortunately, this concept was not accepted. But it remains a great concept on how technical directors can go beyond compounds and integrate ICE in production pipelines more efficiently. It clearly illustrate the ability to build a simple particle animation rapidly without having to access the ICE tree. All iterations are made through the property page.</p>
<p>I simply wanted to share these ideas with the Softimage community and start a discussion. As, hopefully, more and more people will be using ICE, I&#8217;m sure that work flows will evolve to more efficient ways to manage ICE trees. Maybe it&#8217;ll lead to similar solutions, whether it comes from Autodesk or the community. I think it&#8217;s really cool concept and it would save many users time and headaches. What do you think? Is this type work flow worth exploring?</p>
<p><object width="400" height="300" class="aligncenter"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5973056&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5973056&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5973056">PPG Based Particle Animation Work Flow With ICE</a> from <a href="http://vimeo.com/user2121705">Hans Payer</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=x-VbCq6zEYA:I1ZifUBQrfU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=x-VbCq6zEYA:I1ZifUBQrfU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=x-VbCq6zEYA:I1ZifUBQrfU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=x-VbCq6zEYA:I1ZifUBQrfU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=x-VbCq6zEYA:I1ZifUBQrfU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/x-VbCq6zEYA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/410/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/410</feedburner:origLink></item>
		<item>
		<title>Fast Radiosity using Diffuse convolved environment map</title>
		<link>http://feedproxy.google.com/~r/xsi-blog/content/~3/wzFOW7-OPtQ/248</link>
		<comments>http://www.softimageblog.com/archives/248#comments</comments>
		<pubDate>Sat, 21 Mar 2009 19:10:33 +0000</pubDate>
		<dc:creator>Harry Bardak</dc:creator>
				<category><![CDATA[Rendering]]></category>

		<guid isPermaLink="false">http://www.xsi-blog.com/?p=248</guid>
		<description><![CDATA[What you need to reproduce theses examples : HDRShop HDRShop plugin Diffuse_SH. &#160; I used to work for a 2 years at Framestore-CFC in London. That mean I use Maya and PRMan as my main application. During this year I learn a lot of thing but also hear a lot of false assumtion about rendering [...]]]></description>
			<content:encoded><![CDATA[<p>What you need to reproduce theses examples : </p>
<p align="left"><font face="Arial, Helvetica, sans-serif"><a href="www.hdrshop.com">HDRShop</a><br />
    <a href="http://www.banterle.com/francesco/download.html">HDRShop plugin Diffuse_SH.</a></font></p>
<p align="left">&nbsp;</p>
<p>I used to work for a 2 years at Framestore-CFC in London. That mean I use Maya and PRMan as my main application. During this year I learn a lot of thing but also hear a lot of false assumtion about rendering in general. Typically the common comment was that PRman was more suitable to render complex character and that MR was very slow for this kind of job. In fact people arguing about this doesn&#8217;t not really know what are the status of modern rendering such as MR, V-ray or any others assuming everything was frozen since 5 years or just repeating what the veteran keep repeating. </p>
<p>But I am not engaging a new flame wars between renderer. Actually I don&#8217;t care which is the better today in 2008 you can produce beautiful picture with any renderer available in the market ( and yes that include maya&#8217;s software render well known to be a piece of crap ;) ) The most important is the guys behind the scene. But I need to put everything in their respective context to elaborate and may be justify what and why I will describe later.</p>
<p>Actually mental ray is very fast, if you do things correctly. If you don&#8217;t do things correctly ( such as massive spatial and/or temporal oversampling ) it as well as any other renderer will be very slow. But I always get this &quot;PRMan displaces faster&quot; stuff. Of course it does&#8230;. until you actually trace a ray.<br />
You have to know that PRMan lives in a mindset where raytracing is so slow that you avoid it at all cost. The thing is that in PRMan, if you try to shoot a ray, it too has to do all those things that a raytracer do by nature. So the minute you actually shoot a single ray, PRMan has to do what mental ray always does&#8230;. and the comparasion suddenly isn&#8217;t so much in favour of PRMan any more.</p>
<p>So people using PRman developed a completely different approach to same problem : Lighting and Rendering a scene while trying to avoid at all cost raytracing. That what is interesting. What will happen if I use these approach with Mentalray within XSI ? Maybe I can have a hybrid solution keep the best of the two world to render my character(s) ? </p>
<p align="left">&nbsp;</p>
<h3 align="left"><strong><font face="Arial, Helvetica, sans-serif">Diffuse Convolution on Environment map </font></strong></h3>
<p>What&#8217;s that ? To keep it simple you can assume that a diffuse convolved map is envmap where you apply a smart blur that will give you the result of sampling this envmap with an infinite number of rays with the Final Gathering on a perfect lambertian surface. For more information you can refer to Debevec&#8217;s research ( the father of HDR images ). </p>
<p><img alt="" src="http://gl.ict.usc.edu/HDRShop/tutorial/images/image001.jpg" class="alignnone" width="128" height="64" />       <img alt="" src="http://gl.ict.usc.edu/HDRShop/tutorial/images/image002.jpg" class="alignnone" width="128" height="64" /></p>
<p>Having your envmap pre-blurred is a great advantage because you don&#8217;t need to sample it several times to get the correct illumination. Only one sample suffice to get the illumination on your surface. Actually you must cast only one ray. Otherwise you will average twice the map and the illumination will not be correct any more.</p>
<p>The ray direction that you will cast must also be in the same direction as your surface normal. The Xsi&#8217;s Ambient Occlusion setup correctly will do perfectly the job. You need one sample , the spread will be very small to not deviate from the normal ( 0.01 ) and the mode should be set to environement sampling. Obviously you can code a shader that do the correct environement lookup. I am using the XSI&#8217;s AO shader because it&#8217;s available out of the box.</p>
<p align="left">&nbsp;</p>
<h3 align="left"><strong><font face="Arial, Helvetica, sans-serif">Render Balls simple test.</font></strong></h3>
<p align="left"><img /></p>
<div class="wp-caption alignnone" style="width: 910px"><img alt="Env sampling brute vs FG vs Diffuse Conv" src="http://www.harrybardak.co.uk/img/diffConv/DC_renderballs.jpg" width="600" height="200" /><p class="wp-caption-text">Env sampling brute vs FG vs Diffuse Conv</p></div>
<p align="left">&nbsp;</p>
<p>The way I set up the scene is very simple. I tried to get the contribution of the envmap once convolved and only this. So there is no illumination model just different approach.<br />
The HDR used for this test the one called beach.hdr that you can find at <a href="www.debevec.org">debevec&#8217;s website</a>. The map that you download is an angular map so you have to convert it to spherical coordinate system. The easiest way is to HDRshop and convert to angular map to longitute/latitude map. Once the map ready, I put it in my scene as an environement map.<br />
The first sphere is the result of an AO shader set to environement sampling mode with a spread of 0.8. I had to crank up the sampling to 1024 to get a smooth solution. AO env sampling is brute force approach. There is no importance sampling so that mean you have cast a lot of ray to get a smooth result specially with high dynamic range image. And obviously that be very slow. It&#8217;s the slowest render.<br />
With the second sphere I used to FG to sample env. Same settings as before except that I use a shader that return irradiance and activate FG. FG is a lot faster that the previous method because it doesn&#8217;t sample every point with 1024 rays. Instead FG will sample a certain amount of point and interpolate the result between the point calculated. But for this comparaison I pushed the number of rays to 4096 to make sure I got enough accuracy to have fair comparaison with the quality of the next approach. Even by pushing the number of rays to 4096, it was still faster to render with FG.</p>
<p>With last sphere I made a diffuse convolution in HDRshop ( using the SH_diffuse plug in because it &#8216;s a lot faster than HDRshop&#8217;s function), applied the resulting image as an environement map and use the XSI&#8217;s AO shader with the sampling set to 1 and the spread to 0.01.<br />
The render time is ultra fast and match FG solution. It &#8216;s actually realtime because the convolution has been already calculated once in HDRshop. </p>
<h3 align="left">&nbsp;</h3>
<h3 align="left"><strong><font face="Arial, Helvetica, sans-serif">Render Balls too simple let&#8217;s try with something that got balls.</font></strong></h3>
<p>We got a exact match with the FG for a fraction of time. We can conclude that the diffuse convolution is good enough to simulate FG. But in our test we were using simple sphere. This an ideal case but we needed to check first if the lookup was correct before to move on something more serious. </p>
<p>I like buddha. I like him because it&#8217;s a one million polygon model that can be compared to any displaced model push out from Zbrush or Mudbox.<br /> I have simply applied what I did with the spheres.<br />
The first render is with an diffuse convolved envmap. It took approximately 50 sec to render with a large part of preprocessing the scene. If I had a realtime shader could get the same result ( minus anti aliasing ) in realtime. Obviously there is no occlusion calculated but that due to fact I asked only an environment lookup around the normal of the surface.<br />
The second image is what you get if you were using FG and third one is a difference done in shake<br />
to highlights the difference between the two renders.<br />
<br />
<img alt="" src="http://www.harrybardak.co.uk/img/diffConv/DC_buddha.jpg" class="alignnone" width="720" height="300" /><br />
<br />
As you can see only the occlusion and the FG colored bounce are missing. If you apply a simple occlusion on the top you will endup with an image that is fairly close to the FG solution but with only a fraction of the time involved by the process.<br />
<br />
<img alt="" src="http://www.harrybardak.co.uk/img/diffConv/DC_buddha_with_AO.jpg" class="alignnone" width="240" height="342" /></p>
<p align="left"><img /></p>
<p align="left">&nbsp;</p>
<h3 align="left"><strong><font face="Arial, Helvetica, sans-serif">OK but in production is it worth to use it ?</font></strong></h3>
<p>Well I will say yes and no. It depand the number of shot you have to do and the time you got to complete them. This technique involve a bit of setup at the shading level while the using FG is straight foward. So if you are working on movie that need a 2K ( or more ) render then yes. Memory foot print is very low and it&#8217;s damn fast to render it specially with very heavy object like displaced object or Hair object..<br />
At the moment you need to set this at the shader for every object. Ideally the best will be to set this as a global ambience. Unfortunately you can&#8217;t plug anything in the global ambience parameter. So the best if to use a light that cast only ambient light. And for that you need to code it so ask your favourites shader writer to do it. </p>
<p align="left">&nbsp;</p>
<p align="left"><strong><font face="Arial, Helvetica, sans-serif">Publications :</font></strong></p>
<p align="left"><font face="Arial, Helvetica, sans-serif"><a href="http://www1.cs.columbia.edu/%7Eravir/papers/envmap/">An Efficient Representation for Irradiance Environment Maps</a></font></p>
<p align="left">&nbsp;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=wzFOW7-OPtQ:RPqrjQJ5aO8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?i=wzFOW7-OPtQ:RPqrjQJ5aO8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=wzFOW7-OPtQ:RPqrjQJ5aO8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=wzFOW7-OPtQ:RPqrjQJ5aO8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/xsi-blog/content?a=wzFOW7-OPtQ:RPqrjQJ5aO8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/xsi-blog/content?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/xsi-blog/content/~4/wzFOW7-OPtQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softimageblog.com/archives/248/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.softimageblog.com/archives/248</feedburner:origLink></item>
	</channel>
</rss>
