NavHeader
journalHeader

Tuesday, June 12, 2012

cgmWeekly is back!


Hope everyone is doing well. Finished up a gig and back on cgMonks workin on tools. They're in open beta now so hop over and download em if you like:)

In other news...
  • Prometheus - beautiful film with a couple of plot holes. Saw it in IMAX 3d and enjoyed the experience a lot.
  • Legend of Korra - Anyone else geek out at this weeks episode? How cool it is to see Aang again. Man, I love that show.
  • Guild Wars 2 Beta - So good....get it out now ArenaNet!
Have a good one, internets! Gotta make dinner:)

Wednesday, May 9, 2012

A snapping update!


Latest update on CG Monks/cgMonks/cg.Monks (not sure how we wanna put it in text yet:). Lots of updates in the post. The webinar went well last week and I'll post a link once they get the vid up for those that emailed saying they couldn't make the live one.

Hope everyone is well!

Thursday, April 26, 2012

Face Rigging Webinar Next week...

Doin a webinar next week for Faceware if anyone would like to hear my ramblings on facial rigging. Planning on covering blendshape and joint based rigging as well as a bunch of tools from CG Monks as they relate. If you'd like me to cover anything specific, lemme know:)

Sign up here.

Monday, April 23, 2012

If you've not been checking....

There's been a whole lot going on over at CG Monks. The tools are coming along and we've gotten some fantastic contributors to the tool set. Here's this weeks vid from there as a way of enticing some more testers...:)


Also, I started up a new Best of Morpheus channel via CG Monks as it's a bit tedious hopping back and forth between accounts. There's been some fantastic reels lately so if you want some inspiriation. Check em out. Here's one with some great customizations:


Supposed to do a facial webinar in the next week. I'll post the details when I get em. Have a great day, internets!

Tuesday, March 27, 2012

CG Monks!


I'm happy to announce the formation of CG Monks a new venture with some good friends through which  we hope to make cool tools, rigs, and other goodies available to the cg internets. Some of our goals are..


  • Creating  commonsense tools we actually use on a daily basis including our own modular character rigging system
  • Creating a community collaborative site that acts as a virtual studio, place to get community vetted tools and assets, and to get questions answered
  • Creating stable character (including Morpheus 2.0) and prop assets that follow common sense and animator friendly standards.


I'll probably do most of my blogging there for the foreseeable future so if you'd like to hear more of my yammering, head thataway.

Thursday, March 22, 2012

Do I really need that....?

Ah, the therapeutic process of geeks everywhere. Getting a new machine setup is both annoying and refreshing. One such part of the process is thinking through the apps you had and culling out the proven useful from the 'why didn't I get around to uninstalling that'. Here's some picks that carried over:

  • Bulk  Rename Utility - great general purpose renamer for files
  • Filezilla - my ftp of choice for some time now
  • Evernote - I come to really enjoy this note keeper after google notebook went the way of the dodo
  • Wing IDE - my coding tool of choice. Just to think this time last year I was still coding some in notepad.
  • Dropbox - Oh I can access my import files from anywhere, with revision history and shared project directories with friends and clients? How I ever got along without this before I have no idea
  • VLC Player - great all around player that works with most anything.
  This is my first ssd drive machine so I found this post super insightful for optimization.

Hopefully I'll be able to make an announcement on another front in the next week or two stay tuned:)

Tuesday, March 6, 2012

Happy Birthday me, you all get a present!

I turn the big 34 in a couple weeks. Exciting, no? Back to the important bit about a present to the internets.


After a year of getting many inquiries and frankly just not knowing how I wanted to handle it, my mind has been made up. I haven't had a chance  to change the docs page but I shall when I find a second.

You may now use Morpheus 1.0 for any commercial venture you please providing:
1) credit is given where appropriate
2) Use is in keeping with the "Would-Pixar-make-this" rule (no porn, no "Killing puppies is neat" promotionals)

No fee is required though you're always welcome to donate on the official Morpheus page.

I hope to have another announcement on my site before too long about a new venture among like minded riggers and that entity where will Morpheus 2.0 production will commence from. Sorry it's been so long of the tooth on updating. Life is busy:)

Thursday, January 5, 2012

Happy New Year. Hope it's not our last!

