Tuesday, 14 July 2009

Animatic

It has been silent for nearly two weeks now. I am working on the animatic, and i see very little point in updating a lot before that part is finished.
Animatic is a great way to test out the the rig i have made so far and there are a number of fixes that needs to be done. Also to the current scene-set.


Saturday, 4 July 2009

Versions of the Rig

I have, after heavy pressure from morten made some scripts and versions of the rig for:
proxy
Lowres
Highres
(I will post the scripts here later on, when they hasve proven to work 100%)




Still a long way to go on the skinning-part. But its looking up.
You know you are NOT done if the model still looks best in t-pose.

Friday, 3 July 2009

Animatic


Finally starting doing animatics while also testing the rigs and I can already see now that its going to require a lot more tuning. (look at the armpit for this position, not too nice deformations)
Morten is intensly working on the music, but finally things seems to be moving a tad faster.


Editing!

Meanwhile i am doing my rigging. My good friend Morten Overlie has come to visit me here in Spain to do a little editing of my shortmovie in-between the sangrias he has promised to consume. In vast quantities.

Hopefully I can release parts of the first animatic-sessions here on the blog.
The animatic will be done entirely in 3d as i see little point in starting drawing/scanning/editing pictures when the entire process is so quick in 3d.

Friday, 26 June 2009

Corrective morph-system

Sometimes. Most of the time. Two morphtargets will not play friends. Meaning that together they move same points in [X,Y,Z] When both are triggered the points get a double-translation that ends in PURE UGLINESS.
To ensure that the result is better, we apply a third morph that fixes the result
This morph is dedicated to only fix this coincidene and is called a corrective-morph

Morph1 + Morph2 = ugly
Morph1 + Morph2 +correction = nice


UGLY----->NICER

Thats all nice.
The problem i had was how to make this system automatic.
When the two morphs are triggered together i wanted a percentage of the third morph to be triggered. Doesnt sound hard? We are actually talking here about two values controlling one value. And there is no multiply/divide-node in max.
The resulting math would look something like this:

Morph1*morph2 = value of correctivemorph/2
But where to write this in max?

So i decided on fixing it on the face-gui level.



The yellow dot is the controller. When moved along Y. it triggers morph1. Along X, Morph2.
Since the extenct of values are [1,1] the diagonal would have to be 45-degrees.
So if i made a another "invisible shape"(the grey rectangle inside the yellow dot) 45 degrees on the controller...its local-axis X would always be defined by the controllers XY. Perfect. One value derived from TWO values.
Pointconstrain the "invisible shape" to the controller and voila!
This localX was easy enough to use to trigger the corrective morph through a ExposeTransform-node.




Thursday, 25 June 2009

More Morphs

Shifting volume around can be tedious. but after a while it becomes rather meditative. And you keep moving point/vertices around untill its looking good. :)
This is the mesh that is going to be the morph-target for the inner part of the eyebrow...moving down.


the eyebrow is divided into three. Inner, middle, outer. They have to move: up, down, left, right.
And since the system needs to be on both sides we get
3*4*2=24 morphs just for the eyebrows. Luckily its easy to flip the geomitry over to the right side with the new polygon tools in max.
That little toolbox there with looptools (curve and straight) really makes my day.

Wednesday, 24 June 2009

Scripts scripts scripts

I am a beginner scripter. I am really new to it all.
But they are a great way to save you loads of work.

Here is an example:
15 bones are running down each arm the torero. I want them to be maya-style/tendons so i can easily pull them off the rig and make nice arcs etc etc.
That would take me half an hour of quite repetitious clicking/selection/applying/aligning.

Here is a script that does it in one second. It could probably be written nicer and use FN()-functions for some of the things. But it works great!


AxisPointArray=#()
BoneArray =#()
join BoneArray $Selection

for i=1 to BoneArray.count do
(
PositionPoint = point()
PositionPoint.box = true
PositionPoint.size = 8
PositionPoint.wirecolor = color 0 255 0
PositionPoint.transform = BoneArray[i].transform
PositionPoint.name = "Position_" + BoneArray[i].name
join PositionPointArray PositionPoint
)

for i=1 to BoneArray.count do
(
AxisPoint = point()
AxisPoint.box = true
AxisPoint.size = 8
AxisPoint.wirecolor = color 0 255 0
AxisPoint.transform = BoneArray[i].transform
AxisPoint.name = "Axis_" + BoneArray[i].name
in coordsys local move Axispoint [0,0,8]
join AxisPointArray AxisPoint
AxisPoint.Parent = PositionPointArray[i]
)

for i =1 to BoneArray.count do
(
--BoneArray[i].position.controller = position_XYZ ()
BoneArray[i].position.controller = position_list ()
MyposConst = Position_Constraint ()
MyposConst.appendtarget PositionPointArray[i] 50
BoneArray[i].pos.controller.Available.controller = MyposConst



)
for i=1 to BoneArray.count-1 do
(
Aimer= lookat_constraint()
BoneArray[i].rotation.controller = Aimer
BoneArray[i].rotation.controller.constraints.appendtarget PositionPointArray[i+1] 50
Aimer.lookat_vector_length = 0
Aimer.PickUpNode = AxisPointArray[i]
Aimer.upnode_world = false
)

-------------------------
------------------------
And here is what the script does :
Adds the green points to the correct-places and binds the bones to the green points.