Bustin’ Makes Me Feel Good!

For this past week’s experimental game class assignment I worked with Greg and Kenneth on the theme predator and prey. So we made a versus ghost hunting game! The ghostbuster aims with the mouse and right clicks to run toward the cursor and left clicks to catch ghosts. The ghost player uses WASD to float around and attempts to hide among NPC ghosts to attack the buster by floating over him. I did all the 3D art and helped with some design choices. Check it out!



Of course this got finished at a sad time, so we dedicate this game to Harold Ramis. We’ll miss you Egon.

Demo Reel 2014

1) Lost Cloud (work in progress) – For my senior project I directed a team of 10 students on a large scale experimental game project. Along side directing I shot, cleaned, and enhanced motion capture data, rigged and animated a flying quadruped monster, implemented the animations in Unity’s Mecanim state machine, and worked on environment models. 

Software – Vicon Blade 2.0/2.5, Autodesk Maya, Unity3D, Houdini.
Time – 9 months

2) Ok I’ll Go – For my Character Animation 2 course I modeled, rigged and animated a scene from Ferris Bueller’s Day Off. For the face I created a tweak rig. A joint rig was used to create blendshapes, and was itself used as a blendshape to edit and push poses further on the fly.
Software – Autodesk Maya, Renderman for Maya, Nuke

Time – 10 weeks

Dot Com Bomb

Currently I’m taking an experimental games class. Its been a really amazing experience. Every 2 weeks a random team of students needs to make a game with some sort of experimental element based on a theme. Its a whole term of game jams! I really love the chance to brush up on my game programming and to see how quickly I can turn out art. The first week’s theme was bubbles, so I made a very silly game about the 1990s dot com bubble burst. You have a beautiful GeoCities style webpage and you are presented buzzwords as marquee text. You must hold all the letters down for your stock prices to go up. Some words however will not be successful and will make your stock drop twice as fast. At any time you can bail out, take the money and run. Its a race against the clock until your inevitable bankruptcy!  The main issue I ran into is KRO or keyboard roll over. Most keyboards only allow about 4 inputs. This game is best played on a mechanical keyboard, or if you are daring 2 keyboards. Music credit to Knife City aka Luke Silas.

Play It Here!


Christmas Cards

I made some Christmas cards in maya this year. I’m trying out a style I’ve seen in a few places, namely Turnislefthome and the David O’Reilly episode of Adventure Time. Basically its just using a ramp shader, making a good color scheme, and applying that to a mesh with the edges hardened. Hard edges are zero degree normals I believe. The ramp shader is also set to Facing Ratio so that the color is pulled based on the ratio of the camera angle and the normal angle. Then I drop a mental ray ambient occlusion on them to give it a little nicer shading. The mesh’s surface is edited with the Transform Component tool to add some variation. It is kind of like noise, but I may write my own vertex noise tool since Transform Component isn’t the greatest tool to use. It took a while to mess with the lighting. All in all it was a fun break from animation and everyone seemed to like them.

candle xmasRender_02 yulelog

skateboard mocap

So for my senior project game we needed some serious skating animations so I brought in 3 very talented Philly skaters and tried a lot of things out. I got basic movement, turning and riding very easily. Much like with running I had them try and go fast and just ride out of the volume and reenter it before cutting. The trouble was getting them to land tricks. It was tough for them to get enough speed to perform the trick and land all in the diagonal of the volume. I just let the cameras roll and had them go back and forth doing the same move a few times and will try to splice together the best takes of take off, trick and landing. I made an attempt to capture the board as a prop, but do to the skater’s foot placement changing it was impossible to get a spot where it wouldn’t swap with their feet or fall off if the board didn’t land perfectly. Luckily for our purposes in the game, their feet will likely be locked to the board with and IK solver and be more similar to a snowboard. I’m looking forward to combing through these 5 gigs of animations.

skateCapture6 skateCapture7 skateCapture8 skateCapture9 skateCapture10 skateCapture111 skateCapture12 skateCapture2 skateCapture3 skateCapture4 skateCapture5


Philly Game Jam 2013

So the Philly Game Jam was this weekend, my second time taking part. The theme was Ghosts of Video Games Past, not my favorite cause I don’t like making retro referencing games, we got enough of those. It was a busy weekend so me and my teammate Greg Lobanov couldn’t use the full 48 hours, so we wrapped in about 12. Anyway here is our game with sweet pre-rendered graphics.

Le Petite Mort

finger improvements

a while back i posted some python auto finger rig thing. turns out that was garbage! the good news is this one isn’t as much garbage! select the top most knuckle joint of a simple 3 joint finger (not including end joint) run this in your script editor and boom! auto curl, spread, and individual knuckle bends. works on mirrored joints too. i think. let me know if it doesn’t

import maya.cmds as cmds
hiSel = cmds.select(hi=True)
selection = cmds.ls(sl = True)
cmds.setAttr(selection[0]+'.jointOrientX', 0)
cmds.setAttr(selection[0]+'.jointOrientY', 0)
cmds.setAttr(selection[0]+'.jointOrientZ', 0)
topJointWS = cmds.xform(selection[0], q = True, ws = True, rp =True)
midJointWS = cmds.xform(selection[1], q = True, ws = True, rp =True)
btmJointWS = cmds.xform(selection[2], q = True, ws = True, rp =True)
topNull = cmds.group(selection[0], n = 'topNull')
midNull = cmds.group(selection[1], n = 'midNull')
btmNull = cmds.group(selection[2], n = 'btmNull')
cmds.move(topJointWS[0],topJointWS[1],topJointWS[2], topNull+'.rotatePivot', topNull+'.scalePivot')
cmds.move(midJointWS[0],midJointWS[1],midJointWS[2], midNull+'.rotatePivot', midNull+'.scalePivot')
cmds.move(btmJointWS[0],btmJointWS[1],btmJointWS[2], btmNull+'.rotatePivot', btmNull+'.scalePivot')
#add controller to top and give it bend attrs
myCtrlName = selection[0]+'_curl'
fingerCtrl = cmds.curve(d=1, p=[(0,0,0),(0,1.5,0),(0,2,-0.5),(0,2.5,0),(0,2,0.5),(0,1.5,0)], k=[1,2,3,4,5,6], n = myCtrlName)
cmds.parent(fingerCtrl, selection[0], relative = True)
cmds.parent(fingerCtrl, w = True)
#lock and hide attrs
cmds.setAttr(fingerCtrl+'.translate', lock=True, k = False, cb= False)
cmds.setAttr(fingerCtrl+'.scale', lock=True, k = False, cb= False)
cmds.addAttr(fingerCtrl, at='float', ln='topBend', k = True)
cmds.addAttr(fingerCtrl, at='float', ln='midBend', k = True)
cmds.addAttr(fingerCtrl, at='float', ln='bottomBend', k = True)

#connect bend attrs to the joints
cmds.connectAttr(fingerCtrl+’.topBend’, selection[0]+’.rz’)
cmds.connectAttr(fingerCtrl+’.midBend’, selection[1]+’.rz’)
cmds.connectAttr(fingerCtrl+’.bottomBend’, selection[2]+’.rz’)
cmds.connectAttr(fingerCtrl+’.ry’, selection[0]+’.ry’)
#make SDKs on the nulls for the curl