<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-536028505499887975</id><updated>2024-09-26T05:56:23.882+01:00</updated><category term="maya"/><category term="scripting"/><category term="update"/><category term="mel"/><category term="python"/><category term="rigging"/><category term="downloads"/><category term="tutorial"/><category term="animation"/><category term="nCloth"/><category term="showreel"/><category term="Resources"/><category term="ldunham1"/><category term="character rigging"/><category term="facial rigging"/><category term="split"/><category term="string"/><category term="tokenize"/><category term="blendshapes"/><category term="cluster"/><category term="freelance character td"/><category term="soft selection"/><category term="bird"/><category term="character td"/><category term="files"/><category term="folders"/><category term="hotkeys"/><category term="iconicles"/><category term="indexing"/><category term="ld_animateMe"/><category term="ld_mirrorMe"/><category term="ld_selectMe"/><category term="lists"/><category term="mirror"/><category term="selection sets"/><category term="soft selection to cluster"/><category term="sparrow"/><category term="speed"/><category term="Outlook"/><category term="Photoshop"/><category term="Portraiture and Facial Anatomy"/><category term="PyQt"/><category term="QT Designer"/><category term="ROME II"/><category term="alembic"/><category term="audio"/><category term="blogspot"/><category term="cPickle"/><category term="cameras"/><category term="cant show window"/><category term="channelBox"/><category term="cloth"/><category term="combining shapes"/><category term="constraints"/><category term="corrective blends"/><category term="creative assembly"/><category term="css"/><category term="debugging"/><category term="demoreel"/><category term="dictionaries"/><category term="edit"/><category term="faces"/><category term="facial anatomy"/><category term="feed"/><category term="files in folders"/><category term="filter emails"/><category term="fmp"/><category term="geraint wright"/><category term="ha ha hairies"/><category term="houdini"/><category term="html"/><category term="ik handle"/><category term="invert selection"/><category term="json"/><category term="ld mirrorme"/><category term="lee dunham"/><category term="list comprehension"/><category term="match"/><category term="mo-cap"/><category term="models"/><category term="nested dictionaries"/><category term="notes"/><category term="number padding"/><category term="padding"/><category term="pickle"/><category term="poses"/><category term="pymel"/><category term="query folder contents"/><category term="recoder"/><category term="relative"/><category term="render layers"/><category term="rome 2"/><category term="rss"/><category term="scott eaton"/><category term="scriptEditor"/><category term="shelves"/><category term="sort"/><category term="sorted"/><category term="sorting"/><category term="sound problem"/><category term="sourceing eval"/><category term="startup"/><category term="stretchy bones"/><category term="switch statements"/><category term="total war"/><category term="undo"/><category term="up"/><category term="userSetup"/><category term="window position"/><category term="windowPref"/><category term="windows"/><category term="wing"/><category term="worldspace"/><category term="write file"/><category term="write to file"/><title type='text'>Yet Another Random TD Blog...</title><subtitle type='html'>...original, I know.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default?start-index=26&amp;max-results=25'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-5372348110865787513</id><published>2020-09-29T03:59:00.001+01:00</published><updated>2020-09-29T03:59:10.427+01:00</updated><title type='text'>Source on GitHub</title><content type='html'>Its been a while and I doubt I&#39;ll keep this up to date.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I&#39;ve posted the sources for some of my older tools on &lt;a href=&quot;https://github.com/ldunham1/maya_utilities/blob/master/ld_soft_cluster.py&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/5372348110865787513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2020/09/source-on-github.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5372348110865787513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5372348110865787513'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2020/09/source-on-github.html' title='Source on GitHub'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-9095182489383501652</id><published>2016-06-12T17:25:00.000+01:00</published><updated>2016-06-12T17:25:24.865+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="faces"/><category scheme="http://www.blogger.com/atom/ns#" term="facial anatomy"/><category scheme="http://www.blogger.com/atom/ns#" term="facial rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="Portraiture and Facial Anatomy"/><category scheme="http://www.blogger.com/atom/ns#" term="scott eaton"/><title type='text'>Scott Eaton: Portraiture and Facial Anatomy for Artists</title><content type='html'>I recently had the pleasure of completing the 3 day&amp;nbsp;&lt;a href=&quot;http://www.scott-eaton.com/portraiture-for-artists-workshop&quot; target=&quot;_blank&quot;&gt;Portraiture and Facial Anatomy course with Scott Eaton&lt;/a&gt;, and I cannot recommend it highly enough.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4LoeXVvdK_OI9qipxNB6eeG-slI7hu07I5yvDXTcyrumr8a-OfyWMnhGwq9UZyD4nFgvEflDN9Ys2FooY22j_bCeaaGRN9gj1oEH2dWGGxVKMCJj1VzCvzfUGm6lgVFqOliep72Cij6w/s1600/20160609_095406.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4LoeXVvdK_OI9qipxNB6eeG-slI7hu07I5yvDXTcyrumr8a-OfyWMnhGwq9UZyD4nFgvEflDN9Ys2FooY22j_bCeaaGRN9gj1oEH2dWGGxVKMCJj1VzCvzfUGm6lgVFqOliep72Cij6w/s640/20160609_095406.jpg&quot; style=&quot;cursor: move;&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Scott shared a wealth of knowledge on facial anatomy - how to recognise and understand various landmarks on the face for construction and deformation, variations on the bell curve, the differences between gender, race and species, as well as FACS breakdowns and so much more.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Here&#39;s an overview of the construction task over the three days.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;
Blocking in the&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Temporal_muscle&quot; target=&quot;_blank&quot;&gt;Temporalis&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Masseter_muscle&quot; target=&quot;_blank&quot;&gt;Masseter&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Medial_pterygoid_muscle&quot; target=&quot;_blank&quot;&gt;Medial&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Lateral_pterygoid_muscle&quot; target=&quot;_blank&quot;&gt;Lateral&lt;/a&gt;&amp;nbsp;Pterygoids.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDnfUEvuGqFDK4W1JkLFISp9EGZIMUNvineZArYsFcnDQ99bTtmXLQwlaVWtuPANMKj69nLb04Gj80dDsh_c6dhq8rOk8okARSEOGXTu3hhisTHkfmPGAvpPp90F01NGfYubICiaNdRmA/s1600/20160607_171554.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDnfUEvuGqFDK4W1JkLFISp9EGZIMUNvineZArYsFcnDQ99bTtmXLQwlaVWtuPANMKj69nLb04Gj80dDsh_c6dhq8rOk8okARSEOGXTu3hhisTHkfmPGAvpPp90F01NGfYubICiaNdRmA/s200/20160607_171554.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_TnKtGk4DCd40LoB8tVq0zt-kGbdubSm9tZrZRf8BRt_WD4rqWaIfemazfEwqDKv9N2wD_-cmmMS_JwxHs2H4wUhDw5RvxT-zGZNAtC1iMnXtJYSneety71Gn96D2ZWSy3tpqRFcVypQ/s1600/20160607_171601.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_TnKtGk4DCd40LoB8tVq0zt-kGbdubSm9tZrZRf8BRt_WD4rqWaIfemazfEwqDKv9N2wD_-cmmMS_JwxHs2H4wUhDw5RvxT-zGZNAtC1iMnXtJYSneety71Gn96D2ZWSy3tpqRFcVypQ/s200/20160607_171601.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdQP8QN4oUcFxnPsxcJd-Q8PLhNHkp3J9HIq4__UjlRd_RyocfT2vxFqhIDKSD4jnN9610Rqv2-XG990g93pKf0jBXbkE7DCu5S1d5zTXxiBH2Zq2r-fO7jxv4wdTCaR2UZLdd5iz0FL0/s1600/20160607_171546.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdQP8QN4oUcFxnPsxcJd-Q8PLhNHkp3J9HIq4__UjlRd_RyocfT2vxFqhIDKSD4jnN9610Rqv2-XG990g93pKf0jBXbkE7DCu5S1d5zTXxiBH2Zq2r-fO7jxv4wdTCaR2UZLdd5iz0FL0/s200/20160607_171546.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
Adding the eyeballs, orbital fat, superior and inferior&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Tarsus_(eyelids)&quot; target=&quot;_blank&quot;&gt;Tarsus&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Levator_palpebrae_superioris_muscle&quot; target=&quot;_blank&quot;&gt;Levator&lt;/a&gt;&amp;nbsp;tendon,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Canthus&quot; target=&quot;_blank&quot;&gt;Canthus&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Orbicularis_oculi_muscle&quot; target=&quot;_blank&quot;&gt;Orbicularis oculi&lt;/a&gt;. Also, cleaning up where the Masseter joins the&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zygomatic_bone&quot; target=&quot;_blank&quot;&gt;Zygomatic&lt;/a&gt;&amp;nbsp;bone.&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3gYVVVOEamHlLO7NPqH9n8cumeXjMgolbyYU0Q79ywFp6f_GTM_UoFotsEZ_sF0Tcz2_CkwtbM5q32ekphaZFTlwOfCuI910I6UtxilD8H1S70Xvy9HPfD3wqpL8ZCYj2f2lqLBLzWBk/s1600/20160608_171738.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3gYVVVOEamHlLO7NPqH9n8cumeXjMgolbyYU0Q79ywFp6f_GTM_UoFotsEZ_sF0Tcz2_CkwtbM5q32ekphaZFTlwOfCuI910I6UtxilD8H1S70Xvy9HPfD3wqpL8ZCYj2f2lqLBLzWBk/s200/20160608_171738.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgkRqzUftMQUjCoJg38VAio0yPgghQmXZr5aRJi6XXntM0jUB4vSLQ_XMr8NPjg4k9cjEJNRZobp02M6DAw0-b-XtwaNIPCpgxVIZF3dyHu8pSgKdVLwti-IT1-qjTFX-xDs1V4ceQ3RQ/s1600/20160608_171743.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgkRqzUftMQUjCoJg38VAio0yPgghQmXZr5aRJi6XXntM0jUB4vSLQ_XMr8NPjg4k9cjEJNRZobp02M6DAw0-b-XtwaNIPCpgxVIZF3dyHu8pSgKdVLwti-IT1-qjTFX-xDs1V4ceQ3RQ/s200/20160608_171743.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNUi8w-yHdH03geUE9YCz86OJdRAFmCRM3hUuxCVLE0YvLu_6rcxnrPT9h6e8fniacxBN-ZXx3Dc4K4Ano_jZzz_vh9U5uP5dIzCSqGJ2YnruXY42KbbDbGMhHgy2NEOjW3-_f65n3yw8/s1600/20160608_171734.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNUi8w-yHdH03geUE9YCz86OJdRAFmCRM3hUuxCVLE0YvLu_6rcxnrPT9h6e8fniacxBN-ZXx3Dc4K4Ano_jZzz_vh9U5uP5dIzCSqGJ2YnruXY42KbbDbGMhHgy2NEOjW3-_f65n3yw8/s200/20160608_171734.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;text-align: start;&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;Adding the&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Frontalis_muscle&quot; target=&quot;_blank&quot;&gt;Frontalis&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Procerus_muscle&quot; target=&quot;_blank&quot;&gt;Procerus&lt;/a&gt;,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Corrugator_supercilii_muscle&quot; target=&quot;_blank&quot;&gt;Corrugator supercilii&lt;/a&gt;&amp;nbsp;(should have been under the frontalis),&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Orbicularis_oris_muscle&quot; target=&quot;_blank&quot;&gt;Orbicularis oris&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Buccinator_muscle&quot; target=&quot;_blank&quot;&gt;Buccinator&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Buccal_fat_pad&quot; target=&quot;_blank&quot;&gt;Buccal&lt;/a&gt;&amp;nbsp;fat (far too much!).&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGbjbVQyozArF5pnUxb_SteTRROaRHmzQ4SlrQr-eRzCGKB8SKceRuNAbbMAg9sIxkqdQefoiPCib622XIevDZUXTL9vrjjwcKa6X9nCMjLfdiJughCJs-LgF8JvFT4oJXd0wEfYMZ_E8/s1600/20160609_125331.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGbjbVQyozArF5pnUxb_SteTRROaRHmzQ4SlrQr-eRzCGKB8SKceRuNAbbMAg9sIxkqdQefoiPCib622XIevDZUXTL9vrjjwcKa6X9nCMjLfdiJughCJs-LgF8JvFT4oJXd0wEfYMZ_E8/s200/20160609_125331.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvpVQCeWEt1xhoOtkSfHG_HsSVraifreCX5hybgo5XGJCnGDTS7qK6M7R0Z9TI2tK1o-fp8Bs9FfuKr-DFq0IHpaVD9pttFrXNWywnzG_sUVQDGMuzKM_O90WXnPDi7goMWdHHk5hCB5s/s1600/20160609_125316.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvpVQCeWEt1xhoOtkSfHG_HsSVraifreCX5hybgo5XGJCnGDTS7qK6M7R0Z9TI2tK1o-fp8Bs9FfuKr-DFq0IHpaVD9pttFrXNWywnzG_sUVQDGMuzKM_O90WXnPDi7goMWdHHk5hCB5s/s200/20160609_125316.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNZZkGK0i4pLDoRE8BzNmK5Hz8IHGuw5rZ0-C1zg-hoCgKVituCVIc6WhDDibC8qEhUkbr3VKq-JyhuWCbboXGflYJ3KvlR-erARHXgzLr4W6lzfY3BbEMz2H6WjZErVXYFiXpdsDUsNM/s1600/20160609_125310.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNZZkGK0i4pLDoRE8BzNmK5Hz8IHGuw5rZ0-C1zg-hoCgKVituCVIc6WhDDibC8qEhUkbr3VKq-JyhuWCbboXGflYJ3KvlR-erARHXgzLr4W6lzfY3BbEMz2H6WjZErVXYFiXpdsDUsNM/s200/20160609_125310.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;Adding&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zygomaticus_major_muscle&quot; target=&quot;_blank&quot;&gt;Zygomaticus&lt;/a&gt;&amp;nbsp;major and minor,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Depressor_labii_inferioris_muscle&quot; target=&quot;_blank&quot;&gt;Depressor labii inferioris&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Depressor_anguli_oris_muscle&quot; target=&quot;_blank&quot;&gt;Depressor anguli oris&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Mentalis&quot; target=&quot;_blank&quot;&gt;Mentalis&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Levator_labii_superioris&quot; target=&quot;_blank&quot;&gt;Levator labii superioris&lt;/a&gt;&amp;nbsp;and chin fat (for the mentalis).&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVSgtktR_mP7_ROhHqJxWLAFf6iHmqB_f0z1kbwsbhnEi2N-B6SG4bX5gIf4JKqOAnWRpHaXhyDmrpiqa53Mk0u9a3VeiElX2GAoq5gCzHUV4_wch8FQHWWnb8y1rUYgsTKzqWRbODHdc/s1600/20160609_154539.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVSgtktR_mP7_ROhHqJxWLAFf6iHmqB_f0z1kbwsbhnEi2N-B6SG4bX5gIf4JKqOAnWRpHaXhyDmrpiqa53Mk0u9a3VeiElX2GAoq5gCzHUV4_wch8FQHWWnb8y1rUYgsTKzqWRbODHdc/s200/20160609_154539.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl7UKUgxTRP7lp-l1aA481sN15qq3sE_elBKOzT_qOvfTTqXksqhY2qeDJ9omvF1_FKms8cKQg8K1-HTxpRyIHaDowRngYC_bdO-x_X52LtyyfdgPiDYYuweu3tZtyCPHyXhILeWBr94k/s1600/20160609_154533.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl7UKUgxTRP7lp-l1aA481sN15qq3sE_elBKOzT_qOvfTTqXksqhY2qeDJ9omvF1_FKms8cKQg8K1-HTxpRyIHaDowRngYC_bdO-x_X52LtyyfdgPiDYYuweu3tZtyCPHyXhILeWBr94k/s200/20160609_154533.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6gBhoOE0AQLYjtXNv6n2nW1Q6_mAArMlrPPKzBsVcDCNsRTTqHo1J7Kdsuo7myM3lx-W4kdsR4cc53ZYvBzk1x5vtq4iA8UhPgQIfbwc1LuGTIw4FDMclx02qC5Z62ofzLvHhiQ8ZhVs/s1600/20160609_154510.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6gBhoOE0AQLYjtXNv6n2nW1Q6_mAArMlrPPKzBsVcDCNsRTTqHo1J7Kdsuo7myM3lx-W4kdsR4cc53ZYvBzk1x5vtq4iA8UhPgQIfbwc1LuGTIw4FDMclx02qC5Z62ofzLvHhiQ8ZhVs/s200/20160609_154510.jpg&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
I need to practice noses!&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6n6GaNe27Zvaf7-hVQgwKuWzBbrQxmY9coDRXp8y-Y1ZNgHvAaAkRHm7YR8VTSP-_AzwBoI3qvK5zDLJsZ8A_S3HzftrBIoJA9E1eqkIvyNXEXnGHItJPVOq0HxVNMUd5MENI1VTAS8c/s1600/20160609_175709.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6n6GaNe27Zvaf7-hVQgwKuWzBbrQxmY9coDRXp8y-Y1ZNgHvAaAkRHm7YR8VTSP-_AzwBoI3qvK5zDLJsZ8A_S3HzftrBIoJA9E1eqkIvyNXEXnGHItJPVOq0HxVNMUd5MENI1VTAS8c/s400/20160609_175709.jpg&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Here are a few links you may want to bookmark;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scott-eaton.com/category/bodies-in-motion&quot;&gt;scott-eaton.com/category/bodies-in-motion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scott-eaton.com/tutorials&quot;&gt;scott-eaton.com/tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bodiesinmotion.photo/&quot;&gt;bodiesinmotion.photo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cs.cmu.edu/~face/facs.htm&quot;&gt;FACS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/9095182489383501652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2016/06/scott-eaton-portraiture-and-facial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/9095182489383501652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/9095182489383501652'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2016/06/scott-eaton-portraiture-and-facial.html' title='Scott Eaton: Portraiture and Facial Anatomy for Artists'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4LoeXVvdK_OI9qipxNB6eeG-slI7hu07I5yvDXTcyrumr8a-OfyWMnhGwq9UZyD4nFgvEflDN9Ys2FooY22j_bCeaaGRN9gj1oEH2dWGGxVKMCJj1VzCvzfUGm6lgVFqOliep72Cij6w/s72-c/20160609_095406.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-5515108098946316946</id><published>2016-06-05T23:23:00.000+01:00</published><updated>2016-06-06T09:09:59.148+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="lists"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="pymel"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="relative"/><category scheme="http://www.blogger.com/atom/ns#" term="sort"/><category scheme="http://www.blogger.com/atom/ns#" term="sorted"/><category scheme="http://www.blogger.com/atom/ns#" term="sorting"/><category scheme="http://www.blogger.com/atom/ns#" term="worldspace"/><title type='text'>Python in Maya: Simple node sorting</title><content type='html'>&lt;div&gt;
When applying a worldspace or relative transform to nodes in Maya, you&#39;ll often have to account for;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Control behaviour type (IK, Pole Vectors etc)&lt;/li&gt;
&lt;li&gt;Control hierarchy&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
This is where you will probably need to look at sorting your list of nodes prior to applying the data.&lt;br /&gt;
Also, space-switch sorting will want to be run as an additional pass over control type and hierarchy. This dependency check will vary based on the type of space-switch setup the rigs are using.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I&#39;ve added a simple sort setup with individual and combined priorities.&lt;br /&gt;
&lt;i&gt;Edit: Enable&lt;/i&gt;&lt;i&gt;&amp;nbsp;web view if browsing on mobile&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;script class=&quot;brush: python&quot; type=&quot;syntaxhighlighter&quot;&gt;import pymel.core as pm


