PDA

View Full Version : Facial Morph rig


pixelranger
07-02-2003, 02:34 AM
Hi there. I'm working on a modeling a character, but I just saw a demoreel in the finished gallery forum where there was this amazing morph rig, and I wanted to try it myself. I've never tried expressions before, so I figured it would be a nice way of learning.

Here's (http://www.rayk.be/pxlranger/gnom/Morphtest_divx_small.avi) a 2 mB divx showing how the rig works.

I didn't focus on the morph targets, but rather the expressions and rig itself. I'll go back and tweak the endomorphs later. Now I want to finish the model...

The setup wasn't that hard. If you'd like, I can break down the procedure for ya.
I am interested in hearing your views on such a rig and it would be nice to hear if any other of you have any experience with such a rig. Any comments on this much appreciated :)

Here's a rendering of the fella:

http://www.rayk.be/pxlranger/gnom/hode7texture.jpg

Shade01
07-02-2003, 02:36 AM
You never have to ask if you'd like to share a way of doing something. By all means share away!

Mechis
07-02-2003, 02:51 AM
Hi! You saw that facial rig in a demo reel right? I think I remember seeing it. I had no idea you could do something like that in LW though! That video you showed was COOL! Please share your technique when you get the chance.

Also, I saw your thread about this character on the forum at LWG3d. I asked how you did the hair, but you didn't respond. Is it Saslite? Or full Sasquatch? Or image maps? I'd love to know :)
Thanks again!

Stoehr
07-02-2003, 03:02 AM
The last two days I've been rigging my lead character for facial animation. Experimenting with bones, IK, muscle bones, and I'm making progress; slower than I'd like to be.

I would love to read about how you did the orbital controls. Looks very similar to the XSI version I've seen. If you willing to share, I'm willing to listen.

Triple G
07-02-2003, 03:20 AM
That is one cool looking little guy! Love the characterized style, and the texturing is right-on. :thumbsup:

I saw the demo reel which I believe is the one you're referring to...it was done in XSI, and was pretty snazzy-looking. Yours looks very nice too...looks to me like it was done by using expressions to link morph targets to movement of the control nulls on their different axes. I'm not sure how effective this would be for actual animation...it seems like it would be less precise than controlling an exact percentage with sliders. I guess it would just take a little getting used to. Nonetheless, I'd still be interested to see how you set it up... :beer:

Infinity3d4life
07-02-2003, 03:47 AM
Awesome.. I would love to know about how to set up something like this...

kretin
07-02-2003, 04:07 AM
Great work :)

Simon Mills has certainly inspired alot of people. I was thinking of replicating his morph controls in LW too.

What we really need though, is a script or plugin to create a user friendly interface so it's quick to apply the morphs. Otherwise it'll be very repetitive to apply the expressions to each morph every time...

Shade01
07-02-2003, 04:08 AM
If you guys want to know what SplineGod looks like in real life there it is :)

takkun
07-02-2003, 04:14 AM
Very interesting, does anyone have a link to the demo reel that inspired this setup? (EDIT: Never mind, I found it.) Great model too, by the way. If you guys want to know what SplineGod looks like in real life there it is Why does everyone feel the need to pick on Larry lately? And actually, that's kind of a complement being that that's a damn fine model!

Triple G
07-02-2003, 04:23 AM
Originally posted by takkun
Very interesting, does anyone have a link to the demo reel that inspired this setup? (EDIT: Never mind, I found it.)

Oh well...for anyone who can't find it, the URL is http://www.cgtalk.com/showthread.php?s=&threadid=71553

Shade01
07-02-2003, 04:39 AM
Why does everyone feel the need to pick on Larry lately?

Not even, 'tis a joke. I remember when Felytenduct made a wise crack about my art way back when. Where is that guy anyway? He was such a smartass:p

marcopio
07-02-2003, 04:46 AM
Looks great. I am also interested in how you setup the controls.

HowardM
07-02-2003, 05:54 AM
please oh god please write an lscript to automate this for any object, camera, light, position, rotation, morph!!!!!!!
:)
someone here has got to know enough lscript/expressions to do this? its really simple math, just dont know the syntax...who knows maybe even I will figure it out... :)

I disagree 3G, I think this puppeteering of models with 'joysticks' that control more than one slider/axis (you could even use a bone this way to control 3 axis!) is alot more intuitive and faster!
watch Simon Mills video...look at all those controls!
why keyframe 2 or 3 sliders to get one pose when you can move one for many different poses?
:)

Imagine this, how cool would it be if you could post a little icon graphic, like you can now put comments on nulls,...so you could make a mini interface with facial expressions in each corner for quick reference! top left - anger, top right - smile, bottom left - crying, bottom right - perplexed, center - neutral.
!!!!
oh yeah and of course, wow man, awesome style on the character!

