Jacob's Blog Buttons (custom HTML)

digital art

Sunday, December 8, 2013

Faked Pixel Aesthetic for Unity

A buddy of mine was working on a game concept, and he wanted a pixel aesthetic.  I did a test over some existing animations to see how well Unity 2D could look for pixel art, and I was actually pretty impressed and how well the look carried over.

This is also a sneak peek of the RR four main enemy types (one more coming), and how their idles are turning out.

For a quick breakdown on how I set it up, click "Read more »"

Tuesday, December 3, 2013

Fix for Unity 2D Not Displaying Translate Manipulator

This is a pretty simple one, but it wasn't obvious to me.  I had to ask about it on the Unity forums.

I was working on my animation in a 2D perspective by clicking on the view cube arrow to give me an orthographic camera.  I'm not sure what I did, but my manipulator went missing.  I couldn't move the objects around anymore.  It turns out, I hit the "2D" button, which flattens it to a true orthographic camera, and then, for some reason, gets rid of your manipulators.  Just toggle it off, and you'll get everything back, just fine!

Check out these pictures for a visual explanation of my issue:

Sunday, December 1, 2013

2D Planning for Action Character Intros

I did these as planning for an action character-intro style animation, kind of showing off each character's fighting styles and abilities. I got inspired by Studio Mir's Road to the Cup League of Legends video.  I only really finished the first one, though I am work on finishing the other two, before doing them all in 3D

Friday, November 22, 2013

RR Hero Run Cycle

Just finished our hero's run, as well as the final Unity proof-of-concept.  Now I have to work on all of the enemies and the various interactions between the hero and these enemies.

This guy will constantly charges into enemies, just for your enjoyment.  What a nice guy.


Tuesday, November 19, 2013

Tutorial - Using Unity 2D's Dope Sheet for Animation

This tutorial is for anyone who wants to jump into Unity and get to animating sprites in-editor.   It assumes a basic knowledge of Unity, and goes over some of the new Unity 2D features -- enough to get animating.

Getting up to speed took a little time and experimentation with the Unity 2D Demo project, as well as the videos released by Unity.  I thought I might document it here for anyone who needs this information specifically.  For reference, here are the two Unity 2D demo videos currently available:
You can find a lot more information about Unity 2D there, on top of the information covered in this tutorial.

Click 'Read More' below to see the full document.

Monday, November 18, 2013

Unity 2D Animation Tests

I made a post on how to get started in Unity 2D sprite animation.  Check it out here.

I started with a test in Flash, separating the body parts out. I took inspiration from the artist, NCH, and the animation style of Shank. I drew up a character based on my last animation that ended up turning into League of Legends's Poppy (it was all because of the hair).

We decided on Unity so we could easily swap out pieces, in case we later wanted to do some sort of customization system.  While David was working on the programming and Ryoma was working on the concepts, I decided to figure out Unity's new 2D system with animation.


Late in the process, I realized I could group objects together (such as the head elements) so I could translate/rotate them together (which would have made the head animation cleaner).  I should have split the torso into two, so I could do bends there; the root of this problem is shown in the attack test.

Also, we had originally intended to keep the framerate low for style reasons (the attack and the idle look okay like this), but Unity doesn't handle stepped animation perfectly, sometimes tweening the frames in the wrong place, or just completely wonking out.

wonk wonk

Wednesday, November 13, 2013

Working on a Unity 2D Game

Today, I got started on a new prototype with Ryoma Tazi and David Brett.  We're using the new Unity 2D tools that just came out in the new package.  I did some Flash tests for what attacking and death could look like.  The game uses a mechanic that involves swiping to take down enemies in a sort of endless runner format.

Dis gon' be good. Stay tuned!

Saturday, November 9, 2013

Make-A-Wish Game

FIEA was recently approached by the Make-A-Wish foundation to make a child's wish to create a video game.  A number of the students volunteered to create a base for a game that we could work on.  We put the framework together in about a week, while still working on our respective projects.

I decided to do a quick animation set for the character.  A spell cast, a swing, a jump, and simple movement.

Also we got to eat lunch with him, shoot each other with our obligatory Nerf guns, and then we played a bit of League of Legends.  He was a cool kid.

Friday, October 18, 2013

Life Drawing October 2013

I've been doing values for the fast few sessions, so I wanted to try some linework this week.

Monday, October 7, 2013

Animated Facial Features with Pupil

