March 30, 2007

Its the end of March as we know it (and I need time)...

As the title says, here we are at the end of March and boy do I wish it was the end of February. I am starting to feel like I have a grip on things, but only so far as now I can start really working on animation. I've done lighting and finished texturing, so aside from a few potential problems with the render (I'm keeping my fingers crossed), I can pretty much solely animate for the next couple weeks. That gives me about a day a shot to really go over it, spline and smooth everything out. In talking to everyone else, it seems most people are aiming to start rendering on the 18th--that gives me a good 17 days or so (minus a couple for the last two days at Jarnac, so 15)--i.e. exactly one day per shot including weekends. Though I'm hoping my rendering doesn't take very long (3 days ideally--1 per pass [galaxy, animation, ambient occlusion]) who knows what geometry won't show up in the render or what texture/lighting problems there will be...or even worse, animation problems I didn't see in playblasting. So a full week will give me some wiggle room hopefully to go back and rework sections if need be and re-render.

March 27, 2007

Pass 2 & Shelves

Lip Sync

I started out this week much more confident--Norman's textures are basically complete, and the eyebrow dilemma is over...so for the most part I can focus on his animation, start adding more in-betweens, and really hone the movement of the piece. Watching the blocking at the beginning I was having serious trouble figuring out what additional poses were needed--the movement is very simple and subtle, and there isn't much of it. I realized that a lot of the focus of these shots is the lip sync--I set everything up to allow certain shots that showcase the lip sync.

As with any music video, the singer can't be doing very much or the viewer won't see the lip sync (unless they strap a camera to the singer's face--but thats for a very specific effect). So I unintentionally started working on the lip sync--and lo and behold I got renewed excitement for the piece generally. The lip sync was why I wanted to create a music video in the first place--honestly there is just something inherently cool about bringing a character to life to the point that they have a voice. As I worked on the lip sync I started to remember what Leif and Nick had said last semester about letting the voice inform the character's movement...pay attention for where they breathe, make sure the body moves accordingly---etc. We was shown the video below last semester as proof that the body movement is far more important for selling that the voice comes from that person than the lip sync. The video is a commercial for Stroh's Light Beer where they really convincingly took footage of Fidel Castro and changed the voice, but his gestural emphasis matches the new voice, so it works even though the lips obviously don't match:



Leif was also right on in choosing to build Norman with mouth blend shapes but no specific blend shapes for phonemes--the rig allows mouth shapes to vary depending on the expression on the face. It makes for a really natural looking lip sync with a lot of flexibility---instead of the entire mouth reshaping for each shape, the rig allows subtle movement, like real human lip movement.

Up to this point I had it in my head to wait to do the lip sync--everyone told me to hold off and get everything else done first. As a result I wasn't animating to the lyrics--I did have the body movement relate to the music, but not to the voice--the most important part!

So, between yesterday and today I did the first pass of the lip sync and I'm pretty happy...it definitely needs work, but parts of it look really good. After finishing the lip sync this morning I spent most of the day duplicating the planet pieces and constraining them to his hands--really trying to hone the movement and putting together of the puzzle. It's definitely feeling more solid and the movement makes more sense--though I have had one technical problem thats just cost some time. Since I created the planet with levels of groups so that I could snap each piece back to O and animate the group above it once pieces are fit together, the duplicating and constraining process was more complicated than I had envisioned. I had to figure out how to match the constrained pieces to the referenced ones so that I could switch back to the referenced version when each piece is added. Unfortunately I didn't know a better way then to try to match the pieces as closely as I could. Fortunately, the side benefit is that instead of the pieces sliding in seamlessly, they now jiggle in, a much more realistic movement--by animating the hands accordingly, it really feels as though Justin is coordinating these pieces realistically instead of robotically, perfectly sliding them together. So far this solution seems to be working nicely--we'll see what happens when I spline!

Customizing Shelves



I've been slowly coming up with solutions to automate actions that I do all the time to save me some energy. I started by creating really simple keys to snap the timeline to individual shot lengths--this allows quick viewing of shots and an easy way to see all the keys of a shot on the timeline without needing the graph editor. Then when I created the texturing, having them visible slowed the computer down significantly just in tumbling through space--so I created keys that use a for loop to turn texturing visibility on or off for all the pieces currently selected (I need some of them to be visible--like the eyes, or I can't see the pupils). Finally, Stephan gave me a highend3d shelf (pictured above) for the Human rig that he modified for Norman last semester. Its a simple shelf, the buttons merely select the corresponding control curve--but the image buttons are really helpful--and save a few modifications I had to do to the script because of reference prefixes, it was really easy to convert the images for a mac and get the buttons to work on Justin.