Triple G
07-02-2003, 06:14 AM
Originally posted by HowardM
Imagine this, how cool would it be if you could post a little icon graphic, like you can now put comments on nulls,...so you could make a mini interface with facial expressions in each corner for quick reference! top left - anger, top right - smile, bottom left - crying, bottom right - perplexed, center - neutral.

That does sound cool, but my concern would be...how would you go about mixing facial expressions that are grouped together in one interface? In other words, say you wanted to mix emotions that were on opposite corners of your interface...it seems like the way this is set up, moving more toward one pose simultaneously cancels out the others. Unless I'm dense and am not seeing something obvious...(if so, it won't be the fist time...:D )

HowardM
07-02-2003, 06:22 AM
youre right, it wont be the fist time! hiya! waaaah!
:)~

anyway...well you could always add override buttons or ok, heres a good scenario - a modular mini interface...
so you could have lets say 10 morphs.
and youve got each one listed at the top, with its own individual slider for max control of each single morph.
then you have an lscript that allows you to drag and drop morphs into each corner of a square to make your own 'joysticks'...make as many as you need.
WATCH SIMONS VIDEO! :) hes got 4 or 5 main facial controls then a few specific ones for single morphs.

I love this idea! someone please help us make it! :) Eki where are you?!

Triple G
07-02-2003, 06:36 AM
Originally posted by HowardM
youre right, it wont be the fist time! hiya! waaaah!

Huh? Why I oughta...!!!:shame: :D

Well, I guess I'm really just sorta playing devil's advocate here. I'd be just as excited as the next guy if somebody were to come up with an easy-to-use interface to set up something like this in LW. It might take a little getting used to at first, but I'd definitely be willing to try it out! :applause:

Dr Dardis
07-02-2003, 07:19 AM
Pixel Ranger,

That is excellent, definately useful, a tool that I would dearly love to include in the arsenal. I have been messing With XSI and I love the pose tools in that, this seems to be stretching towards a better solution for Facial posing in LW.

and its all about the pose!

Please give us an insight into how this was created. Even simple hints will be fine.

Thanks again for a bit of TD insparation

:beer:

Wesball
07-02-2003, 07:43 AM
I just want to know how you get the movement of eye lids when you move the eyes.

That is awesome! I've been trying to get that effect for a while to no avail... any ideas on how to acheive this are very much appreciated!

takkun
07-02-2003, 07:52 AM
Originally posted by Shade01
Not even, 'tis a joke. I remember when Felytenduct made a wise crack about my art way back when. Where is that guy anyway? He was such a smartass:p LOL!!!!!! Yeah, he was a real A$$-hole, he even used to make fun of Larry. Hmm, I wonder what happened to him. ;)

Kvaalen
07-02-2003, 09:14 AM
I once created a facial rig like that (just for the brows). I'm not sure how this one was done since I can't view the file (it has been taken down), but the way I made mine was by creating a null far out and having one view port set to top view where I can control the null. I created another null with an item shape to show the boundary. Useing expressions I made the movement upwards and downwards control the brows going up and down, and the motion left or right controls how much influance the right brow or the left brow get.

I created it just as a test to see if I could do it and I could. Now I'm waiting till I make my next caracter model so that I can create the morph targets to work better with that kind of rig.

When I saw that demo reel, I right away wondered when and who will be the first to try it in this LightWave forum. :thumbsup:

BladeFX
07-02-2003, 11:49 AM
How the hell do you do this.
That is something I'd realy like to learn :beer:

EvilE
07-02-2003, 11:54 AM
Hey thats exactly what i am trying to achive for some days :)
Would be great if you could make a lil tut :)

EE

Kvaalen
07-02-2003, 01:10 PM
It's actually pritty simple if you know expressions.
Create a null. Make one of its axes control the value of a morph target or more (like make the Left brow morph and the right brow morph go up and down). Make the value of another axis control how much influence each morph gets (like moving it right makes the left brow morph have a smaller value).
For the bounding box, just create a null with an item shape.
It's a little more complicated than that but that's the basics. :thumbsup:

uncommongrafx
07-02-2003, 01:40 PM
VERY LIPSERVICE-like!!

There's the newest worthy plug idea for lw.
Hell, there's one of the tricks in that ought to be a no brainer to setup in lw8. That and MotionBuilder speed interaction.

The anim is very nice. Nice execution of the concept.
Robert Wilson
UnCommon Grafx

anieves
07-02-2003, 01:53 PM
very cool rig!
I wanna know more.

jjburton
07-02-2003, 02:51 PM
I too submit myself to your tutelage...:)

Cman
07-02-2003, 02:59 PM
I too submit myself to your tutelage...:)

EvilE
07-02-2003, 03:01 PM
Ok got the Head movement and the brows of Dunno working the way i want only question left is how to limit the movement of the Null :)

Ill put him online when i am finished with the rig ( ears with bezier bend mouth eyes ... also with an x/y controller )