Sorry for the gibe, keeping seeing blurbs about Mayan prophecies. Hope everyone had a good New Year celebration. My wife and I brought it in playing games with neighbors and eating pancakes and bacon after the clock turned.

Like most folks, I took the time to take inventory for the year. 2011 was a great year for the studio of one on the prairie. I'm grateful for all the projects that came along and I made a lot of progress leaning python as well. In terms of projects the highlight of the year was definitely the Nintendo E3 project though there was a close one the last couple of months that I'll be able to add to the reel sometime towards the end of the year if schedules go according to plan.

Morpheus has been blazing a trail across the internets and this month saw some great entries on the 11 second club. Including number 2...


My hopeful plans for the year is....
  • February - closed release of the first pass of rigging tools
  • April - closed release of the character rigging system
  • Learn ZBrush and start working on some new characters
  • Fall - Morpheus 2.0
Oh, and whatever projects come along a well:) Wish I could find away to make money just making stuff for other people but not found a way to do it. Yet.

Blessings on you and yours for the new year.

Monday, December 5, 2011

Merry (Insert your winter holiday of choice, but for me...) Christmas!

Morphy tip of the month: If you're having slow playback, try commenting out the squash stretch expression. How do you do that? Open the animation expression editor and find the morphy squash stretch expression. At the very front, put a '/*' and at the very end, put a '*/'. Then edit. 
Morphy is one year old this month. Happy birthday, buddy.

First off, if you're interested in listening. I had the pleasure of being interviewed by a passionate animator in Austin and that podcast is now up. (Does everyone think they sound more nasally than they think they should when hearing one's voice?) - http://altanimation.podomatic.com/

Back to Morphy....

Some fantastic facial poses in this one.


From a guy who's been on here a few times. Great work!

A wip I stumbled across on vimeo.


Several shots on Stina's reel


AND this month in the 11 Second Club of Awesomesauce there were some great entries with a Morphy entry placing second. Some of my favorites were:

Sunday, December 4, 2011

It's gui in the middle...

My first GUI!

So, I've been learning python for the last year and have piles of tools I could use...when my brain remembered which module they were in and what the call arguments were. Handy, I know. As efficient as that was with all of our diabolical plans it made sense to have tools that were usable for other people.

Initially I looked at doing QT but after talking to some friends I had concerns about compatibility with artists all over the place. Eventually these tools will be a part of the Morpheus suite so I wanted to get as few potential blocks out of the road as possible. 

So the last few days I've been digging in to basic maya gui making and all the craziness that entails. Adding error checks (that seemingly Maya 2010 and below don't support mc.warning nor the wordWrap tag...yay....) and getting a feel for things. 

Now I've got a pretty well functioning tool in 2011 and above. 

Some of my thinking in designing a tool...
  • One button/many functions - One things I love in silo is how so many tools are contextual and that's something I've tried to emulate where possible. So there's a lot of logic going on behind the scenes to figure out what do based on your selection
  • Easy help - the help stuff doesn't load by default (it's the stuff with the lightest back), there's a toggle that turns it on. It's on in the attached image
  • Build a base tool module that all the rest of our tools can be built from.
  • Less steps. Anything created with a tool should be named intelligently. I'm using my bbAutoName stuff as a base for naming everything in the system and it's working pretty well so far.

What does bbLocinator do? 
  • Makes named locators off of pretty much anything - anything with a pivot, faces, verts, edges, cvs, curve or surface points and I think that's it.
  • Locators created match point, rotation and rotation order of source objects wherever possible.
  • Creates locators at the pivot of objects by default (objects only, not components), option to make it use the bounding box center for point position if desired
  • Intelligent naming - you'll always know where a locator came by just looking at it's name
  • Create a loc at the center of a selection - objects, edges, whatever...
  • Create a loc that's the closest point on a surface to a target object - works with polies, nurbsSurfaces, and curves
  • Loc every cv of a curve either at the cv position or at the closest point on the curve to that cv
  • Update any locator made with the tool either over time or just on the frame you're on
  • Tag an object with a locator so you can update that objects position just like the locator
  • Bake every frame or just keys on the tracked object
What's next?
  • Get the template stuff nailed down so that any tool can call  what it needs. 
  • Several other batches of scripts need to be gui'd
  • Figure out how to handle older versions of Maya 
If you have thoughts, suggestions, insults or whatever, post em!