Finally, for when I move from blocked to splined animation, to make sure that everything is keyed at every blocked pose, I created two buttons, a trans and a rot button which select all controls that have either translate or rotate key-ability. I will have to select the extra attributes separately (eyebrows, eyes, mouth (+ tongue), hands, and feet--not to mention the pieces. However, this will automate my locking down of poses much more efficiently.

March 20, 2007

Eyebrow Solution



After wrestling forever in an attempt to solve the wrap deformer problem with no progress--trying directly connecting various attributes of the face to the eyebrow geometry, trying to wade through the layers of blendshapes on the eyebrow ridge to try to reconstruct the network for the brows--I've given up on the idea. Instead, I trashed the eyebrows and selected the faces on the face where I had positioned the eyebrows initially and textured them with the hair texture with an added bump map on top that I constructed in photoshop using the face UV layout. I'm quite pleased with the result--he now has eyebrows that will without a doubt move with the eyebrow ridge and will have no problems with scaling!

March 16, 2007

Final Touches on Justin's Texturing

So its taken about three days to finish laying out Justin's UVs, draw all of his textures, add posterization, and add outlines to it all. I'd say a pretty efficient few days, n'est ce pas? First, here is an image of Justin in his entirety, completely textured, and with very subtle outlines:



The outlines are a little too subtle from far away--I'm wondering whether I can use a distance between node and have the distance between-lets say-the shot cam and Justin's torso determine the width of the outline. Unfortunately, I can't set this up in the reference file because the shot cam only exists in the animation file...hopefully I can still use referenced nodes to create this network. It might not be worth the time to attempt this--but its an exciting idea nonetheless...we'll see.

I am glad that I spent some time creating outlines for the geometry, they give a sort of ambient occlusion effect since I don't have a hard edge between the outline and the geometry. Ironically enough the outlines make Justin look more 3d, not less. Below are two identical images except that the top doesn't have outlines. Its a very subtle difference, but definitely visible on the left edge of the right eye.





I still have some texturing problems to solve, below is an up to date list on the texturing still needed:

A. Problems
1. pinching of the planet texture
2. faceting of the planet faces

B. Textures remaining
1. Justin's inner mouth (Tongue)
2. Universe
i.one texture for the inside of a sphere
ii.paint effects for atmosphere
3. Interior of planet pieces

Despite this list, I feel much more on task and ready to focus on animation. I intend to leave lighting and rendering for the last couple weeks and finish off the texturing list (and the eyebrow issue) when I'm worn out from animating.

March 15, 2007

Back in UVland

I began the week by going over the remaining notes on my poses and addressing each one.
In addition, I started duplicating pieces and constraining them to Justin's hands so that for certain portions of the piece--where he is holding a piece/group of pieces in a single position--the hand animation will lead the piece. To avoid the visibility switch problem Lauren had (where Mental Ray rendered all the pieces regardless of their visibility), I took her suggestion and did a scale switch instead where over one frame one piece scales up from zero and one scales down to zero, having the same effect as the visibility switch but not having the possibility of rendering problems.

I still have a few things I want to deal with in these basic poses, but I decided it was time to go back and work on skin weighting (just briefly) and texturing.

I spent a day attempting to figure out the eyebrow wrap problem with no success, so instead I fixed the weighting on his right shoulder and finished laying out his UVs.
At the moment I've drawn textures for all of Justin except his shoes, eyebrows and hair pieces. I also still have to texture the insides of all the planet pieces (perhaps I can draw one texture that I apply in various ways to each of them...), and figure out the stretching of the outer planet texture on the green piece.

Below are a couple renders of Justin currently, with almost all of his texturing done.



Each texture is a lambert shader with the color map an imported scan of colored pencil drawing on vellum. From far away they look soft and hand-drawn, but I posterized the images in photoshop to give an edgy, grainy look so that close up the "innocent, childlike" nature that is seen from afar actually has an older, edgier sensibility to it.



There are also some drawn details to bring a sense of reality to the piece, while the geometry itself is still fairly boxy and simple. This adds a playful sense of puppetry to the piece--and an artisan/craftsmanship of carefully laying out the textures and UVs for each polygon as though done by hand.



I'm trying to find a balance between adding detail and making it stylized. As can be seen with the hand above, there is an obvious effort to denote fingernails, but only subtly, a little detail to emphasize aspects of human anatomy and clothing, while keeping it simple enough to not even vaguely suggest an attempt at realism.


I haven't yet decided whether the outline idea that I used in the elephant piece will be applied here, but it feels very 3d at the moment and I'd like to "funkify" it. I think using outlines could prove effective, though not the built in toon shader outlines that feel separate from the character--id rather using the facing ratio node the way toon shaders used to be created, which gives a more organic (as in part of the geometry--not as in part of nature) feel to it. I intend to finish up Justin's hand drawn textures in the next day or two and experiment some with the outline concept. But I have to get back to animating early next week, so hopefully my aesthetic will come together quickly!

March 5, 2007

Solutions and Problems

First off, heres a list of some of the problems I have yet to solve.

1. Teeth and Tongue missing
2. Penetration of hair into face and eyebrows into hat
3. Eyebrow Wrap deformation
4. Right shoulder skinning
5. Stretched texture on planet
6. Roughness of polygons on planet surface

So I've started to go down this checklist, attempting to do some detective work.


Problem 1:

Solved--I discovered that somehow I accidentally included the teeth, the inside of the mouth (dubbed boca burger) and the tongue in my hidden blend shape layer, so I removed them from the layer and after realizing the tongue was in NURBS and I didn't have NURBS visible, I have solved that problem. However, this has brought about some new problems.

1. Penetration of Inside of Mouth Through Cheek
2. Tongue deformation

I think I've fixed the penetration of the inside of mouth through the cheek by moving the vertices of the "boca burger" inward as close to the teeth as possible.
As for the tongue deformation, I've discovered that the tongue deformation gets really weird as a result of scaling Norman down. Below are two images, the top displays the way the tongue looks when Norman is at scale=1 and the bottom is when Norman is at scale .016 (the one I'm using).