www.evildesignz.de/controllertest.avi
(approx 2 mb)

EE

liquidik
07-02-2003, 03:27 PM
Well, that's fabolous...I'm waiting to see a tut of this rig...for now I'm going to experiment by myself.

:applause: :applause: :thumbsup:

EvilE
07-02-2003, 04:51 PM
Ok heres another update from me ( i hope you dont mind that i show my stuff here too pixelranger ) .

www.evildesignz.de/controller02.avi

EE

Infinity3d4life
07-02-2003, 05:36 PM
I can't wait to learn how to do this..

EvilE
07-02-2003, 06:22 PM
Ok here is the scene to download for you .
This is only a proof on concept . The morphs look really ugly and there would be some more work to do in the expressions of the eyes .
www.evildesignz.de/Dunno.rar

Have phun

EE

pixelranger
07-02-2003, 07:31 PM
Cool to see that so many is interested in the setup.

Mechis: Yeah, it's Saslight. :) Sorry I haven't answered before. Must have missed your question.

EvilE: I don't mind you posting you're stuff here at all. Sharing's what we're here for, isn't it? Come on, people! Post your morph rigs here so everyone can have a look.

I compiled a version of the scene in my avi for ya in case you want to dl it and have a look at it.

Facial Morph rig (http://www.steelronin.com/profiles/PxlRanger/facial_morph_rig.zip)

A simplified version of the model (so that everything runs smooth and in realtime on any system) is included so that the expressions work right away without you having to model something to making them work...

Everything is done in Layout without any plugins.

I made two expressions for each morph. Lets use the Morph that opens up his mouth for this example.

The first expression says "The value for this morph is beein controlled by the control Null's movement in the range from 0-100mm in the y axis (based on its parents coordinates, of course...)".
I call this Expression "Mouth Open control" and it looks like this:

mapRange([Mouth controller.Position.Y],0.000,0.100,0.000,1)

The second one is called "Mouth Open constraint" and says "if the first expression returns a value below zero, keep it zero" and looks like this:

[Mouth Open control]<0.000?0.000[Mouth Open control]

The reason I use this constraint is that if I don't, the Map values will go below zero when I move the control Null below y=0mm. And since I'm going to use the Null's range from 0 to -100mm for another morph, I cant let it have any influence on th Mouth.open morph when its below y=0mm.

I control 4 morphs with each control Null. One from 0 to 100mm in the x axis, one from 0 to -100mm in the x axis, one from o to 100mm in the y axis and the last from 0 to -100mm in the y axis.

One thing that's nice to keep in mind is that you should try to use two "opposing" morphs for the Null's movement above and below a certain axis. I mean... the Mouth.open morph is influenced when the Null is below y=0mm, therefore there should be a morph where the mouth closes that is being influenced from the moment the Null goes above y=0mm.
This way there are sort of just two real movements being controlled by the Null, one in the x axis, and one in the y axis with the base object as the middle position in a nonlinear morph. Smart, eh? :)
The other benefit you have from using opposing morphs is that you don't get the problem you see with the smile morph and the morph where he pulls back the corners of his mouth. Here you se that there is no "follow through" when the Null crosses the x=0mm, and if I was animating him I would have to make a key for the Null object with tension=1 everytime the Null crossed x=0mm. Otherwise we'd get that jerky start on the "opposing morph".




The 4 expressions on the eyelids were even simpler! I just made a new expression, right clicked on Eye Target.Position.X and chose "Append to Expression". Then I applyed the expression to a morph called eyelid.right and started to move the eye target to see the effect. If the effect was too small I just multiplied the expression with e.g. 2:

Expression name: Eyelid Right control
Syntax: [Eye target.Position.X]*2

I didnt use any constraints for the eyelid expressions because they seemed to regulate eachother well by themselves. So why interfere with nature, right? ;)

Just open the scene file I posted at the top, grab the eye target in the front view and start "looking around".

You have to move it in front view to be able to move it in x and y at the same time.

EvilE
07-02-2003, 07:45 PM
Nicer system then the one i used

i first used an morphlink expression to get the movement on the y axis ( but didnt apply that to the morph)

mapRange([BrowControl.Position.Y],-0.700,0.700,1.8,-2)

and then used that as a input for a value cross fader expression
and applied that to the morph

mapRange([BrowControl.Position.X],-0.700,0.700,-0.5,[BrowBaseRight]*0.6)

works quite nice on the brows and the mouth but is giving problems with the eyelids ( which could be solved with some math i think ).

EE

HowardM
07-02-2003, 07:46 PM
only the eyes work....
on a mac.
is there something i have to jumpstart?

pixelranger
07-02-2003, 07:50 PM
shouldn't be... I don't know. Anyone else having trouble getting the Controller Nulls to work?

EvilE
07-02-2003, 07:54 PM
Here its working fine . Maybe we should make our 2 dudes talk to eachother ...lol...

