<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2023284384536626128</id><updated>2011-12-03T14:23:27.526-08:00</updated><title type='text'>ICEduous</title><subtitle type='html'>Thoughts about CGI in general, but mostly related to Softimage ICE plataform.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://iceduous.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://iceduous.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Fabricio Chamon</name><uri>http://www.blogger.com/profile/02390363063692848903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2023284384536626128.post-2690354148362188617</id><published>2011-01-29T18:44:00.000-08:00</published><updated>2011-06-09T07:17:42.338-07:00</updated><title type='text'>Boundary Edges</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span style="color: #cc0000;"&gt;(&lt;b&gt;note&lt;/b&gt;: deprecated for SI 2012, since it now has intrinsic ice attributes for retrieving boundary components)&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #cc0000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;(Please note that this is an approximated method and its not meant to be literally correct. But it should output correct results about 95% of the time. That said, let's get started!)&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;b&gt;Download Link: &lt;a href="http://www.si-community.com/community/download/file.php?id=946"&gt;Is Edge Boundary Compound&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;iframe frameborder="0" height="435" src="http://player.vimeo.com/video/19339590?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=80ceff" width="600"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Finding boundary edges is a pretty common task requested in computer graphics. It can be used to fill holes, amongst other things.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_wb58zcwz1io/TUS0NqSPOeI/AAAAAAAAADk/CZ9Czo1LQcw/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="356" src="http://3.bp.blogspot.com/_wb58zcwz1io/TUS0NqSPOeI/AAAAAAAAADk/CZ9Czo1LQcw/s400/1.jpg" width="400" /&gt;&amp;nbsp;&lt;/a&gt; &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;In my opinion, "isBoundary" should be a default ice attribute for an Edge. But you know, life is not easy... so let's take a look at how can we find it by ourselves:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Step 1: How to define a boundary edge?&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Simply put, edges are conections between polygons, and the difference between boundary and regular edges are the number of polygons connected to them. See image below:&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_wb58zcwz1io/TUS1Rj4KrGI/AAAAAAAAADs/FJd9ZWvO8W4/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="473" src="http://4.bp.blogspot.com/_wb58zcwz1io/TUS1Rj4KrGI/AAAAAAAAADs/FJd9ZWvO8W4/s640/2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Once we know how to define it, it's time for the ice stuff:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Step 2: Getting the adjacent polygons. &lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;To retrieve the adjacent polygons of an edge we can get its position and do a geometry query from that:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_wb58zcwz1io/TUS6qfQtpMI/AAAAAAAAADw/xa36cCf3aNc/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_wb58zcwz1io/TUS6qfQtpMI/AAAAAAAAADw/xa36cCf3aNc/s1600/3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The problem is that only the closest polygon position is returned, thus we have reached just half of our way to getting the 2 connected faces.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_wb58zcwz1io/TUS8ZnYYlpI/AAAAAAAAAD0/iKAfl9dIjdk/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="540" src="http://4.bp.blogspot.com/_wb58zcwz1io/TUS8ZnYYlpI/AAAAAAAAAD0/iKAfl9dIjdk/s640/4.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;To get the other polygon (and this is where it gets a bit hacky) I found that we could subtract the polygon vector from the edge vector and multiply it by a tiny bit, so that the lookup position gets slightly shifted and the next query will hopefully give us a different (and oposite) adjacent polygon.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://i111.photobucket.com/albums/n157/fabriciochamon/6.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;" target="_blank"&gt;&lt;img border="0" height="115" src="http://3.bp.blogspot.com/_wb58zcwz1io/TUTBsbV6EyI/AAAAAAAAAD4/PsPX1-BKLGA/s640/6.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://i111.photobucket.com/albums/n157/fabriciochamon/6.jpg" target="_blank"&gt;Click to vew a bigger image&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_wb58zcwz1io/TUTEOC4Vt2I/AAAAAAAAAD8/guVAVYnAY-Y/s1600/7.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="496" src="http://2.bp.blogspot.com/_wb58zcwz1io/TUTEOC4Vt2I/AAAAAAAAAD8/guVAVYnAY-Y/s640/7.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The search shift should be as small as possible to avoid querying polygons too far or unrelated to the actual edge. A value of 0.01 is good for most scenarios.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Step 3: Isolating the boundaries&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;As soon as we have the new result from the other "get closest location" node, we can compare the polygon positions. If the edge is connecting 2 faces, it will return 2 different polygon positions... But if the edge is a boundary, the new search position will fail to reach to any other polygon, and will fall back to the same requested before. From now on a simple if node comparing the two positions will reveal the boundaries:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_wb58zcwz1io/TUTJiZU8ZsI/AAAAAAAAAEA/Uw_AaNjYVfQ/s1600/8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" src="http://4.bp.blogspot.com/_wb58zcwz1io/TUTJiZU8ZsI/AAAAAAAAAEA/Uw_AaNjYVfQ/s640/8.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_wb58zcwz1io/TUTJ1YDjdCI/AAAAAAAAAEE/bNwRxpi8eIo/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="558" src="http://2.bp.blogspot.com/_wb58zcwz1io/TUTJ1YDjdCI/AAAAAAAAAEE/bNwRxpi8eIo/s640/9.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&amp;nbsp;...and as we started working on the edge perspective since the beggining of the ice graph, our output will gracefully stay in a "boolean per edge" context.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Conclusion / Tips&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Although this is working great so far in my tests, I should point out that this method fails in case of super folded polygons (closest polygon lookup does not return the adjacent face to the edge we are searching from), so please consider before using this method. Also be sure to put the icetree above the modeling stack, so that it always compute after any topo ops you have. And lastly, If you are getting strange results, try playing with the search shift to see how it goes.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;If you don't want to rebuild the ice tree by yourself, just download the compound (link on top of the article).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Hope you find it useful!&lt;b&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2023284384536626128-2690354148362188617?l=iceduous.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iceduous.blogspot.com/feeds/2690354148362188617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2023284384536626128&amp;postID=2690354148362188617' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/2690354148362188617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/2690354148362188617'/><link rel='alternate' type='text/html' href='http://iceduous.blogspot.com/2011/01/boundary-edges.html' title='Boundary Edges'/><author><name>Fabricio Chamon</name><uri>http://www.blogger.com/profile/02390363063692848903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wb58zcwz1io/TUS0NqSPOeI/AAAAAAAAADk/CZ9Czo1LQcw/s72-c/1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2023284384536626128.post-5589222583376481158</id><published>2010-11-20T13:51:00.000-08:00</published><updated>2010-11-20T14:11:36.148-08:00</updated><title type='text'>ICE transfer of FxTree Tracking operator</title><content type='html'>download link: &lt;a href="http://www.si-community.com/community/download/file.php?id=876"&gt;Apply 2d Tracking compound&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/17034820" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/17034820"&gt;ICE transfer of FxTree Tracking operator&lt;/a&gt; from &lt;a href="http://vimeo.com/fchamon"&gt;Fabricio Chamon&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;The compound internally builds a camera frustum and translates fxtree tracking data to 3d data. &lt;br /&gt;Two things you should know before using: &lt;br /&gt;&lt;br /&gt;- be sure to align camera and interest Y position before applying the compound. (that's because frustum rotation is not being calculated yet)&lt;br /&gt;- change the image resolution inside the compound to fit your dimensions. (didn't find a way of retrieving image resolution right inside the ice tree)&lt;br /&gt;&lt;br /&gt;...being using this one a lot in shots involving simple 2d tracking (no rotation, or hand keyed rotations) for object replacements, prop attachments, etc.. &lt;br /&gt;&lt;br /&gt;compound will be stored under Tools &amp;gt; Tracking.&lt;br /&gt;enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2023284384536626128-5589222583376481158?l=iceduous.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iceduous.blogspot.com/feeds/5589222583376481158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2023284384536626128&amp;postID=5589222583376481158' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/5589222583376481158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/5589222583376481158'/><link rel='alternate' type='text/html' href='http://iceduous.blogspot.com/2010/11/ice-transfer-of-fxtree-tracking.html' title='ICE transfer of FxTree Tracking operator'/><author><name>Fabricio Chamon</name><uri>http://www.blogger.com/profile/02390363063692848903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2023284384536626128.post-5823339942043482047</id><published>2010-07-04T00:35:00.000-07:00</published><updated>2010-07-17T14:36:38.058-07:00</updated><title type='text'>ICE Strands to Curves</title><content type='html'>Download Link: &lt;a href="http://www.si-community.com/community/download/file.php?id=665"&gt;ICE Strands to Curves Addon&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13069069&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=13069069&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/13069069"&gt;ICE Strands To Curves - Softimage Addon&lt;/a&gt; from &lt;a href="http://vimeo.com/user757498"&gt;Fabricio Chamon&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Build curves from strands of a pointcloud. &lt;br /&gt;&lt;br /&gt;It creates a snapshot of the strands at the moment the command is called, then the curves are ICE deformed to follow the original strand animation.&lt;br /&gt;&lt;br /&gt;not the fastest performance, but it can do the job.&lt;br /&gt;&lt;br /&gt;tip: if you are using merged curves, you can Animate &amp;gt; Plot Shape, then remove the icetree operator from the curves to speedup viewport playback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2023284384536626128-5823339942043482047?l=iceduous.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iceduous.blogspot.com/feeds/5823339942043482047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2023284384536626128&amp;postID=5823339942043482047' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/5823339942043482047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/5823339942043482047'/><link rel='alternate' type='text/html' href='http://iceduous.blogspot.com/2010/07/ice-strands-to-curves.html' title='ICE Strands to Curves'/><author><name>Fabricio Chamon</name><uri>http://www.blogger.com/profile/02390363063692848903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2023284384536626128.post-6160780814260095016</id><published>2010-05-07T06:54:00.000-07:00</published><updated>2010-05-13T20:14:39.050-07:00</updated><title type='text'>Edge Detection</title><content type='html'>&lt;b&gt;download&lt;/b&gt;:&amp;nbsp;&lt;a href="http://www.si-community.com/download/compounds/EdgeDetection.rar"&gt;Edge Detection Compound&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Took a little time to experiment with edge detection in ice. &lt;br /&gt;&lt;br /&gt;The main goal was to implement the Canny Edge Detection algorithm (&lt;a href="http://en.wikipedia.org/wiki/Canny_edge_detector" target="_blank"&gt;http://en.wikipedia.org/wiki/Canny_edge_detector&lt;/a&gt;), but in the end it turned out to be much (MUCH!) more simple and visually oriented that that.&lt;br /&gt;&lt;br /&gt;For now it only works on grids (planar projections) and greyscale images. The next goal is to enhance the detection by decomposing rgb channels and comparing colors.&lt;br /&gt;&lt;br /&gt;&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11558894&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=11558894&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/11558894"&gt;ICE Edge Detection&lt;/a&gt; from &lt;a href="http://vimeo.com/user757498"&gt;Fabricio Chamon&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;How it works:&lt;br /&gt;&lt;br /&gt;The pseudocode for the entire detection process is:&lt;br /&gt;&lt;br /&gt;for each particle&lt;br /&gt;&amp;nbsp; get its neighbours particles&lt;br /&gt;&amp;nbsp; get neighbour closest pixel brightness on grid&lt;br /&gt;&amp;nbsp; get all neighbours colors average&lt;br /&gt;&amp;nbsp; compare with threshold&lt;br /&gt;&amp;nbsp; if low threshold &amp;lt; average color &amp;lt; high threshold, then set this particle as an edge&lt;br /&gt;&lt;br /&gt;On the begining it doubt this would work due to the large margin of error it could produce. But using masks as inputs gave me suitable results.&lt;br /&gt;&lt;br /&gt;Compound parameters: With closer low-high ranges you get narrower edges, zeroing out low will give you filled blacks, and totally cranking up high (=1) will give you filled whites. Increasing detection resolution will enhance accuracy, but at the price of decreased performance.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_wb58zcwz1io/S-QXofmt6qI/AAAAAAAAACY/PdncDaEfhQo/s1600/ltht_compare.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_wb58zcwz1io/S-QXofmt6qI/AAAAAAAAACY/PdncDaEfhQo/s400/ltht_compare.jpg" width="317" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Funny enough, the hardest part of this compound was not the algorithm itself, but how to expose the final edge particle positions as an array per object. The particles considered as edge have an isImageEdge boolean attribute set to true.We can easily get all point positions in a per object context by:&lt;br /&gt;&lt;br /&gt;get self &amp;gt; get closest points (no cuttoff distance or max points) &amp;gt; get pointpositions&lt;br /&gt;&lt;br /&gt;But now we have to remove from pointposition array the non-edge particles. The next trick is:&lt;br /&gt;&lt;br /&gt;if isImageEdge = false, remove the returned array subIndices from pointposition array (the non-edge particles)&lt;br /&gt;if isImageEdge = true, remove -1 from pointposition array (which will do nothing) &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_wb58zcwz1io/S-QbDkJR1oI/AAAAAAAAACg/bWzN6NdJp-c/s1600/arrayTrick.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://2.bp.blogspot.com/_wb58zcwz1io/S-QbDkJR1oI/AAAAAAAAACg/bWzN6NdJp-c/s400/arrayTrick.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: xx-small;"&gt;(click for bigger image)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;This way you can have a filtered per object array returning an attribute validated by another attribute. This is very handy and should be encapsulated in a compound for later use.&lt;br /&gt;&lt;br /&gt;that's it, see you next time. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2023284384536626128-6160780814260095016?l=iceduous.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iceduous.blogspot.com/feeds/6160780814260095016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2023284384536626128&amp;postID=6160780814260095016' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/6160780814260095016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/6160780814260095016'/><link rel='alternate' type='text/html' href='http://iceduous.blogspot.com/2010/05/edge-detection.html' title='Edge Detection'/><author><name>Fabricio Chamon</name><uri>http://www.blogger.com/profile/02390363063692848903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wb58zcwz1io/S-QXofmt6qI/AAAAAAAAACY/PdncDaEfhQo/s72-c/ltht_compare.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2023284384536626128.post-5467508438077588144</id><published>2010-04-27T21:54:00.000-07:00</published><updated>2010-04-27T21:54:55.940-07:00</updated><title type='text'>StrandTree - Simulation WIP</title><content type='html'>&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11224718&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=11224718&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/11224718"&gt;Tree simulation - wip&lt;/a&gt; from &lt;a href="http://vimeo.com/user757498"&gt;Fabricio Chamon&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;First steps on building a dynamics framework for the trees. (Heavily based on Phil's Strand Dynamics compounds). &lt;br /&gt;&lt;br /&gt;What's working right now:&lt;br /&gt;&lt;br /&gt;- strand forces: gravity, drag, wind&lt;br /&gt;- strand stiffness&lt;br /&gt;- geometry collision &lt;br /&gt;&lt;br /&gt;Issues still being addressed:&lt;br /&gt;&lt;br /&gt;- mantain initial tree shape&lt;br /&gt;- too much jiggling and stretching of strands &lt;br /&gt;- optimization: modeling strands apart from dynamics strands &lt;br /&gt;- localized branch constraints&lt;br /&gt;- leaf dynamics&lt;br /&gt;&lt;br /&gt;I hope this can get released soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2023284384536626128-5467508438077588144?l=iceduous.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iceduous.blogspot.com/feeds/5467508438077588144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2023284384536626128&amp;postID=5467508438077588144' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/5467508438077588144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/5467508438077588144'/><link rel='alternate' type='text/html' href='http://iceduous.blogspot.com/2010/04/strandtree-simulation-wip.html' title='StrandTree - Simulation WIP'/><author><name>Fabricio Chamon</name><uri>http://www.blogger.com/profile/02390363063692848903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2023284384536626128.post-4249964078175648101</id><published>2010-04-04T00:34:00.000-07:00</published><updated>2010-04-27T22:01:01.168-07:00</updated><title type='text'>StrandTree - A procedural approach to tree modeling in ICE</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_wb58zcwz1io/S7hEDBjUPfI/AAAAAAAAACQ/_a_416y92uc/s1600/StrandTree_Bonsai.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://3.bp.blogspot.com/_wb58zcwz1io/S7hEDBjUPfI/AAAAAAAAACQ/_a_416y92uc/s320/StrandTree_Bonsai.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Hi, first post here.&lt;br /&gt;&lt;br /&gt;I hope this blog will get plenty of updates every week from now on. So to start, here are the StrandTree compounds I have been working lately:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Downloads&lt;/b&gt;: &lt;a href="http://www.si-community.com/download/compounds/StrandTree.rar" target="_blank"&gt;StrandTree Compound Pack&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.si-community.com/download/compounds/strandtree_quickguide.pdf"&gt;StrandTree Quick Guide&lt;/a&gt; &lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (thanks to Leendert - aka Hirazi Blue - from &lt;a href="http://www.si-community.com/" target="_blank"&gt;si-community&lt;/a&gt; for the file hosting&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are using Softimage 7.x version, please update and reexport the "Emit Leaves" compound. it's using the "Point Index to Location" node that only comes with softimage 2010 version, but this can be replaced with the "ID to Location" node inside the compound, like in this image: &lt;a class="postlink" href="http://i111.photobucket.com/albums/n157/fabriciochamon/emitLeaves_Fix_xsi7.jpg?t=1270405292" onclick="window.open(this.href);return false;"&gt;emitLeaves_Fix_xsi7.jpg&lt;/a&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;16 compounds:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Emitters&lt;/b&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Emit Branches&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Emit Leaves&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Grow Control&lt;/b&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Even distribution grow&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Random distribution grow&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Modifiers&lt;/b&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Modify Branch Color by Iteration&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Modify Branch Width by Iteration&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Modify Particle Size by Iteration&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Modify Value by Iteration&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Modify Value by Normalized Strand Segment&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Debug&lt;/b&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Debug Iteration&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Strand Effects&lt;/b&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Deform Tree by Curve&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Surface Grow&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rendering&lt;/b&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Tree Visibility Options&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Use Geometry Branches&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Presets&lt;/b&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Basic Tree&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Pine Tree&lt;br /&gt;&lt;br /&gt;(all of them located under Tasks Tab &amp;gt; "Strand Tree")&lt;br /&gt;&lt;br /&gt;Videos:&lt;br /&gt;&lt;br /&gt;&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=10434331&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=10434331&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/10434331"&gt;Softimage ICE Procedural Tree Generator&lt;/a&gt; from &lt;a href="http://vimeo.com/user757498"&gt;Fabricio Chamon&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=10508838&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=10508838&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/10508838"&gt;ICE Procedural Tree - Surface Grow&lt;/a&gt; from &lt;a href="http://vimeo.com/user757498"&gt;Fabricio Chamon&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On the nexts posts I will try to explain more in depth each compound and record other videos showing new features. Also a documentation is on the way, along with some updates (mainly a simulation workflow for the trees).&lt;br /&gt;&lt;br /&gt;For the time being just check the Presets category and dig inside the Basic Tree compound for some insight on how to build your own trees. And don't forget to send feedback, so that I know what to improve next! =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2023284384536626128-4249964078175648101?l=iceduous.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iceduous.blogspot.com/feeds/4249964078175648101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2023284384536626128&amp;postID=4249964078175648101' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/4249964078175648101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2023284384536626128/posts/default/4249964078175648101'/><link rel='alternate' type='text/html' href='http://iceduous.blogspot.com/2010/04/strandtree-procedural-approach-to-tree.html' title='StrandTree - A procedural approach to tree modeling in ICE'/><author><name>Fabricio Chamon</name><uri>http://www.blogger.com/profile/02390363063692848903</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wb58zcwz1io/S7hEDBjUPfI/AAAAAAAAACQ/_a_416y92uc/s72-c/StrandTree_Bonsai.jpg' height='72' width='72'/><thr:total>16</thr:total></entry></feed>