After hours of attempting to deconstruct Norman's tongue, I've finally fixed the problem.
Within the Local part of the rig itself there are three different groups that relate to the tongue:
ZGr_Cn_TongueA_Bind
contains the actual joints with an effector that connects to a spline IK outside of the rig
ZGr_Cn_TongueA_Driv
contains a series of groups, clusters and locators which manipulate a curve that in turn controls the deformation of different parts of the tongue
ZGr_Cn_TongueA
contains the controls to manipulate the locators, clusters and groups

In addition, there is a World Group that contains the Spline IK and the curve that the clusters are on.

I discovered that the problem was a double transform, as evidenced by the fact that the joints collapsed on top of each other when scaling the rig as small as I was attempting, and stretched the tongue out when scaling larger. After many trials of using multiply/divide nodes with different parts of the rig to attempt to cancel out these double transforms with no success, I realized that the double transform was in translate X, so I had to figure out how to control translate X of the joints. Lo and behold, there were already in place a series of utility nodes that controlled how much the joints, and in turn the tongue itself moved in translate X based on the spline IK.
A curve Info node, which queried the length of the spline IK curve, was fed into the first channel of this node and was multiplied by a pre-determined number, presumably a proportion of where that joint should fall along the length of the spline curve. There actually didn't seem to be any problem with how these utility nodes were set up--the spline curve scaled with the rig and the second number stayed a constant, so the ratio remained accurate. However, there was a double transform somewhere in the rig that didn't seem to be controllable elsewhere, so I figured using these nodes was the best way to counteract the problem.
To counteract the double transform, I needed an inverse proportion of the placer's scale. So I created a multiply/divide node, set the first input at 1, input the scale value for the placer as input 2 and set the function to divide. Then I duplicated the already existing nodes (there was one for each joint in the tongue chain) and put the pre-existing ratio as the first input. The output of the multiply/divide node (the inverse proportion) was fed into input two, and the result was a ration that would counteract the double transform. This value became input two in the already existing nodes, with the length of the spline curve as input one. Finally, this result multiplied out to become the new translate value in X of the joint.
Below is a screen grab of the connections I set up between the various nodes:

In simpler mathematical terms, lets say Justin's placer scale is A, the original proportion of the curve is B and the total length of the curve is C.

The original node setup read as follows:
B x C = translate X of joint

With my additional node, here is the new set-up:
1/A x B = B/A
C x B/A = new translate X of joint

In addition, the World Utilities Group doesn't scale with the rig, but the IK needs to. However, the pivot of the IK isn't in the right place to scale from, while the World Utilities Group that the IK is in has the pivot in the correct place. So I directly connected the scale of the placer to the scale of this group. The spline curve is also in this group and already scales correctly because its clusters are in the rig, so I merely unchecked the "Inherits Transform" box in the Attribute Editor so its parent group's scale doesn't affect its scale.

Unfortunately, solving this took all day. However, Problem 2 should be a simple modeling fix, and the right shoulder skinning can be copied from the left shoulder to fix Problem 4. Problems 5&6 are texturing problems and while they need to be dealt with, I can attack them a little further down the road.

Its really the eyebrow wrap problem that I want to solve next. Hopefully, I can do it a little more efficiently than the tongue.