EE

toonshady
07-02-2003, 08:06 PM
works fine here (on pc). What a cool way to use morphs. Really appreciate it for sharing.

EvilE
07-02-2003, 08:25 PM
Just having the idea that i could blend in more different shapes at different positions using clamp()(for example limit one morph between 200 and 500 mm on the x axis of the controlling null )
. I will try that out and post tomorrow if i get it to work .

EE

comanche
07-02-2003, 08:34 PM
Pixelranger, thank you VERY MUCH for the explanation and for sharing this setup. I've always learned a lot by having a look at other users work. You rock! :applause:

:beer:

Cheers,
Andreas

Kvaalen
07-02-2003, 09:05 PM
Pixelranger: Instead of having two expressions to make sure the value doesn't go below 0, why don't you use the min function between the first expression and 0?

pixelranger
07-02-2003, 09:11 PM
min function? :)

As I said, I'm new to expressions so I really don't know why. Would you care to explain how that expression would look like and what it would do (practically)?

Ayreon
07-02-2003, 09:21 PM
To HowardM: make sure you have Auto key on! I have it off by default, so it wasn't working for me either. But when I turned it on, the magic started happening!!
Thanks Pixelranger for sharing. This is really incredible stuff! :applause:

Ayreon

koroko
07-02-2003, 09:36 PM
I sum my praise for pixelranger too... :)

Million thanks for sharing...


______
angel

BladeFX
07-02-2003, 09:46 PM
thanx :thumbsup:
We'll make good use of it.

EvilE
07-02-2003, 09:53 PM
Another way to define the range for the morph is too only apply this expression : clamp([Mouth Open control],0.000,1.000)
It limits the output between 0 and 1

EE

HowardM
07-02-2003, 09:54 PM
thank Ayreon!

pixelranger
07-02-2003, 10:02 PM
Thanks EvilE! :)

And thanks for your comments everyone! :buttrock:

If you want to, please modify the model/scene/rig and we can see if we can make an advanced/complex, but simple and optimized expression rig for a character together. I'll certainly post updates when I have some :)

ArneK
07-02-2003, 10:13 PM
Whoa! Excellent stuff André (as always). Thanks!

I'm about to start making the face morphs on a character I've been working on for a while, and this helps me a lot in regards of setting up expressions (I'm an expressions-newbie). Again thanks for sharing! :applause:

Infinity3d4life
07-02-2003, 10:30 PM
EEEGADDDSSS.. expressions??? I tried to stay away from using these... I've never ever attempted to use an expression.. Oh well i guess it's time to learn..

kretin
07-02-2003, 11:21 PM
Hey Pixelranger, instead of 2 expressions you could combine them like this:

clamp ( (mapRange([Mouth controller.Position.Y],0.000,0.100,0.000,1)), 0, 1)

But personally, instead of clamping the morph values, I'd clamp the controller so it can't move out of range. That'll give you more options for the morphs.

You could also have lots more than 4 morphs for each controller. 8 would be easiest, but you could have even more.

Kvaalen
07-02-2003, 11:21 PM
Originally posted by pixelranger
min function? :)

As I said, I'm new to expressions so I really don't know why. Would you care to explain how that expression would look like and what it would do (practically)?

min will give you the smallest value of two values (there is aso max that gives the biggest). Like:

min(Expression,0.000)

Where Expression is the expression you made.

But it looks like EvilEs' idea should work too. :thumbsup:

pixelranger
07-03-2003, 12:32 AM
Arne: Thanks, man. Nice to see you're still around. Haven't seen you at "dyret" lately.

Infinity3d4life: I've tried to stay away from them too, as I
a. am kinda technically challenged :p
b. don't want to bog down my character setup with expression-rules that take away the flexibility/freedom that is needed when doing character animation.

But this setup might offer an easier way of posing the face into expressions and you can animate facial features that "belong" to one another in one take so they get the same keys and thereby the same accents.