I recently received an email asking about moving a pupil around with the animated texture.  (Thanks for the email, Tom.)

The solution I came up with was using the same offset trick for the eye frames, and then using offset to control the pupil under the eye.  A LERP blended the two together.  It actually ended up being a simpler layout than I had anticipated:

The first Place2DTexture would control the offsets as shown in the the first tutorial to change eye shape, blinking, etc.  The second Place2DTexture would control the eyeball offset, which would cause the pupil to move around 'under' the mask.

The problem, though, was that I could do this in UDK or Maya, but not in Unity.  I'm not familiar enough with materials in Unity to work without a visual editor.  Strumpy Shader is a great node based editor for Unity, but it was designed to work in Unity 3.x, and isn't supported anymore.

Tom came up with a clever solution; he used an additional plane for the pupil.  The back plane had the eye outline (with lashes and the like) and the sclera colored in.  The front plane had the pupil and sclera color, with a mask applied over it that matched the shape of the sclera of eye in the back plane.  As a result, it was a very functional solution that worked very similarly to using a lerp, but it didn't require any special shader system.

If you wanted to keep the animation on the joints, controlling the pupil with either system would just require a script to handle rotation on the joints.  Say, when it rotates on Y to +/-180 , it offsets the left-right a set amount, and when it rotates on Z, offsets the up-down; the X will always point in the direction it's looking.  An aim constraint in either Maya or Unity (say, if you wanted dynamic eye direction) could drive the rotation on the existing joints, and the script would go from that information.

Monday, September 30, 2013

Ascendant Rough Hero Jumping, Falling, and Ducking Flow

Just finished up the rough blocking for the hero jumping, falling, ducking, and standing flow.  A lot of moves flow back into the falling and ducking animation, so I wanted to get this system in sooner rather than later.  This is also the first real test with the cloth as we have it.

Whenever we implement this ingame, I'll go back and clean it up so it's smoother.  I had to tweak the animation flowchart as well, and it's gotten delightfully complex (well, sort of complex.)

Friday, September 27, 2013

Life Drawing September 2013

One nice thing about being in school is it's much easier to take life drawing classes.  While I'm still at FIEA, I'm going to keep on attending life drawing where possible.  Here's a collection of my work from this past month:

I'm used to drawing with outline, so now I'm forcing myself to use value blocking instead.  I can't tell if it's helping, but I have to assume it is.

Tuesday, September 24, 2013

Ascendant Grunt Knockbacks

This is the knockback for a Grunt enemy in Ascendant.  They fall back over time, then loop when horizontal with the ground.  It ends with the bounce and the kip-up.

Sunday, September 1, 2013

Friday, August 23, 2013

Joint Skeleton-mover Script

You can temporarily download it here until I get it on Creative Crash.
Or click Read More to show the full script at the bottom of the post.

This is a script I started late last year, and I've recently come back and cleaned it up.  It allows you to grab the root joint of a joint chain to rotate and move it relative to the origin.  It creates a locator on your joint, bakes the animation onto that, and then allows you to interact with a shape on the origin to play with your joint chain.  After deleting, it bakes it all back onto the root joint.  Though it's fairly simple, and not entirely original, it has been one of my most-used scripts for exported joint chains (and also mocap cleanup).

It's pretty straightforward; you run the JHH_skeletonMover script to create or delete the skeleton mover.  It will intelligently put it on the object selected, then delete it off when you're done.  There's also a JHH_skeletonMover_originOffset procedure which will center the joint onto the origin; good for zeroing out your animation.  I'll be making a video pretty soon, but feel free to ask if you have questions.

I'll probably rewrite this in Python at some point, just to get some practice in.

Thursday, August 8, 2013

I'm Working For Hapa Games

As of today, I'm technically working for Hapa Games.  It's an indie company started by two of my fellow developers.  We're working on a 2D Co-op brawler with roguelike elements.  It's an idea we've been discussing for the past several months.  More will be coming soon.

For funsies, you can check out some of the reference tests I made back in June:

Wednesday, July 31, 2013

11 Second Club, July 2013

Here is my 11 Second Club entry for July 2013:

I'm surprised how much I learned just by doing this; I mean, I expected to learn a lot, but it challenged me in a lot of ways I'm not used to.  The voice clip was very weird and oddly specific, so I tried to push it to a subject that wasn't obvious.  I went with a gamer stuck in an RTS style game and her roommate sitting on the couch, because all gamers have been there before.

