Read this article: How to make birds fly good by Brendan Body.
It’s hands down the best resource about bird flight I’ve seen. Great info for animators and riggers with plenty of example pictures and videos.
I will be looking for a select group of testers that will be able to push it through its paces and make sure that it is production ready. If you are interested in joining in drop me an email at Email: email@example.com letting me know what sort of work you do and how you would like to be using it.
Please drop into the web site to see what is being offered and read more information about the classes.
MX Driver has been designed as an animators tool for working with Car, Truck and Trailer animations. It is not a vehicle simulator that calculates its own trajectory and rollover. It has automation built in that will aid in the creation of realistic and even cartoony vehicle animations.
PEN Licensing system was developed to address the need for a quick, easy and secure way to license Max Script tools. Without a licensing system it is very easy for wares sites to provide free versions of the tools that you have worked hard to create. With this system any vendor can provide encrypted and secure licensing for scripted tools of all kinds.
Well Hobbit is out, it seems to have been received with a mixture of excitement and disappointment, I wont mention which camp I fall into, suffice to say that I think Smaug turned out pretty well. Let me know what you thought. This was my first film with an Animation TD credit, as I ended up doing much more technical and development work than actual animation.
Anyway, here’s a trailer for the next crop of Weta work to look forward to!
UPDATE: Registration is closed, thank you. Rigging Dojo Winter break workshop for Rigging and Animating with Motion capture. Only 99$ Attention animation students (and others) on winter break! We are offering …
The post Limited: Winter break workshop 99$ rigging and animating with motion capture appeared first on Rigging Dojo.
There is also a quick demo on vimeo... I know, my english is not very good, but I'm doing my best :)
I’m very proud to say that we’ve just wrapped up the first version of a new app called MGODI we’ve been working on along with Joep (for those who don’t know him, he’s the mastermind behind End User Event).
What is MGODI do you ask? Well, it’s everything I wanted, especially when I was out there looking for a job!
MGODI is an app that connects companies and people, also people and people!
As a user you can create your profile and specify which are your skills and your expertise, and then, every time someone posts a job that match your skills and expertise…. guess what? You get notified! We want to have jobs looking for you. You can filter jobs by skills, expertise and country, of course, if you prefer, you can disable this filters and get ALL the job postings, which is great too
After you’ve been matched to a job, the process is really easy, you apply, on the other side, people are able to see your profile, your portfolio and send you an email. That’s it, that simple. After this, both parties do their own thing, we are just there to help out on the first step.
Of course, now you say “yeah right, how much is that gonna cost me?” and I say: Nada, nicles, niet, zip, nothin!
It’s free for all users to register, have their profile and portfolio. For posting a job, there’s a small amount of 2.99$. All of this is available for iOS 6.0+ as a universal app for your iPhone/iPad.
Well, that’s pretty much it and it’s been a hell of a ride, BUT we’re not finished, we are now working on the Android which will come with some new features (that will also be made available for the iOS version), expect it in the first quarter of 2014, meanwhile be sure to check our website and download the app!
You can find out more here: www.mgodi.com
In this post I hope to explain how hiring externally as a tool for fixing problems ultimately leads to a weaker organization.
When I began writing this post, I was having a hard time. Whereas the post talking about what a bad idea firing is was easy, the situation is considerably better for hiring. For starters, there are more organizations that do a good job. Very rigorous hiring practices, even during growth. It’s also easier to talk about how a company hires people than how it fires people, as its generally a positive experience (which is why this article probably seems a lot weaker than the previous). Of course sometimes you need to hire specialists for very specific areas (I’m talking something like ‘hardware emulation’ or ‘low-level rendering engines’, not ‘databases’ or ‘UI programming’), where it is prohibitive to train or grow people in a year. And sometimes there are amazing individuals you just need to have (take Ward Cunningham being hired into New Relic or John Carmack becoming CTO of Occulus as examples). Then there are organizations in periods of rapid growth. While rapid growth is always risky, it’s often necessary to bring enough force to bear in innovative companies. I’d much rather see stable growth but it’s not always an option. So I needed a clear demonstration of the problems.
Then, like manna from an ironic heaven, I saw this article about Abercrombie’s CEO. After investor calls for his resignation, Abercrombie renewed his contract and stated their plan to hire in three executives to manage each of their brands. The idea is that one of them will replace the current CEO, and the CEO has done a bad job managing things, and of course did not groom internal candidates, so it seems they are due to come from the outside.
I don’t understand how anyone expects this to end well. Each Brand President will come in, make changes (including, probably, layoffs!) that benefit the short term (because their goal is to be CEO), and then: 1) The one that becomes CEO will stay a few years. The average tenure of a CEO in America is about 4.5 years. 2) The two that do not will likely leave, meaning new executives will be hired in and there will be more instability.
This is the sort of hiring- not just at the CEO level but all leadership levels down to team lead- that I think can be misguided. Why?
Mostly, because it disguises a problem. Most organizations buy into the idea that internal candidates should be preferred to external ones (another Lean principle!), yet still need to look outside for senior talent and managers. I would compare the situation and solution to DevOps: if deployments are an issue, the worst thing to do is isolate their handling to a small group and deploy less frequently. The DevOps movement has shown us the power of the mantra of “if it hurts, do it more often.”
I believe the inability of an organization to groom internal candidates indicates severe management problems, and because the feedback cycle is so slow for personnel changes, trying to defer it and “fix it for the next time” will never actually fix the issues. Internal hiring will force an organization to confront its issues, which can include:
All of these issues (and more) cause issues with internal hiring, but also are bad for the organization overall. Wouldn’t it be great if you could both fill a key role and address issues?
Is the risk too great of promoting a bad candidate? I don’t know: is the risk too great of hiring in an unknown quantity into a leadership position? Is the risk too great of having a candidate who wants a job change but your organization can’t give it to him or her?
If you are looking to do anything but shrink, you should always have ‘junior’ positions open and take the cream of the crop. This is especially true if you are outside a major tech hub.
There’s also another type of problematic hiring: adding resources to failing projects (whether outside or inside hires). We all know Brookes’ Law, that “adding people to a late project makes it later” but I can’t count how many times people do it anyway. If there are problems with a project, adding people is the worst way to address issues. “We need more resources” is a tantalizingly simple explanation for why something isn’t getting done, but I’ve never seen it be the actual reason. It is, like hiring leadership, a great way to disguise and distract from the real problems. This topic requires a separate post, though.
I also want to point out a perversion of ‘internal hiring’: creating an excess of managers and handing out seniority titles as candy. What I’m advocating here is when you need a manager, look internally, not to turn someone into a manager because they want it. Likewise, I’m not saying you should give someone a more senior title because otherwise you’d open up a senior developer spot, I’m suggesting you give them the responsibilities (say, team leadership) and see how they handle it.
It is much easier to hide the lack of internal hiring in technology companies because it is growing so quickly (there’s a need for external hires, and people can get jobs elsewhere if they become frustrated). But ultimately I see a dependence on external hires on the other side of the ‘firing as a tool’ coin. I don’t think you can do one without the other. They are inseparable from not just a cultural level but a practical one as well. It is about investing in your employees over looking for easy answers.
In this tutorial I’m going to show you how to mirror animation using MotionBuilder 2012.
First, select the take you want to mirror, then create a new take and click Yes when the message box pops up that says, “Copy the data from the current take to the new take.”
Select the Reference control, delete its key frames, uncheck Mirror Animation, and set its rotateY to 180. (If you need the key frames on the Reference control then you’ll need to rotate the Y axis by 180 on the key frames instead.)
At this point you could leave the Reference control with a value of 180 for its rotateY, but if you want to zero out its rotations then Bake(plot) To Skeleton and set its rotate X, Y, and Z back to zero. Then do Bake(plot) To Rig one more time and you’ll have a character with mirrored animation and the Reference control will have zeroed out rotations.
So those are the manual steps if you want to mirror an animation, but I created a script that will automatically do all those steps for you. You can download it here:
Whenever I see the words “delighting customers” (which is, let’s face it, an awkward phrase) in a non-Lean context like a job description, I can feel the author winking at me. It tells me “we try to be Lean and if you get our drift you probably want to join us.” It instantly gives said company plenty of extra points.
I just wonder how long until “delighting customers” becomes a played out catchphrase (if it’s not already)?
Check out Principles of Lighting and Rendering with John Carmack from QuakeCon 2013. It’s an introductory lecture on how we simulate the physics of light and shadow in real-time computer graphic rendering.
If you want more Carmack, there’s also a keynote from the same QuakeCon that’s almost 3 hours long where he talks about a wide range of topics.
I was fortunate enough to stumble into a free trial of PyCharm right at the glorious 3.0 release. There was a flurry of rants and raves running through the Tech Art community upon this release and for good reason. With 3.0, JetBrains released an Open Source “Community” version which is fully featured. After using for a couple of days, I was hooked and splurged for a commercial license through my company, though I was prepared to scrape up all the spare change in the house to afford the Personal version and use it for the rest of my life.
Pycharm has all the usual features you’ve come to expect from any decent IDE: highlighting, completion, etc. The hotkey/popup features are quite awesome. CTRL+SHIFT+R (Navigate -> File) is the fastest way to open files in your project. The CTRL+SHIFT+A (Help -> Find Action) is your shortcut to all other shortcuts and popups.
If you spend a lot of time pointing to your mayapy.exe and adding and removing paths from your workspace, you’ll appreciate how much more intuitive these dialogs are than PyDev’s.
The Perforce integration is almost too good. It tries manage the ‘Current’ or ‘Active’ changelist and will automatically add any file you start to modify to this changelist. It is a little annoying the way it tries to organize every file you have open amongst the changelists but once you get used to it, it starts to have its benefits. PyCharm also keeps a list of recently used changelists which is quite handy, actually.
‘Darcula’ is a beautiful color scheme which comes default. And when I say ‘color’ I pretty much mean the absence of it. Greys are where it’s at when it comes to staring at code all day. There’s the token oranges when needed as well, but you can customize all UI colors, per usual.
Oh, the auto-save will make you lazy (and fast) as hell, too.
PyCharm’s code inspection is the most thorough I have ever seen. It is so thorough that I turn off the strict adherence to PEP 8 standards as our company deviates from these slightly. I’m one of those “0 in box types” even in my IDE in that I always fix all code inspections. This has the added benefit whenever you open any file, you can immediately see if there are simple syntax errors by the code inspection color highlighting in the margins. In the process of examining all the inspection notes, there are fairly detailed explanations of what the issues are and it offers to automatically fix them whenever possible. It has actually been my secret teacher and made me a much better programmer.
Each language has its own style settings and the settings for Python are quite complete: indentation, spaces, wrapping, blank lines, etc. Every option is available. Then you just auto-format before you save and viola! You’re code looks perfect.
PyCharm fits nicely into my arsenal of coding tools right next to Wing IDE. PyCharm’s debugging uses the Pydev module which doesn’t compare to Wing Pro’s built-in features. Wing is still the king for real-time debugging of Maya and MotionBuilder or other external python applications, especially with the Debug Probe feature. But I’ve always used two IDEs in my day to day routine: Wing for debugging and Eclipse w/ Pydev for my main coding environment. PyCharm replaces PyDev as my main coding platform now.
The best part of PyCharm is it’s feel. It feels awesome, fast, tight, professional, snappy, very little crashing. Wing always feels a little slow and lagging. Eclipse/PyDev feels tighter than Wing but still doesn’t compare to PyCharm.
Download is available for Win, OSX, Linux and the Community version is now free and does pretty much everything you need. Then when you get hooked, go ahead and save up for a license (they deserve the 10th of a bitcoin).
All of this just scratches the surface really. I’m sure you’ll find several little goodies that make your day to day workflow a whole lot easier (list them here in the comments if you have the time!)
Do yourself a favor. Go out and install right now. You’ll never regret it. Enjoy!!
Been looking up some eye reference today. Head over to photographer Suren Manvelyan’s website and he has some great up close shots of human and animals eyes.
Here’s some good video ref I found on YouTube:
|Now with extra stuff!|
|The Stored Metadata, ready to be read back by the tool.|
|Main settings to be saved are the different maps and resolutions associated with the various LODs, although settings for format and destination folders are saved as well.|
Weta’s Senior TD Shaun Friedberg did a live webinar posted by CGSociety. He gives advice and tells his story of how he got to where he’s at. It’s audio only so you can listen to it while you work.
This is how you do a bunch of random things in MotionBuilder with Python.
# set the current frame to the start frame of the current take takeStartFrame = FBSystem().CurrentTake.LocalTimeSpan.GetStart().GetFrame(True) time = FBTime(0, 0, 0, takeStartFrame) FBPlayerControl().Goto(time) # create a copy of the current take newTake = FBSystem().CurrentTake.CopyTake('newTakeName') # evaluate the scene FBSystem().Scene.Evaluate() ################################################ # delete the camera that comes from Maya mayaCamera = FBFindModelByName('MayaCamera') if mayaCamera: mayaCamera.FBDelete() ################################################ # find out which character is currently selected character = FBApplication().CurrentCharacter # turn on Mirror Animation character.MirrorMode = True # set the solver to 'MB Character Solver' character.SetExternalSolverWithIndex(1) # turn off the Control Rig character.Active = False ################################################ # rotate the Reference control by 180 controlRefName = FBFindModelByName('Reference') controlRefName.Rotation = FBVector3d(0.0, 180.0, 0.0) ################################################ # create a locator and set it to 0, 0, 0 worldScaleNull = FBModelNull('WorldScale') worldScaleNull.Translation = FBVector3d(0, 0, 0) # set the Look attribute to None look = worldScaleNull.PropertyList.Find('Look') look.Data = 0 worldScaleNull.Show = True # parent a joint named 'C_global_bnd' to the locator and scale it globalBnd = FBFindModelByName('C_global_bnd') if globalBnd and globalBnd.Parent != 'None': globalBnd.Parent = worldScaleNull worldScaleNull.Scaling = FBVector3d(100, 100, 100) ################################################ # create a custom attribute on selected models from pyfbsdk import * attrName = 'My Custom Attr' selectedModels = FBModelList() FBGetSelectedModels(selectedModels) if not selectedModels: FBMessageBox("Error", "Nothing selected", "OK", None, None) for model in selectedModels: anAttribute = model.PropertyList.Find(attrName) if not anAttribute: trackerAttr = model.PropertyCreate(attrName, FBPropertyType.kFBPT_charptr, "String", False, True, None) trackerAttr.Data = 'hello' ################################################ # plot animation example def plot(self, character, plotWhere): if plotWhere == 'skeleton': plotWhere = FBCharacterPlotWhere.kFBCharacterPlotOnSkeleton elif plotWhere == 'rig': plotWhere = FBCharacterPlotWhere.kFBCharacterPlotOnControlRig else: print "Warning: Plotting to skeleton by default." plotWhere = FBCharacterPlotWhere.kFBCharacterPlotOnSkeleton plotOptions = FBPlotOptions() plotOptions.PlotAllTakes = False plotOptions.PlotOnFrame = True plotOptions.PlotPeriod = FBTime(0, 0, 0, 1) plotOptions.RotationFilterToApply = FBRotationFilter.kFBRotationFilterGimbleKiller plotOptions.UseConstantKeyReducer = True plotOptions.ConstantKeyReducerKeepOneKey = True plotOptions.PlotTranslationOnRootOnly = True character.PlotAnimation(plotWhere, plotOptions) return True
I really dislike having to use objects (or names, more precisely) for these micro data structures. Over time I’ve moved more and more away from creating classes for data structures in Python, a ‘best practice’ habit I brought over from C#. It is silly in a dynamically typed language. There’s nothing more clear about:
for entry in chartdata: chart.add(entry.x, entry.y)
for x, y in chartdata: chart.add(x, y)
In fact it’s probably less clear, because there is the totally unhelpful variable name “entry.”
At some point- maybe even three items?- it becomes more clear and self-documenting to use names (that is, dicts instead of tuples), but for the very common cases of simple collections used by nearby code, tuples and automatic unpacking can’t be beat!