kretin: Thanks for the tip, man. Very much appreciated. But I don't see how I can restrict the controller's movement to e.g. 0 to 100 mm in one axis (the range for one morph when I have to be able to move it between 0 and -100 mm to control another morph. Did I misunderstand something?

How do you think it will be possible to animate 8 morphs with one Null? If we add an expression for + and - on the z axis we still only have 6 independant "channels"...

I'd love to hear you elaborate your thoery/experience :)

Kvaalen: Thank you very much. I understand that there are several different ways to achieve the same goal. But using one expression is favourable to having several doing the same thing, if you know what I mean. Don't you agree?

I'll post an update anytime soon now.
I have changed the smile and frown (?) setup so that moving th controller Null to the left influences the smile on his left side while moving it up influences the smile on his right. Moving the controller Null down makes him frown on his right side, while moving it to the right makes him frown on his left side. This way the movement of his mouth is controllable for each of the sides and at the same time it makes for a continous movement when moving the Null up/down or left//right. Hope this made sense....

HowardM
07-03-2003, 01:15 AM
1___2___3
|............|
|............|
4......n....5
|............|
|............|
6----7---8

that how? n is nuetral

Infinity3d4life
07-03-2003, 01:24 AM
Damn i'm completely lost here.. It's like trying to read Matrix Code or something.. I will learn it though because besides looking cool it looks like it adds a whole new dimension to facial animation....:drool:

pixelranger
07-03-2003, 01:32 AM
wouldn't that make it impossible to make a combination of #1 and #3, #6 and #8, #3 and 8 etc?
#8 will be a mixture of either #5 and #8, #7 and #8 or pure #8?!

I don't want to exclude combos. Obviously I allready have exluded the possibility of having a closed jaw and an open jaw at the same time, or high eyebrows together with low eyebrows but who'd want that anyway? That's why I stress that using opposing morfs in the x and y axis are important because then they would make for continous facial deformation as well as work like a non-linear morphing system.
If the goal is to have as many morphs as possible being controlled by this system I'd rather group those controller Nulls together in hierarchies so that you can choose to animate 8 morphs with one Null because the Null has got two child Nulls each controlling 4 morphs (which in fact is two muscle groups/non-linear morphs with a neutral middle point. The neutral middle point is at the origin, which will serve as the middel state in the non linear morph ).

ps. Just throwing out theories/ideas here. My intensions are far from trying to prove you wrong, but I just don't see the flexibility in having one Null controlling 8 morphs...
Thank you very much for your participation everyone :)

HowardM
07-03-2003, 01:39 AM
hmmm youre absolutely right Chet! :)

my bad, didnt think about that...youre right having 4 morphs to a box, then parent boxes to more controls...like a marionette!
:)
either way this 4 morph control, compared to tweaking 4 sliders and keyframing them individually, simply rules! i love it, and im not even a character animator....but things like this make LW look better and better!


Lets see what Kretin says when he wakes up!
:)

kretin
07-03-2003, 03:07 AM
Here ya go...

This image shows one of the controls with the expressions

http://www.zerogravity.com.au/lw/MorphController.jpg

And here is the files:

MorphController Files (http://www.zerogravity.com.au/lw/MorphController.zip)

It's just a quick hack, and I used your files as a base. The values could still use some tweaking, but it's a start...

Oh, and you're right about the clamping :p I didn't think that one through too well.

HowardM: I've been awake for hours now :)

pixelranger
07-03-2003, 03:27 AM
WOW, Kretin!! You rule! I'll check it out right away! :beer:

And I was wondering..... is there a way to make a buffer in the expression so that the influence of the morph increases exponentially from the origin? -so that if I use one Null to control non-continuous/non-opposing morphs I don't get that jerky transition that I earlier got when crossing one of the axis (check out the transition from the smile to the "oh sh*t"-look. They are non-opposing and the vertices suddenly change direction when moving the control Null across from - to + x...)? -like add a "-0.100" at the end of the clamped expression or something?

pixelranger
07-03-2003, 03:47 AM
Thats quite a setup, Kretin! Thanks for sharing your knowledge.

But now I think it will be even more neccesary with a "buffer cusion" to make the transitions smooth between the different morphs. How is that best achieved?

kretin
07-03-2003, 04:11 AM
One way is to buffer is to overlap the morphs a bit, so instead of:

-0.1 to 0 and 0 to 0.1

try

-0.1 to 0.02 and -0.02 to 0.1

The other way is to increase the value exponentially, in which case you could use the "exp" expression or do it manually like this:

exp ( [MorphControl:Smile.Position.X] * 10)

which also lets us get rid of the mapRange, cause all exponentials are positive :)

The "*10" is because the controller is moving from -0.1 to 0.1 instead of -1 to 1. I think next go I'll scale the controller by 1000% so the values are easier.

Both of these methods will be valid for different morph/muscle combos...

pixelranger
07-03-2003, 04:19 AM
Yeah, I just tried the overlapping method and it worked great.

But I didn't think of the "exp" function. That simplifies the whole shebang doesn't it? -considering that we don't need the map range anymore. Fewer expressions mean less work adjusting and tweaking values.

Excellent job on taking my simple rig beyond everything I had dreamed of! :thumbsup:

HowardM
07-03-2003, 04:52 AM
you guys make me jones to be a character animator!!!!!!!!!!!
:)

