Friday, 31 December 2010

LESS THAN THREE


LESS THAN THREE is for Rhiannon, Who has never thrown a snowball at me! (and took kindly to being portrayed as a rather rotund 'Christmas Pudding' eskimo)

Two weeks start to finish in Blender 2.5.  Animating took just over 4 days.  I felt like I was on a bit of a haptic path trying to get this finished... the characters probably are as well!  I watched a lot of Ivor Wood stop motion before starting the animating and tried out (and broke) every gag in the book.  I manage to re-target my 'disco guy' rig fairly successfully but uncovered a new problem (this time with the eye tracking).  One of my big aims was to get smooth motion without falling back on the crutch of motion blur (which I used in only one shot - the flying snowball) and to compose strongly enough and texture well enough so I wouldn't need depth of field to hide the mistakes (used only in one shot where I went for a slight dutch angle and the dropped camera look).

Thanks to my little brother George the ad-hoc stuntman who happily dressed up in 20 T-shirts, jumpers and hoodies, multiple tracksuits, scarves, hats and a balaclava and stumbled round the garden like a padded eskimo while I threw snowballs and a giant physio ball at him for reference footage.  I re-timed a lot of the reference in After Effects for comic effect and over exaggerated the poses in the animation stage.

Thanks also to all the freesound.org users whose clips were used, and to archive.org for providing the Public Domain Songs Ragtimers' "Shimmy Like My Sister Kate" and Johnny Johnson's "Raggedy Ann" from Stepping Stones.

Batch Texture Processing: GIMP and IrfanView
Texture Painting: Photoshop
Bump and Normal Maps: SSBump
Modelling Shading Animation Rendering Compositing: Blender 2.5
Skating Tracks: Jahka's Animated Texture Bake
Final Grade, Animated Textures and Reference Processing: After Effects
Edit: Premiere Pro
Sound: Reaper

Sunday, 19 December 2010

Smooth Vertex Group Weights in Python

I had to do some weight painting this morning in blender (for masking displacement textures and wave modifiers, not skinning bones for once!) and was faced with the usual problem of having to smooth out vertex group weights.  It struck me that I was painting all the way along one of my edge loops, and instead of laboriously going up and down the edge loop with the blur brush trying ever so hard not to paint bits of mesh in the background, I could select those edge loops quickly and easily in edit mode and write an operator to smooth out the weights of the active vertex group.

Before and After

I've bundled this into the tube project's 'Edge Tools' which I wrote back in the summer.  The latest release is available here: http://www.pasteall.org/17726/python just copy and paste into a text file and run from the script editor or save it as a .py and install from the add-ons menu.  Its in the Ctrl-V menu or Spacebar>Smooth Vertex...

Thursday, 16 December 2010

Controllers Implemented in Pythonic Boids for Blender

While college was on I hardly had any time at all to work on this.  I found a spare three hours this morning and implemented 'controllers'.  Currently you can instruct the boids to follow or to be attracted/repelled/directed by controllers.  I also implemented a way of detecting the orientation of the ground plane from the cross product of the last two direction vectors (with necessary error checking, direction flipping etc) and replaced all of the orientation interpolation code with quaternion slerp.  This will obviously need some more careful coding to make sure that the boids don't suffer from quaternion flip - hopefully I can get the smooth interpolations of quats with the twistability of eulers (i.e. >360 degree angles).



I've also been messing with low-poly stuff seeing as that seems to be in vogue this year what with 'Between Bears' rocketing up the vimeo charts.  After walking in the woods this evening in low light I was trying to work out how to get the sense of a curved ground plane from only the striation of the tree trunks.  Kept running into anti-aliasing issues though - the opposite type from usual - smooth fades from black to white wasn't quite what I had in mind.


 

Tuesday, 14 December 2010

Jump Cuts Summer 2010


Two reels of Kodachrome and one of Ektachrome back from Dwayne's Photo USA.  Point and hope film-making meets Dada-ism when I get behind a Sankyo MF404 with a shorting out power pack, focus marks that don't match and a wonky reflex mirror.  Its sad to think that in 16 days time no-one in the entire world will be able to develop such a vivid and reliable film stock - this was shot on 19 years out of date K40 and the weakest link in getting it on the net is my brother's HD handycam I used for the telecine not the ageing AGFA Family Projector Set.   Video's in the processing queue on Vimeo - fingers crossed it will be up this afternoon - codecs kill the grain though.

Monday, 13 December 2010

Motion Paths / Arcs Animation Reference

Here's a couple of Muybridge sequences (public domain) which I motion tracked and ghosted.  I often turn on arcs and ghosting in Blender and Maya, but occasionally I'm not sure what I'm meant to be looking for.  Neither my tracking nor the Muybridge sequences are perfectly synced but you get the rough idea.




This one was a pain to even out - There's almost certainly a mis-shoot in the original Muybridge photos.



Both of these are based on public domain material so you can download them for free and use them for commercial or non-commercial purposes.  For what its worth my addition to the Muybridge images is licensed as CC-0.

Sunday, 12 December 2010

Doing the Right Thing