Friday, July 26, 2013

Wentelteffje Animations for Team Escherreal

During the production of Grapple, team Escherreal needed a bit of help, so I volunteered to help them out with animation so they didn't have to cut this guy from the game.  I animated the creature with an insect-like tripedal gait.  I thought it made the most sense with the 6 legs, even though it has human feet.

This is Wentelteffe, or "French Toast", a rolling bug-like creature based off of M. C. Escher's, by the same name.  The character was modeled and textured by Miguel Espinoza, and rigged by Caitlyn Trout (with some tweaks by me).

Animated Facial Textures in Maya and Unity

Download the pdf document here:
Direct link

Check it out online here:
Animated Facial Textures in Maya and Unity - Full Document

You can check my further notes on the subject here:
More on Animated Facial Textures

Essentially, my goal was to create a texture-driven facial animation system that worked in both Maya and Unity.  Making one in Maya is very simple, but I found very little on getting it to work in Unity, and nothing about getting it to export from Maya.

To give a bit of a background, for FIEA, one of our assignments was to document or write a tutorial about something we learned or wanted to learn.  I took this opportunity to pick up Unity, and solve a possible problem for a game I will be working on soon, and a problem I'd been curious about since when I was working on Intrepid.

I came up with a solution using joint animation that can be baked out of Maya and used in Unity.  The Maya portion gave me some practice with Maya Expressions, which is great considering I want to rig up the rest of the character soon.  And the Unity portion gave me a chance to learn Unity, and also learn some C#.  C# wasn't too difficult to pick up, having studied C and Java in the past; the code to get it all working can pretty much be copy-pasted from the document.

Download the pdf from the link above.  It should be very accessible - it breaks it down really small to start; getting it in engine, and how the math of the expressions and the image offset method will work.  And in sections 4 and 5, it gets to the meat of the whole operation.

If anyone has any questions on how it works, or why I did something; or any comments on how I can improve this method, I'd love to hear it.  Send me an email, or drop me a message here.

Animated Facial Textures in Maya and Unity - Full Document

Click 'Read More' below to see the full document.

Tuesday, July 23, 2013

Painting Using Mudbox's Export-to-PSD Feature

It's a start!  I have been digging this paint-directly-on-the-model workflow for textures.  It just makes so much more sense in my head.

I want to texture using Mudbox's export-screen-to-Photoshop feature.  It works a lot like Pixexix and ZappLink from ZBrush, but I found it to be much easier to use than the latter, and less buggy than the former.

When exporting to Mudbox, I had a lot of issues to fix.  Not surprisingly, it caught me for a lot of T-intersections and non-manifold geometry, both pretty much standard to a low poly model.  For the non-manifold geometry, I seperated those edges who were shared by a plane (such as in the hat), but kept them in the combined meshes.  I am going to swing back and clean up the UVs, before I jump back into Mudbox.

It really doesn't like dealing with multiple meshes at the same time (or perhaps multiple uv spaces at the same time), but that is a problem easily solved by working on individual pieces at a time, with some clever merging and unmerging in between.  I also ran into issues with overlapping UVs, so the simple fix was to get rid of the overlapping during the painting process.

Thursday, June 27, 2013

Aiming Pole Vector Controls at Joints

I was adding pole vectors onto knees for a rig I'm currently animating to, and I was using aim constraints to get the curves to point towards the knees (since the knees are not pointing down any one axis).  Then I had the idea: why not leave the aim constraints on?  The pole vector curve will always point towards the joint, so no more losing similar-looking curves in a tangled mess of a bent-over-rig.

 You can also lock out the rotation, and hide them, if you choose, which will stop the animator from keying it, but not restrict the constraints from changing the values.  Perfect for this application.  It's got all of the benefits from drawing a curve between the PV to the joint, but less of the visual clutter (heck, you could even do both).

Safe from we animators, for another day.

Thursday, June 20, 2013

Good Ol' Ball Bounce

I wanted to go back and hit on the basics, so I've been doing some simple ball bounces.  I want to work on weight more, as I've been having trouble with animating weight on the heavy Grapple enemies.  Each of these were pretty quick, and as expected, each came quicker than the last.  It's funny because I immediately noticed myself using these principles in a different animation afterwards.