Wednesday, November 9, 2011

Only one month to 2012....

Where does the time go....seriously.

Morphy Tip of the Month: Please, please read the docs or check the threads on 11 second club. Most of the emailed questions are a bit... repetitive:) 
This month in Morpheus....

Some great posing here and I do believe the first cross dressed Morphy:)
Do believe this is the first cross dressing Morphy vid I've seen:)
Great showing on the 11 second club this month with Morpheus entries in 2nd, 3rd and 4th places as well as peppering through the rest of the entries. AND most of them female. Bout time:) Nice work all!

As a short update -
  • Been working hard on a cartoony freelance gig (animation and rigging) for the past couple of months and locked on that through early December. Had a lot of fun with it and can't wait to see the final renders. It's NDA so it'll be a while till it makes the reel.
  • Garden City is moving along as well and deep in cloth sim and shader work. Bokser has been sending me updates and it's looking awesome. The film may actually be out by next summer. Whoda thunk!?
  • Hoping to get a nice block of time at the start of the year to finish up the rigger but we'll see how that shakes out with work and all.
  • SO MANY GAMES. Batman was incredible. Zelda in a couple of weeks. Loved Orcs Must Die and playing suffering (seriously, a death penalty that makes sections an unnecessary time sink?) through Guild Wars just because the sequal looks so amazing. 

Wednesday, October 5, 2011

Is it really October already....

Morphy Tip of the Month - If you hit render and all you see is black. You're most likely either 1) not using mentalRay or 2) don't have the textures connected

Been a bit busy, started another project I'll be in through December and last week did a demo of Morphy at the Austin Autodesk Group - it was a fun time and nice to see some old friends. Got a link from someone with  pretty sweet lookin camera rig I'd love to try out when I can. Check it out here - http://renatopolimeno.com/rp_camerarig/

Fun blacksmithing one

Some great Morphy work on a reel

From the 11 second club -

Friday, September 9, 2011

A Week in the Life Between Gigs...

Some folks wonder what freelancers do between gigs. Well I can't speak for them but for me more than a few days without a project to work on is a painful thing - I just really enjoy making stuff. As I've been posting sporadically, since the start of the year I've been working on a python rigger so aside from doing a little animation with Morphy a few months ago, that's what I work on.

Aside from the typical things of course . Like spending time with my wife when she gets home, grocery store trips, joggin the dog, cookin dinner and workin through mountain of stuff that gets put on the backburner when those crazy gigs come - oil changes, home repairs and the like. Also reading books. I read . A lot. My brother got me caught on The Game of Thrones series so that's kept me busy about a month of reading. Should finish the last one (so far) next week or so. Highly recommended if you like the fantasy genre in the slightest - except for you, mom....maybe a little non-PG. Some characters I've loathed I've come to really like. Except Cersei, I'll be amazed if Mr. Martin can redeem her.

Back to python. Maybe other TD's work different. I've never really worked in a studio setting with other td's writting code so I don't know but I find myself circling back through things I thought I'd fixed days before.  Also, my libraries of functions have gotten huge. Can't believe how long it took to figure out the traceback feature in Maya....like this week. Some days I feel like an idiot.

Here's my running log from this week so far(which I've been using evernote for note keeping and really enjoying). For code writing I'm using jEdit and version tracking via an online code repository.

Mon

  • bbRiggingLib
    • locMeSurfaceCV
    • setCurveByColor(obj,color)
    • setCurveByIndex(obj,colorIndex)
  • bbDistanceLib
    • returnDirectionSortedDict(targetObject,objectList)
    • returnClosestObjectsFromAim(targetObject,objectList) 
  • bbSkinLib simpleControlSurfaceSmoothWeights
    • added a lot more calculating, doing a pretty good job now (though a little slow cause of all of the measuring)
  • bbAttributeLib
    • doSetAttr(attribute,value,forceLock = False)
      • set attr replacment that ignores locks, relocks if it was locked and has a forced lock override
    • doConnectAttr - see above
  • bbSpineRig
    • pretty much workin now want a better ribbon setup but the spine works with squash and stretch
  • bbDictionaryLib
    • returnColorIndex(color)
    • returnColorDict()
    • returnRotateOrderIndex(ro)
    • returnRotateOrderDict()
    • returnVectorToString(vector)