I spent a few hours earlier today filing bug reports for things that cropped up over the course of the last few mini-projects and tidying up some of my model files and sticking them on blendswap for the perusal of the masses.  Hopefully the few improvements to the rig will make it harder to break in future (I unearthed a few problems as the animation work progressed).  I plan to retarget my basic biped rig to a few other character models I'm working on.  Nothing exciting to show for them now - spent the whole evening pushing triangles out of the face topology!

Friday, 10 December 2010

One Almost Sleepless Night and a Mood Change Walk

Wow, that's pretty much the first full project I've run from start to end through the blender 2.5 pipeline.  Its not bugless yet, but its getting there.  Automerging keyframes still seems to have a few problems on the animation front, and I encountered one or two armature bugs along the way - all thankfully now fixed in the SVN builds.  Hair sim seems a little crazy at times - It was adding a humongous amount to my render times in the calculating vector pass (probably a bug?) and getting blender to render from the same particle cache which is on display in the viewport takes some persuading. Much fewer crashes than I was used to last time I tried to render a complex scene in 2.5 but I still had to do the late night babysitting to restart the render when I hit an occasional glitch.  Hopefully I'll get some time to do some bug reporting over the weekend.



Thanks to some help from Jahka on #blendercoders I've now fathomed what the cache buttons do and a few other options relating to hair dynamics:

Cache Step:  This affects how often results are saved and as a result the accuracy of the played back simulation cache/bake.  When you run a simulation each frame (and any subframe steps if you have them enabled) gets calculated, but if your cache step is set at 10 then only every tenth frame is actually saved for playback.

Quick Cache: With this on the cache step is used for the simulation.  If cache step is at 10 then only every 10th frame is simulated and only every tenth frame is saved.

Effectors and Hair Dynamics: If you have hair dynamics off then effectors (objects with force fields etc) get used to shape/twist/curve the hair in all sorts of interesting and exciting ways.  You can use empties with forces on (on the same layer) to fake the effect of the wind/follow-though etc or curve guides to change the hair style.  If you switch on hair dynamics suddenly all these forces have a different meaning.  They are now used to effect the dynamic simulation of the hair rather than to effect its grown shape.

Saturday, 4 December 2010

Opening Shot Render Test


Set for the Mood Change Walk: Going for a 'Night on Earth' Feel.
Still got some AA problems - will have to play with texture settings.

Wednesday, 1 December 2010

Python for Exaggerating and De-intensifying Poses

Sometimes my poses are just too strong and the animation ends up being very exaggerated and hard to follow, and sometimes they're too weak and need amplifying.  Joshua Leung's new push and relax features for pose bones in blender do a great job of handling in betweens and making them more or less similar to the neighbouring keys.  Often I find that before I even get to the inbetweening phase of animation I want to edit my key poses in a similar manner.  Especially with the spine and neck I want to be able to relax the bone's locations and rotations towards the rest pose (the same way I would smooth vertices when I'm modelling).  Here are two more python scripts I threw together this morning while working on another walk cycle...

Smooth Pose


import bpy,mathutils


amount=0.05


a=mathutils.Quaternion((1,0,0,0))
for each_bone in bpy.context.selected_pose_bones:
    each_bone.location=each_bone.location*(1-amount)
    if each_bone.rotation_mode=='QUATERNION':
        each_bone.rotation_quaternion=each_bone.rotation_quaternion*(1-amount)+(amount*a)
    elif each_bone.rotation_mode!='AXIS_ANGLE':
        each_bone.rotation_euler[0]=each_bone.rotation_euler[0]*(1-amount)
        each_bone.rotation_euler[1]=each_bone.rotation_euler[1]*(1-amount)
        each_bone.rotation_euler[2]=each_bone.rotation_euler[2]*(1-amount)

Exaggerate Pose


import bpy,mathutils


amount=0.05


a=mathutils.Quaternion((1,0,0,0))
for each_bone in bpy.context.selected_pose_bones:
    each_bone.location=each_bone.location*(1+amount)
    if each_bone.rotation_mode=='QUATERNION':
        each_bone.rotation_quaternion=each_bone.rotation_quaternion*(1-amount)-(amount*a)
    elif each_bone.rotation_mode!='AXIS_ANGLE':
        each_bone.rotation_euler[0]=each_bone.rotation_euler[0]*(1+amount)
        each_bone.rotation_euler[1]=each_bone.rotation_euler[1]*(1+amount)
        each_bone.rotation_euler[2]=each_bone.rotation_euler[2]*(1+amount)

At the moment the scripts only support quaternions and eulers as that's all I use in my rigs.  If you're an axis angle person please enlighten me as to what on earth its for!  Here's the walk cycle (crits welcome):



On another note I started hacking away at blender's source code last night trying to code smoother deforms for b-bones, which in my opinion look great until you turn on mesh display when it somehow manages to fold up the mesh in all sorts of nasty ways if you're using it for something wide (like a torso) rather than something skinny (like an arm).  While I haven't made much useful progress yet (other than beginning to understand the built in math libraries) I did stumble upon this very nice explanation of matrices, vectors and coordinate systems which I wish I'd found ages ago when I started diving into python in blender.