My first four exercises were a stationary and moving bounce, one affected by gravity, and one not.  (Suggested by user Slipsius on Polycount.)  I also threw in some experimentation with different masses, for good measure.  The first four are based off of a basketball.  The next two are bowling balls to get the feeling of a different mass.

Thanks to Saul Garcia for making his ball rig available on Creative Crash.

Thursday, June 13, 2013

Nassa Color Schemes

As I'm moving towards texturing my character, I painted up a bunch of options for color schemes.  I'm exploring the first two further.  While I really like the colors of the third and fifth, neither fit the character as well, and character comes first.

The next step was some variations on the chosen color.  The second one ended up being the favorite.

Monday, June 10, 2013

Grapple - Amina Enemy Takedown

Here is a shot I've been working on for Grapple.  Amina, the protagonist of the game, is equipped with a grappling hook that she can use to grab onto buildings and enemies.  When grappling an enemy from the back, she goes into a takedown animation.

Tuesday, May 28, 2013

Nassa the Gnome, Version 2

I wanted to experiment with animated textures for facial features, which was my original plan with the old Nassa model.  I've been on a low-poly model kick for a little while, so I decided this is the ideal time to create a new model.  The goal was to stay under 1000 tris.  I also intend to take this one through textures so I can test using animated textures for the face in Maya and in Unity.

I did consider working from my older model, but I really wanted to try applying everything I've learned over the past few months.  It's interesting to see how similar it is to my old model, but how the shapes are so much better now, with fewer polys, too.

The picture above is the newer sketch I was working off of for this new model.  I fleshed out my original idea and design, visually describing the materials her clothes were made of, and the individual layers of the clothing.  I leaned towards a more cartoony look, since I wanted to push the designs of our three DnD characters; one short cute female gnome, one big beefy human/vryloka, and one fat stocky dwarf.

Tuesday, May 14, 2013

Using a Rivet Script with Overlapping UVs

When working on my facial rig test, I ran into the problem where I had overlapping UVs, which caused issues in the script.  My solution was to move the overlapping UVs into a different UV quadrant.  Since the texture tiles at a 1:1 ratio, moving the UVs into the (-x, y) quadrant means they function the exact same, but their coordinates are different for the sake of the script.  Clever.

I used the djRivet script for Maya.

Epic Games Style Facial Rig

This was my experiments on the Epic Games style facial rig.  It essentially allows them to make one hero face, controlled with morph deformers (blendshapes), and then transfer the animation to a joint system on a series of different faces.  Joints are much cheaper to use in a game engine, and it is much easier on the animators to use a single system across all of the characters in the Gears of War game.

I edited the Nassa rig to have a mouth to test this out.  The left Nassa face is the hero using blendshapes.  The controllers drive that face, which in turn move locators parented to the verts on the face.  (I used a Maya rivet script to constrain the locators to verts.  Make sure your UV spaces are unique!)  Then those locators move the weighted joints on the character's face. The transfer wasn't exactly 1 to 1, but it was pretty close, and with more work, I'm sure it'd be closer.  With a higher-poly face, I'd need some more joints and a bit more time in weighting.  However, even these limited joints transfered to the high-poly Chip face pretty well, with minor editing on the joint weights.

(video coming soon, too)

Tuesday, April 23, 2013

Grapple - Heavy Mocap Cleanup - run cycle and Amina actions

One nice thing about motion capture is how fast you can turn around animations, or you'd think.  The idea is that you start your animation past the blocking stage; mocap sort of gives that to you.  There is a lot of work involved in making it loop properly, but the cleanup stage feels an awful like blocking, just with a whole lot of keys.  But occasionally you'll come across an animation that needs heavier keying.  This is an example where mocap didn't give me what I wanted.

To start off, I was never really happy with the original data we recorded.  The actor didn't quite embody the character I was going for, and I didn't actively realize it until late in the process.  We eventually re-recorded the data, this time with myself as the actor, and got a better performance for the character, which helped.  But then there was the problem with movement speed.  We chose to use root motion on the project, instead of having motion controlled programatically.  This means the way the character feels is controlled by the animators, not the designers; that means animation cycles are spent exporting over and over for the design team.  Mistake number two.

I ended up spending a week tweaking all of the 4 run cycles (each direction) to increase the speed as much as possible without breaking the rig.  And in-between all of that, I was constantly checking it in UDK to see how it worked out.  By the end of it, I essentially doubled the move-speed in each direction by dropping the character's hips and increasing stride length across the board.