Tues
  • bbDistanceLib
    • returnClosestUPosition - made it work with compound curve objects
    • returnCenterPivotPosition - returns the coordinates of the pivot of a bounding box of an object or objects
  • bbModuleLib
    • returnSettingDataAsFloat - culls in the data from the settings as a float, parsing it if there are ',' to a list or to an array with the '|' divider
    • bbCurveLib
    • createTextCurve(text,size=1,font='Arial') all the text curve under a single transform 
    • createTextCurveObject(text,size=1,name=None,font='Arial') stores info for easy updating of the text or font 
    •  updateTextCurveObject(textCurveObj) recreates the text with new text and font info sizing it the same as what was there and replaceing the shapes that were there. All while leaving the original transform node unmolested 
  •  bbRiggingLib 
    •  centerPivotLocMeObject - like loc me object, however, for positioning purposes, uses the bounding box pivot of the object instead of it's actual pivot 
  •  bbControlMaker
    •  moved the limbControlMaker here from bbLimb
  • bbModuleLib 
    • createdcreateSizeTemplateControl - which makes a template sizing object for initital sizing data
Wed
  • bbSearchLib 
    •  returnObjectType - fixed logic for detecting shapes 
  •  bbRiggingLib 
    •  setCurveColorbyName & setCurveColor by Index - added shape detection so that if you feed it a shape instead of a curve it just does the shape, if a curve, it does all of it 
  •  bbCurveLib 
    •  made the update text account for parent scales to ensure it maintains it's proper size and stores the new scale, also made it retain curve color info 
    • Added duplicateShape because it's apparently not easy to do so with basic maya commands added gear, eye and teeth shapes 
  •  bbControlMaker
    • MasterAnim almost done working 
    • childControlMaker which will come in all kinds of handy
Thurs
  • bbAutoNameLib 
    •  more fixing of the auto name logic made storeInfo default to locking the attributes, however there is a leaveUnlocked bool option now 
  • bbMathLib
    • multiplyList - does what it says, ignores 0's 
  • bbRiggingLib 
    •  parentPivotLocMeObject - takes the pivot of the immediate parent of an object instead of it's own while still matching orientation and oration order of target object, world if no parent is present 
    • returnColorsFromCurve - queries the colors of all the shapes under a curve and order them by volume encompassed
  • bbCurveLib 
    • made duplicateShape work with curves with children (yay compound curves!) 
  • bbLimb
    •  started the changeover to the new template setup 
  • bbModuleLib 
    • returnOrderedModules (redo) - Changed it to read the hierarchal relationship of the modules stored via message nodes to produce an order instead of the wonkier version I had before.
  •  bbControlMaker 
    • MasterAnim done 
    • childControlMaker done 
        DESCRIPTION:
        Generates a radial array of controls around a base control where things start at noon and it divides
        the clock positions by the number of controls to make.  You can also change the mode so that you can
        tell it where to start on the clock and increment which to use.Stores the children controls to the baseControl
        as a message  node and stores the parentControl info to each generated control. It also takes into 
        account the colors of the baseControl using a secondary color if it exists.
        
        REQUIRES:
        baseControl(string) - The control we're working off of
        controlTypes(list) - the controls you want created. If the type specified isn't in the base settings,
                             the control is created as a bbTextCurveObject
            Presets - settings
                      visibility
        mode(list) - (['even']) -  mode to set our values by and other information as required
            Options -   ['even']
                        ['incremental',30] - the firest term is mode, the second
                                            is the degrees to separate the controls by. Can be negative   
        baseAim(vector) - ([0,0,1]) - which way does your master control point
        baseUp(vector) - ([0,1,0]) - which way is up for your master control
        offset(int/float) - (0) - offset the starting clock position
        scaleMultiplier(float) - (.25) - multiplier for scale (default is .25) of the absolute size of the parent control
        distanceMultiplier(float) - (1.25) - multiplier for distance to travel 
        localRotationOffset(vector) - ([0,0,0]) - offset rotation for the controls if you want it
        aimChildren(bool) - (False) - aims the controls at the root of the base if True
        zeroGroups(bool) - (False) - if True adds zero transform groups to zero out the controls
        lockHide(bool) - (True) - If true, locks hides and makes unkeyable the typical transform attributes per control
        
        RETURNS:
        controlsMade(list)
    


    Friday
    • bbControlMaker 
      • Heirarchy changes to the size object 
    •  bbLimb 
      •  returnTemplateSizeObject - returns existing objects or makes them and returns them if they weren't found 
      • doGenerateInitialPositionData
        •  initially looked at using curves from the start but am leaning towards just orienting locators aimed where I need and using multiply lists below against standard ratios stored via settings.conf
    •  bbRiggingLib 
      •  aimSnapUpObject (added) 
    •  bbDistanceLib 
      •  returnClosestUPosition - made it work if you feed shapes in it 
    •  bbMathLib 
      • multiplyLists - multiplies lists of values - [[2,3,4],[2,3,4],[2,3,4,3]] = [8, 27, 64, 3]

