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

<channel>
	<title>AnimateShmanimate.com</title>
	<atom:link href="http://animateshmanimate.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://animateshmanimate.com</link>
	<description>AnimateShmanimate.com - The portfolio site of John P. Neumann - Technical Artist - A rigger, a scripter, an animator and an overall nice guy!</description>
	<lastBuildDate>Mon, 25 Jun 2012 06:12:22 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4</generator>
		<item>
		<title>Dude&#8230; WTF Happened?</title>
		<link>http://animateshmanimate.com/2012/06/25/dude-wtf-happened/</link>
		<comments>http://animateshmanimate.com/2012/06/25/dude-wtf-happened/#comments</comments>
		<pubDate>Mon, 25 Jun 2012 05:55:29 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1343</guid>
		<description><![CDATA[So I kinda fell off the face of the earth this last year. So why? Well, firstly I got a job down at Reel FX in Dallas as a Technical Director. The days were longish and I was really focusing on learning what I needed to learn to be as good at my job as [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://animateshmanimate.com/wp-content/uploads/2012/06/where_the_hell_ive_been.png"><img src="http://animateshmanimate.com/wp-content/uploads/2012/06/where_the_hell_ive_been.png" alt="where_the_hell_ive_been" title="where_the_hell_ive_been" width="435" height="165" class="alignleft size-full wp-image-1357" /></a>So I kinda fell off the face of the earth this last year. So why? Well, firstly I got a job down at Reel FX in Dallas as a Technical Director. The days were longish and I was really focusing on learning what I needed to learn to be as good at my job as I could. And the move down here was hard on both me and my family and so we were dealing with that as well. Basically, I was coming home after work burnt out and not ready to share what I&#8217;d learned that day. Which blows. Not just because I love spreading the knowledge around, but because it genuinely was rough not being able to reach out to the community and actually show folks what it was I was doing and how they could do it and learn from it. </p>
<p>I won&#8217;t go into the nitty gritty of everything that went on, but the long and short of it is this: I got hired; I worked on the VES nominated <a href="http://www.imdb.com/title/tt2147335/" title="Humbugged: Rockettes to the Rescue">Humbugged: Rockettes to the Rescue</a>; I then rolled onto an unannounced project with the same team and started supporting the Houdini pipeline that we had in place more often; That wrapped and I asked for a raise; Then I rolled into a new role as the Lead FX TD for our <a href="http://www.hollywoodreporter.com/news/granat-reel-fx-form-bedrock-21731" title="Turkeys">first feature film</a> &#8211; I&#8217;d like to point out I&#8217;d only been there for 9 months and came in with minimal Houdini experience (and I&#8217;m still no guru, but I am a quick learner and performed damn well); Then I got the raise, but was told my time would end in August &#8211; guess the raise pissed them off; Then I rolled onto another unannounced project that already had a team in place so I was helping in a limited fashion; Then I got rolled onto another unannounced commercial project; Finally I found a <a href="http://www.wms.com/Pages/default.aspx" title="WMS Gaming">new job</a> that I&#8217;ll be starting at in July. The list is not exhaustive, but it&#8217;s close enough. The last few months have been kinda hectic with being on three projects and looking for a job, so I was having a really tough time finding time to relax or share anything. So I picked up a piano since one of my goals for the year was to learn an instrument. It helped immensely to let me relax and it&#8217;s been a lot of fun.</p>
<p>My time at Reel FX was both good and bad (as it is with any job). I learned a TON and have gotten really good at writing good clean python and utilizing it&#8217;s built in awesome. PyQt I regularly destroy and I love making sweet UI&#8217;s for our artists to work with. It&#8217;s been an extremely amazing learning experience and I&#8217;m going to miss a lot of the folks that I met during my time there. My CG Supervisor for my first two shows (<a href="http://www.imdb.com/name/nm2256397/" title="Mike Fortner - IMDB">Mike Fortner</a>) is the best boss I&#8217;ve ever worked for. Not only is he smart as hell, but he really encouraged me to branch out and take on tasks I wasn&#8217;t ready for &#8211; thus making me force myself to be ready. He was extremely encouraging and really pushed me to be better at my job. He made me feel at home &#8211; on both a personal and work level. He also allowed me a ton of creative freedom in how we solved problems and we absolutely killed the shows we worked on. They looked great and we had so few &#8220;big&#8221; issues that we rarely worked late. We had a great dynamic and really played to each others skills. And we did two shows with just a CG Supervisor and one TD &#8211; just saying. He was an amazing mentor and I would HIGHLY suggest working with him if you ever have the opportunity. I really can&#8217;t say enough about how great my time working with him was.</p>
<p>So what&#8217;s next? Well, I&#8217;m kinda getting out of 3D. I&#8217;m going to <a href="http://www.wms.com/Pages/default.aspx" title="WMS Gaming">WMS Gaming</a> on their web team as the Principal Software Engineer (holy shit right!?!) writing Django applications all day and making cool shit there (As an aside, if you haven&#8217;t played with Django I HIGHLY recommend it. My site is still running on PHP currently, but I&#8217;ve been slowly migrating things over to <a href="http://mezzanine.jupo.org/" title="Mezzanine">Mezzanine</a>/<a href="https://www.djangoproject.com/" title="Django">Django</a> as time permits). Plus it&#8217;s back in Chicago so that&#8217;s a HUGE bonus for me because Dallas has been&#8230; Not what I expected nor what I had hoped for. I&#8217;m also hoping to get back to school and get my Masters in Computer Science since that would probably be a good thing since I&#8217;ve never actually taken a programming class (not that seems to have been an issue). I&#8217;m hoping to still play around in 3D and level up some of my skills in both Maya and Houdini and continue to do some cool stuff and try and hook folks up with information. I may do a big data dump at some point to see what I can remember and pass back to the community as well. I&#8217;ve also had a few requests for both an update to my quickPlayblast script (which is in dire need of an update) as well as some tutorials for artists with Python. I&#8217;d love to do both, but time is going to have to permit for either. I&#8217;d be more interested in doing the tutorials to be honest, but I&#8217;d like some feedback from some of the artists that are interested in it so that I could tailor it to something useful rather than &#8220;Here&#8217;s how you make a PyQt UI and populate it with data from your scene.&#8221; because while it&#8217;s useful I&#8217;d much rather tailor it to an actual need that&#8217;d be fairly generic in its context. I prefer writing lower level stuff, because there&#8217;s enough high level stuff out there for folks to get confused about already. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>Until next time I actually write something, I bid you all adieu. Thanks for reading and leave some comments on what you&#8217;d like to see from a python tutorial. Till next time! <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-extreme_sexy_girl.png' alt=':bloody:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2012/06/25/dude-wtf-happened/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python List Comprehension</title>
		<link>http://animateshmanimate.com/2011/12/07/python-list-comprehension/</link>
		<comments>http://animateshmanimate.com/2011/12/07/python-list-comprehension/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 03:17:07 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Python Scripts]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1274</guid>
		<description><![CDATA[So it&#8217;s been a while since I updated anything on here. Part of that is because I don&#8217;t have the time anymore. The reason I don&#8217;t have the time is because I am now gainfully employed as a Technical Director at Reel FX. It&#8217;s pretty awesome and rewarding. Now all I do is write tools [...]]]></description>
			<content:encoded><![CDATA[<p>So it&#8217;s been a while since I updated anything on here. Part of that is because I don&#8217;t have the time anymore. The reason I don&#8217;t have the time is because I am now gainfully employed as a Technical Director at Reel FX. It&#8217;s pretty awesome and rewarding. Now all I do is write tools all day for the artists. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> Onwards. So Python is an amazingly awesome language. One of the reasons it&#8217;s so awesome is because you can do really hard things really easily in it. One of those things are list comprehensions. A list comprehension is basically a way of creating a new list based off of another list and a subset of qualities you&#8217;re looking for. Here&#8217;s an example:</p>
<pre class="brush: python; title: ; notranslate">
# Input
my_list = [1, 2, 3, 4, 5]
new_list = [num for num in my_list if num &gt; 3]

#Output
print new_list
&gt;&gt; [4, 5]
</pre>
<p><span id="more-1274"></span><br />
A simple example, but it proves the point. Let&#8217;s see what that would look like without the list comprehension.</p>
<pre class="brush: python; title: ; notranslate">
# Input
my_list = [1, 2, 3, 4, 5]
new_list = []
for num in my_list:
    if num &gt; 3:
        new_list.append(num)

print new_list
&gt;&gt; [4, 5]
</pre>
<p>See the difference? Also notice the syntax. I&#8217;m doing the exact same thing in 2 lines that it took me 5 lines to do without using the abilities of Python to do the work for me. When you&#8217;re looking at 1000+ line scripts, that&#8217;s a ton of typing saved (and sanity). So what if you want to do something actually useful instead of returning numbers bigger than 3. Ok. Let&#8217;s go.</p>
<pre class="brush: python; title: ; notranslate">
# Input
import maya.cmds as cmds
cmds.polySphere()
cmds.polyCube()
cmds.polyPlane()
orig_scene = cmds.ls(assemblies=True)
cmds.polyTorus()
updated_scene = cmds.ls(assemblies=True)

# List Comprehension
new_objects = [new for new in updated_scene if new not in orig_scene]

# Long boring ass old way
new_objects = []
for new in updated_scene:
    if new not in orig_scene:
        new_objects.append(new)

# Output
print new_objects
&gt;&gt; [u'pTorus1']
</pre>
<p>Now that&#8217;s awesome. What we&#8217;re doing is creating some objects, getting the current scenes top level transform DAG objects, creating a new object, getting the updated scenes top level transform DAG objects and then comparing the current against the updated one and returning the last object created. Now it&#8217;s awesome, but not really that exciting because we&#8217;re just doing it with some built in Maya objects. So let&#8217;s say that you&#8217;ve got a scene open. You have a tool that does some importing and you want to ensure that the objects brought in have some sane names because Maya is stupid. You do exactly the same thing and you get the top level objects imported and you can now manipulate whatever it is you need to. This gives you tons of power. You can now traverse the objects children to determine if they came in with correct settings (shaders, lights with prman data, etc), ensure that the data is clean and all other types of nifty things. Basically if you can think of it you can do it. And it is awesome.</p>
<p>You don&#8217;t have to just use it for stuff like this though. You can do other awesomeness. Let&#8217;s say you want to search for a set of objects with specific names and then find out if they have animation data on them. You can do something like this:</p>
<pre class="brush: python; title: ; notranslate">
# Input
import maya.cmds as cmds
import re

req = re.compile('pSphere1|pCube1|pPlane1|pTorus1')
curves = cmds.ls(type='animCurve')
filtered = [curve for curve in curves if reg.search(curve)]

# Output
print filtered
&gt;&gt; [u'pPlane1_rotateX', u'pPlane1_rotateY', u'pPlane1_rotateZ', u'pPlane1_scaleX', u'pPlane1_scaleY', u'pPlane1_scaleZ', u'pPlane1_translateX', u'pPlane1_translateY', u'pPlane1_translateZ', u'pPlane1_visibility', u'pSphere1_rotateX', u'pSphere1_rotateY', u'pSphere1_rotateZ', u'pSphere1_scaleX', u'pSphere1_scaleY', u'pSphere1_scaleZ', u'pSphere1_translateX', u'pSphere1_translateY', u'pSphere1_translateZ', u'pSphere1_visibility']
</pre>
<p>From there you can list all of the connections, break connections, etc. The possibilities are endless. (Note: I keyed everything just because it was an example so that&#8217;s why the data is so ugly. Also, I didn&#8217;t animate the torus so that&#8217;s why it&#8217;s not there.) </p>
<p>Last thing before we end this. Some of you may have noticed that the lists I&#8217;m getting back all have this &#8216;u&#8217; in them before each entry. The reason this is, is because Maya is returning each item as a unicode object in a list. That&#8217;s why if you do a cmds.ls(sl=True) you get back a list instead of just a string. So if you&#8217;re looking to only return the topmost object and you know that&#8217;s all you care about you can do something like this instead.</p>
<pre class="brush: python; title: ; notranslate">
# Input
cons = cmds.listConnections('pSphereShape1', s=True, d=False)[0]

# Output
print cons
&gt;&gt; polySphere1
</pre>
<p>Granted that example isn&#8217;t exactly practical in this case, but lets say you were looking for a particular node, you could specify, pSphereShape1.my_node instead to see if it exists or not and then do whatever you wanted based on that return value. See. All types of awesome.</p>
<p>So there it is. A quick rundown on list comprehensions. If these haven&#8217;t been clear or you&#8217;d like other examples let me know in the comments or via Twitter or Email (I don&#8217;t mind the emails, but Twitter or on here is better just as a heads up) and I&#8217;ll do my best to clarify. These aren&#8217;t amazing or awesome or anything else. They&#8217;re essential. They make you work more efficiently and with tons less code. Now go and use! <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-extreme_sexy_girl.png' alt=':bloody:' class='wp-smiley' /> </p>
<p>&#8211; As an aside. I&#8217;m cross posting this to my tumblr account which is located at <a href="http://arrantsquid.tumblr.com/">http://arrantsquid.tumblr.com/</a>. I&#8217;m doing this for 2 reasons. 1) I like having a backup; and 2) My site will be going down in the next few days and won&#8217;t be coming back up until the end of the month. So follow me on Twitter or Tumblr or G+ and we can still communicate. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-feel_good.png' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2011/12/07/python-list-comprehension/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Redirect Maya&#8217;s output To stdout</title>
		<link>http://animateshmanimate.com/2011/09/20/redirect-mayas-output-to-stdout/</link>
		<comments>http://animateshmanimate.com/2011/09/20/redirect-mayas-output-to-stdout/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 15:54:38 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Linux Scripts]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1268</guid>
		<description><![CDATA[This is gonna be a quick post to get this information out there, however, I wanted to let all of you know I&#8217;m not dead (if you follow me on Twitter or G+ you know that though). I&#8217;ve just been busy at my new job at Reel FX as a Tools TD and I&#8217;ve got [...]]]></description>
			<content:encoded><![CDATA[<p>This is gonna be a quick post to get this information out there, however, I wanted to let all of you know I&#8217;m not dead (if you follow me on Twitter or G+ you know that though). I&#8217;ve just been busy at my new job at Reel FX as a Tools TD and I&#8217;ve got some awesome stuff in the pipe on here that should be coming out in the next few weeks. Hopefully a redesign of the site will come about as well, but I wouldn&#8217;t hold my breath for that. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> With that said, here we go.</p>
<p>So about a week ago I asked if anyone knew how to redirect Maya&#8217;s script editor output to the shell &#8211; because I was having some scenes crash on me and wanted to pin down exactly which line in the .ma file was doing it. <span id="more-1268"></span>There indeed is a way and it&#8217;s ridiculously stupidly easy. It should work if you&#8217;re launching it from the CLI (please note that I have no idea if this&#8217;ll work on anything other than Linux since that&#8217;s what we use here).</p>
<pre class="brush: python; title: ; notranslate">
cmds.scriptEditorInfo(wh=True, hfn='/dev/stderr')
</pre>
<p>If you&#8217;re on windows you&#8217;ll need to change the hfn to something your system will understand &#8211; what that is I have no idea, maybe c:\bluescreenofdeath\error.log <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-feel_good.png' alt=';)' class='wp-smiley' /> Big thanks to Hesher (Derek McAtavey) for having the info on hand for me (albeit a week later than I&#8217;d needed it &#8211; in all fairness I hadn&#8217;t asked him, but he is on Twitter&#8230; I think).</p>
<p>So that&#8217;s that. Really simple. Hope this helps someone else out!</p>
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2011/09/20/redirect-mayas-output-to-stdout/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Maya and PyQt on OSX Snow Leopard and Hating It</title>
		<link>http://animateshmanimate.com/2011/07/12/maya-and-pyqt-on-osx-snow-leopard-and-hating-it/</link>
		<comments>http://animateshmanimate.com/2011/07/12/maya-and-pyqt-on-osx-snow-leopard-and-hating-it/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 04:43:34 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Python Scripts]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[maya]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[pyqt4]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[qscintilla]]></category>
		<category><![CDATA[sip]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1235</guid>
		<description><![CDATA[So this post has been sitting in my queue for over 2 months now. Why? Well, because it was a lot of trial and error and a lot of failure. I happen to like having clean installs and refuse to have redundancy when I can avoid it. So I thought that I&#8217;d do an install [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/07/maya_pyQt_osx.png" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/07/maya_pyQt_osx-300x104.png" alt="Maya PyQt OSX" title="Maya PyQt OSX" width="300" height="104" class="alignright size-medium wp-image-1261" /></a>So this post has been sitting in my queue for over 2 months now. Why? Well, because it was a lot of trial and error and <strong>a lot</strong> of failure. I happen to like having clean installs and refuse to have redundancy when I can avoid it. So I thought that I&#8217;d do an install of PyQt for OSX to the default Python and symlink it to Maya that way I only have one install that I have to update when I need to update it &#8211; among other reasons. Unfortunately, Maya hates that idea. Loathes it even. The errors it spits out are ugly and are basically kill errors that make it so you can&#8217;t use PyQt either from bash or from Maya. Loads of fun, eh? <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-feel_good.png' alt=';)' class='wp-smiley' /> To top it off, even if you do get PyQt to work with Maya, there&#8217;s no point &#8211; in my opinion &#8211; in putting PyQt into your default Python install so you can run it from the CLI. Why? Because this <a href="http://bugreports.qt.nokia.com/browse/QTBUG-5952">bug</a> from &#8217;09 still hasn&#8217;t been resolved and you&#8217;ll get the following error: <em>&#8220;Qt internal error: qt_menu.nib could not be loaded.&#8221;</em> Note that the bug I reference is actually for when you choose no-framework, however, even without choosing no-framework as a compile option you&#8217;ll still get that error. PyQt on OSX is like trying to set environment variables permanently in XP with a .bat file (pre-SP2 and without using the registry). There is hope though and after a little read on why I&#8217;m doing this, we&#8217;ll get there.<span id="more-1235"></span></p>
<p>So I&#8217;ve been getting around to doing a few things with QT Designer and Python and I found out lots of fun and not-so-fun things. First, it&#8217;s almost impossible to use a straight QT Designer .ui file in Maya with Python without using PyQt. Why is this? Well, because you import the .ui file, but Maya doesn&#8217;t seem to have a way to understand which commands should be sent to the ui window. While in reality, this makes sense, I still find it idiotic. As I said earlier, there&#8217;s hope. You can use the nice QT windows you created in QT Designer, but it&#8217;s going to take some work (especially if you&#8217;re on OSX). Windows users, you&#8217;ve got it easy because Riverbank actually gives you pre-compiled binaries, so all you need to do is download <a href="http://www.python.org/getit/">Python</a> and <a href="http://www.riverbankcomputing.co.uk/software/pyqt/download">PyQt</a>; Install both and you&#8217;re pretty much done. There&#8217;ll be some things you may need to do to get it working in Maya, but nothing more than just doing a sys.path.append in your userSetup.py file. Matter of fact, if you want a whole walkthrough on the whole #! (HA! That was nerdy.) go check out <a href="http://www.christianakesson.com/blog/?p=111">Christian Akesson&#8217;s</a> blog post with the whole setup with Eclipse included.</p>
<p>Onto the OSX folks who are usually left out in the wind. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> Before I start, I want you to know three things: 1) I&#8217;m going to explain the things that didn&#8217;t work at the end, because I feel like it&#8217;s worth noting what I have tried; 2) In the end you will have a working install for Maya; and 3) I got some of my information to get a fully working version from <a href="http://www.justinfx.com/2011/01/07/installing-pyqt-for-maya-2011-osx/">Justin Israel&#8217;s</a> site, so big ups to him for that. I&#8217;m going to assume you&#8217;re using the stock version of Python that came with OSX. If you&#8217;re not, you&#8217;ll have to modify some of the commands (which I&#8217;m not going to go into). If you have MacPorts or Fink installed, you&#8217;ll need to uninstall them, because this will fail with it installed. I know. I tried. Not sure if Homebrew users are ok, but I imagine you are since it doesn&#8217;t have extra headers for stuff. Also, if you&#8217;re unsure of what versions of Python you have installed you can open up a terminal and type:</p>
<pre class="brush: bash; title: ; notranslate">
file `which python` # those are backticks
</pre>
<p>And to check the architecture you&#8217;re running open up python in the terminal and type:</p>
<pre class="brush: python; title: ; notranslate">
import sys
print(sys.maxsize)
</pre>
<p>Which will return either: 2147483647 (32bit) or 9223372036854775807 (64bit) &#8211; You could use import platform; platform.architecture() however, it returns 64bit whether you&#8217;re running 32 or 64 bit and is a known bug for OSX. Plus maxsize is actually a better way to determine it.</p>
<p>If you wish to switch your interpreter from 64 to 32 (or vice-versa, by switching yes to no), type this in the terminal:</p>
<pre class="brush: bash; title: ; notranslate">
export VERSIONER_PYTHON_PREFER_32_BIT=yes
</pre>
<p>(Do this because you&#8217;ll need these no matter what.) First you&#8217;re gonna need to download three things: <a href="http://distfiles.macports.org/qt4-mac/qt-mac-opensource-src-4.5.3.tar.gz">QT 4.5.3</a>; <a href="http://distfiles.macports.org/python/sip-4.10.tar.gz">SIP 4.10</a>; and <a href="http://distfiles.macports.org/python/PyQt-mac-gpl-4.7.3.tar.gz">PyQt 4.7.3</a>. Throw them somewhere you&#8217;ll remember. I put them in my codingLibraries folder under my home directory. You can use curl to grab them like so:</p>
<pre class="brush: bash; title: ; notranslate">
curl -C - -LO http://distfiles.macports.org/python/sip-4.10.tar.gz
curl -C - -LO http://distfiles.macports.org/qt4-mac/qt-mac-opensource-src-4.5.3.tar.gz
curl -C - -LO http://distfiles.macports.org/python/PyQt-mac-gpl-4.7.3.tar.gz
</pre>
<p>Alright, now open up the terminal and we&#8217;re gonna install QT 4.5.3 first. Type the following:</p>
<pre class="brush: bash; title: ; notranslate">
cd ~/path/to/directory/of/files
tar -zxvf qt-mac-opensource-src-4.5.3.tar.gz
cd qt-mac-opensource-src-4.5.3 
make confclean # if you get this - make: *** No rule to make target `confclean'.  Stop. - it's fine
./configure -cocoa -arch x86_64 -debug-and-release -no-phonon -no-phonon-backend -no-qt3support -no-webkit -nomake docs -nomake examples -nomake demos -nomake translations -no-rpath -no-framework -opensource
make -j 8 # read below before doing this
sudo make install
</pre>
<p>If you haven&#8217;t showered yet, now&#8217;s a good time. Grab some coffee, walk the dog, walk the parapet, watch a cartoon, but go do something because this can (and most likely will) take a while. Mine took a little over an hour on my Macbook Pro. YMMV. Alright, you&#8217;re back. Now we&#8217;ll install SIP.</p>
<pre class="brush: bash; title: ; notranslate">
cd ..
tar -zxvf sip-4.10.tar.gz
cd sip-4.10
/Applications/Autodesk/maya2011/Maya.app/Contents/bin/mayapy configure.py --arch=x86_64
make -j 8
sudo make install
</pre>
<p>SIP is now installed. Yay! Now cd back to your base directory with the files (cd ..)and let&#8217;s install PyQt.</p>
<pre class="brush: bash; title: ; notranslate">
cd ..
tar -zxvf PyQt-mac-gpl-4.7.3.tar.gz
cd PyQt-mac-gpl-4.7.3
export QTDIR=/usr/local/Trolltech/Qt-4.5.3
export PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH
export QMAKESPEC=/usr/local/Trolltech/Qt-4.5.3/mkspecs/macx-g++
export DYLD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.5.3/lib
/Applications/Autodesk/maya2011/Maya.app/Contents/bin/mayapy configure.py LIBDIR_QT=/usr/local/Trolltech/Qt-4.5.3/lib INCDIR_QT=/usr/local/Trolltech/Qt-4.5.3/include MOC=/usr/local/Trolltech/Qt-4.5.3/bin/moc -w --no-designer-plugin --confirm-license
make -j 8 # a quick walk of the dog or coffee this time
sudo make install
</pre>
<p>Lastly, you&#8217;ll need to run this command (which <a href="http://www.justinfx.com/2011/01/07/installing-pyqt-for-maya-2011-osx/">Justin Israel</a> wrote, which is way more elegant than the way the doc&#8217;s tell you to do it):</p>
<pre class="brush: bash; title: ; notranslate">
for mod in Core Gui Svg OpenGL Xml; do sudo find /Applications/Autodesk/maya2011/Maya.app/Contents/Frameworks/\
Python.framework/Versions/Current/lib/python2.6/site-packages/PyQt4 -name &quot;*so&quot; -exec install_name_tool -change libQt${mod}.4.dylib @executable_path/Qt${mod} {} \;; done
</pre>
<p>And now you&#8217;re setup to use PyQt on OSX! At this point you should really jump over to that blog I pointed out to the Windows users earlier by <a href="http://www.christianakesson.com/blog/?p=111">Christian Akesson</a> and setup Eclipse in all its goodness.</p>
<p>If you want to you can install QScintilla as well, which will give you access to the <a href="http://eric-ide.python-projects.org/">Eric IDE</a> if you want to run that (I was a fan of SciTE when I had a working Linux box &#8211; before the hardware crash of &#8217;09 <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-too_sad.png' alt=':(' class='wp-smiley' /> ). This isn&#8217;t a necessary lib for PyQt, so you can skip it if you want. If not, cd back to your base directory with the files and let&#8217;s do it:</p>
<pre class="brush: bash; title: ; notranslate">
cd ..
curl -C - -LO http://www.riverbankcomputing.co.uk/static/Downloads/QScintilla2/QScintilla-gpl-2.5.1.tar.gz
tar -zxvf QScintilla-gpl-2.5.1.tar.gz
cd QScintilla-gpl-2.5.1
cd Qt4
qmake qscintilla.pro -spec macx-g++
make -j 8
sudo make install
cd ../python
python configure.py
make -j 8
sudo make install
</pre>
<p>So now you&#8217;ve got a working version of PyQt that will work with Maya. But what about from an interactive Python shell? Well 2 things should jump out at you already: 1) We compiled off of Maya&#8217;s Python; and 2) I already said there was a bug that kills PyQt from the CLI already. So what can we do? Well we can use Maya&#8217;s Python interpreter from the CLI and still get all the usefulness from PyQt without a redundant install. Just use:</p>
<pre class="brush: bash; title: ; notranslate">
/Applications/Autodesk/maya2011/Maya.app/Contents/bin/mayapy
</pre>
<p>And you can test it out with this &#8211; which I got from <a href="http://zetcode.com/tutorials/pyqt4/firstprograms/">here</a>.</p>
<pre class="brush: python; title: ; notranslate">
import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple')
widget.show()

sys.exit(app.exec_())
</pre>
<p>Yay! It works! Except that it&#8217;s kinda crappy that you&#8217;ve got to call Maya&#8217;s Python interpreter. Why is it crappy? Well I do lots of different development with Python (not just Maya) and I use libraries like Numpy which are installed to my default Python site-packages folder. So what can we do? Well, you can&#8217;t symlink the files to the site-packages directory. I tried that multiple times with different libraries and it won&#8217;t work. So you&#8217;re left with using sys.path.append when you want to use an external library from within Maya&#8217;s interpreter:</p>
<pre class="brush: python; title: ; notranslate">
import sys
sys.path.append('/Library/Python/2.6/site-packages/numpy-2.0.0.dev_f72c605_20110113-py2.6-macosx-10.6-universal.egg')
import numpy as nmp
</pre>
<p>Definitely not ideal, but it <strong>does</strong> work. We can even make the process of calling Maya&#8217;s interpreter easier by adding this to our .bash_profile (or .profile if you use that instead):</p>
<pre class="brush: bash; title: ; notranslate">
# Set PATH for Maya 2011
PATH=$PATH:/Applications/Autodesk/maya2011/Maya.app/Contents/bin
PATH=$PATH:/Applications/Autodesk/maya2011/Maya.app/Contents/MacOS
export PATH
</pre>
<p>Now we can just do this to run scripts:</p>
<pre class="brush: bash; title: ; notranslate">
mayapy ~/myScripts/apythonscript.py
</pre>
<p>So that&#8217;s that! You can now run PyQt scripts from the CLI and while it&#8217;s not gorgeous or elegant, it does work. </p>
<p>Now I&#8217;m going to elaborate on what I <strong>tried</strong> previously to get Maya to work without having an extra lib installed. If you&#8217;ve already gleaned enough information, see ya. If you&#8217;re still interested, keep reading.</p>
<p>Instead of writing it all out, and boring you with details on what I tried at each step (and there were quite a few) here&#8217;s my bash code:</p>
<pre class="brush: bash; title: ; notranslate">
# QT
tar -zxvf qt-mac-opensource-src-4.5.3.tar.gz
cd qt-mac-opensource-src-4.5.3 
make confclean
./configure -cocoa -arch x86_64 -debug-and-release -no-phonon -no-phonon-backend -no-qt3support -no-webkit -nomake docs -nomake examples -nomake demos -nomake translations -no-rpath -opensource # omitted no-framework
make -j 8
sudo make install

# SIP
python configure.py --arch=x86_64
make -j 8
sudo make install

sudo ln -s /Library/Python/2.6/site-packages/sip.so /Applications/Autodesk/maya2011/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.6/site-packages/sip.so

sudo ln -s /Library/Python/2.6/site-packages/sipconfig.py /Applications/Autodesk/maya2011/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.6/site-packages/sipconfig.py

sudo ln -s /Library/Python/2.6/site-packages/sipdistutils.py /Applications/Autodesk/maya2011/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.6/site-packages/sipdistutils.py

# PyQt
export QTDIR=/usr/local/Trolltech/Qt-4.5.3
export PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH
export QMAKESPEC=/usr/local/Trolltech/Qt-4.5.3/mkspecs/macx-g++
export DYLD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.5.3/lib

python configure.py LIBDIR_QT=/usr/local/Trolltech/Qt-4.5.3/lib INCDIR_QT=/usr/local/Trolltech/Qt-4.5.3/include MOC=/usr/local/Trolltech/Qt-4.5.3/bin/moc -w --no-designer-plugin --confirm-license
make -j 8
sudo make install

sudo ln -s /Library/Python/2.6/site-packages/PyQt4/ /Applications/Autodesk/maya2011/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.6/site-packages/PyQt4

cd /Applications/Autodesk/maya2011/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.6/site-packages/PyQt4 

sudo find . -name &quot;*so&quot; -exec install_name_tool -change libQtCore.4.dylib @executable_path/QtCore {} \;
sudo find . -name &quot;*so&quot; -exec install_name_tool -change libQtCore.4.dylib @executable_path/QtGui {} \;
sudo find . -name &quot;*so&quot; -exec install_name_tool -change libQtCore.4.dylib @executable_path/QtSvg {} \;
sudo find . -name &quot;*so&quot; -exec install_name_tool -change libQtCore.4.dylib @executable_path/QtOpenGL {} \;
sudo find . -name &quot;*so&quot; -exec install_name_tool -change libQtCore.4.dylib @executable_path/QtXml {} \;
</pre>
<p>As you can see from that, I&#8217;m basically installing it all directly to my stock Python and then symlinking it to Maya&#8217;s site-packages (which as we already discussed, won&#8217;t work). I also attempted to omit the &#8216;no-framework&#8217; option for QT so that I wouldn&#8217;t get that error regarding the qt_menu.nib file from the CLI. The problem is that it constantly failed when attempting to compile the networking components for some reason. You&#8217;ll also notice that I set the proper QT variables for Maya in the dumb way, whereas Justin&#8217;s way was much more elegant. I won&#8217;t post the error messages I received (unless someone is really that interested), but suffice it to say that when I was symlinking it to Maya, I couldn&#8217;t get it to work from the CLI nor Maya so it was rather useless. </p>
<p>So that&#8217;s that. Actually, for those of you who kept reading, here&#8217;s the entirety of the <strong>working</strong> script so that you can just save it as a bash script, set it to executable and walk away (kind of). You&#8217;ll need to confirm the license for the QT install and you&#8217;re going to need to provide your password (or the root password rather) to do sudo make install. Alternatively, you could take the sudo commands out of the file and run the entire script as root. I however, would only advise that if you really trust and like me. I&#8217;m not gonna screw with your machine and you should read the script before executing it &#8211; and I&#8217;m not liable for it either &#8211; but I don&#8217;t run most anything from anyone I don&#8217;t absolutely trust with sudo rights. Anyhow, here it is.</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash

# create a directory to download the files to
mkdir ~/tempLibs
cd ~/tempLibs

# download the files we need
curl -C - -LO http://distfiles.macports.org/python/sip-4.10.tar.gz
curl -C - -LO http://distfiles.macports.org/qt4-mac/qt-mac-opensource-src-4.5.3.tar.gz
curl -C - -LO http://distfiles.macports.org/python/PyQt-mac-gpl-4.7.3.tar.gz

# untar and compile qt
tar -zxvf qt-mac-opensource-src-4.5.3.tar.gz
cd qt-mac-opensource-src-4.5.3
./configure -cocoa -arch x86_64 -debug-and-release -no-phonon -no-phonon-backend -no-qt3support -no-webkit -nomake docs -nomake examples -nomake demos -nomake translations -no-rpath -no-framework -opensource
make -j 8
sudo make install

# untar and compile sip
cd ..
tar -zxvf sip-4.10.tar.gz
cd sip-4.10
/Applications/Autodesk/maya2011/Maya.app/Contents/bin/mayapy configure.py --arch=x86_64
make -j 8
sudo make install

# untar and compile pyqt
cd ..
tar -zxvf PyQt-mac-gpl-4.7.3.tar.gz
cd PyQt-mac-gpl-4.7.3
export QTDIR=/usr/local/Trolltech/Qt-4.5.3
export PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH
export QMAKESPEC=/usr/local/Trolltech/Qt-4.5.3/mkspecs/macx-g++
export DYLD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.5.3/lib
/Applications/Autodesk/maya2011/Maya.app/Contents/bin/mayapy configure.py LIBDIR_QT=/usr/local/Trolltech/Qt-4.5.3/lib INCDIR_QT=/usr/local/Trolltech/Qt-4.5.3/include MOC=/usr/local/Trolltech/Qt-4.5.3/bin/moc -w --no-designer-plugin --confirm-license
make -j 8
sudo make install

# link the binaries correctly
for mod in Core Gui Svg OpenGL Xml; do sudo find /Applications/Autodesk/maya2011/Maya.app/Contents/Frameworks/\
Python.framework/Versions/Current/lib/python2.6/site-packages/PyQt4 -name &quot;*so&quot; -exec install_name_tool -change libQt${mod}.4.dylib @executable_path/Qt${mod} {} \;; done

# delete our tempFile directory
cd ~/
rm -rf ~/tempLibs

# done
exit
</pre>
<p>Hope this helps some folks out and again, thanks to Justin for posting what he did because his info helped me get over that last hurdle &#8211; and everyone else who I&#8217;ve gathered information from on about this from the many websites I grep&#8217;d through.</p>
<p>Well that&#8217;s that! Hope this helps someone else out and hopefully it&#8217;ll save some folks some headaches. Till next time! <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-extreme_sexy_girl.png' alt=':bloody:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2011/07/12/maya-and-pyqt-on-osx-snow-leopard-and-hating-it/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Other Folks Scripts</title>
		<link>http://animateshmanimate.com/downloads/other-folks-scripts/</link>
		<comments>http://animateshmanimate.com/downloads/other-folks-scripts/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 01:10:29 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
		
		<guid isPermaLink="false">http://animateshmanimate.com/?page_id=1244</guid>
		<description><![CDATA[So after a little discussion on Twitter (and Beluga) with my brother (not blood, but close enough) Eric E. Lenerville (Twitter: RiskySnail) decided he wanted to Open-Source some of his scripts and I decided that I would host them here for him. So, since I&#8217;m doing this for him, I would also like to open [...]]]></description>
			<content:encoded><![CDATA[<p>So after a little discussion on Twitter (and Beluga) with my brother (not blood, but close enough) <a href="http://eeltechart.com/" title="Eel Tech Art">Eric E. Lenerville</a> (Twitter: <a href="http://twitter.com/RiskySnail" title="RiskySnail on Twitter">RiskySnail</a>) decided he wanted to Open-Source some of his scripts and I decided that I would host them here for him. So, since I&#8217;m doing this for him, I would also like to open the opportunity up to other folks. I&#8217;m not going to be able to respond to every request, but I&#8217;ll do my best to. I&#8217;m hoping to actual open a whole site in the next year for scripts and resources, but that&#8217;s a large project, so for now, here ya go.</p>
<h3>Scripts from Eric E. Lenerville (aka Eel, RiskySnail)</h3>
<h2>autoSaveMe</h2>
<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/07/autoSaveMe_button.png"><img src="http://animateshmanimate.com/wp-content/uploads/2011/07/autoSaveMe_button.png" alt="autoSaveMe" title="autoSaveMe" width="596" height="297" class="alignright size-full wp-image-1247" /></a></p>
<p>autoSaveMe is a scripted solution to monitor the state of your Maya scene and save after a specified amount of time has elapsed &#8211; potentially saving hours of your work from being lost in a crash. The zip contains autoSaveMe.py, userSetup.py and License.txt. If you have a userSetup.py you&#8217;ll need to append this to this file. There are also instructions in autoSaveMe.py for usage. This script is courtesy of <a href="http://eeltechart.com/" title="Eel Tech Art">Eric E. Lenerville</a>.</p>
<a href="http://animateshmanimate.com/scriptDownloads/autoSaveMe.zip" title="autoSaveMe - 1.0.0">autoSaveMe - 1.0.0</a> - Downloaded 11 times
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/downloads/other-folks-scripts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ILLUSION MAGE SUCKS or STOP STEALING YOU !</title>
		<link>http://animateshmanimate.com/2011/04/30/illusion-mage-sucks-or-stop-stealing-you/</link>
		<comments>http://animateshmanimate.com/2011/04/30/illusion-mage-sucks-or-stop-stealing-you/#comments</comments>
		<pubDate>Sat, 30 Apr 2011 08:49:45 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1226</guid>
		<description><![CDATA[Let me preface this by saying that I love the Open Source movement. I love Linux. I ran it for almost 10 years at home until my hardware dumped on me. I run a Mac now because I love BSD, Bash and Python. I have a passion for Open Source. I Open Source every script [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/04/stopPayingForBlender.jpg" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/04/stopPayingForBlender-300x104.jpg" alt="Stop Paying For Blender" title="Stop Paying For Blender" width="300" height="104" class="alignleft size-medium wp-image-1228" /></a>Let me preface this by saying that I love the Open Source movement. I love Linux. I ran it for almost 10 years at home until my hardware dumped on me. I run a Mac now because I love BSD, Bash and Python. I have a passion for Open Source. I Open Source every script I write under the 3-Clause BSD License because I want to give back to a community that&#8217;s given so much to me. This is a big part of who I am and I am <strong>VERY</strong> passionate about it. So this isn&#8217;t going to be a nice post. Nor do I care. Repackaging Open Source projects and selling them without doing anything is ethically wrong and it&#8217;s bull. That being said, let&#8217;s move on.</p>
<p>In the past few months I&#8217;ve gotten quite a few mentions on Twitter from people trying to get me to buy this product called &#8220;Illusion Mage&#8221;. I refuse to link to their site because I will <strong>NOT</strong> add into their web traffic. However, I will point you to <a href="http://www.blender.org">Blender.org</a> where you can get the same exact product that Illusion Mage is trying to <strong>SELL</strong> you.<span id="more-1226"></span> Yup. They&#8217;re selling you Blender. For $47 bucks you can buy their piece of software and you&#8217;ll get the EXACT same thing that you&#8217;d have gotten if you went to <a href="http://www.blender.org">Blender.org</a> and downloaded it&hellip; for free. People have put in countless hours creating this piece of software and have made it Open Source (<abbr title="GNU General Public License">GPL</abbr>) so that everyone can benefit from it&#8217;s awesomeness. Now I don&#8217;t use Blender a whole lot &#8211; mostly due to time constraints and various other things &#8211; but I&#8217;ve played with it and have seen what it can do and it is an amazing program. Their latest iteration has gone even further and addressed a much need UI change (and it looks beautiful). </p>
<p>Now them trying to sell you one piece of Open Source software is bad. It pisses me off &#8211; hence the post on it. But they don&#8217;t stop there. No. Instead they offer you up 3 other pieces of software for &#8220;free&#8221; when you buy their &#8220;Deluxe&#8221; package for $77! <strong>THOSE OTHER PROGRAMS ARE ALSO OPEN SOURCE!*</strong> <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-ah.png' alt=':o:' class='wp-smiley' /> (* Technically one is FreeWare, but it&#8217;s still free.) When I saw that I went from pissed to livid. They not only put them up there, but they assign a monetary value to all of the software. You can&#8217;t assign a monetary value to something that&#8217;s been worked on by a group of people from all over the world who give their time willingly and don&#8217;t charge for it. It&#8217;d be like your friends assigning a monetary value to the amount of time you talk to them.</p>
<p>So what are these bonus programs? First you get &#8220;The 3D Modeler&#8221;&#8230; Wait. Why? You can flipping model in Blender. Regardless, they &#8220;give&#8221; you <a href="http://www.k-3d.org/">K-3D</a> which is released under the <abbr title="GNU General Public License">GPL</abbr>. According to them it&#8217;s &#8220;A $97 Value&#8221;. Then you get &#8220;The Ultimate Toon Creator&#8221; which is <a href="http://www.creatoon.com/">CreaToon</a> which is released as FreeWare &#8211; and it will never be updated since it was released as FreeWare because it was discontinued. This particular program is &#8220;A $77 Value&#8221;. Next you get a &#8220;Sketcher&#8221; which is actually <a href="http://www.pencil-animation.org/">Pencil</a>. Calling this program a &#8220;Sketcher&#8221; is like calling Flash a drawing program. (Pencil is actually a really cool program that I&#8217;ve played with on and off since it was first released to the masses.) This one is &#8220;A $49 Value&#8221;. Finally, you get their &#8220;PickaColor&#8221; which is just a flipping color picker &#8211; and &#8220;A $24 Value&#8221;. No idea which one, but I know that the one I use in Firefox is <a href="https://addons.mozilla.org/en-us/firefox/addon/colorzilla/">ColorZilla</a> &#8211; which is supposedly licensed as FreeWare/Proprietary (although I couldn&#8217;t find anywhere an actual license for it &#8211; but I&#8217;ve contacted the author and will update this post when I find out).</p>
<p>What really gets me though is that this douchebag who&#8217;s selling this program (Seth Avery) probably has no flipping clue as to what it takes to make the things that we as 3D artists make! To do the things that we flipping do! To create anything other than a wack website selling stuff that other people have busted their ass to make! I take what I do seriously. Damn seriously. I have busted my ass to learn the things I have and so has everyone else in the 3D industry. There is no magic button click that makes a model, texture, rig, animation, light, camera or anything else. To quote Zach Lowery of Volition: &#8220;Making Video Games is really fucking hard&#8230;.Don&#8217;t let anyone lie to you.&#8221; That pretty much sums it up.</p>
<p>Now here&#8217;s the real kicker in this whole scheme. Several of the images on the site &#8211; helping to tout how awesome their version of Blender that you have to pay for is &#8211; (<a href="http://fc00.deviantart.net/fs43/i/2009/094/5/2/cottage_interior_too_by_ELFTUG.jpg">this one is an example</a>) were built in other programs! (That particular one was built and rendered in&hellip; 3DS Max!) Don&#8217;t believe me. Here&#8217;s an article on &#8220;<a href="http://naldzgraphics.net/inspirations/40-excellent-examples-of-interior-designs-rendered-in-3d-max/">40 Excellent Examples of Interior Designs Rendered in 3D Max</a>&#8221; and if you search for &#8220;ELFTUG&#8221; you&#8217;ll find that image fairly quickly. The image is also being used illegally, since on DA it says it&#8217;s copyright, not <abbr title="Creative Commons">CC</abbr> or <abbr title="GNU General Public License">GPL</abbr>. I didn&#8217;t go through all of the images, but I did for quite a few of them and you&#8217;ll find that most of them that don&#8217;t have the small ass &#8220;(C)2009 Blender Foundation Blender.org&#8221; were <strong>NOT</strong> built in Blender. I&#8217;ve put a few of the artists affected in the sources below and you can use <a href="http://TinEye.com">TinEye.com</a> to verify that many of the images were straight rips from 3DS Max, Wings, Maya and one is even a Photo-Manipulation!</p>
<p>Now if I wasn&#8217;t already heated, I go to their disclaimer page and it says this:</p>
<blockquote><p>
GNU GPL:</p>
<p>IllusionMage™ is proudly part of the Open Source movement. Open Source software gives you more flexibility in regards to how and where you can use the software. Main program is based on Blender and released as an open source GNU license. As a note please be aware that IllusionMage™ is a trademark and although this code is released under a generous open license the name and logo are not.</p>
<p>Please note the software, some content and images has been released under GNU GENERAL PUBLIC LICENSE Version 2, June 1991 .</p>
<p>Source code of these content and files is available to be downloaded from here</p>
<p>As per the license agreement, please note that there is no warranty for the program, to the extent permitted by applicable law. Except when otherwise stated in writing the copyright holders and/or other parties provide the program “as is” without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair or correction.
</p></blockquote>
<p>I believe that you are &#8220;&hellip;proudly part of the Open Source movement.&#8221; about as much as I believe that donkeys can sprout wings and crap nickels. Hiding behind Open Source so you can pretend like you care is weak. Plain and simple. You want to show people you believe in Open Source. Man up and release all &#8220;your&#8221; software for free. Kinda like it already is. Now the &#8220;Source code&#8221; that you can download is only for one of the programs that&#8217;s Open Source. Specifically, it&#8217;s for Blender version 2.50a1. So they&#8217;re giving you an alpha build to boot. </p>
<p>All-in-all it just pisses me off and I&#8217;m infuriated about it. I&#8217;m also a little tired now. Not because I was so mad, but because tracking down all the data is just time consuming and, to be honest, I&#8217;d rather be doing something else (I hear Python calling my name &#8211; and sleep is whispering to me too). But I feel like if I don&#8217;t stand up for what&#8217;s right, then who will? I&#8217;m sure there&#8217;s other people out there that would too, but when I look for reviews of this &#8220;software&#8221; I see glowing reviews. And that&#8217;s bs. Yeah the software is great. Of course it is. It&#8217;s flipping Blender!</p>
<p>Now before anyone says, &#8220;He can sell it. It&#8217;s perfectly legal.&#8221; I know that. I think it&#8217;s bs, but I know that. (One of the many flaws in the GPL IMO.) Which is why we need to be out there educating people who are interested in 3D <strong>before</strong> they make a purchase from an idiot like this one. Thanks everyone for reading and I promise we&#8217;ll get back to our regularly scheduled stuff soon. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-feel_good.png' alt=';)' class='wp-smiley' /> </p>
<p>Sources:</p>
<p>*Note* TinEye Results are only good for 72 hours after they&#8217;re created, so if you&#8217;re reading this post and it&#8217;s been more than 3 days, you&#8217;ll have to do it yourself. Sorry. :/</p>
<p>TinEye Image Results Used to Find/Confirm Software Titles:<br />
<a href="http://www.tineye.com/search/af2e9b35823b22e978f64398b7d3ec5f2d951be9/">Blender Image via TinEye</a><br />
<a href="http://www.tineye.com/search/49c5cc97b4ea880c8aee8731eb6da5b77144de5f/">K-3D Image via TinEye</a><br />
<a href="http://www.tineye.com/search/fc1aa71c6d9f2198209eaf0f4bc51f08217b2093/">CreaToon Image via TinEye</a><br />
<a href="http://www.tineye.com/search/cef734f873373fb8867cba6b8dfef529f0300240/">Pencil Image via TinEye</a></p>
<p>Individual Artists That Got Ripped:<br />
<a href="http://www.tineye.com/search/4d410eed3ce0a59771b5f5fe3c45da9e63de9a8a/">3D Rendering Image via TinEye</a><br />
<a href="http://kenzaf-khaleb31.deviantart.com/#/d15aync">Actual Image from above by smokejaguar on DeviantArt</a></p>
<p><a href="http://www.tineye.com/search/b336bdbef289da001a7f6f49b6cb300e294b95e6/">3D Editing &#038; Compositing</a><br />
<a href="http://elftug.deviantart.com/art/cottage-interior-too-118075779">Actual Image from above by ELFTUG on DeviantArt</a></p>
<p><a href="http://www.tineye.com/search/e03e983a1afab8cb82e398233a9c5ef85ac20a3c/">Complex 3D Shading</a><br />
<a href="http://zodiac-gemini.deviantart.com/art/Silent-Landscape-562944">Actual Image from above by zodiac-gemini on DeviantArt</a></p>
<p><a href="http://www.tineye.com/search/fdae99aadb6354d853217706336b624d6d03ada4/">Noob to Pro</a><br />
<a href="http://dozystock.deviantart.com/favourites/?offset=96#/d20s7tv">Actual Image from above by night-fate</a></p>
<p><a href="http://www.tineye.com/search/8bf873cd64576d15cb107820061bb665443385f8/">Lamborghini Murcielago</a><br />
<a href="http://www.reclame-mv.org/64-lamborghini-murcielago-picture">Actual Image from above by Yasmeen Jahan</a></p>
<p>Software:<br />
<a href="http://www.blender.org">Blender</a><br />
<a href="http://www.k-3d.org/">K-3D</a><br />
<a href="http://www.creatoon.com/index.php">CreaToon</a><br />
<a href="http://www.pencil-animation.org/">Pencil</a></p>
<p>Articles:<br />
<a href="http://naldzgraphics.net/inspirations/40-excellent-examples-of-interior-designs-rendered-in-3d-max/">40 Excellent Examples of Interior Designs Rendered in 3D Max</a></p>
<p> <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-extreme_sexy_girl.png' alt=':bloody:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2011/04/30/illusion-mage-sucks-or-stop-stealing-you/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Game Dev Questions and Twitter Awesomeness</title>
		<link>http://animateshmanimate.com/2011/04/26/game-dev-questions-and-twitter-awesomeness/</link>
		<comments>http://animateshmanimate.com/2011/04/26/game-dev-questions-and-twitter-awesomeness/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 08:09:00 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1221</guid>
		<description><![CDATA[Earlier in the day I had said I was going to be asking some questions from my game dev friends about stupid noobish things that folks who haven&#8217;t scored their first industry position (like myself) wouldn&#8217;t know. Below you&#8217;ll find a VERY lengthy thread that I managed to pull together from all the tweets. It [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/04/got_questions.jpg" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/04/got_questions-300x104.jpg" alt="Got Questions?" title="Got Questions?" width="300" height="104" class="alignright size-medium wp-image-1224" /></a>Earlier in the day I had said I was going to be asking some questions from my game dev friends about stupid noobish things that folks who haven&#8217;t scored their first industry position (like myself) wouldn&#8217;t know. Below you&#8217;ll find a <strong>VERY</strong> lengthy thread that I managed to pull together from all the tweets. It looks ugly and I don&#8217;t have the heart (or the willingness) to format it, so read it as you will. It was an <strong>AMAZING</strong> conversation with all types of folks working in all different studios chiming in. If you&#8217;re not on Twitter&#8230; You&#8217;re an idiot. <strong>THIS</strong> is the power of Twitter. Not finding out where Justin Bieber is or posting about how you threw up on the lawn or you ate a bowl of Cheerios. This is the &#8220;Social&#8221; and the &#8220;Networking&#8221; all-in-one. I found a new friend out of it and I crammed as much knowledge as I could into my brain over a 5+ hour period. Some parts have been cut out, but if you&#8217;re really interested (none of it&#8217;s bad, just funny, but irrelevant) go to any of the following folks Twitter accounts (or my own @ArrantSquid) and troll through the data. I want to give huge thanks to the following folks: @Smapdi (Chad Moore), @JonLogsdon (Jonathan Logsdon), @Anim8der (Tim Borrelli), @cgbeige (Dave Girard), @bclark_cgchar (Brad Clark), @MeatPlowz (Randall), @yantor3d (Ryan Porter), @tweetBoucha (Suchan), @riggingdojo (Rigging Dojo), @bentllama (Nate Walpole), @whiskeypail (M C) and @lightbombmike (Mike Jungbluth). They all threw their time and expertise into the mix at one point or another and I am very blessed to have such awesome friends who are willing to throw out their information for me to take in. So without further ado:<span id="more-1221"></span></p>
<h3>The long thread of game dev questions</h3>
<p>@ArrantSquid John P. Neumann<br />
When exporting animations for in game use, what are some limitations of the animated rig that should be accounted for? #gamedev #techart</p>
<p>@Smapdi Chad Moore<br />
@arrantsquid most engines are skeletal anim only (Fk on skeleton nodes). Joint count, therefore animated channels need pre-production</p>
<p>@JonLogsdon Jonathan Logsdon<br />
@ArrantSquid What engine are you using? Make sure to check the bone count and, depending on setup, the orientation</p>
<p>@JonLogsdon Jonathan Logsdon<br />
@ArrantSquid the CryEngine is VERY specific when it comes to setup and naming conventions</p>
<p>@ArrantSquid John P. Neumann<br />
@JonLogsdon I&#8217;m not using anything specific. I&#8217;m just looking for generalized info. Sorry I can&#8217;t be more specific. :/</p>
<p>@JonLogsdon Jonathan Logsdon<br />
@ArrantSquid Well, some engines will allow more freedom like Unreal. You can import iks and such. CryEngine, you need an export rig and control rig to drive the export because it reads the rotations of the joints for animations. Not iks</p>
<p>@ArrantSquid John P. Neumann<br />
@Smapdi So what happens if you&#8217;ve got an ik leg. Does that animation have to be retargeted to fk joints before export?</p>
<p>@Smapdi Chad Moore<br />
@arrantsquid regardless of source controller/system, the animations have to be baked to the &#8220;export&#8221; skeleton. use multiple skeletons.</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid @Smapdi usually the control rig (that has the IK leg) is driving an FK rig that the mesh is skinned to and exported</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der @smapdi oh snap! So my 3 skeleton setup is actually right! Damn! I did something without even knowing! Yay!</p>
<p>@cgbeige Dave Girard<br />
@ArrantSquid do you mean what&#8217;s lost on export? IK handles don&#8217;t work with FBX and curve wire controllers don&#8217;t parent from what I&#8217;ve seen.</p>
<p>@bclark_cgchar Brad Clark<br />
@cgbeige @ArrantSquid the new fbx format supports nurbs curves and more constraints, IK should work as well as it has the same solver now</p>
<p>@bclark_cgchar Brad Clark<br />
@ArrantSquid get the core skeleton and bind good, rig over top, can take core skeleton to anything, mocap, other apps, games etc&#8230;</p>
<p>@ArrantSquid John P. Neumann<br />
@bclark_cgchar @cgbeige is fbx data in a human readable format?</p>
<p>@bclark_cgchar Brad Clark<br />
@ArrantSquid @cgbeige fbx can export to ascii</p>
<p>@ArrantSquid John P. Neumann<br />
@bclark_cgchar @cgbeige @Anim8der @JonLogsdon Thanks everyone for the info! Ive got no engine exp so I wanted to get info on what 2 expect</p>
<p>@MeatPlowz Randall<br />
@ArrantSquid Fbx, .X- direct x, can be as well. These can be your intermediate formats that can be further optimized for a binary game file.</p>
<p>@yantor3d Ryan Porter<br />
@arrantSquid What to expect: pain and suffering.</p>
<p>@ArrantSquid John P. Neumann<br />
Thanks everyone! Alright, so a lot of the skeleton restrictions are engine specific. Are skeletons required to be fully connected?</p>
<p>@tweetBoucha Suchan<br />
@ArrantSquid you mean Hierarchy Structure for Skeleton, YES! No broken hierarchy here <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>@JonLogsdon Jonathan Logsdon<br />
@ArrantSquid yes, skeletons need to be fully connected and have a root joint (usually it is a hip joint)</p>
<p>@JonLogsdon Jonathan Logsdon<br />
@ArrantSquid CryEngine also has a joint at origin called &#8220;Bip01_Footsteps&#8221; which is for walking and running motions. It is child to the root</p>
<p>@MeatPlowz Randall<br />
@ArrantSquid Not necessarily, that&#8217;s mostly dependent on how the engine interprets your data. Most engines do prefer a proper hierarchy.</p>
<p>@ArrantSquid John P. Neumann<br />
@MeatPlowz @JonLogsdon @tweetBoucha Ok cool. Differing points, but it does seem engine dependent.</p>
<p>@ArrantSquid John P. Neumann<br />
Thanks everyone for the love with the questions. Trying to dispel bad information I&#8217;ve been given over the last few years.</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid the Hybrid skeleton has multiple roots, but the body is controlled by one of those hierarchies. Source engine can handle it.</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid 1 thing to note is multiple hierarchies in 1 character generally leads to more data as each root needs its own translation data</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der And you&#8217;re limited to the amount of animation data in-engine correct?</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid yeah, console games have finite memory, so depending on the game, anim memory can vary greatly. Bone count factors in to this.</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der Got it. That&#8217;s what I had thought. I really need to just make a flipping game my damn self. Been doing pre-production for one.</p>
<p>@bclark_cgchar Brad Clark<br />
@ArrantSquid yup what @Anim8der said, char cost- bone count+influncePerVert+TRS-xyz anim channel,each +cost. non-uni scale and morphs heavy</p>
<p>@Anim8der Tim Borrelli<br />
@bclark_cgchar @ArrantSquid yeah forgot about bones per vert. Always fight for at least 3, it&#8217;s more affordable than coders initially think</p>
<p>@JonLogsdon Jonathan Logsdon<br />
@ArrantSquid @anim8der most engines have a max of 4 bones per influence when binding. But there are few that are more lenient. 3 is safe</p>
<p>@Anim8der Tim Borrelli<br />
@JonLogsdon @ArrantSquid honestly, the need for more than 4 is rare. Probably find it more now with volume bones, cloth across limbs &#038; hair</p>
<p>@JonLogsdon Jonathan Logsdon<br />
@Anim8der @arrantsquid yea, I normally keep it on 4 per influence for UE, CE, and Infernal. Except with the Multiverse engine.</p>
<p>@ArrantSquid John P. Neumann<br />
@JonLogsdon @Anim8der Got it. So 4 or lower and 3 to be safe. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> Definitely a good tip for #skinning.</p>
<p>@JonLogsdon Jonathan Logsdon<br />
@ArrantSquid I&#8217;d read up on the different bone limits for the different engines. They all differ</p>
<p>@ArrantSquid John P. Neumann<br />
@JonLogsdon Got it. Definitely will do. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> Thanks for the help and info.</p>
<p>@riggingdojo Rigging Dojo<br />
Another #tweettorial on game rigging read @ArrantSquid @cgbeige @Anim8der @Smapdi @bclark_cgchar @MeatPlowz @JonLogsdon #fsgd #rigTip</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid oh another factor- anim compression. Lowers memory cost at cost of quality. happy medium can be found tho</p>
<p>@bentllama nate walpole<br />
@Anim8der @ArrantSquid &#8216;animation compression&#8217; and &#8216;happy&#8217; never belong in the same sentence. try this: &#8216;acceptable casualties&#8217; <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-feel_good.png' alt=';)' class='wp-smiley' /> </p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @ArrantSquid if you work with the right engineers, happy exists. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>@ArrantSquid John P. Neumann<br />
@bentllama @Anim8der LoL. So what losses do you experience with the animation compression?</p>
<p>@bentllama nate walpole<br />
@ArrantSquid @Anim8der losses? sanity, hair, time with wife and kids, a sense of moral turpitude&#8230;the list varies by person and project.</p>
<p>@bentllama nate walpole<br />
@Anim8der @ArrantSquid I won&#8217;t be happy until bezier tangents exist real-time. #setTheBarHigh</p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @ArrantSquid they do in some engines&#8230; Just not all. And they come at a processing cost</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid @bentllama generally anims lose fidelity. linear motion, foot shake, shaky overall. a good coder can eliminate those issues</p>
<p>@bentllama nate walpole<br />
@Anim8der @ArrantSquid some of those issues are resolved through runtime foot IK and successive compression down a hierarchy</p>
<p>@bentllama nate walpole<br />
@Anim8der @ArrantSquid preaching to the choir. I can&#8217;t wait until it is the norm, even for min spec.</p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @ArrantSquid yeah, more comp down the hierarchy works wonders. Also, being able to change comp per move is nice.</p>
<p>@bclark_cgchar Brad Clark<br />
@bentllama @Anim8der @ArrantSquid can compress bg chars/ and upper bodies, lower bodies/root feet slip- in comes HIK/runtime rigs to fix,</p>
<p>@bentllama nate walpole<br />
@Anim8der @ArrantSquid U will also be surprised as to what LOD distance based compression can do for runtime savings. #obstinant</p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @ArrantSquid ooh yeah. Bone &#038; anim comp LODs based on distance are good &#038; don&#8217;t process off-screen chars aside from root for AI</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der @bentllama So compression on a per joint/hierarchy basis isn&#8217;t always available?</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid @bentllama nope. At Volition we had it, but with Source engine, it&#8217;s just a blanket compression AFAIK</p>
<p>@bentllama nate walpole<br />
@ArrantSquid @Anim8der It isn&#8217;t always efficient for production. it can be a bear to babysit and even interns can use their time more wisely</p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @ArrantSquid yeah I don&#8217;t think we used per-bone comp after the Punisher&#8217;s title at all. We just improved the comp algorithm</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der @bentllama See that&#8217;s the type of stuff I&#8217;d LOVE to work on. Give me the hard crap to fix. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> I LOVE a challenge.</p>
<p>@bentllama nate walpole<br />
@ArrantSquid @Anim8der best to adhere to an agreed base. you have your known then smoke test your own work repeatedly to look for offenders</p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @ArrantSquid good thing in Skin for Max- can set the bones per vert limit in the plugin. Automatic smoke test!</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der @bentllama You can do that in Maya too. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-feel_good.png' alt=';)' class='wp-smiley' /> </p>
<p>@ArrantSquid John P. Neumann<br />
@bentllama @Anim8der Sounds like what I had to do with web dev. Do a build knowing parts would fail and fix thosse little parts.</p>
<h3>We went WAY off track here at some point and it got really funny, but we got back to things eventually</h3>
<p>@bentllama nate walpole<br />
@whiskeypail @Anim8der @ArrantSquid if it&#8217;s broke you pick up a wrench. if you can&#8217;t fix it, you have something to slug a programmer with&#8230;</p>
<p>@bentllama nate walpole<br />
@Anim8der @ArrantSquid you&#8217;ll find the limit in most commercial and private engines these days is 4 per transform</p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @ArrantSquid yeah. 4 is great, but 3 will get the job done. As long as there is no cloth or 5-bone clav setup <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>@ArrantSquid John P. Neumann<br />
@bentllama @whiskeypail @Anim8der Sounds like how I work on cars. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>@bentllama nate walpole<br />
@ArrantSquid @whiskeypail @Anim8der If a hammer can&#8217;t fix it, it&#8217;s electrical.</p>
<p>@bclark_cgchar Brad Clark<br />
@bentllama @ArrantSquid @whiskeypail @Anim8der and then when you run out of room for characters,cut particles and audio, they love that! not</p>
<p>@ArrantSquid John P. Neumann<br />
@bclark_cgchar @bentllama @whiskeypail @Anim8der Just cut the textures. Make everything grey.</p>
<p>@bclark_cgchar Brad Clark<br />
@ArrantSquid @bentllama @whiskeypail @Anim8der I fixed a harddrive by hitting it with a hammer to get it to boot, get my data, then it died!</p>
<p>@bclark_cgchar Brad Clark<br />
@Anim8der @bentllama @ArrantSquid *except the maya tools barf all over maxInflence lock on Maya SkinCluster, leave it off for sanity sake.</p>
<p>@ArrantSquid John P. Neumann<br />
@bclark_cgchar @Anim8der @bentllama Yeah i&#8217;ve had that issue MANY times.</p>
<p>@bentllama nate walpole<br />
@Anim8der @ArrantSquid Dual Quat is for winners. #quad-winning #manticoreBlood</p>
<p>@ArrantSquid John P. Neumann<br />
@bentllama @Anim8der But keeping it to 3 would make the animation itself smaller resulting in a possible better compression</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid @bentllama actually the 3 or 4 doesn&#8217;t affect anim data, just processing on the character and char mesh data size</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der @bentllama But wouldn&#8217;t the anim data be reliant on the mesh data, so it&#8217;s still adding into that call correct?</p>
<p>@bentllama nate walpole<br />
@ArrantSquid @Anim8der seperate calls, but anim is usually the one to lose over other graphics calls. #jealousDisciplines</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid @bentllama Engines separate the 2, so I THINK (not sure) the gpu handles mesh deformation and CPU handles anim processing</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der @bentllama Ok. Still trying to get all the info I can in one sitting. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> Probably not a great idea, but I learn the best like this</p>
<p>@ArrantSquid John P. Neumann<br />
@bentllama @Anim8der This is just my logic: AnimData is reliant on the skin data, so it just makes me think that lower counts = lower anim</p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid @bentllama anim data is typically bone transforms ignoring skin data so anims can be used on different meshes w/ same skin data</p>
<p>@bentllama nate walpole<br />
@Anim8der @ArrantSquid world space quats. not as sexy as @Anim8der &#8216;s quads, but I digress.</p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der @bentllama OK. That makes sense then.</p>
<p>@bclark_cgchar Brad Clark<br />
@ArrantSquid anim data is reliant on skeleton, deformation is dealt with as a sep. system/cpu/shader/etc. they both happen to ref. the bone</p>
<p>@ArrantSquid John P. Neumann<br />
@bclark_cgchar Ok. It&#8217;s all starting to come together. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>@Anim8der Tim Borrelli<br />
@ArrantSquid @bentllama the char mesh data has bones in bind pose plus vert weights (where bones per vert is stored) and textures</p>
<h3>We move onto a new subject, namely life drawing and got off track a bit at times, but that&#8217;s what we do. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </h3>
<p>@whiskeypail m c<br />
@Anim8der @bentllama @lightbombmike @ArrantSquid serious question: how many of you have taken a life drawing course?</p>
<p>@Anim8der Tim Borrelli<br />
@whiskeypail @lightbombmike @ArrantSquid @bentllama once a year thru college, V had weekly life drawing that I intermittently attended</p>
<p>@lightbombmike Mike Jungbluth<br />
@whiskeypail @Anim8der @bentllama @ArrantSquid I took them all throughout school (went for 2d animation) Only went a few times since.</p>
<p>@ArrantSquid John P. Neumann<br />
@whiskeypail @Anim8der @bentllama @lightbombmike I&#8217;ve actually taken 3. And my drawings were terrible. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> Hand cant connect to my head. :/</p>
<p>@bentllama nate walpole<br />
@whiskeypail @Anim8der @lightbombmike @ArrantSquid 6 times a week back at Sheridan in Classical Animation. Once a week now.</p>
<p>@ArrantSquid John P. Neumann<br />
@whiskeypail @Anim8der @bentllama @lightbombmike I&#8217;ve been trying to set aside Thursdays for life drawing, but I&#8217;m so bad I hate doing it</p>
<p>@bclark_cgchar Brad Clark<br />
@whiskeypail @Anim8der @bentllama @lightbombmike @ArrantSquid &#8212; I have and continue to do it when I can, life drawing is great for TDs</p>
<p>@Anim8der Tim Borrelli<br />
@whiskeypail @lightbombmike @ArrantSquid @bentllama hoping to get space at 5th cell to do them again</p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @lightbombmike @ArrantSquid @whiskeypail I got in trouble in 1 session of a class in school once for drawing only action lines</p>
<p>@bentllama nate walpole<br />
@Anim8der @lightbombmike @ArrantSquid @whiskeypail I got in trouble for a page of penises. We all have our foibles.</p>
<p>@Anim8der Tim Borrelli<br />
@bentllama @lightbombmike @ArrantSquid @whiskeypail I didn&#8217;t know what to say So I shut up &#038; stopped. Form is fine, but action lines matter</p>
<p>@ArrantSquid John P. Neumann<br />
@bclark_cgchar @whiskeypail @Anim8der @bentllama @lightbombmike Think I&#8217;m gonna start drawing out of books instead</p>
<p>@bentllama nate walpole<br />
@ArrantSquid @bclark_cgchar @whiskeypail @Anim8der @lightbombmike start with Loomis.</p>
<p>@ArrantSquid John P. Neumann<br />
@bentllama @Anim8der @lightbombmike @whiskeypail Tried drawing devil horns on a model. She wasn&#8217;t amused with my marker in hand next to her</p>
<p>@ArrantSquid John P. Neumann<br />
@bentllama @bclark_cgchar @whiskeypail @Anim8der @lightbombmike Will do. Really just want to study bone and muscle structure more. #goodtd</p>
<p>@bentllama nate walpole<br />
@ArrantSquid @bclark_cgchar @whiskeypail @Anim8der @lightbombmike :: LOOMIS here: http://bit.ly/m8ko2 #goodtd</p>
<p>@bclark_cgchar Brad Clark<br />
books are fine @ArrantSquid , only matters is that your working on your observation and your eye for interpreting detail. #1000baddrawings</p>
<p>@bclark_cgchar Brad Clark<br />
@bentllama @ArrantSquid @whiskeypail @Anim8der @lightbombmike this is one of my top fav right now http://bit.ly/gSzs4w #goodtd #rigTip</p>
<p>@ArrantSquid John P. Neumann<br />
@bclark_cgchar @bentllama @whiskeypail @Anim8der @lightbombmike Both of those are hawt. I got randompose on my iphone too <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>@whiskeypail m c<br />
@Anim8der @bentllama @lightbombmike @ArrantSquid amazed. most demos we get=no life drawing experience. animation mentor&#8217;s fault. half joking</p>
<p>bclark_cgchar Brad Clark<br />
@bentllama @ArrantSquid @whiskeypail @Anim8der @lightbombmike Once a year I read the Illusion of life and draw my way through anatomy book</p>
<p>@Anim8der Tim Borrelli<br />
@whiskeypail @lightbombmike @ArrantSquid @bentllama fwiw, I have nothing demo reel worthy for life drawing. I cringe at my work <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>@ArrantSquid John P. Neumann<br />
@Anim8der @whiskeypail @lightbombmike @bentllama I&#8217;m with you on that Tim. My drawing skills are bad, but I can translate it to what I do.</p>
<p>@bclark_cgchar Brad Clark<br />
@Anim8der @whiskeypail @lightbombmike @ArrantSquid @bentllama Your LD skils don&#8217;t have to be amazing, just the act of doing it improves you</p>
<p>@Anim8der Tim Borrelli<br />
@bclark_cgchar @bentllama @whiskeypail @ArrantSquid @lightbombmike oh you have me beat there. I should break out IOL this week</p>
<p>@bentllama nate walpole<br />
@bclark_cgchar @ArrantSquid @whiskeypail @Anim8der @lightbombmike http://bit.ly/e2aBGY #goodtd #rigTip</p>
<p>@whiskeypail m c<br />
@ArrantSquid @Anim8der @lightbombmike @bentllama just think most animation mimics life. need understanding of life to do so.</p>
<p>@Anim8der Tim Borrelli<br />
@whiskeypail @bentllama @ArrantSquid @lightbombmike also, need _A_ life to do so <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>@ArrantSquid John P. Neumann<br />
@whiskeypail @Anim8der @lightbombmike @bentllama Agreed. I think that&#8217;s been said time and again by most everyone here.</p>
<p>@ArrantSquid John P. Neumann<br />
@whiskeypail @bentllama @lightbombmike @Anim8der @JonLogsdon @bclark_cgchar @Smapdi @cgbeige @MeatPlowz Thank all of you for your insight!</p>
<p>@whiskeypail m c<br />
@ArrantSquid @Anim8der @lightbombmike @bentllama hell. this calls for a life drawing post soon&#8230;mostly as it applies to design, though&#8230;</p>
<h3>Conclusions?</h3>
<p>We&#8217;re insane. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> No the conclusion I got from this were two-fold: 1) Tech Art has tons of variables and things and most of what I was taught at school about animations and games was rubbish (although not all of it was bad); and 2) Twitter is probably the best social networking site out there for game devs, film folks, animators, tech artists, whatever. To be fair, I knew the latter point already (I&#8217;d never be where I&#8217;m at right now if it weren&#8217;t for almost that entire list I posted at the beginning), but it&#8217;s still relevant. How many nobody&#8217;s (that&#8217;s who I am right now &#8211; a nobody) have gotten to have drinks with folks in the industry? Or gotten jobs sent to them from people that they&#8217;ve never met? I have. And it&#8217;s because I&#8217;ve busted my ass getting what I do out there and trying to share the love and info I can to everyone else. I&#8217;m not saying this because I think I&#8217;m awesome, because I&#8217;d <strong>NEVER</strong> claim that (I&#8217;m good at what I do, but I stand in the shadow of giants). I&#8217;m saying it because those opportunities would never have been available to me had I not put myself out there on Twitter and put the information up here that I do. [steps off soapbox] Sorry about that. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> Just passionate about getting more game dev students and the such out there so everyone can rise up and be great.</p>
<p>As always, thanks for reading and hopefully you got something from this. I know I did! Cheers! <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-extreme_sexy_girl.png' alt=':bloody:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2011/04/26/game-dev-questions-and-twitter-awesomeness/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>From Maya to Houdini &#8211; Modeling &amp; Texturing Tutorial</title>
		<link>http://animateshmanimate.com/2011/04/18/from-maya-to-houdini-modeling-texturing-tutorial/</link>
		<comments>http://animateshmanimate.com/2011/04/18/from-maya-to-houdini-modeling-texturing-tutorial/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 01:13:16 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[Houdini]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Screencasts]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1211</guid>
		<description><![CDATA[So in my last post on Houdini George had asked about whether or not I&#8217;d be getting more into Houdini. I really want to get into the rigging and skinning with it, but unless I can figure out why Houdini is constantly crashing I don&#8217;t know how effective I&#8217;m going to be. I also noticed [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/04/HoudiniModeling.jpg" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/04/HoudiniModeling-300x104.jpg" alt="From Maya to Houdini - Modeling, UV Layout and Texturing" title="From Maya to Houdini - Modeling, UV Layout and Texturing" width="300" height="104" class="alignleft size-medium wp-image-1212" /></a>So in my last post on Houdini George had asked about whether or not I&#8217;d be getting more into Houdini. I really want to get into the rigging and skinning with it, but unless I can figure out why Houdini is constantly crashing I don&#8217;t know how effective I&#8217;m going to be. I also noticed that there are a fair bit of threads regarding Houdini crashing and I had a few folks tell me they stopped learning it because it was so crash prone (most had Mac&#8217;s as well so I&#8217;m wondering if it&#8217;s OSX specific), so I&#8217;m not the only one.</p>
<p>Alright. Let&#8217;s get to what this post really is about. I decided to jump on how to make a basic (and craptacular I might add) model in Houdini, layout uv&#8217;s and add a texture to it. I decided to see if a video tutorial would work and I gotta be honest, it&#8217;s a lot harder to tweak it out when your After Effects render takes 3 hours or if you screw something up or if it crashes or your kids are going to sleep, etc. I enjoyed doing it and I think it went well, but there are some addendums that need to be pointed out. Also, if you&#8217;re short on time, sorry. The video is about 45 minutes long. (The completed files can be found at the bottom.) So before you delve into it here&#8217;s what it is, isn&#8217;t and some extra notes.<span id="more-1211"></span></p>
<blockquote><p>
What this tutorial is:<br />
It&#8217;s aimed at users who are coming from Maya and are trying to figure out how Houdini works in regards to modeling and texturing. It goes over the basics of creating objects, adding edges, merging verts, manipulating the geometry, extruding geometry, creating uv layouts, creating uv maps to paint, creating basic materials and putting it altogether.</p>
<p>What it isn&#8217;t:<br />
A tutorial on how to model &#8211; and if this is your level of modeling, I suggest you look into another area of 3D. I&#8217;ll show you the tools and how to use them and we&#8217;ll come up with a crappy model at the end of it. I&#8217;m not a modeler, nor do I enjoy doing it, but some folks are interested in how to make the transition from Maya to Houdini so I figured I&#8217;d make a video on it. It also isn&#8217;t the be all and end all of modeling tutorials and there are some issues which are pointed out below.</p>
<p>Addendum:<br />
My voices volume drops at one point till the end of the video. I apologize for this, but my wife and kids had just gone to sleep so i had to lower my decibel &#8211; we all live in one room.</p>
<p>In the mirror part of the tutorial I turned the normal option to &#8220;No&#8221; and we subsequently got that ugly black line in there. The normals need to be put on &#8220;Reverse&#8221; and that&#8217;ll go away.</p>
<p>You can smooth the geometry after applying the material without any issues that I saw. However, I don&#8217;t know if that would apply across all models.
</p></blockquote>
<p>And if you&#8217;ve now got the time and are still interested, here ya go!</p>
<p><a href="http://www.youtube.com/watch?v=nIMqFFt8r2o&#038;fmt=18">http://www.youtube.com/watch?v=nIMqFFt8r2o</a></p>
<a href="http://animateshmanimate.com/scriptDownloads/modelingTutorial.zip" title="Houdini Modeling Tutorial - 1.0.0">Houdini Modeling Tutorial - 1.0.0</a> - Downloaded 43 times
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2011/04/18/from-maya-to-houdini-modeling-texturing-tutorial/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>From Maya to Houdini and L-Systems</title>
		<link>http://animateshmanimate.com/2011/04/15/from-maya-to-houdini-and-l-systems/</link>
		<comments>http://animateshmanimate.com/2011/04/15/from-maya-to-houdini-and-l-systems/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 05:26:40 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[Houdini]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1192</guid>
		<description><![CDATA[I recently had the opportunity to do an art test in a program I&#8217;ve never used before: Houdini. I&#8217;m going to share a bit of the knowledge that I got from this experience to help anyone else out, because to be honest&#8230; This program is a bit of a pain in the ass. I only [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/04/MayaToHoudini.jpg" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/04/MayaToHoudini-300x104.jpg" alt="Maya To Houdini" title="Maya To Houdini" width="300" height="104" class="alignright size-medium wp-image-1198" /></a>I recently had the opportunity to do an art test in a program I&#8217;ve never used before: Houdini. I&#8217;m going to share a bit of the knowledge that I got from this experience to help anyone else out, because to be honest&hellip; This program is a bit of a pain in the ass. I only had about a total of 24-30 hours with it, and modeling took quite a big chunk of that &#8211; I am not a great modeler and I admit that freely; I can do it, but someone else will do it WAY quicker and better; It&#8217;s like asking a modeler to write python. They&#8217;ll get it done, but how good will it be and how long will it take them &#8211; so take these notes as you will.  I&#8217;m gonna talk about what I liked, what I didn&#8217;t like and some of the things that I found useful or helpful. If you want, you can download a free functioning copy of Houdini Apprentice from <a href="http://www.sidefx.com/index.php?option=com_content&#038;task=view&#038;id=589&#038;Itemid=221" title="Houdini Apprentice">SideFx.com</a>.  If you&#8217;re a tech artist, I&#8217;m going to talk about a lot of stuff generally, but feel free to comment and I can answer any questions you have. If you&#8217;re really interested in a particular subject, let me know and I&#8217;ll do my best to write up a post about it. So without further ado, let&#8217;s start off with the big differences. (If you&#8217;re just interested in the L-Systems stuff hop to the bottom)<span id="more-1192"></span></p>
<h3>The Big Differences</h3>
<p>There are three big differences that I noticed. The first being how you moved about in the viewport/switch viewports; the second being that hotkeys are case sensitive; and the third being how you create things within Houdini. In Maya you simply use your mouse buttons and the alt key. In Houdini, you&#8217;ll use the space key and the same mouse buttons. If you&#8217;re a Maya user, you&#8217;ll notice a problem with this. Space is for switching between views, not dollying and tracking. Well in Houdini to switch, you have to use space+b and <strong>it has to be the little b</strong>. If you&#8217;ve got caps lock on, you&#8217;re not going anywhere with it. Which is, frankly, annoying as hell. For my art test I was writing an L-System (more on that later) and everything is typed with capital letters. That makes doing things rather annoying. Copy and Paste will not work with caps lock on either. I figured this out after an hour or two of manually typing code back and forth and had begun using Textmate as my coder rather than Houdini. </p>
<p>Also, to move consistently throughout the scene with the camera you have to hit escape and you&#8217;ll automatically be in a mode that doesn&#8217;t allow you to select any object, just move around the scene. The hotkeys are also different than Maya&#8217;s, but that was to be expected. The last big difference was how you created objects. You <strong>can</strong> make most objects simply by clicking on a shelf button and clicking in the viewport, but where Houdini <strong>really</strong> shines is it&#8217;s node based toolset. Basically it works like this. You&#8217;ve got this area that looks like the connection editor in Maya. If you hit tab over it you&#8217;re presented with a marking menu that allows you to select to create something. </p>
<p>This was a handy little area and I actually spent very little time in the viewport because of this. I created my entire model for the L-System through nodes &#8211; aside from tweaking some verts here and there for the model and the UV &#8211; and all my materials were done the same way. I really found a lot of it very intuitive for my technically inclined mind. I was able to convert my nurbs to poly&#8217;s, output it to tris or quads, add more tris/quads or less and edit the meshes very easily and intuitively. Most of that can actually be done from one node (convert) and it really was <strong>a lot</strong> of fun to work with.</p>
<h3>What I Didn&#8217;t Like</h3>
<p>First off their documentation is horrible. It may have just been me and my newness to the program, but getting the info I actually needed from their docs was mind numbing and painful. The actual search process was nicely laid out, but most of the info was intended for users that were not new to the program (There was a saving grace, but we&#8217;ll get to that). I hated that everything was case sensitive. It made everything such a pain that I kept having to switch caps lock on and off just to do a simple copy and paste. What was really frustrating was where the UV Editor was. It&#8217;s an option in the viewport. There&#8217;s no documentation that I found on that. I spent a good 15 minutes on google trying to find that out. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-choler.png' alt=':choler:' class='wp-smiley' /> And to save out a UV Map, you right click on the UV unwrap (or edit if you&#8217;ve edited it) and there&#8217;s an option in the middle of the menu that comes up that says something along the lines of &#8220;save uv&#8221; or something like that. Again, where&#8217;s the doc&#8217;s on that? Creating materials is another gripe here. </p>
<p>The documentation on doing this is poor and dated. Most of it is actually centered around 9.5 and a lot of the things available in 9.5 aren&#8217;t even there by default in 11. And unhiding them requires you to open their version of the script editor and type in opunhide BaseNode nodename. To find out which are hidden you can pass ophide with nothing after it. But if you unhide everything, get ready for a crash. Which brings me to my <strong>biggest</strong> issue. The amount of crashes I encountered. </p>
<p>Now we&#8217;ve all worked with Maya. It&#8217;s prone to crashing and at inopportune times and at times fairly frequently. I crashed a total of 25 times during the 24 hour period (total) that I worked with Houdini &#8211; combined from both my crashes on OSX and on Windows. I had switched from my technologically inferior MacBook Pro to my custom-built overclocked 64-bit Windows 7 PC and found that it actually ran <strong>WORSE</strong> on there and crashed more often (so I went back to my Mac after 10 minutes). Now don&#8217;t get put off yet, because Houdini &#8211; while annoying &#8211; is actually really awesome. So let&#8217;s move onto what I thought was awesome.</p>
<h3>What I Liked (What Was Awesome)</h3>
<p>Well I&#8217;m a sucker for that node-based workflow. That really had me in love with it from the jump. I was able to quickly iterate through things and test quickly by just throwing different nodes at different objects and get live results. If you&#8217;ve used something like Shake before, I&#8217;m sure you&#8217;re familiar with this, but I have not so it was an all new ballgame. And while it&#8217;s similar to the connection editor, it blows Maya&#8217;s connection editor out of the water with it&#8217;s robustness. In Maya we really take for granted what just happens automagically. In Houdini you don&#8217;t get that and that&#8217;s a good and a bad thing. It&#8217;s good because you take care in what you&#8217;re doing, but it&#8217;s bad because the docs suck. </p>
<p>The one place where the doc&#8217;s semi-shined was in the video tutorials they have for beginners. But I say semi, because the nodes they use to make the shaders for the objects isn&#8217;t even in 11 anymore (which I mentioned before). Instead you have to create a Shop Network and then open up the material editor and drag one in (or you can write your own vex shader, but I wasn&#8217;t about to get into that on top of everything else). The workflow for everything seemed intuitive once I figured out where things were located and how to actually get around. Had my machine not choked and crashed on everything I would have attempted a lot more with the L-Systems. Which I guess we should talk about real quick.</p>
<h3>L-Systems</h3>
<p>So L-Systems were actually created in the late 60&#8242;s by some dude. There&#8217;s your history on it. Basically it&#8217;s a fractal based generator that was invented to study the growth of plants. It&#8217;s implementation in Houdini is really well done because they&#8217;ve made it very easy to get polygonal geometry out of it. Some issues I had with it were naming variables certain ways, and some variables overriding other variables. I&#8217;m not gonna get full blown into this (I&#8217;ll save that for another post), but here&#8217;s a few quick examples. Let&#8217;s get some code:</p>
<pre class="brush: python; title: ; notranslate">
X
X=F[+F][-F]X
</pre>
<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/04/simpleLSystem.jpg" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/04/simpleLSystem-181x300.jpg" alt="Simple L-System" title="Simple L-System" width="181" height="300" class="alignleft size-medium wp-image-1195" /></a>Alright. The first part is a premise. It&#8217;s basically saying &#8220;This is our start&#8221;. The second line is saying. This is what &#8220;X&#8221; actually is. F moves the lines forward, while f moves the line forward without drawing an actual line. Brackets say, &#8220;Go back to the line after we&#8217;re done doing what we do here in the brackets&#8221;. So +F says, &#8220;Draw in the positive X direction (or right side, whatever)&#8221; and -F says, &#8220;Draw in the negative X direction (or left side)&#8221;. Finally we call X again. Why? Because there&#8217;s this thing called generations that&#8217;s there. It tells you how many times this particular L-System is going to grow. So for each generation we call X, which calls the commands. The pretty picture of the output of said system is what&#8217;s being displayed in this paragraph. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>Ok. So it does that. You get a little Charlie Brown-esque tree. It&#8217;s a simple language and the concept is simple, but putting it into practice can be very complex at times especially if you&#8217;re looking for a certain look or feel of something. In my tests I tried to create a single flower and I have to say that while I was successful, it wasn&#8217;t extensible and it didn&#8217;t have the ability to variate very much because you&#8217;re looking to create something very fixed. With that in mind, here&#8217;s a more varied example that shows some of what you can do.</p>
<pre class="brush: python; title: ; notranslate">
X
X=/(137.5)~(2)F[+A]F[-A]X
A=$F[+F][-F]B
B=!F[^F][&amp;F]
F=&quot;(1.001)F
</pre>
<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/04/moreComplexLSystem.jpg" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/04/moreComplexLSystem-181x300.jpg" alt="More Complex L-System" title="More Complex L-System" width="181" height="300" class="alignright size-medium wp-image-1196" /></a>Bunch of new stuff here. Ok. First is the premise as before &#8220;X&#8221;. Next X is rolling counter-clockwise (that&#8217;s what &#8220;/&#8221; does) by 137.5 &#8211; which there seems to be some mathematical reasoning, but I never read the whole thing on why it&#8217;s 137.5. There&#8217;s tons of info on it, but I&#8217;ll be honest, every Ph.D. written paper that I read through to figure this stuff out used it and I figure they&#8217;re smarter than me, so I took it for what it was worth. Next we use the &#8220;~(2)&#8221;. The tilde sign indicates that we want some randomization here with the pitch, roll and turn. We limit that randomization by using the (2) so it doesn&#8217;t go hog wild since the default is 180 degrees. Then we tell it to move forward, call +A, move forward call -A and then call X again. &#8220;A&#8221; is then defined and we&#8217;ve got the $F thing. &#8220;$&#8221; means to rotate the point so the up vector is (0,1,0), but when we call it with &#8220;F&#8221; we&#8217;re telling it to match the up vector of &#8220;F&#8221; so we get some nice rotation on it. If you take it out, you&#8217;ll see the difference better. </p>
<p>Then we do the standard +F and -F and then call B. &#8220;B&#8221; starts with the !F, which means we want the thickness to actually decrease here. The actual definition for ! is that we multiply the current thickness by F, which since it&#8217;s a sub generation is going to be lesser, so we get thinner branches. We could have done the same with the previous line, but I just wanted to go over most of the commands quickly. Okay, so now we&#8217;ve got the carat symbol &#8220;^&#8221;. That means we want it to pitch down so we&#8217;re telling &#8220;F&#8221; to pitch down. Then we go to the ampersand &#8220;&amp;&#8221;, which means to pitch up. Then we&#8217;ve got that magical line at the bottom. That last line is saying that we want F to continually grow with concurrent generations by using the &#8221; symbol (That&#8217;s a double quote and yes there&#8217;s only one of them &#8211; I kept putting 2 single quotes for a while because my programming mind said that a single double quote was wrong <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> ). So at generation 1 if the length is .5 then by generation 2 it would be .5005. And that&#8217;s that. Those are most of the commands and as you can see we get a cool little tree outta it.</p>
<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/04/moreComplexLSystemGeo.jpg" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/04/moreComplexLSystemGeo-151x300.jpg" alt="More Complex L-System Geo" title="More Complex L-System Geo" width="151" height="300" class="alignleft size-medium wp-image-1197" /></a>Here&#8217;s a version with some &#8220;leaves&#8221; and &#8220;flowers&#8221; with I added by utilizing the J and K inputs and adding them to the rules. I also colored it just using color nodes after deleting the ones I wanted and then merging them altogether. The geo of the branches are just tubes because I didn&#8217;t feel it was necessary to create an actual Polywire SOP node for an example.</p>
<p>So that&#8217;s that. This was quite a bit longer than I expected, but I hope some of it was at least helpful if nothing else. L-Systems and Houdini are very cool. I know there&#8217;s a Mel script out there that does Mel systems in Maya and I&#8217;m curious to try it out and see what it&#8217;s limitations are. I&#8217;d really like it if Maya had some type of node based workflow like this. I know there&#8217;s the Hypershade and the Connection Editors, but neither are as fully fleshed out as Houdini&#8217;s.</p>
<p>As always, thanks for reading and I hope you got something from it! <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-extreme_sexy_girl.png' alt=':bloody:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2011/04/15/from-maya-to-houdini-and-l-systems/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Python Nurbs Curve Deconstructor &#8211; Awesomified</title>
		<link>http://animateshmanimate.com/2011/04/03/python-nurbs-curve-deconstructor-awesomified/</link>
		<comments>http://animateshmanimate.com/2011/04/03/python-nurbs-curve-deconstructor-awesomified/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 03:48:59 +0000</pubDate>
		<dc:creator>John Neumann</dc:creator>
				<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Python Scripts]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://animateshmanimate.com/?p=1181</guid>
		<description><![CDATA[So I was sitting around with my buddy Eel (aka Eric, which most people call him, but I&#8217;ve been calling him Eel so long that my parents and their friends call him that as well) on Saturday and we were chatting Python and so I showed him my Python Curve Deconstructor script and started talking [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://animateshmanimate.com/wp-content/uploads/2011/04/pythonNurbsCurveDeconstructor.jpg" rel="lightbox-post"><img src="http://animateshmanimate.com/wp-content/uploads/2011/04/pythonNurbsCurveDeconstructor-300x104.jpg" alt="Python Nurbs Curve Deconstructor" title="Python Nurbs Curve Deconstructor" width="300" height="104" class="alignleft size-medium wp-image-1183" /></a>So I was sitting around with my buddy <a href="http://eeltechart.com"><abbr title="Eric E. Lenerville">Eel</abbr></a> (aka Eric, which most people call him, but I&#8217;ve been calling him <abbr title="Eric E. Lenerville">Eel</abbr> so long that my parents and their friends call him that as well) on Saturday and we were chatting Python and so I showed him my Python Curve Deconstructor script and started talking about how I wanted to do this and that and make it more streamlined, etc. So I busted open the Maya docs to check the commands and was like, &#8220;Yeah that&#8217;s what I wanted,&#8221; and then we kinda just started going through everything and he started making suggestions on how to get the data out better without using any of the string modifications and then BAM!<span id="more-1181"></span> Tons of stuff didn&#8217;t work right and eventually we got a working version that was less cluttered, <strong>closes the curve</strong>, only relies upon 2 string manipulations (which are just taking out white space/new lines at the end, which can actually be left in if you wanted) and only requires one variable to be passed to it: The name of the curve.</p>
<p>For those just reading this, here&#8217;s why I use this:</p>
<blockquote><p>
Originally from <a href="http://animateshmanimate.com/2011/03/28/python-curve-deconstructor-for-maya/">here</a></p>
<p>&#8220;In Illustrator I&#8217;m a beast. I can tweak lines and curves with the best of them (seriously, I really am quite good). But in Maya, I can&#8217;t create a control that looks decent to save my life &#8211; unless I&#8217;m using 2011&#8242;s new bezier curve, then I&#8217;m a quite a bit better. So that makes it difficult to create nifty looking control objects for my rigs that are intuitive. I got rather tired of that so I decided to find some control objects so I could use them. The problem with that is that I have to import them into my scene. That&#8217;s lame and makes it so I have to create a library of controllers and where the source came from to give credit and all that &#8211; because giving credit is a MUST if you&#8217;re using someone elses stuff. So I decided to write my own curve deconstructor. This saves me time in that I can grab a curve that someones made, pass the script the name, <del datetime="2011-04-04T03:57:41+00:00">the number of points and the degree and it writes out the necessary data for me.</del>&#8221; <- deleted that because this version doesn't need all that, just the name.
</p></blockquote>
<p>So without further ado, here&#8217;s the code:</p>
<pre class="brush: python; title: ; notranslate">
&quot;&quot;&quot;
Control Curve Deconstructor
Original file creation date: 2010-09-07

Concept and scripting by John P. Neumann (john@animateshmanimate.com) http://animateshmanimate.com
This work is licensed under the 3-clause BSD (&quot;New BSD License&quot;) license.
This is one of the most permissive licenses available, next to the MIT license.
In other words: Use it, Share it, Make it better, Give credit where it's due. Done.


Changelog:

0.3
* Optimization of code (with stuff being pointed out by Eric E. Lenerville {http://eeltechart.com})
* Now you only need to pass the curve name and it'll get all the necessary data
* Now closes the curve properly because of how we're getting the data

0.2
* Public Release

0.1
* Initial Creation

&quot;&quot;&quot;
import maya.cmds as cmds
import os

def getCVList(crvName):
    
    # get the home directory
    homeDir = os.getenv('USERPROFILE') or os.getenv('HOME')
    
    # make the homeDir variable sane on windows
    homeDir = homeDir.replace('\\', '/')
    
    # output it to the desktop
    homeDir = homeDir + '/Desktop/'
    
    # open our curveData temporary file
    curveDataTemp = open(homeDir+'curveData.txt', 'w')
    # open our outputFile
    outFile = open(homeDir+crvName+'.py', 'w')
    
    # go through the cv's and get the data
    cvData = cmds.getAttr(crvName+'.cv[*]')
    print &gt;&gt; curveDataTemp, cvData

    # close our temp file
    curveDataTemp.close()
    
    # get the shape node
    shapeNode = cmds.listRelatives(crvName, s=True)
    shapeNode = shapeNode[0]
    
    # get the spans and the degree
    spans = cmds.getAttr(shapeNode + '.spans')
    degree = cmds.getAttr(shapeNode + '.degree')
    
    # get the number of keys to pass to the next part
    numKeys = spans / degree + 2
    
    keyDataTemp = open(homeDir+'keyData.txt', 'w')
    # define a new list
    newList = []
    # iterate through it and print it out so it's nice and close the file
    for i in range(numKeys):
        # check the degree to add to the list properly
        if degree == 1:
            newList.append(i)
        elif degree == 2:
            newList.append(i)
            newList.append(i)
        elif degree == 3:
            newList.append(i)
            newList.append(i)
            newList.append(i)
            
    # output the list
    print &gt;&gt; keyDataTemp, newList
    keyDataTemp.close()
    
    # open the curveData file and read it into memory - this could be bad for large files though
    curveDataTemp = open(homeDir+'curveData.txt', 'r')
    curveData = curveDataTemp.read()
    curveDataTemp.close()
    
    # import maya cmds in the file just so it's easier
    outFile.write('import maya.cmds as cmds\n')
    
    # write the beginning of the curve creation
    outFile.write('cmds.curve(d='+str(degree)+', p=')  
    
    # get rid of whitespace at the end
    curveData = curveData.rstrip()
    # write it all back out to the final file
    outFile.write(curveData)
    
    # open the key data and read it into memory
    keyDataTemp = open(homeDir+'keyData.txt', 'r')
    keyData = keyDataTemp.read()
    keyDataTemp.close()
    
    # append the key part
    outFile.write(', k=')
    
    # get rid of whitespace at the end
    keyData = keyData.rstrip()
    outFile.write(keyData)
    
    # and name the curve
    outFile.write(', name=\''+crvName+'_new\')')
    
    # close all of our files now
    keyDataTemp.close()
    curveDataTemp.close()
    outFile.close()
    
    # and delete our temporary files
    os.remove(homeDir+'curveData.txt')
    os.remove(homeDir+'keyData.txt')
</pre>
<p>To use it simply pass it the name of the curve and it will write the file out to your desktop as the name of the curve with a .py extension. Example (file is named ccurve.py like last time):</p>
<pre class="brush: python; title: ; notranslate">
import ccurve
ccurve.getCVList('grabMe_03')
</pre>
<p>And here&#8217;s the output:</p>
<pre class="brush: python; title: ; notranslate">
import maya.cmds as cmds
cmds.curve(d=3, p=[(21.711673055555561, 64.829125555555549, 0.0), (21.866701659575, 64.740242123411093, 0.0), (22.951915840425002, 64.118050098811096, 0.0), (23.106944444444444, 64.029166666666669, 0.0), (22.951915840425002, 63.940283234522219, 0.0), (21.866701659575, 63.318091209922223, 0.0), (21.711673055555561, 63.229207777777781, 0.0), (21.846013409669446, 63.111389017705548, 0.0), (22.786407979219444, 62.286647093405563, 0.0), (22.920748333333339, 62.16882833333333, 0.0), (22.752302548672219, 62.11094983804999, 0.0), (21.573166895772221, 61.705795161949993, 0.0), (21.404721111111108, 61.64791666666666, 0.0), (21.513222711269442, 61.507359646324993, 0.0), (22.272743677619445, 60.523447853674995, 0.0), (22.381245277777779, 60.382890833333327, 0.0), (22.204532816524999, 60.360152573063885, 0.0), (20.967529683475, 60.20098270471388, 0.0), (20.79081722222222, 60.178244444444438, 0.0), (20.869364368841662, 60.019080542272221, 0.0), (21.419201464491668, 58.904918902172234, 0.0), (21.497748611111117, 58.745755000000003, 0.0), (21.319981746822222, 58.756091285525009, 0.0), (20.075597697622221, 58.828446214475001, 0.0), (19.89783083333333, 58.838782500000022, 0.0), (19.944357837194445, 58.667220542797232, 0.0), (20.270051051694445, 57.466271401647226, 0.0), (20.316578055555556, 57.294709444444436, 0.0), (20.143961695316666, 57.340182045269437, 0.0), (18.935631638016666, 57.658494343619466, 0.0), (18.763015277777779, 57.703966944444446, 0.0), (18.774386367769445, 57.526203999869452, 0.0), (18.853985021119442, 56.28184738901944, 0.0), (18.865356111111108, 56.104084444444453, 0.0), (18.706192208938887, 56.18263159106391, 0.0), (17.592030568838886, 56.732468686713879, 0.0), (17.432866666666666, 56.811015833333336, 0.0), (17.409097521644441, 56.63531465826388, 0.0), (17.242711367244443, 55.405390619513895, 0.0), (17.218942222222221, 55.229689444444446, 0.0), (17.078381282166667, 55.337175838705555, 0.0), (16.094442051166666, 56.089590272405552, 0.0), (15.953881111111112, 56.197076666666668, 0.0), (15.896006535541666, 56.029646087902769, 0.0), (15.490879297791668, 54.857616967652802, 0.0), (15.433004722222226, 54.690186388888904, 0.0), (15.316216846902782, 54.824546341572223, 0.0), (14.498691208652783, 55.765078102872224, 0.0), (14.381903333333334, 55.899438055555564, 0.0), (14.29301990118889, 55.744409451536114, 0.0), (13.670827876588891, 54.659195270686105, 0.0), (13.581944444444449, 54.504166666666656, 0.0), (13.492030127547228, 54.659195270686105, 0.0), (12.862621816897226, 55.744409451536114, 0.0), (12.772707500000005, 55.899438055555564, 0.0), (12.655919624680561, 55.765078102872224, 0.0), (11.838393986430557, 54.824546341572223, 0.0), (11.721606111111116, 54.690186388888904, 0.0), (11.664762420294446, 54.857616967652802, 0.0), (11.266851468594446, 56.029646087902769, 0.0), (11.210007777777777, 56.197076666666668, 0.0), (11.068415952969444, 56.089590272405552, 0.0), (10.077260435919444, 55.337175838705555, 0.0), (9.9356686111111117, 55.229689444444446, 0.0), (9.9118955463749998, 55.405390619513895, 0.0), (9.745481953625001, 56.63531465826388, 0.0), (9.7217088888888892, 56.811015833333336, 0.0), (9.5625489064305551, 56.732468686713879, 0.0), (8.4484147046805553, 56.18263159106391, 0.0), (8.2892547222222213, 56.104084444444453, 0.0), (8.3006218925000006, 56.28184738901944, 0.0), (8.3801931075000002, 57.526203999869452, 0.0), (8.3915602777777778, 57.703966944444446, 0.0), (8.2189635161083334, 57.658494343619466, 0.0), (7.0107706505583334, 57.340182045269437, 0.0), (6.8381738888888899, 57.294709444444436, 0.0), (6.8846812941805569, 57.466271401647226, 0.0), (7.2102373169305567, 58.667220542797232, 0.0), (7.2567447222222237, 58.838782500000022, 0.0), (7.0789817776472228, 58.828446214475001, 0.0), (5.8346251667972213, 58.756091285525009, 0.0), (5.6568622222222222, 58.745755000000003, 0.0), (5.7354093688416663, 58.904918902172234, 0.0), (6.2852464644916672, 60.019080542272221, 0.0), (6.3637936111111113, 60.178244444444438, 0.0), (6.1870615512888891, 60.20098270471388, 0.0), (4.9499212264888897, 60.360152573063885, 0.0), (4.7731891666666666, 60.382890833333327, 0.0), (4.881706445680555, 60.523447853674995, 0.0), (5.6413371654305555, 61.507359646324993, 0.0), (5.7498544444444457, 61.64791666666666, 0.0), (5.5813929809277774, 61.705795161949993, 0.0), (4.4021475746277776, 62.11094983804999, 0.0), (4.2336861111111102, 62.16882833333333, 0.0), (4.3680421440805546, 62.286647093405563, 0.0), (5.3085464670305536, 63.111389017705548, 0.0), (5.4429024999999989, 63.229207777777781, 0.0), (5.2889087004472213, 63.318091209922223, 0.0), (4.2109382439972221, 63.940283234522219, 0.0), (4.0569444444444445, 64.029166666666669, 0.0), (4.2109382439972221, 64.118050098811096, 0.0), (5.2889087004472213, 64.740242123411093, 0.0), (5.4429024999999989, 64.829125555555549, 0.0), (5.3085464670305536, 64.946944315627761, 0.0), (4.3680421440805546, 65.771686239927774, 0.0), (4.2336861111111102, 65.889504999999986, 0.0), (4.4021475746277776, 65.947383495283333, 0.0), (5.5813929809277774, 66.35253817138333, 0.0), (5.7498544444444457, 66.410416666666663, 0.0), (5.6413371654305555, 66.550973687008337, 0.0), (4.881706445680555, 67.534885479658328, 0.0), (4.7731891666666666, 67.675442500000003, 0.0), (4.9499212264888897, 67.698180760269452, 0.0), (6.1870615512888891, 67.857350628619443, 0.0), (6.3637936111111113, 67.880088888888892, 0.0), (6.2852464644916672, 68.039252791061116, 0.0), (5.7354093688416663, 69.15341443116111, 0.0), (5.6568622222222222, 69.31257833333332, 0.0), (5.8346251667972213, 69.302242047808321, 0.0), (7.0789817776472228, 69.229887118858329, 0.0), (7.2567447222222237, 69.219550833333329, 0.0), (7.2102373169305567, 69.391112790536113, 0.0), (6.8846812941805569, 70.592061931686089, 0.0), (6.8381738888888899, 70.763623888888873, 0.0), (7.0107706505583334, 70.718151288063893, 0.0), (8.2189635161083334, 70.399838989713885, 0.0), (8.3915602777777778, 70.354366388888877, 0.0), (8.3801931075000002, 70.532129333463885, 0.0), (8.3006218925000006, 71.776485944313876, 0.0), (8.2892547222222213, 71.954248888888884, 0.0), (8.4484147046805553, 71.875701742269456, 0.0), (9.5625489064305551, 71.325864646619436, 0.0), (9.7217088888888892, 71.247317500000008, 0.0), (9.745481953625001, 71.423018675069457, 0.0), (9.9118955463749998, 72.652942713819442, 0.0), (9.9356686111111117, 72.828643888888877, 0.0), (10.077260435919444, 72.721157494627775, 0.0), (11.068415952969444, 71.968743060927778, 0.0), (11.210007777777777, 71.861256666666677, 0.0), (11.266851468594446, 72.028687245430561, 0.0), (11.664762420294446, 73.200716365680563, 0.0), (11.721606111111116, 73.368146944444433, 0.0), (11.838393986430557, 73.235856600694433, 0.0), (12.655919624680561, 72.309812288194436, 0.0), (12.772707500000005, 72.177521944444436, 0.0), (12.86158701243056, 72.33048093953056, 0.0), (13.483751598680556, 73.401207671580551, 0.0), (13.572631111111111, 73.554166666666674, 0.0), (13.662549347722219, 73.401207671580551, 0.0), (14.291985096722224, 72.33048093953056, 0.0), (14.381903333333334, 72.177521944444436, 0.0), (14.498691208652783, 72.309812288194436, 0.0), (15.316216846902782, 73.235856600694433, 0.0), (15.433004722222226, 73.368146944444433, 0.0), (15.490879297791668, 73.200716365680563, 0.0), (15.896006535541666, 72.028687245430561, 0.0), (15.953881111111112, 71.861256666666677, 0.0), (16.094442051166666, 71.968743060927778, 0.0), (17.078381282166667, 72.721157494627775, 0.0), (17.218942222222221, 72.828643888888877, 0.0), (17.242711367244443, 72.652942713819442, 0.0), (17.409097521644441, 71.423018675069457, 0.0), (17.432866666666666, 71.247317500000008, 0.0), (17.592030568838886, 71.325864646619436, 0.0), (18.706192208938887, 71.875701742269456, 0.0), (18.865356111111108, 71.954248888888884, 0.0), (18.853985021119442, 71.776485944313876, 0.0), (18.774386367769445, 70.532129333463885, 0.0), (18.763015277777779, 70.354366388888877, 0.0), (18.935631638016666, 70.399838989713885, 0.0), (20.143961695316666, 70.718151288063893, 0.0), (20.316578055555556, 70.763623888888873, 0.0), (20.270051051694445, 70.592061931686089, 0.0), (19.944357837194445, 69.391112790536113, 0.0), (19.89783083333333, 69.219550833333329, 0.0), (20.075597697622221, 69.229887118858329, 0.0), (21.319981746822222, 69.302242047808321, 0.0), (21.497748611111117, 69.31257833333332, 0.0), (21.419201464491668, 69.15341443116111, 0.0), (20.869364368841662, 68.039252791061116, 0.0), (20.79081722222222, 67.880088888888892, 0.0), (20.967529683475, 67.857350628619443, 0.0), (22.204532816524999, 67.698180760269452, 0.0), (22.381245277777779, 67.675442500000003, 0.0), (22.272743677619445, 67.534885479658328, 0.0), (21.513222711269442, 66.550973687008337, 0.0), (21.404721111111108, 66.410416666666663, 0.0), (21.573166895772221, 66.35253817138333, 0.0), (22.752302548672219, 65.947383495283333, 0.0), (22.920748333333339, 65.889504999999986, 0.0), (22.786407979219444, 65.771686239927774, 0.0), (21.846013409669446, 64.946944315627761, 0.0), (21.711673055555561, 64.829125555555549, 0.0)], k=[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64], name='grabMe_03_new')
</pre>
<p>And that&#8217;s that. Now the biggest improvements are how we&#8217;re actually getting our data. Before we were using a loop to go through each cv&#8217;s position and get that data. That was dumb. Why? Because Maya has a built in operator for that: cmds.getAttr(crvName+&#8217;.cv[*]&#8216;). The .cv[*] part goes through it all and actually returns all the values <strong>including</strong> the ending, so there&#8217;s no need to use the close curve command. We&#8217;ve also eliminated the need to specify the spans and the degree, because the script automatically calls the shape node of the curve and gets the spans and degree. Both of these features were things I was going to implement, but <abbr title="Eric E. Lenerville">Eel</abbr> helping me clean up my output made it more of a priority since the previous way was unsatisfactory &#8211; calling a command to complete the curve was lame and I&#8217;ll be the first to admit it.</p>
<p>The rest of it is pretty well commented so I&#8217;m not going to go through all of it, but suffice it to say I&#8217;m very happy with the end result now especially because it produces a 100% working version of the curve. Next up is going to be asking the user for a name for the curve and then adding that curve to a dropdown in the Maya main menu so that instead of copying and pasting it into your own toolset you can also use one that&#8217;ll be built right into your menu-bar. <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-big_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>If you don&#8217;t want to copy and paste from above you can grab the file here:</p>
<a href="http://animateshmanimate.com/scriptDownloads/ccurve.py_.zip" title="Curve Deconstructor - 1.5.0">Curve Deconstructor - 1.5.0</a> - Downloaded 23 times
<p>If you&#8217;ve got suggestions on how to improve this, please, either leave a comment or send me an email. I&#8217;m always looking for feedback, criticisms, whatever. I&#8217;ve got thick skin so if you think it sucks, rip into it &#8211; but provide solutions to why it sucks, just saying it sucks is useless. Huge thanks again to <abbr title="Eric E. Lenerville">Eel</abbr> and as always, thanks for reading and hope this was useful to someone! <img src='http://animateshmanimate.com/wp-content/plugins/smilies-themer/Julianus/20x20-extreme_sexy_girl.png' alt=':bloody:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://animateshmanimate.com/2011/04/03/python-nurbs-curve-deconstructor-awesomified/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