After all of that, I can't tell what would have taken longer, motion capture or keyframe animation.  I'd like to think that mocap was still a bit quicker, because we may have run into the same problems with in-game speed; though it would have been really easy to check early on with keyframe animation.

For good measure, here are a few more mixed animations.  The first video is completely keyed, except for the idle.  The second video uses mocap data at the beginning and end.

Monday, April 8, 2013

Chip Facial Test

I recently had a project to rig up a face and animate it; the important part was making a script that did it automatically.  I just used the same head and morph deformers that I had made the previous year for the Chip model.  I had forgotten how fun animating faces was, as well as scripting.

Oh Chip, you're so racy.

Tuesday, April 2, 2013

Nassa the Gnome Animation and Mocap

We had an assignment to take some mocap data, and make 5 animations from it.  I decided to make it into a personal project, by running and directing my own mocap shoot to get exactly the shots I wanted.  And then, I proceeded to make thirty-some animations from that.  I modeled and rigged the character myself, and designed her to be in the style of a low-poly mobile game or a third person action game.

The attacks and attitude were based off of my DnD character (a naive dagger-wielding sorceress.)

I recently rendered them out, and I've included some of my favorites from that collection in the video below.  They are a mix of mocap cleanup and liberal keyframing.

Saturday, March 16, 2013

Megacon 2013

I got to experience my first convention today.  I wasn't sure what to expect coming in, and I really enjoyed myself.  I went as Malzahar, from League of Legends.

I got stopped by a rather sizeable number of people for pictures, which was pretty flattering, as I didn't expect such a response.  A lot of people who stopped mentioned how they played the character, or that their friend main-ed him.  It made me proud to be a game developer, in that so many people were excited about a character from a video game, and automatically felt some kinship with a random stranger in Florida.

Probably my highlight of the convention was meeting up with all of the other League of Legends characters, since we all sort of had an affinity with each other.  I came a little late for the group shot, since we had trouble finding them outside, so I did miss a few.  All in all, though, it was a great experience.

Enjoy these pictures, with a rather handsome Malzahar and Ezreal, and also a Miss Fortune, Graves, and Caitlyn below.

Monday, March 4, 2013

Grapple Locomotion Animation Pre-Vis

This is a locomotion test for the grappling hook in the game, Grapple.  Right now, the game is getting a bit of a rehaul, and part of that is the player locomotion.  We are shifting to a flowing movement using the grappling hook, and given a number of situations provided by the designers, I've been asked to depict how it should feel from a player's perspective.

It is all animated on twos and fours at 30 fps.  Unfortunately, YouTube doesn't have the compression for accurate playback speed, but it is only an 'animated sketch' after all.

I drew out this simple environment, based on current concept art, and drew a path for the character to traverse.  I tried to include as many situations as possible; standing grapples, air grapples, swinging, enemy interaction, and most importantly, flowing movement.  I imagine it as parkour mixed with a grappling hook.

Thursday, February 28, 2013

Animating a Corgi

Here are my animations for Tank, the Corgi. He was the main character in Intrepid. I animated the base locomotion, as well as a couple small actions.  I was never able to clean them up as much as I had wanted (especially the jump/bark) before the game was cut.  Check out the rigging post for some notes about animating the quadruped.

Rear and 3/4 playthrough of all of the animations

Idle animation

Walk, run, and sprint

Jump and bark (WIPs)

Sniff idle and sniff walk

Also, these kinds of mistakes make me love doing my job:

Wednesday, February 27, 2013

Intrepid Lighting in vForge

I did all of the in-engine lighting for Intrepid. As the art lead, and without a dedicated art director, the job went to me. It was a bit of a struggle, since I did a lot of guessing and working from the heart, because I don't really have the background for lighting. It was cool working in vForge with the deferred lighting, since I could make changes, and see them instantly in-game. Here's a bunch of shots of the level we had made:


It's weird, because after a time, I really couldn't tell how it looked, and even today (a week later), I can't read if it looks good or not.  With an animation, I can come back to it in a day or two, and I'll know what needs fixing; but when it came to this kind of thing, it did not come as easily.  I suppose that's why I'm an animator first.

Intrepid Cave Models

For funsies, here are some of the cave wall models I did for Intrepid.  They are all multi-sided (two sides of each being shown), so they can create some pretty cool silhouettes from very few modular pieces.  Click on 'em to show a bigger picture.