# -- The sorting functions allow the user to pass in data they wish to return sorted and,
# -- optionally, matching data the sorting methods should use, eg sort a list by another list.
# -- The final sorting function applies two different sort methods to sort data -
# -- one for attribute value and the other for node hierarchy, and importantly,
# -- in that priority order.

# -- Ideally, any rig constants (controller behaviour type and hierarchy) can and should be
# -- cached (typically onto the rig itself) to avoid the unnecessary computation.


def convert_node_hierarchy(node):
    # -- Get the long name of the PyNode
    # -- This could be omitted if we can guarantee string longnames.
    if isinstance(node, pm.PyNode):
        node = pm.longName().count(&#39;|&#39;)

    return node.count(&#39;|&#39;)


def convert_attribute_value(attribute, priority_list=None):
    # -- Get the attribute&#39;s value
    # -- We could replace this with .getattr under a try/except.
    value = attribute.get()

    if priority_list:

        # -- Use the priority list
        if value in priority_list:
            # -- Return the index in which the value appears
            return priority_list.index(value)

        else:
            return

    else:
        # -- Return the attribute&#39;s value
        return value


def hierarchy(data, sort_data=None):
    # -- Get valid sort data
    sort_data = sort_data or data

    # -- Return original data from a sorted zip of sort data
    return [r[0] for r in sorted(zip(data, sort_data),
                                 key=lambda x: convert_node_hierarchy(x[1]))]


def attribute_value(data, sort_data=None, priority_list=None):
    # -- Get valid sort data
    # -- Attribute sort data would need to be a list of pm.PyAttributes.
    # -- We could pass a list of PyNodes and a string attr name instead.
    sort_data = sort_data or data

    # -- Return original data from a sorted zip of sort data
    return [r[0] for r in sorted(zip(data, sort_data),
                                 key=lambda x: convert_attribute_value(x[1]))]


def controls(data,
             attribute_sort_data=None,
             hierarchy_sort_data=None,
             attribute_priority_list=None):
    # -- Get valid sort data
    attribute_sort_data = attribute_sort_data or data
    hierarchy_sort_data = hierarchy_sort_data or data

    # -- Return original data from a sorted zip of different sort data
    return [r[0] for r in sorted(zip(data,
                                     attribute_sort_data,
                                     hierarchy_sort_data),
                                 key=(lambda x: (convert_attribute_value(x[1],
                                                                         priority_list=attribute_priority_list),
                                                 convert_node_hierarchy(x[2]))))]
&lt;/script&gt;

&lt;br /&gt;
&lt;div&gt;
I&#39;d love to hear your thoughts and how you approach this task.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/5515108098946316946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2016/06/python-in-maya-simple-node-sorting.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5515108098946316946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5515108098946316946'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2016/06/python-in-maya-simple-node-sorting.html' title='Python in Maya: Simple node sorting'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-4970272693360445986</id><published>2016-05-26T00:47:00.001+01:00</published><updated>2016-05-26T00:47:06.449+01:00</updated><title type='text'>Huh... I forgot this thing still existed.</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/IbHKLFMrz8c/0.jpg&quot; src=&quot;https://www.youtube.com/embed/IbHKLFMrz8c?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
So, we&#39;ve finally released Total War: Warhammer.&lt;br /&gt;
&lt;br /&gt;
What a project! Huge amount of work and fun!&lt;br /&gt;
Very proud to have worked on this game, and to work with so many talented developers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Perhaps I&#39;ll give this blog another go.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/4970272693360445986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2016/05/huh-i-forgot-this-thing-still-existed.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/4970272693360445986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/4970272693360445986'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2016/05/huh-i-forgot-this-thing-still-existed.html' title='Huh... I forgot this thing still existed.'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/IbHKLFMrz8c/default.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-1712087863248380237</id><published>2013-04-18T20:45:00.000+01:00</published><updated>2013-04-18T20:45:11.715+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="downloads"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><title type='text'>a nice alternative to a quick Rigid Bodies sim: Dynamica Plugin</title><content type='html'>If you&#39;re after a quick little rigidbody sim, I&#39;d suggest giving this a try. Simple, quick, fairly consistent&amp;nbsp;and reliable (so far!).&lt;br /&gt;
Just make sure you keep organised and clean the scene up straight after baking, crashes do happen...&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
&lt;a href=&quot;http://bulletphysics.org/mediawiki-1.5.8/index.php/Maya_Dynamica_Plugin&quot;&gt;http://bulletphysics.org/mediawiki-1.5.8/index.php/Maya_Dynamica_Plugin&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Downloads:&lt;br /&gt;
&lt;a href=&quot;https://code.google.com/p/dynamica/downloads/list&quot;&gt;https://code.google.com/p/dynamica/downloads/list&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Siggraph 2011 vid:&lt;br /&gt;
&lt;a href=&quot;http://mbakr.squarespace.com/blog/siggraph-2011-destruction-dynamics-for-film-and-game-product.html&quot;&gt;http://mbakr.squarespace.com/blog/siggraph-2011-destruction-dynamics-for-film-and-game-product.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/1712087863248380237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2013/04/a-nice-alternative-to-quick-rigid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/1712087863248380237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/1712087863248380237'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2013/04/a-nice-alternative-to-quick-rigid.html' title='a nice alternative to a quick Rigid Bodies sim: Dynamica Plugin'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-1208445655113787436</id><published>2013-02-28T19:00:00.001+00:00</published><updated>2013-02-28T19:00:02.478+00:00</updated><title type='text'>quick update</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/7fqb3cPPfuM?list=UUugJq15BiB-c1NDYPHiznWQ&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Been mega busy last 6 months, alot of changes, not much time to work on personal stuff, but had a great learning curve so plenty to look into once things slow down.</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/1208445655113787436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2013/02/quick-update.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/1208445655113787436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/1208445655113787436'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2013/02/quick-update.html' title='quick update'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/7fqb3cPPfuM/default.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-3614930190483312061</id><published>2012-08-26T14:18:00.002+01:00</published><updated>2016-06-06T22:07:20.065+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="downloads"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="soft selection"/><title type='text'>[Maya][Python] Querying soft selection</title><content type='html'>Handy little script modified from &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/python_inside_maya/q1JlddKybyM&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&amp;nbsp;to query and select the soft selection influenced components.&lt;br /&gt;
&lt;br /&gt;
&lt;script class=&quot;brush: python&quot; type=&quot;syntaxhighlighter&quot;&gt;import maya.cmds as mc
import maya.OpenMaya as om

def softSelection():
    selection = OpenMaya.MSelectionList()
    softSelection = OpenMaya.MRichSelection()
    OpenMaya.MGlobal.getRichSelection(softSelection)
    softSelection.getSelection(selection)
    
    dagPath = OpenMaya.MDagPath()
    component = OpenMaya.MObject()
    
    iter = OpenMaya.MItSelectionList( selection,OpenMaya.MFn.kMeshVertComponent )
    elements = []
    while not iter.isDone(): 
        iter.getDagPath( dagPath, component )
        dagPath.pop()
        node = dagPath.fullPathName()
        fnComp = OpenMaya.MFnSingleIndexedComponent(component)   
                
        for i in range(fnComp.elementCount()):
            elements.append(&#39;%s.vtx[%i]&#39; % (node, fnComp.element(i)))
        iter.next()
    return elements
    

mc.select(softSelection())
mc.softSelect(softSelectEnabled=False)&lt;/script&gt;
&lt;br /&gt;
This one instead returns the influenced objects. Great for quickly querying the objects within a specific distance of another object.
&lt;br /&gt;
&lt;br /&gt;
&lt;script class=&quot;brush: python&quot; type=&quot;syntaxhighlighter&quot;&gt;import maya.cmds as mc
import maya.OpenMaya as om

def softSelection():
    selection = om.MSelectionList()
    softSelection = om.MRichSelection()
    om.MGlobal.getRichSelection(softSelection)
    softSelection.getSelection(selection)
    dagPath = om.MDagPath()
    
    iter = om.MItSelectionList(selection)
    elements = []
    while not iter.isDone(): 
        iter.getDagPath(dagPath)
        dagPath.pop()
        elements.append(&#39;%s&#39;%dagPath.fullPathName())
        iter.next()
    return elements

def getObjectsInRadius(radius=20.0):
    mc.softSelect(softSelectEnabled=True,softSelectDistance=radius,softSelectFalloff=2)
    return softSelection()

print getObjectsInRadius(mc.ls(sl=True)[0])[1:]&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/3614930190483312061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/08/mayapython-querying-soft-selection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3614930190483312061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3614930190483312061'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/08/mayapython-querying-soft-selection.html' title='[Maya][Python] Querying soft selection'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-6087245971333542678</id><published>2012-07-02T18:37:00.001+01:00</published><updated>2012-07-02T18:38:30.570+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="creative assembly"/><category scheme="http://www.blogger.com/atom/ns#" term="rome 2"/><category scheme="http://www.blogger.com/atom/ns#" term="ROME II"/><category scheme="http://www.blogger.com/atom/ns#" term="total war"/><title type='text'>ROME II announced</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXOkhE13t_14mLKISZbmtu5NIoihfWu5aRqyi3Nzf9Cg5luw5rBVuCqN2KsYod81nPVrGSAZQ7bnrEtCSib1mo7jRQxLXFpEV-4ciX4CgGOoOZFs4C2bjg-gAUTp2VjfStn6lVYdv2Z8E/s1600/392911_335546639853876_673488056_n.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXOkhE13t_14mLKISZbmtu5NIoihfWu5aRqyi3Nzf9Cg5luw5rBVuCqN2KsYod81nPVrGSAZQ7bnrEtCSib1mo7jRQxLXFpEV-4ciX4CgGOoOZFs4C2bjg-gAUTp2VjfStn6lVYdv2Z8E/s640/392911_335546639853876_673488056_n.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
What I&#39;m currently working on here at CA.</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/6087245971333542678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/07/rome-ii-announced.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/6087245971333542678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/6087245971333542678'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/07/rome-ii-announced.html' title='ROME II announced'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXOkhE13t_14mLKISZbmtu5NIoihfWu5aRqyi3Nzf9Cg5luw5rBVuCqN2KsYod81nPVrGSAZQ7bnrEtCSib1mo7jRQxLXFpEV-4ciX4CgGOoOZFs4C2bjg-gAUTp2VjfStn6lVYdv2Z8E/s72-c/392911_335546639853876_673488056_n.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-6558050640541019713</id><published>2012-05-31T13:11:00.003+01:00</published><updated>2012-05-31T13:11:31.111+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="update"/><title type='text'>Update</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFgR_G0gZiWDTmvwFSSbMMAl_CnEdyuBbhVENTJa9312IVhqZe90STvKEijVQWmJQd7HqvvqW3Srsi1-eJWsKRbgTILOZKfnB2Bbw1LAtBb04Kesdzj27fQvmNTQ5yljuGLNO3a-6lmuA/s1600/The_creative_assembly-logo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFgR_G0gZiWDTmvwFSSbMMAl_CnEdyuBbhVENTJa9312IVhqZe90STvKEijVQWmJQd7HqvvqW3Srsi1-eJWsKRbgTILOZKfnB2Bbw1LAtBb04Kesdzj27fQvmNTQ5yljuGLNO3a-6lmuA/s400/The_creative_assembly-logo.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;Thought i&#39;d update, considering it has been a month or two.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;Been pretty busy lately with the moving, new job and 5-hour commute (temporary), so I haven&#39;t had much time to work on any of my own stuff, or do... well... anything.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;Once settled i&#39;ll probably get back on it.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/6558050640541019713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/05/update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/6558050640541019713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/6558050640541019713'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/05/update.html' title='Update'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFgR_G0gZiWDTmvwFSSbMMAl_CnEdyuBbhVENTJa9312IVhqZe90STvKEijVQWmJQd7HqvvqW3Srsi1-eJWsKRbgTILOZKfnB2Bbw1LAtBb04Kesdzj27fQvmNTQ5yljuGLNO3a-6lmuA/s72-c/The_creative_assembly-logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-9162746512133904423</id><published>2012-04-13T17:04:00.001+01:00</published><updated>2012-04-13T17:04:09.234+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="downloads"/><category scheme="http://www.blogger.com/atom/ns#" term="ld_selectMe"/><category scheme="http://www.blogger.com/atom/ns#" term="ldunham1"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="selection sets"/><title type='text'>Script: ld_selectMe (v2)</title><content type='html'>Re-wrote my free selection-set creation script, &#39;ld_selectMe&#39; in python.&lt;br /&gt;
Updates include a more dynamic UI, faster set creation and overall, a much better write of the actual selection script, allowing the same&amp;nbsp;functionality&amp;nbsp;but only much, much faster than its mel counterpart.&lt;br /&gt;
&lt;br /&gt;
You can download the re-write for free &lt;a href=&quot;http://www.mediafire.com/?umrjl2lrlq5rdbw&quot; target=&quot;_blank&quot;&gt;here &lt;/a&gt;(mediafire.com)&lt;br /&gt;
or creativecrash &lt;a href=&quot;http://www.creativecrash.com/maya/downloads/scripts-plugins/animation/c/ld_selectme-selection-sets&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Any comments/suggestions welcome.</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/9162746512133904423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/04/script-ldselectme-v2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/9162746512133904423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/9162746512133904423'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/04/script-ldselectme-v2.html' title='Script: ld_selectMe (v2)'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-9218263572418787959</id><published>2012-04-03T08:10:00.000+01:00</published><updated>2012-04-03T08:10:57.223+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="animation"/><category scheme="http://www.blogger.com/atom/ns#" term="bird"/><category scheme="http://www.blogger.com/atom/ns#" term="character rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="character td"/><category scheme="http://www.blogger.com/atom/ns#" term="freelance character td"/><category scheme="http://www.blogger.com/atom/ns#" term="geraint wright"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="sparrow"/><title type='text'>The Animated Sparrow</title><content type='html'>Really lovely animation (modeling and texturing) on the finished Sparrow rig by &lt;a href=&quot;https://vimeo.com/24854434&quot; target=&quot;_blank&quot;&gt;Geraint Wright&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;348&quot; mozallowfullscreen=&quot;&quot; src=&quot;http://player.vimeo.com/video/39683916&quot; webkitallowfullscreen=&quot;&quot; width=&quot;610&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/9218263572418787959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/04/animated-sparrow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/9218263572418787959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/9218263572418787959'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/04/animated-sparrow.html' title='The Animated Sparrow'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-7785061827321464015</id><published>2012-03-30T13:20:00.004+01:00</published><updated>2012-03-30T13:22:58.516+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cPickle"/><category scheme="http://www.blogger.com/atom/ns#" term="dictionaries"/><category scheme="http://www.blogger.com/atom/ns#" term="files"/><category scheme="http://www.blogger.com/atom/ns#" term="folders"/><category scheme="http://www.blogger.com/atom/ns#" term="json"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="nested dictionaries"/><category scheme="http://www.blogger.com/atom/ns#" term="pickle"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="Resources"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="write to file"/><title type='text'>Python: Writing nested dictionaries to file</title><content type='html'>Best suggestion I could think of was using cPickle (if available).&lt;br /&gt;
&lt;pre class=&quot;python&quot; name=&quot;code&quot;&gt;try:
    import cPickle as pickle
except:
    import pickle

# nested DICTIONARY
data = { &#39;one&#39;: {&#39;label&#39;: &#39;This is shot 001&#39;, &#39;start&#39;: 1, &#39;end&#39;: 10},
         &#39;two&#39;: {&#39;label&#39;: &#39;This is shot 002&#39;, &#39;start&#39;: 11, &#39;end&#39;: 25},
         &#39;three&#39;: {&#39;label&#39;: &#39;This is shot 003 - Needs Editing&#39;, &#39;start&#39;: 26, &#39;end&#39;: 50} }

# write to file with cPickle/pickle (as binary)
def ld_writeDicts(filePath,dict):
    f=open(filePath,&#39;w&#39;)
    newData = pickle.dumps(dict, 1)
    f.write(newData)
    f.close()

ld_writeDicts(&#39;C:/Users/Lee/Desktop/test2.dta&#39;,data)

#############

# read file decoding with cPickle/pickle (as binary)
def ld_readDicts(filePath):
    f=open(filePath,&#39;r&#39;)
    data = pickle.load(f)
    f.close()
    return data

# return dict data to new dict
newDataDict = ld_readDicts(&#39;C:/Users/Lee/Desktop/test2.dta&#39;)
# test nesting
print newDataDict[&#39;one&#39;][&#39;label&#39;]
&lt;/pre&gt;
As you can see its very simple to use and very quick. There are loads of alternatives if you wanted a nicely arranged, readable file, including json:

&lt;br /&gt;
&lt;pre class=&quot;python&quot; name=&quot;code&quot;&gt;import json

# nested DICTIONARY
data = { &#39;one&#39;: {&#39;label&#39;: &#39;This is shot 001&#39;, &#39;start&#39;: 1, &#39;end&#39;: 10},
         &#39;two&#39;: {&#39;label&#39;: &#39;This is shot 002&#39;, &#39;start&#39;: 11, &#39;end&#39;: 25},
         &#39;three&#39;: {&#39;label&#39;: &#39;This is shot 003 - Needs Editing&#39;, &#39;start&#39;: 26, &#39;end&#39;: 50} }

# write to file with json encoding
def ld_writeDicts(filePath,dict):
    f=open(filePath,&#39;w&#39;)
    newData = json.dumps(dict, sort_keys=True, indent=4)
    f.write(newData)
    f.close()

ld_writeDicts(&#39;C:/Users/Lee/Desktop/test&#39;,data)


# read file decoding with json
def ld_readDicts(filePath):
    f=open(filePath,&#39;r&#39;)
    data = json.loads(f.read())
    f.close()
    return data

# return dict data to new dict
newDataDict = ld_readDicts(&#39;C:/Users/Lee/Desktop/test.dta&#39;)
# test nesting
print newDataDict[&#39;one&#39;][&#39;label&#39;]
&lt;/pre&gt;
&lt;br /&gt;
However im all for cPickle.</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/7785061827321464015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/03/python-writing-nested-dictionaries-to.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/7785061827321464015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/7785061827321464015'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/03/python-writing-nested-dictionaries-to.html' title='Python: Writing nested dictionaries to file'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-1953376856268788211</id><published>2012-03-15T20:24:00.000+00:00</published><updated>2012-03-15T20:28:13.990+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="invert selection"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mel"/><category scheme="http://www.blogger.com/atom/ns#" term="render layers"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><title type='text'>Mel: Invert Selection from a render layer</title><content type='html'>Thought I might post up this useful code someone asked for...&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;python&quot; name=&quot;code&quot;&gt;//  ld_invertSel_rlyr.mel  0.2
// 
//  Authors:     Lee Dunham
//  Licence:     Creative Commons, Attribution, Share Alike
//  About:       Inverts selection for visible objects in current render layer.
//  Usage:
//      ld_invertSel_rlyr ;
global proc ld_invertSel_rlyr(){
string $currentRenderLayer=`editRenderLayerGlobals -q -currentRenderLayer` ;
string $objsRenLayer[]=stringArrayRemoveDuplicates(`editRenderLayerMembers -q $currentRenderLayer`) ;
for($obj in $objsRenLayer)
    if(`getAttr ($obj+&quot;.v&quot;)`==1 &amp;amp;&amp;amp; `objectType -isType &quot;transform&quot; $obj`)
        select -tgl $obj ;
    else
        select -d $obj ;
}&lt;/pre&gt;
&lt;br /&gt;
It&#39;ll invert the selection for whatever visible transform objects are in the current render layer. Its not fantastic but it was a 5-minute job.</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/1953376856268788211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/03/mel-invert-selection-from-render-layer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/1953376856268788211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/1953376856268788211'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/03/mel-invert-selection-from-render-layer.html' title='Mel: Invert Selection from a render layer'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-3673489765844267423</id><published>2012-03-14T17:02:00.001+00:00</published><updated>2020-09-29T03:50:06.604+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="character rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="character td"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster"/><category scheme="http://www.blogger.com/atom/ns#" term="downloads"/><category scheme="http://www.blogger.com/atom/ns#" term="facial rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="ld mirrorme"/><category scheme="http://www.blogger.com/atom/ns#" term="ld_mirrorMe"/><category scheme="http://www.blogger.com/atom/ns#" term="ldunham1"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mirror"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="soft selection"/><category scheme="http://www.blogger.com/atom/ns#" term="soft selection to cluster"/><title type='text'>ld_mirrorMe v1.5.0</title><content type='html'>&lt;div&gt;Edit: Source is now available on &lt;a href=&quot;https://github.com/ldunham1/maya_utilities/blob/master/ld_mirror_me.py&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;I was&amp;nbsp;surprised&amp;nbsp;by the response this tool had, so I&#39;m releasing v1.5.0 to help some people out, it&#39;ll be good to hear how you guys use it.&lt;br /&gt;
Alongside my &lt;a href=&quot;http://ldunham.blogspot.com/2012/03/python-create-cluster-from-soft.html&quot; target=&quot;_blank&quot;&gt;softCluster&lt;/a&gt; script, you&#39;ll&amp;nbsp;definitely&amp;nbsp;notice a speed increase in your workflow.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Download it &lt;a href=&quot;http://www.mediafire.com/?blmnapbn974dlh8&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&amp;nbsp;&lt;/span&gt;(mediafire link).&lt;br /&gt;
Download, extract and place script in maya&#39;s script directory and use&lt;br /&gt;
&lt;pre class=&quot;python&quot; name=&quot;code&quot;&gt;import ld_mirrorMe
ld_mirrorMe.GUI()
&lt;/pre&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;350&quot; mozallowfullscreen=&quot;&quot; src=&quot;http://player.vimeo.com/video/38444757&quot; webkitallowfullscreen=&quot;&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
It&#39;s features are shown on this much quicker demo (v1.0.0), supporting multi-mirroring for all modes.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Full details:&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;- 3 modes:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;1. Curve - mirrors nurbs curves, ideal for mirroring rig controls,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;2. Mesh - mirrors geo, ideal for mirroring blendshape targets,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;3. Deformer - mirrors only clusters (at present), uses object&#39;s pivot for mirroring.&lt;br /&gt;
&amp;nbsp;- multi-mirroring on all 3 modes,&lt;br /&gt;
&amp;nbsp;- choose mirror axis,&lt;br /&gt;
&amp;nbsp;- search and replace,&lt;br /&gt;
&amp;nbsp;- alter new objects position (currently either world 0, target, mirror or original - depending on mode),&lt;br /&gt;
&amp;nbsp;- world position/rotation based,&amp;nbsp;will work wherever or whatever the targets connected to,&lt;br /&gt;
&amp;nbsp;- entry objects names retained, if multiple copies needed (ideal for multi-clustering),&lt;br /&gt;
&amp;nbsp;- colourize option for Curves, if given curve is coloured (transform or shape), its mirror can be assigned a different colour,&lt;br /&gt;
&amp;nbsp;- quick and simple to use.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Updates:&lt;/span&gt;&lt;br /&gt;
09/03/12 - 0.5.0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Initial working version.&lt;br /&gt;
10/03/12 - 0.9.5&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Tidied UI and reduced/cleaned code.&lt;br /&gt;
13/03/12 - 1.0.0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Added colour option for curves.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Removed all pymel (speed issues).&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Allowed multi-mirroring.&lt;br /&gt;
14/03/12 - 1.5.0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Thanks to &lt;a href=&quot;http://www.mattmurrayanimation.com/&quot; target=&quot;_blank&quot;&gt;Matt Murray&lt;/a&gt; for feedback for further improvements.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Added option to mirror world position of mirrored curve.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Added further error-checking for all modes.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Fixed bug causing unwanted locking of attributes.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Added option to disable colouring of mirrored curve.&lt;br /&gt;
&lt;br /&gt;
Again, any feedback, problems/bugs or ideas lemmie know and I&#39;ll do what I can.</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/3673489765844267423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/03/ldmirrorme-v150.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3673489765844267423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3673489765844267423'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/03/ldmirrorme-v150.html' title='ld_mirrorMe v1.5.0'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-2575068167595574331</id><published>2012-03-10T19:12:00.000+00:00</published><updated>2012-03-11T17:06:59.385+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blendshapes"/><category scheme="http://www.blogger.com/atom/ns#" term="character rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="cluster"/><category scheme="http://www.blogger.com/atom/ns#" term="facial rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="freelance character td"/><category scheme="http://www.blogger.com/atom/ns#" term="ld_animateMe"/><category scheme="http://www.blogger.com/atom/ns#" term="ld_mirrorMe"/><category scheme="http://www.blogger.com/atom/ns#" term="ldunham1"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mirror"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="Resources"/><category scheme="http://www.blogger.com/atom/ns#" term="rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><title type='text'>ld_mirrorMe tool demo</title><content type='html'>Just made a quick demo for one of my 3 main toolsets, (ld_animateMe v2, ld_rigMe v1 and ld_mirrorMe v.9.5) the&amp;nbsp;ld_mirrorMe&amp;nbsp;tool, something I started a while ago but put off.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;450&quot; mozallowfullscreen=&quot;&quot; src=&quot;http://player.vimeo.com/video/38280714&quot; webkitallowfullscreen=&quot;&quot; width=&quot;600&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
This demo primarily shows mirroring on objects from world 0, but everything is calculated from worldspace and works accordingly, it doesn&#39;t matter where it is or what its connected/parented to, the mirror will work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Details:&lt;/span&gt;&lt;br /&gt;
3 modes - Curve, Mesh and Cluster (at present),&lt;br /&gt;
&amp;nbsp;-&amp;nbsp;Curve - Primarily for mirroring nurbs curves for controllers,&amp;nbsp;Mesh - Primarily for mirroring blendshapes (can mirror multiple targets at the same time),&amp;nbsp;and Cluster - (developing for other deformers), given a deformer and its mesh will mirror the deformer over giving a correctly mirrored pivot and origin based on the objects pivot.&lt;br /&gt;
Search and replace feature,&lt;br /&gt;
Choose mirror axis,&lt;br /&gt;
Choose new objects position,&lt;br /&gt;
World based - will work wherever or whatever the targets connected to,&lt;br /&gt;
Entries retained, no need to keep adding same object of multiple copies needed,&lt;br /&gt;
Simple to use.&lt;br /&gt;
&lt;br /&gt;
This was initially going to just be a tool for my rigging UI (ld_rigMe), but I prefer having it separate.&lt;br /&gt;
&lt;br /&gt;
Any ideas/comments welcome.</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/2575068167595574331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/03/ldmirrorme-tool-demo.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/2575068167595574331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/2575068167595574331'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/03/ldmirrorme-tool-demo.html' title='ld_mirrorMe tool demo'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-8404371653932557027</id><published>2012-03-07T16:18:00.001+00:00</published><updated>2020-09-29T03:55:24.400+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cluster"/><category scheme="http://www.blogger.com/atom/ns#" term="downloads"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="soft selection"/><category scheme="http://www.blogger.com/atom/ns#" term="soft selection to cluster"/><title type='text'>Python: Create Cluster from soft selection</title><content type='html'>&lt;div&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Edit: Source now available on &lt;a href=&quot;https://github.com/ldunham1/maya_utilities/blob/master/ld_soft_cluster.py&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;div&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Get the script&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.mediafire.com/?545fkr217ag549t&quot; style=&quot;font-size: x-large;&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;span style=&quot;font-size: large;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;or from creativecrash &lt;a href=&quot;http://www.creativecrash.com/maya/downloads/scripts-plugins/character/c/ld_createsoftcluster&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;313&quot; mozallowfullscreen=&quot;&quot; src=&quot;http://player.vimeo.com/video/38102335?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; webkitallowfullscreen=&quot;&quot; width=&quot;468&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
All thanks to&amp;nbsp;&lt;a href=&quot;http://brian.meljunky.com/&quot; target=&quot;_blank&quot;&gt;Brian Escribano&lt;/a&gt;&amp;nbsp;for his softSelection() code that gathers the id and weights of the current soft selection (basically, all the hard work).&lt;br /&gt;
It was simple enough to apply that information to a new cluster.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
Extract and place script file into a maya script directory (or python path directory) and run with this&lt;br /&gt;
&lt;pre class=&quot;python&quot; name=&quot;code&quot;&gt;import ld_createSoftCluster as sc
sc.ld_createSoftCluster()&lt;/pre&gt;&lt;br /&gt;
and thanks to &lt;a href=&quot;http://www.vraphix.com/&quot;&gt;Valen Wagner&lt;/a&gt; for the icon.&lt;br /&gt;
&lt;br /&gt;
Update:&lt;br /&gt;
07/03/12 - 0.4.0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Alters cluster position to match selection rather than influenced average.</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/8404371653932557027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/03/python-create-cluster-from-soft.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/8404371653932557027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/8404371653932557027'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/03/python-create-cluster-from-soft.html' title='Python: Create Cluster from soft selection'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-2233514784130056260</id><published>2012-03-04T18:11:00.000+00:00</published><updated>2012-03-07T14:26:50.064+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="character rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="demoreel"/><category scheme="http://www.blogger.com/atom/ns#" term="facial rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="freelance character td"/><category scheme="http://www.blogger.com/atom/ns#" term="ha ha hairies"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mel"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="showreel"/><title type='text'>Showreel 2011-12</title><content type='html'>Latest work from previous project, &lt;i&gt;Ha Ha Hairies&lt;/i&gt;, where I worked for Red Wire Media as the Character TD/Animator.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;263&quot; mozallowfullscreen=&quot;&quot; src=&quot;http://player.vimeo.com/video/37901643?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; webkitallowfullscreen=&quot;&quot; width=&quot;468&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Reel Breakdown:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Overview:&lt;/span&gt;&lt;br /&gt;
Rigged all shown characters, scripts and GUI&#39;s.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 1 (00:00:10):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;Rigged main character &#39;Kwiff&#39;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Rig fully scalable and modularly built to provide easy updating of rig if needed.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Simple Nurbs-based selection GUI for easy interaction.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 2 (00:00:31):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;Hybrid IK/FK spine for extreme posing and toony nature of show;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Broken &lt;/span&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;hierarchies to separate upper and lower posing and flexibility.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Traditional FK control during rotation, controllable volume preservation during translation.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Position and orient switching for full IK control.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 3 (00:00:39):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;Stretchy, bendy, volume-preserving limbs;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- With custom foot-roll, banking and various pivoting attributes.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 4 (00:01:18):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;Various scripts to assist posing and animation;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Ik/Fk blending, with snapping between the two over a single frame or a range of frames.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Fk setup to mirror live rotation.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Script to mirror or flip any part of the rig, including entire poses.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 5 (00:01:31):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;Animator-friendly finger controls;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Setup to allow quick posing of fingers with 2 attributes, as well as individual control over each finger via attributes and individual controllers.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 6 (00:01:36):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;Insert-blink script;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Based on animator designs, for a time-saving script.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 7 (00:01:41):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;Selection GUI;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Interchangeable between full rig and facial controls.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Varying levels of detail.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 8 (00:02:19):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;Animator friendly facial rig;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Minimal, joystick inspired controls with multiple functions to provide alot of interactivity with minimal effort.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Joint and blendshape based, with interactivity between the controls for quicker, stronger posing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;- Tweaking controls for more specific expressions and fine-tuning.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 9 (00:02:44):&lt;/span&gt;&lt;br /&gt;
Test facial rig;&lt;br /&gt;
- Use of multiple, individually controllable deformers, built into the rig.&lt;br /&gt;
- FK beak with tweaking lip controls.&lt;br /&gt;
- Various deformers on expressive areas of the face.&lt;br /&gt;
- Re-postionable eye sockets.&lt;br /&gt;
- Detachable upper/lower head for extreme posing.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: orange;&quot;&gt;Sequence 10 (00:03:12):&lt;/span&gt;&lt;br /&gt;
Test facial rig - Deform test;&lt;br /&gt;
- All deformers work together, rather than prioritising over&amp;nbsp;each other.&lt;br /&gt;
- Complete squash, stretching and deformation over the head rig whilst maintaining any pose, blendshape or joint-based.&lt;br /&gt;
- Whilst maintaining that&amp;nbsp;important&amp;nbsp;ability to &lt;i&gt;scale&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/2233514784130056260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/03/showreel-2011-12.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/2233514784130056260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/2233514784130056260'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/03/showreel-2011-12.html' title='Showreel 2011-12'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-3567923150829332374</id><published>2012-02-23T18:23:00.000+00:00</published><updated>2012-03-07T12:26:12.371+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="animation"/><category scheme="http://www.blogger.com/atom/ns#" term="downloads"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mel"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><title type='text'>Mel: ld_animToCurve - create nurbs curve from moving objects or verts</title><content type='html'>&lt;span style=&quot;font-size: large;&quot;&gt;Download the script directly,&amp;nbsp;&lt;a href=&quot;http://www.mediafire.com/?qfls2joop52qdt5&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&amp;nbsp;&lt;/span&gt;(follow link and place it in maya&#39;s script directory)&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;or from creativecrash &lt;a href=&quot;http://www.creativecrash.com/maya/downloads/scripts-plugins/c/ld_animtocurve&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;263&quot; mozallowfullscreen=&quot;&quot; src=&quot;http://player.vimeo.com/video/37324514?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; webkitallowfullscreen=&quot;&quot; width=&quot;468&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
Creates a nurbs curve for each selected object and/or vert over a series of frames (like a motionTrail, but without the motionTrail bit).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Works using xforms&lt;/b&gt; - so object could be skinned, constrained, driven by expressions etc,&lt;br /&gt;
&lt;b&gt;Simple to cleanup&lt;/b&gt; - just rebuild the curve,&lt;br /&gt;
&lt;b&gt;Simple to use&lt;/b&gt; - select the objects and/or verts you want and execute using ld_animToCurve ;&lt;br /&gt;
&lt;br /&gt;
Useful for quickly putting together complex shapes or tracking a vert&#39;s/object&#39;s position.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Updates:&lt;/u&gt;&lt;br /&gt;
07/03/12: &amp;nbsp;0.6.0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Fixed issue selecting some verts.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.7.0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;Added poly faces - now requires modified version of&amp;nbsp;owen burgess&#39; 2009 script &quot;getfacecenters.py&quot; (included).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/3567923150829332374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/02/mel-ldanimtocurve-create-nurbs-curve.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3567923150829332374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3567923150829332374'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/02/mel-ldanimtocurve-create-nurbs-curve.html' title='Mel: ld_animToCurve - create nurbs curve from moving objects or verts'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-5449131984922202114</id><published>2012-02-21T11:35:00.000+00:00</published><updated>2012-02-21T11:36:47.856+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="indexing"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mel"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="split"/><category scheme="http://www.blogger.com/atom/ns#" term="string"/><category scheme="http://www.blogger.com/atom/ns#" term="tokenize"/><title type='text'>Mel: Query part of a string, given its index and separator: PART 3</title><content type='html'>Update from &lt;a href=&quot;http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its_20.html&quot; target=&quot;_blank&quot;&gt;PART 2&lt;/a&gt;.&lt;br /&gt;
Thanks to Viktoras Makauskas for the suggestions and link.&lt;br /&gt;
&lt;code&gt;// get an item from a string given the string, separator and index range
// ld_getName &quot;L_test_me_out_bind_jnt&quot; &quot;_&quot; 2 -2 ;
global proc string ld_getName(string $obj,string $separator,int $start,int $end)
{
    string $buffer[],$name ;
    int $numTokens=`tokenize $obj $separator $buffer` ;
    if($start&amp;lt;0)
        $start=$numTokens+$start ;
    if($end&amp;lt;0)
        $end=$numTokens+$end ;
    if($start&amp;lt;0 || $start&amp;gt;=$numTokens || $end&amp;lt;0 || $end&amp;gt;=$numTokens || $start&amp;gt;$end)
        return &quot;&quot; ;
    $name=$buffer[$start] ;
    for($n=($start+1);$n&amp;lt;=$end;$n++)
        $name+=$separator+$buffer[$n] ;
    return $name ;
}&lt;/code&gt;&lt;br /&gt;
Changes include:&lt;br /&gt;
&amp;nbsp; 1. &amp;nbsp;Separating the indexing to individual ints instead of a string that needs to get split.&lt;br /&gt;
&amp;nbsp; 2. &amp;nbsp;Using the indexes to&amp;nbsp;specify&amp;nbsp;the token, not the separator.&lt;br /&gt;
&amp;nbsp; 3. &amp;nbsp;More error checking.&lt;br /&gt;
Main difference is 0 -1 will now return the entire string rather than all but the last token (as it does in Python), mainly for functionality due to the removal of the colon. Can still return one item using the same int (ie the last token would be -1 -1).</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/5449131984922202114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its_21.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5449131984922202114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5449131984922202114'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its_21.html' title='Mel: Query part of a string, given its index and separator: PART 3'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-5867266651484368817</id><published>2012-02-20T14:33:00.000+00:00</published><updated>2012-02-20T14:33:10.111+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="indexing"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mel"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="split"/><category scheme="http://www.blogger.com/atom/ns#" term="string"/><category scheme="http://www.blogger.com/atom/ns#" term="tokenize"/><title type='text'>Mel: Query part of a string, given its index and separator: PART 2</title><content type='html'>Update to previous post (&lt;a href=&quot;http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;), needed to grab a range of items from a string given a separator and index/range (supports reverse and extended indexing).&lt;br /&gt;
I do have a horribly sneaky suspicion there is already a built in command for this...&lt;br /&gt;
Will work with ranges given as &quot;0&quot;, &quot;-1&quot;,  &quot;0:&quot;,&quot;-2:&quot;, &quot;:2&quot;, &quot;:-2&quot;, &quot;1:3&quot; and &quot;-3:-1&quot; etc.&lt;br /&gt;
&lt;code&gt;// get an item from a string given the string, separator and index number/range as string (supports reverse indexing)
//ld_getName &quot;L_test_me_out_bind_jnt&quot; &quot;_&quot; &quot;2:-1&quot; ;
global proc string ld_getName(string $obj,string $separator,string $index)
{
    string $mulBuffer[],$indBuffer[],$name ;
    int $range[],$start,$end ;
    tokenize $index &quot;:&quot; $mulBuffer ;
    $range[0]=int($mulBuffer[0]) ;
    if(startsWith($index,&quot;:&quot;))
    {
        $mulBuffer[1]=$range[0] ;
        $range[0]=0 ;
    }
    else if(endsWith($index,&quot;:&quot;))
        $mulBuffer[1]=-1 ;
    tokenize $obj $separator $indBuffer ;
    $start=$range[0] ;
    if($range[0]&lt;0)
        $start=size($indBuffer)-(abs($range[0])) ;
    if(size($mulBuffer)&gt;1)
    {
        $range[1]=int($mulBuffer[1]) ;
        $end=$range[1] ;
        if($range[1]&lt;0)
            $end=size($indBuffer)-abs($range[1]) ;
        if($end&gt;(size($indBuffer)-1))
            return &quot;&quot; ;
        $name=$indBuffer[$start] ;
        for($n=($start+1);$n&lt;$end;$n++)
            $name+=$separator+$indBuffer[$n] ;
    }
    else
    {
        if($start&lt;0)
            $name=$indBuffer[size($indBuffer)-int(abs($start))] ;
        else
            $name=$indBuffer[$start] ;
    }
    return $name ;
}&lt;/code&gt;
Would appreciate any feedback (I know how much simpler this is in python, was curious how simple it was to do in mel).&lt;br /&gt;
Python, i think, would handle like this:
&lt;br /&gt;&lt;code&gt;&quot;L_test_me_out_bind_jnt&quot;.split(&quot;_&quot;)[2:-1]&lt;/code&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/5867266651484368817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its_20.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5867266651484368817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5867266651484368817'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its_20.html' title='Mel: Query part of a string, given its index and separator: PART 2'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-3141793822688534521</id><published>2012-02-16T20:25:00.000+00:00</published><updated>2012-02-20T14:36:01.892+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mel"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="split"/><category scheme="http://www.blogger.com/atom/ns#" term="string"/><category scheme="http://www.blogger.com/atom/ns#" term="tokenize"/><title type='text'>Mel: Query part of a string, given its index and separator</title><content type='html'>UPDATE: Updated version with better functioning &lt;a href=&quot;http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its_20.html&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
I realised how often I was using a mix of the tokenize, startString and endString to get sections of a string, whether the start or end (various ways) or the middle (ie getting the side &quot;L_*&quot; or &quot;R_*&quot; or type of object &quot;*_ctrl&quot; &quot;*_bind_jnt&quot;) etc, and I loved the way python handles this instead (especially the reverse indexing) so I come up with this.&lt;br /&gt;
&lt;code&gt;global proc string ld_getName(string $obj,string $separator,int $index)
{
    string $buffer[],$name ;
    tokenize $obj $separator $buffer ;
    if($index&amp;lt;0)
        $name=$buffer[size($buffer)-int(abs($index))] ;
    else
        $name=$buffer[$index] ;
    return $name ;
}

//ld_getName &quot;L_test_me_out_ctrl&quot; &quot;_&quot; -1 ;&lt;/code&gt;&lt;br /&gt;
EDIT: Changed positive indexing to match 0 = start, -1 = end</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/3141793822688534521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3141793822688534521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3141793822688534521'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/02/mel-query-part-of-string-given-its.html' title='Mel: Query part of a string, given its index and separator'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-6308063373664996709</id><published>2012-02-04T03:44:00.001+00:00</published><updated>2012-02-04T03:44:04.638+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blendshapes"/><category scheme="http://www.blogger.com/atom/ns#" term="corrective blends"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="poses"/><category scheme="http://www.blogger.com/atom/ns#" term="rigging"/><title type='text'>Correctional blendshapes</title><content type='html'>I always had nightmares creating correctional blendshapes for rigs, having to work on the duplicated default mesh whilst watching the result mesh update (still trying to get over how I ever did this on a single 15&quot; monitor...),&lt;br /&gt;
&lt;div&gt;
and then I found out how blendshape weights aren&#39;t limited from 0 to 1... and less than 0.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Now creating correctional blendshapes is far more enjoyable and takes up much less time, using a very simple setup.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Its actually very basic math (the way I see it anyways)&lt;/div&gt;
&lt;div&gt;
a + b = c&lt;/div&gt;
&lt;div&gt;
which therefore means...&lt;/div&gt;
&lt;div&gt;
b = c - a&lt;/div&gt;
&lt;div&gt;
so if &quot;a&quot; was a pose, &quot;b&quot; was its correction, and &quot;c&quot; the result of both. Now if you take the pose away from the result, your left with... the correction!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Corrective blendshape wise, you need to put your character into its pose you want to correct,&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWYy1MoYEcAr2toz6aMO6uTVVcUAvkzYiZMkKdkTbUlKUnQMD6ef97FIfGnnApZzXHl9Lq_9DhUoADDKScsCUZRKtA6ycPdny6LAO3ZXhkLK6wCZTmtYtMj0VsHODHQEnvFihVg-DWKq0/s1600/Correctional+blendshapes01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;143&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWYy1MoYEcAr2toz6aMO6uTVVcUAvkzYiZMkKdkTbUlKUnQMD6ef97FIfGnnApZzXHl9Lq_9DhUoADDKScsCUZRKtA6ycPdny6LAO3ZXhkLK6wCZTmtYtMj0VsHODHQEnvFihVg-DWKq0/s320/Correctional+blendshapes01.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
duplicate the mesh and create the correction (&quot;b&quot;),&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7GUmuJIFZCPWCiptt0OvDnybKCxB-gcMjZ70EkkAdlm-48MZHvfQ7RQXA5SHbLEM-FVHyf87pANUiPYH3yXwuCkh5X68xED5kUvrlEnb60GxByErOdd68xBpw-oF0HocIsqTKw0FoyaQ/s1600/Correctional+blendshapes02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;143&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7GUmuJIFZCPWCiptt0OvDnybKCxB-gcMjZ70EkkAdlm-48MZHvfQ7RQXA5SHbLEM-FVHyf87pANUiPYH3yXwuCkh5X68xED5kUvrlEnb60GxByErOdd68xBpw-oF0HocIsqTKw0FoyaQ/s320/Correctional+blendshapes02.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
duplicate the mesh orginal mesh off again (to get &quot;a&quot;)
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYlf-cnBhIf0cOpzUiJELD1o0drtDsbAVqtutWeexv_7NGgpm_NczdHKx-iFuz_7sAt2UAwJVbEqgMzp_7uB6gon7kV-wGdpiXsZvqTWbrRXi4mKnw7pf1I719WxjC4L0g4XAgZNxq2j8/s1600/Correctional+blendshapes03.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;143&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYlf-cnBhIf0cOpzUiJELD1o0drtDsbAVqtutWeexv_7NGgpm_NczdHKx-iFuz_7sAt2UAwJVbEqgMzp_7uB6gon7kV-wGdpiXsZvqTWbrRXi4mKnw7pf1I719WxjC4L0g4XAgZNxq2j8/s320/Correctional+blendshapes03.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Then you duplicate the mesh with no&amp;nbsp;deformations&amp;nbsp;on it (as you would creating a normal blendshape), and assign the pose mesh and the corrective mesh (&quot;a&quot; + &quot;b&quot;). You finally want to turn on the correction blend weight to 1, and the pose blend weight to -1.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDOwkGE121xtfu_kTb0ErYs_lyldb0-40VjN3qPVD38zxRi1tFxcQRcyzYO3VsNqSkligqDKsgDAEIG-4CMDa8XlWMJoUX5xskLh8Okq2EzCVVKqJGGWwdzzCACqGw4qaKPngSeE78SYg/s1600/Correctional+blendshapes04.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;143&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDOwkGE121xtfu_kTb0ErYs_lyldb0-40VjN3qPVD38zxRi1tFxcQRcyzYO3VsNqSkligqDKsgDAEIG-4CMDa8XlWMJoUX5xskLh8Okq2EzCVVKqJGGWwdzzCACqGw4qaKPngSeE78SYg/s320/Correctional+blendshapes04.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Your then left with just the correction, which you duplicate off and apply as a corrective blendshape target for you character.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This can be taken so much further to do live pose updates (above is all automated), but I wont go into that yet.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I hope this helps!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/6308063373664996709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/02/correctional-blendshapes.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/6308063373664996709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/6308063373664996709'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/02/correctional-blendshapes.html' title='Correctional blendshapes'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWYy1MoYEcAr2toz6aMO6uTVVcUAvkzYiZMkKdkTbUlKUnQMD6ef97FIfGnnApZzXHl9Lq_9DhUoADDKScsCUZRKtA6ycPdny6LAO3ZXhkLK6wCZTmtYtMj0VsHODHQEnvFihVg-DWKq0/s72-c/Correctional+blendshapes01.jpg" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-4367717123493496331</id><published>2012-01-31T22:26:00.000+00:00</published><updated>2012-01-31T22:26:18.312+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mel"/><category scheme="http://www.blogger.com/atom/ns#" term="number padding"/><category scheme="http://www.blogger.com/atom/ns#" term="padding"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="string"/><title type='text'>Mel/Python: Adding number padding</title><content type='html'>I was looking through some older scripts and hit across my dirty attempt to add number padding, and I was&amp;nbsp;surprised&amp;nbsp;it actually worked.&lt;br /&gt;
I went about tidying it up and came up with this little number in mel.&lt;br /&gt;
&lt;code&gt;global proc string rt_addPadding(int $num,int $padding)
{
    int $lengthNum=size(string($num)) ;
    string $padString;
    if($lengthNum&amp;lt;$padding)
        for($i=0;$i&amp;lt;($padding-$lengthNum);$i++)
            $padString=$padString+&quot;0&quot; ;
    return $padString+string($num) ;
}&lt;/code&gt;
&lt;br /&gt;
Which works ok, and then a couple of minutes searching I came across a post by &lt;a href=&quot;http://www.naughtynathan.co.uk/&quot; target=&quot;_blank&quot;&gt;Nathan&lt;/a&gt;&amp;nbsp;which instead uses python (and is far better).&lt;br /&gt;
&lt;code&gt;string $pad = `python (&quot;&#39;%0&quot;+$padding+&quot;d&#39; % &quot;+$num)`;&lt;/code&gt;&lt;br /&gt;
This then is used as this.&lt;code&gt;global proc string rt_addPadding(int $num,int $padding)
{
    return `python(&quot;&#39;%0&quot;+$padding+&quot;d&#39; % &quot;+$num)` ;
}
&lt;/code&gt;&lt;br /&gt;
Useful :)</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/4367717123493496331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/01/melpython-adding-number-padding.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/4367717123493496331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/4367717123493496331'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/01/melpython-adding-number-padding.html' title='Mel/Python: Adding number padding'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-5153150694301781273</id><published>2012-01-26T08:50:00.002+00:00</published><updated>2012-01-26T09:19:35.987+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bird"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="rigging"/><category scheme="http://www.blogger.com/atom/ns#" term="sparrow"/><category scheme="http://www.blogger.com/atom/ns#" term="wing"/><title type='text'>Bird Rig: Current WIP</title><content type='html'>&lt;a href=&quot;http://vimeo.com/24854434&quot; target=&quot;_blank&quot;&gt;Geraint Wright&lt;/a&gt;&amp;nbsp;asked if I could build a quick rig for a sparrow animation (model would be supplied).&lt;br /&gt;
&lt;br /&gt;
This is where it is atm. (still alot of work to go into it) but alot of the base ideas are there.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe src=&quot;http://player.vimeo.com/video/35679039?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; width=&quot;468&quot; height=&quot;342&quot; frameborder=&quot;0&quot; webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;
&lt;br /&gt;
The&amp;nbsp;separation&amp;nbsp;of the feathers was far simpler than I though actually, using a couple of curves and the very useful pointOnCurveInfo nodes (same nodes used in motionpaths but without the extra crap), then just a basic heirachy of&amp;nbsp;dependencies of controllers and aim constraints (the feather bending is hideous but was only quickly thrown together, needs more thought behind it so expect that to change).&lt;br /&gt;
One issue (kinda solved, looking into better solutions) was due to the aim constraint, feathers&amp;nbsp;wouldn&#39;t&amp;nbsp;react accordingly to folding or certain&amp;nbsp;positions, especially when pulled about a fair bit. Simple solution was to&amp;nbsp;declare&amp;nbsp;the aims up object as another controller (well, one for each segment).&lt;br /&gt;
Alot of automation (of course each with manual overrides and on/off blending) will be needed to get a smoother transition and to &#39;hide&#39; any smaller issues, included with a smart system to fold the wing (some scripting required).&lt;br /&gt;
The animation it&#39;ll be used in you wont really see much of the detail but&amp;nbsp;I&#39;d&amp;nbsp;rather put the work in now if any shots/ideas for closer cuts are thrown in...&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
&lt;a href=&quot;http://forums.cgsociety.org/showthread.php?f=7&amp;amp;t=836433&amp;amp;highlight=wing&quot;&gt;http://forums.cgsociety.org/showthread.php?f=7&amp;amp;t=836433&amp;amp;highlight=wing&lt;/a&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.brendanbody.co.uk/flight_tutorial/index.html&quot;&gt;http://www.brendanbody.co.uk/flight_tutorial/index.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/5153150694301781273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/01/bird-rig-current-wip.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5153150694301781273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/5153150694301781273'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/01/bird-rig-current-wip.html' title='Bird Rig: Current WIP'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-536028505499887975.post-3988461959098921719</id><published>2012-01-18T12:50:00.000+00:00</published><updated>2012-01-20T10:44:37.783+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="animation"/><category scheme="http://www.blogger.com/atom/ns#" term="downloads"/><category scheme="http://www.blogger.com/atom/ns#" term="ld_animateMe"/><category scheme="http://www.blogger.com/atom/ns#" term="maya"/><category scheme="http://www.blogger.com/atom/ns#" term="mel"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><title type='text'>ld_animateMe v1.0.0</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;ld_animateMe now&amp;nbsp;available!&lt;/span&gt; &lt;span style=&quot;font-size: large;&quot;&gt;- &lt;a href=&quot;http://www.creativecrash.com/maya/downloads/scripts-plugins/animation/c/ld_animateme-animation-tool&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
current version 1.2.1&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPiGQiugj95d_P4IWyS6UwMREZgb8kunwAWbTzDVfLdpF5zuJKVEmyt95Iji4tAJtlBviQbkRUZ_zHmlfFC-pwFlwC-c7KaywpVPlBqdcqDlMAmE-NcdFElPhpnlg5t_RvH3L6uR_hQGk/s1600/01.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPiGQiugj95d_P4IWyS6UwMREZgb8kunwAWbTzDVfLdpF5zuJKVEmyt95Iji4tAJtlBviQbkRUZ_zHmlfFC-pwFlwC-c7KaywpVPlBqdcqDlMAmE-NcdFElPhpnlg5t_RvH3L6uR_hQGk/s320/01.PNG&quot; width=&quot;201&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Re-arrange, offset and reverse keyframes, plus other useful tools.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To Install:&lt;/b&gt;&lt;br /&gt;
Place the downloaded &quot;ld_animateMe.mel&quot; file into one of your Maya scripts directories, restart Maya and use the following code to load the UI.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;ld_animateMe;&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;To Use:&lt;/b&gt;&lt;br /&gt;
animateMe is designed to be compact and clutter free, giving you the valuable screen space you need.&lt;br /&gt;
Besides&amp;nbsp;minimizing&amp;nbsp;the frames for each section, you can remove it from the tool under the &quot;Display&quot; menu by unchecking the related box. If you cant it back, simply re-check the box.&lt;br /&gt;
As well as clicking the relevant buttons, you can use the sliders to adjust the value you want and once released, it will run that tool, making it as quick as possible to use.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&lt;span style=&quot;color: orange;&quot;&gt;- User Info:&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
The user info is designed to quickly let you know some useful information regarding your scene that could potentially save hassle later, such as; Forgetting to turn auto-save on, or whether your animating to 24fps or 25. The information is &amp;nbsp;reloaded on creation of the UI, or by clicking the refresh icon to the right.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: orange;&quot;&gt;&amp;nbsp;- Adjust Animation - Shift mode:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
To adjust animation, you must select keyframes from either the timeline, or the curve editor.&lt;br /&gt;
Entering a number will shift the selected keys by that value, whether positive (ie &quot;2&quot; = shift selected keys 2 frames later, or &quot;-2&quot; = shift selected keys 2 frames earlier.)&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-size: x-small;&quot;&gt;EDIT:&lt;b&gt;&amp;nbsp;&lt;/b&gt;19/01/2012&amp;nbsp;- v 1.2.0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-size: x-small;&quot;&gt;- If no range in timeline or keys selected in curve editor, animtaion will be adjusted from current point onwards.&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: orange;&quot;&gt;&amp;nbsp;- Adjust Animation - Offset mode:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
To adjust animation, you must select keyframes from either the timeline, or the curve editor.
&lt;br /&gt;
Offset animation works with your selection order. It will offset every selected object&#39;s selected keyframes by X amount of frames relative to the object selected before it.&lt;br /&gt;
&lt;br /&gt;
1. object1, 2 and 3 each has a key on frame 1.&lt;br /&gt;
2. You select them in numerical order (object1 first and object3 last).&lt;br /&gt;
3. You use Offset mode with value of 2.&lt;br /&gt;
4. object2&#39;s key will now be at frame 3 and object3&#39;s key will now be at frame 5.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfVlSXfHlXGrWEJ3_jXMvctiH0gslVCkSBiYlykdnIA9-rHt41xWa66PHCuZTfiUmOH9lqnXCcYLNjpVp5v2vNuTYKAbT_uDBNHMVStMUqOsHYjRzkttCFzQB95qZB2X19Zo9ebE1E4UY/s1600/04.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;332&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfVlSXfHlXGrWEJ3_jXMvctiH0gslVCkSBiYlykdnIA9-rHt41xWa66PHCuZTfiUmOH9lqnXCcYLNjpVp5v2vNuTYKAbT_uDBNHMVStMUqOsHYjRzkttCFzQB95qZB2X19Zo9ebE1E4UY/s400/04.PNG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: orange;&quot;&gt;&amp;nbsp;- Adjust Animation - Reverse mode:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
You can reverse your&amp;nbsp;animation by selecting the keys from either the timeline, or the curve editor.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: orange;&quot;&gt;&amp;nbsp;- Scale Keys - Individual Pivots:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
To use scale keys, you must have keys or curves selected in the curve editor.&lt;br /&gt;
For every key selected, it will &amp;nbsp;scale it at the point between its previous and next value, as if it was blending the key between the keys either side. It works great for toning up or down, facial expressions, poses etc or even adding overshoot.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: orange;&quot;&gt;&amp;nbsp;- Scale Keys - Pivot on 0:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
To use scale keys, you must have keys or curves selected in the curve editor.&lt;br /&gt;
This mode will scale all the selected keys the same pivot of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: orange;&quot;&gt;&amp;nbsp;- Selection Sets:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Compact version of ld_selectMe (&lt;a href=&quot;http://www.creativecrash.com/maya/downloads/scripts-plugins/animation/c/ld_selectme-selection-sets&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;).&lt;br /&gt;
Maya&#39;s own selection sets are node based, meaning that creating a selection set for a character will only work in that file, which is and very limiting.&amp;nbsp;This tool, instead, compiles a selection &lt;i&gt;script&lt;/i&gt; and saves it to shelf to be used in&lt;i&gt; any&lt;/i&gt; file, along with a toggle selection function by ctrl+clicking the shelf button.&lt;br /&gt;
&quot;Name&quot; is to enter the name of the button as it will appear on the shelf.&lt;br /&gt;
&quot;clear&quot; clears the list and name field.
&lt;br /&gt;
&quot;+&quot; adds selected objects to list.
&lt;br /&gt;
&quot;-&quot; removes selected list items from list (can also press &quot;delete&quot; key).&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-size: x-small;&quot;&gt;EDIT:&amp;nbsp;19/01/2012&amp;nbsp;- v 1.2.0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-size: x-small;&quot;&gt;- Now creates selection shelf button that will attempt to use namespace of the FIRST currently selected object, if no objects currently select, default one is used.&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: orange;&quot;&gt;News/Updates:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Version 1.5.0 is underway, automating the user info with extra information displayed, such as the last saved time for the current file, snapping tools (including component snapping), and a new Scale Keys mode, called &quot;Falloff&quot;.&lt;br /&gt;
Thanks to quick feedback, I&#39;ve been able to make some adjustments to the functionality of the tool.
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Version 1.2.0:&lt;/b&gt;&lt;br /&gt;
19/01/2012&amp;nbsp;-&lt;br /&gt;
Edited functionality of Adjust Animation.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;- If no range in timeline or keys selected in curve editor, animtaion will be adjusted from current point onwards.&lt;br /&gt;
Edited functionality of Selection Sets.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;- Now creates selection shelf button that will attempt to use namespace of the FIRST currently selected object, if no objects currently select, default one is used.
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Version 1.2.1:&lt;/b&gt;&lt;br /&gt;
19/01/2012&amp;nbsp;-
&lt;br /&gt;
Fixed issue with Selection Sets update.&lt;br /&gt;
&amp;nbsp; - If current selection&#39;s namespace didnt&#39;t contain an item in selection list, it would error, it will now instead just use default namespace. 
&lt;br /&gt;
&lt;br /&gt;
Any suggestions, please let me know.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://ldunham.blogspot.com/feeds/3988461959098921719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ldunham.blogspot.com/2012/01/ldanimateme-v100.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3988461959098921719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/536028505499887975/posts/default/3988461959098921719'/><link rel='alternate' type='text/html' href='http://ldunham.blogspot.com/2012/01/ldanimateme-v100.html' title='ld_animateMe v1.0.0'/><author><name>Lee Dunham</name><uri>http://www.blogger.com/profile/11548341409322230513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPiGQiugj95d_P4IWyS6UwMREZgb8kunwAWbTzDVfLdpF5zuJKVEmyt95Iji4tAJtlBviQbkRUZ_zHmlfFC-pwFlwC-c7KaywpVPlBqdcqDlMAmE-NcdFElPhpnlg5t_RvH3L6uR_hQGk/s72-c/01.PNG" height="72" width="72"/><thr:total>1</thr:total></entry></feed>