Tuesday, September 6, 2011

Morphy! By a noodle....

Morphy Tip of the Month: If you get some funky creasing in the face with a customization option don't hesitate to select the offending section and try a 'smooth skin weights' option or just manually paint in some smoothness around there. 

First off a big congrats to Pairatch Lerthajornwong for their winning entry to 11 second club. Check it here!

First the classical....

Then a little more hip

Morphy struttin it


Little drinky drink



And some more from 11 second club

Wednesday, August 31, 2011

Updated Reel - Sizzlin Houston Summer Edition!


Update of the ole' demo reel. Some new work from the last year and a test of ole' Morpheus posted a couple of weeks ago. 

What else has been happening....
  • Next month I'm gonna be doing a demo at the Austin Autodesk group and am lookin forward to seeing some friends there. I'm just plannin on doing a general customization demo but if anyone that'll be there would like something more specific post here and I'll see what I can do.
  • I also did a little interview for Simply Maya should you be inclined to check it out here
  • Created a best of Morpheus channel on vimeo  - http://vimeo.com/channels/226100
  • Work has been trucking along on bbThingamarig or bbRigger (whatever we end up calling it). Here's an update of what I've been working on
    • Curve tools - python based saving of compound and simple curves and creation and various other 
    • The rigging process - 
      • easy class based template creation is in place (one sided so far) with multiple arms, heads, whatever. Template has orientation and control helper objects which work well
      • Saving of template settings into the rig itself for easy re-creation.
      • Joint creation and orientation (from orientation helpers as well as the general orientation options from the settings.conf)
    • AutoNaming
      • Intelligent naming via type detection and tagging that happens in the rigging process accounting for children type names (i.e. groups deriving names from child and constraints getting their root from their objects as well).
      • Iterative processing in place
      • Absolutely unique name generation
      • Able to process whole hierarchy at once
    • Lots of other stuff:)

Saturday, August 13, 2011

This just needed to be posted....

Some of the funnest animation I've seen in some time....

Friday, August 5, 2011

Morphy Tip of the Month: I'm gonna be lazy and say watch David's videos below:)

Kicking off with a tutorial/demo from a internet friend of mine. David's class are the ones working on  the Morphy Wardrobe project. Nice demo Dave! Also, there's a part 2....


Fantastic bit of animation by matthewpres. Forwarded to me by Pierre. Thanks!


Great one I stumbled across on vimeo...


Some great Morpheus examples in the 11 sec club this month. An especially good one even got number 2. Congrats!

Sunday, July 24, 2011

Gatekey render, and stuff!

Waiting on a stubborn NDA to lapse to be able to show my updated reel. In the meantime, here's a rendered version of that Gatekey test I did a few weeks back to test out Morphy and add some lip sync to the reel.



This here is a Morphy version of a friend of mine who's been on me to make him one for a long time.




What else is shaking....
  • Started a vimeo channel for best of Morpheus stuff I see on there - http://www.vimeo.com/channels/226100
  • Kung Fu Panda 2 was fantastic, Cars 2 hit a nail on the road somewhere to completion.
  • Netflix is my new friend. My wife and I have been enjoying the BBC "what if he lived today" Sherlock miniseries with the British The Offices' Jim character playing a solid Dr. Watson.
  • Just wrapped a facial animation gig for the company a good friend of mine works at. Animating on the joints FTW!
  • One of my closest pals was here for a visit a couple weeks back and we brainstormed projects to take us at least till the end of civilization in 2012. I sure hope we finish before then so other folks can enjoy the stuff for a little while. Some pretty cool stuff, we can't wait to start connecting the cg community to it.
  • Been busy:
    • Drawing robots for another of those projects
    • Back into my nemesis Web designing for another
    • Digging back into Python for the rigger.
    • Started squashing some Morpheus bugs.
    • Just too much to do...
  • Team Fortress 2 has had a lot of updates since I stopped playing last summer which I've been digging through. The Castle keep map with melee weapons only is a ball.