fastfinger
07-03-2003, 03:25 PM
Pixel ranger.
After you`ve completed that rig, please write a tutorial and send it to newtek!! :thumbsup: :thumbsup:

anieves
07-03-2003, 06:54 PM
WOW:eek: there is so much for me to learn. Thanks for sharing guys!


As for me, all I know is that I know nothing.
-Socrates

EvilE
07-03-2003, 07:10 PM
This here is a very good resource for facial morph targets ( the site is very slow so you best save it to hd ) :

http://www.drone.org/tutorials/ActionUnits.htm

Hope it helps

EE

jjburton
07-03-2003, 07:42 PM
Great resource, EvilE

jkushwara
07-03-2003, 09:33 PM
Pixelranger -

Thanks for starting this awesome thread. I was taken to try and create the same type of control structure myself after seeing that same demo reel. What I came up with might be another method that addresses your 8 morph question....

Awhile back I designed a rig that contained individual morphs for small regions of the face/ lips. The upper lip alone contained 5 seperate "regions" each with 3 morphs - up, side and out. Lower lip was the same. I wanted complete control in layout to sculpt expressions as I needed them.

I set up a control structure that had a null for each primary region linked to that region's 3 individual morph targets (control x,y,z drove over up and out morphs) with follower scripts. Lots of morphs, lots of scripts and lots of controls. Kind of over complicated.. the cool thing was after seeing the demo reel I went back to it and created a single controller that was able to drive any or all of the controls using cycler - key the control positions for various expression sequences in a negative frame range and the single null control drives the keyframes. I ended up driving about 50 morphs with one control. Also gives really smooth transitions.

pixelranger
07-04-2003, 08:26 AM
fastfinger: I'll write a tutorial on this as soon as I complete the rig for my character.

Thanks, EvilE! Great resource.

jkushwara: wow! Could yould you please upload a small opengl preview that shows how it works?

jkushwara
07-04-2003, 06:00 PM
PR - No problem, I just have to wait till I'm back in the office on Monday. I took a look at the demo scene file you put together and it's great ! Love the character. By open GL preview do you mean a screencapture ?

pixelranger
07-05-2003, 05:15 PM
jkushwara: I meant that it would be nice to see an avi (OpenGl preview) showing the object and the controls. Sorta like the one I posted in my first post.
But that requires you to have server space that you can upload files to, so I fully understand if you don't have the opportunity to do so :)

kretin: I am having trouble getting the exponential function to return a zero value when the controller object is at Y=0.00 mm. Now the values start at 100 % and go down to approach (but not cross) zero when the controller object is at Y= - 1,5 m.

I have tried adjusting the value down with the abs-function, but I can't get the value below 100 % (when the control object is at Y=0mm)....

And that is just the problem getting the controller to control 1 morph in one axis. I wonder how I'll seperate all 8......

Mike RB
07-05-2003, 06:22 PM
This is very cool stuff. Great work guys.

Mike

kretin
07-05-2003, 10:21 PM
Hmm, yeah exp isn't doing quite what I thought it should. Damn my feeble grasp at maths... I blame my teachers for letting me sleep in class :p

I did this for the StretchL morph:

clamp ( [MorphControl:Smile.Position.X] < 0 ? 0 : pow ( [MorphControl:Smile.Position.X] * 10, 2 ) - abs (mapRange([MorphControl:Smile.Position.Z],0 ,0.1 , 0, 1)), 0, 1 )

"[MorphControl:Smile.Position.X] < 0 ? 0 : pow ( [MorphControl:Smile.Position.X] * 10, 2 )" replaces the "exp"

What this is doing is:
If SmileX is less than 0, then make it 0, else if it's higher than 0 then make it (SmileX*10) * (SmileX*10)

You can increase the second value of the "pow" higher to create more falloff. You could also include the "pow" for the Z movement if you wanted...

pixelranger
07-05-2003, 11:15 PM
Thanks kretin. I'll set that up and play with the values so that I REALLY get a grasp of what the heck you were talking about. ;)


[off topic]
I just read your wip thread for Martin, the bird, and I just would like to say that I'm impressed with your knowledge and I'm grateful that you share what you know. Looking forward to that book of yours!!
[/off topic]

Hellbring
07-06-2003, 12:53 AM
Is there a way to hide object so that its only seen in camera view? I woudl liek to hide my facial controls when in any view besides the face camera I have setup. I have the facial controls liked up next to the face in this camera view but in all other views its in the way.

kretin
07-06-2003, 12:57 AM
It's prolly easiest to parent the controls to that camera, and keep them close to the camera so they aren't in the way of the scene, and scale the parent of the controls down so they fit...

Kvaalen
07-06-2003, 01:03 AM
You can do like kretin said, but if you aren't going to use them very often, I would advise you to hide them completely while you aren't using them.

webfox
07-06-2003, 01:16 AM
You can attach a dissolve envelope to a slider and apply it to every item of your rig that you want out of the way.

Hellbring
07-06-2003, 03:09 AM
anyway to limit the ctrl null inside the box so that it cant get out of it no matter how much u move it? A contraint of some sort?

webfox
07-06-2003, 04:09 AM
Once you put on your expression (ceiling, floor, clamp...) or plugin (polk: limiter) constraints you will still always be able to move the null outside of the limiting area. When the screen updates by moving the frame slider or by selecting a new item, or what have you, the null will pop back to the limit you had intended for it.

You won't be able to get the null to just not go outside the area you're wishing for it to be constrained to. Layout doesn't seem to work that way. It won't physically stop you from moving something illegally, but it will correct things and put them back where you wanted them after it updates, internally.

If anyone knows a secret, though, please share it... I'm just expressing my experience (and a little trial and error testing before posting).

pixelranger
07-06-2003, 12:47 PM
Hey, good idea parenting the controls to a "lip sync camera" which is again parented to the head so that if there's alot of head movement going on, you'll still have a perfect view of your face while lip syncing. I know some guys at Pixar does it that way.

kretin:
clamp ( [MorphControl:Smile.Position.X] < 0 ? 0 : pow ( [MorphControl:Smile.Position.X] * 10, 2 ) - abs (mapRange([MorphControl:Smile.Position.Z],0 ,0.1 , 0, 1)), 0, 1 )

With this expression, will it be possible to use the control Null's range between 0 and - 100 mm? I mean, won't this: pow ( [MorphControl:Smile.Position.X] * 10, 2 ) allways return a positive Pos.X-value?

Memodin
07-06-2003, 04:43 PM
.

Memodin
07-06-2003, 04:44 PM
These are realy awasome guys. I am waiting the tutorial pixelranger.:buttrock: :applause:

kretin
07-06-2003, 10:43 PM
kretin:
clamp ( [MorphControl:Smile.Position.X] < 0 ? 0 : pow ( [MorphControl:Smile.Position.X] * 10, 2 ) - abs (mapRange([MorphControl:Smile.Position.Z],0 ,0.1 , 0, 1)), 0, 1 )

With this expression, will it be possible to use the control Null's range between 0 and - 100 mm? I mean, won't this: pow ( [MorphControl:Smile.Position.X] * 10, 2 ) allways return a positive Pos.X-value?

That's what the if/then statement is for. The example limits the expression to "above" 0. You just need to adjust it slightly for the opposite movement so it's limited to "below" 0 like this:

clamp ( [MorphControl:Smile.Position.X] > 0 ? 0 : pow ( [MorphControl:Smile.Position.X] * 10, 2 ) - abs (mapRange([MorphControl:Smile.Position.Z],0 ,0.1 , 0, 1)), 0, 1 )

It's now if "Control" is "more than" 0, then make "Morph" 0, else make "Morph" the expression...

Hellbring
07-07-2003, 05:17 AM
Originally posted by webfox
You can attach a dissolve envelope to a slider and apply it to every item of your rig that you want out of the way.

I saw this in one of froggyplat's rigs and noticed that it was an extra channel in the graph editor. Question is how do you make this new channel. I would like to put this "Hide Control" so that i can toggle the animation rig and the facial controls.

Stoehr
07-07-2003, 06:42 AM
Originally posted by Hellbring
I saw this in one of froggyplat's rigs and noticed that it was an extra channel in the graph editor. Question is how do you make this new channel. I would like to put this "Hide Control" so that i can toggle the animation rig and the facial controls.

http://www.3dluvr.com/blackbourn/web/tuts/stut/stut.html

try this tut for auto-hiding sliders, and making new channels.

webfox
07-07-2003, 07:54 AM
Is there a way to hide object so that its only seen in camera view?

Another thing that I do that I happened upon by accident was this:

Use Proxy objects to pick your rig components, of course, and then set the rig objects' visibility to "hidden. All you'll have left are the proxy objects, but once you click on them, the rig component will show up.

The downside is that you need one proxy object per rig item, as LW won't let you assign one proxy to multiple objects, nor to selection sets.

In my setup I'm using now, I have sliders attached to hidden nulls, and proxy objects that go to them. When I select the proxy, I get the sliders I want. When I select something else, the slider is removed from my animation window and is neatly hidden out of my way.

RobPowers
07-08-2003, 05:33 PM
This is similar to the concept I was trying to show with my Lipservice tutorial. A new facial animation workflow with Real-time non-linear blending between endos is a must have feature IMHO. This would take Lightwave character animation and facial performance to another level.

pixelranger
07-29-2003, 03:35 PM
Hi folks, just popping in between the LW8 Mass Hysteria to say that I've started to integrate the facial rig with the body rig, to make animating him almost feel like having a complete animation interface focusing on making him move and express himself as I like. At least thats what I hoping to achieve ;).
It seems like working alot for nothing now that Ortho's coming with LW, but I can't wait. I'll post the rig soon.

http://www.storedyret.com/iB_html/uploads/post-5-83521-rig_test.jpg

jkushwara
07-29-2003, 03:54 PM
PR - Looks awesome ! Can't wait to see the motion and control setup. You mentioned Ortho - how do those tools apply to the facial morph rigs here ?

Dr Dardis
07-30-2003, 02:19 PM
niiiiiiiiice. Demented, but nice ;)

can't wait to examine your rig.

good stuff!

Remi
07-30-2003, 10:58 PM
Looks great Pixel....would love to see the setup....how long is that taking? Would love to see some of the expressions you can get out of it. :)

BAROBA
09-15-2003, 04:23 PM
I just rediscovered this thread, and tried your rig ( because I started with rigging too) and it is very impressive stuff.
Love your work :)
This is very impressive stuff, great work Pixelranger and also the others :)
Great work, you guys rock :) :buttrock:

Facial Deluxe
09-15-2003, 10:15 PM
I totally missed that thread :p
Huge work boys !!!

LFGabel
10-04-2003, 07:09 PM
I missed this thread too... but upon looking at it now, isn't setting up sliders do the same thing, or just using morph mixer, offer more facial control possibilities?

I have to admit, that this setup is pleasing to look at, and it does give some impressive results, but in the end, I think you'll be fighting with the rig, to get the expressions you want.

Like how would you get a half happy half sad expression?

Very cool application though!! :)

Pi3141
10-24-2003, 10:31 PM
Woah! this is amaaazing!

I love this character and I love the sample face rig.

I've been reading back through the pages at the Lightwave Forum and came across this, I think it deserved to be ressurected!

stompbox
12-30-2003, 01:13 AM
Hi
I'm slowly but surely chipping away (with a lot of help from here :blush: ) and working out my own little facial rig, using
T4D's tutes at his site here: http://www.thomas4d.com/
for the eye rig.

I'm close to working out null "joystick" controls for the eye movements, but not quite there yet, and was hoping for some clarification on expression syntax if anyone has a moment.

Originally posted by pixelranger

I made two expressions for each morph. Lets use the Morph that opens up his mouth for this example.

The first expression says "The value for this morph is beein controlled by the control Null's movement in the range from 0-100mm in the y axis (based on its parents coordinates, of course...)".
I call this Expression "Mouth Open control" and it looks like this:

mapRange([Mouth controller.Position.Y],0.000,0.100,0.000,1)

does that expression mean - return a value which is the range of movement of 'Mouth controller.Position.Y', between (and this is the bit where I am completely lost) x=0.000, y=0.100, and a second location x=0.000, y=1?

Am I barking up the wrong tree? (Looked thru manual, online, not getting answers.)

I am trying to set up one null to drive both the position and rotation of another null, which drives the texture on my eyeball.
Tried doing it with channel follower, but no dice, not enough control. I need the expression to return the translation of the control null from its starting point as a value which I can apply to a channel in the "target" null.

Thanks for your time and Happy New Year !!

kretin
12-30-2003, 01:28 AM
does that expression mean - return a value which is the range of movement of 'Mouth controller.Position.Y', between (and this is the bit where I am completely lost) x=0.000, y=0.100, and a second location x=0.000, y=1?
The first set of values is the amount you want the controlled item to move, the second set is the amount you want the control item to move.


I am trying to set up one null to drive both the position and rotation of another null, which drives the texture on my eyeball.
Tried doing it with channel follower, but no dice, not enough control. I need the expression to return the translation of the control null from its starting point as a value which I can apply to a channel in the "target" null.

You need to set an expression on both the pos and rot values of the item you want affected. For example if you want the control item to move X=-1 to 1 and the controlled item to move X=-0.2 to 0.2 and rotate H=-45 to 45 then you'd put:
mapRange( Control.pos(Time).x, -0.2, 0.2, -1, 1 )
on the X channel of the controlled item and:
mapRange( Control.pos(Time).x, -45, 45, -1, 1 )
on the H channel of the controlled item

stompbox
12-30-2003, 06:57 AM
Thankyou Kretin you have descended through the clouds in a column of light. I am at work but will try this tonight - sounds great.

What resource do you and others draw this from? Where should I be looking, Lscript manual, other source?

stompbox
12-30-2003, 12:16 PM
http://www.lightwaveoz.org/glossary.php :blush: :)

Hellbring
12-30-2003, 04:35 PM
Is there a way to constrain a null to a spline so that it will only follow the path of the spline. So when u move then null it will act like a slider on a non linear path?

kretin
12-30-2003, 10:54 PM
Yeah Richard's glossary is very useful.

Another valuable and often overlooked resource is the Expression Builder. There's alot of very useful info in there, that can almost be used as a manual of sorts, if you go through the supplied expressions one by one and read up on what they do.

Also if you wanna learn expressions, set yourself a project that makes good use of them and force yourself to figure them out, that's what I did with Proton's truck model.

Hellbring, there's limited support for that in CurveConstraint in Motion Options. If you wanna do more with it you can bake the keys and then use Cyclist to move the item back and forth, or at different speeds.

CGTalk Moderation
01-15-2006, 01:00 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.