Saturday, July 23, 2011

Basic problem solving - Scripting for a monotonous task....

So, I've been working a gig for a couple of weeks now and ran into an issue that Maya's base tools seemed to provide no good solutions. When I find myself in such a predicament I invariably find myself going down a path. Before I begin, a caveat - I'm an intermediate scripter and I'm sure there's much more efficient coding methods. However, functioning inefficient tools are better than no tools:) Hope this is helpful to anyone who happens to peruse these ramblings....

  1. Identify the need - In this case I need to ensure that a skinned mesh didn't have any vert with more than two influences. The annoying thing with maya is that even if you tell the skin to only have 2 influences and to maintain it it does the job about 98% of the time and just doesn't seem to care about that other 2%. Faced with the prospect of individually checking every vertex via the component editor for more that two skins, any other option is much more attractive.

  2. See if Maya has any tools to fix the problem - Messed with skin settings and the various mirroring, hammering and skin options to see if native maya can fix it. Sometimes this work, in this case it didn't

  3. To the internets! - Google and CreativeCrash check for a script or solution. If someone else has solved it and been kind enough to post the answer no reason to reinvent the wheel.

  4. Write a tool - Think through the requirements and results you need from a specific function or functions and beg, borrow and steal (while providing credit) the pieces to make it work.
For this little conundrum,  I wanted Maya to tell me if I had any vertices that had an influence above x influences and get that information in a usable format. Here was the particular flow on this problem.

  • For this script, I started with writing a function to return any vertices over 2 influences. 
  • As a part of that, I found the functions I needed to use need to know the skin cluster name which I remembered having wrote a function for a while back so I grabbed that.
  • Then, I thought it silly to cap it at 2 influences and allowed the user to specify the number of influences the user chose
  • Finally, worked on the workflow so that the user didn't have to type commands into the script editor as I wanted to be able to give my client a buttonable script for their artists. In the end it made sense to me to have it both report the bad verts as well as select the first in that list to easily get to work. If I was in a fuller production environment it might make sense to make a gui or modify the function to be able to select through the bad vertices list rather than a one off end function here.
In the end, spending an hour or two making a simple tool both enables a montonous task prone to user error doable as well as provides a tool for other artists to be able to do the same which is always a boon in production.


import maya.cmds as mc
import maya.mel as mel

maxInfluences = 2

def returnExcessInfluenceVerts(mesh, maxInfluences):
    skinCluster = querySkinCluster(mesh)

    badVertices = []
    
    vertexList = (mc.ls ([mesh+'.vtx[*]'],flatten=True))
    #Find the bad verts
    for v in vertexList:
        influenceList = mc.skinPercent(skinCluster, v, query=True, transform=None) 
        if len(influenceList) > maxInfluences:
            badVertices.append(v)
    return badVertices


def querySkinCluster(obj):
    mel.eval ('$mesh = "%s";' % (obj))
    skin = mel.eval('findRelatedSkinCluster($mesh);')
    return skin
   
mesh = (mc.ls (sl=True))
if len(mesh)<1:
    print ('Please select a mesh')

else:
    badVertices = returnExcessInfluenceVerts(mesh[0],maxInfluences)
    
    if len(badVertices)>0:
        mc.select(badVertices[0], replace=True)
        print ('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
        print ('%s%i%s' % ('There are ',(len(badVertices)),' verts are over the max influence:'))    
        print badVertices
    else:
        print ('No verts over max influence')

Wednesday, July 6, 2011

Best of Morphy for July




Semih sent me an image from a couple characters from his film. This is certainly one of the "fishier" uses of Morpheus I've seen. If you can't tell, the fish's face is a modified Morphy head. Really nice work.


Nice one I came across in the 11 sec club wip forum.


Playful little piece with a little girl.


A ton of great pieces from 11 second club this month. Here's a few...

All the stuff on this site is 2000 - by Josh Burton...unless otherwise noted. All rights reserved.