Hair trans­for­ma­tion and sim­u­la­tion for film

3D Artist - - COMTENTS - Michael Billette im­age-en­gine.com

Im­age En­gine teaches us their ge­nius tech­niques

In this tutorial we’ll take a look un­der the hood at the hero sim­u­la­tion and trans­for­ma­tion of Grindel­wald’s hair, fea­tured in Fan­tas­tic Beasts: The Crimes Of Grindel­wald. We’ll start with two static grooms, use houdini’s wire solver and work with sops to pro­duce a fi­nal hair per­for­mance that’s ready to ren­der.

We will touch on some artis­tic con­sid­er­a­tions and ex­plore the less pro­ce­dural work­flow that’s nec­es­sary to di­rect these shots. We’ll also talk about some meth­ods that make the hair eas­ier to work with and give more con­trol over the fi­nal look.

Re­gard­less of what tools are used, a hero ef­fect needs to first fo­cus on the de­sired per­for­mance and feel of a shot, much like an an­i­ma­tion would. This should be es­tab­lished be­fore re­fin­ing any de­tails.

in this case we want to fo­cus on re­al­ism and sub­tlety. The hair needs to re­act to the mo­tion of the ac­tion, re­shape and move across the sur­face of the head.

it needs to be done in a way that doesn’t take at­ten­tion away from the face.

The in­trin­sic dy­namic prop­er­ties of Grindel­wald’s hair – and Aber­nathy, the char­ac­ter he trans­forms into – should be em­u­lated. These prop­er­ties can be in­ferred from plates or ad­di­tional ref­er­ence of some­one with a sim­i­lar hair type. The trans­for­ma­tion should be timed nicely with the mo­tion of the head, and be bro­ken up to not feel lin­ear.

The ap­proach taken in this setup is aimed to al­low as much artis­tic con­trol and it­er­a­tion speed as pos­si­ble. hair is bro­ken into passes based on how it should move, sim­u­lated sep­a­rately, and lay­ered to­gether us­ing sops.

Work­ing this way we can fo­cus on the re­al­ism of the sim­u­lated mo­tion with­out be­ing dis­tracted by try­ing to make wires be­have dif­fer­ently in the same sim. The lay­ers are com­bined in spe­cific ways, and an­i­mated man­u­ally to work in con­junc­tion with the mo­tion of the char­ac­ter.

We use two sim­u­la­tion steps to add fine de­tail with­out sac­ri­fic­ing con­trol over the base mo­tion. This re­quires man­u­ally cre­at­ing a sub­set of guide curves to make sure the hair moves how we want it to.

When it comes to fi­nal­is­ing the look, sops are used to re­ally de­fine the fin­ish of the hair.

A sin­gle set of curves is used through­out each shot, trans­form­ing from wavy and frizzy to straight and styled, and in one case the fin­ish is wet and clumped to­gether.

01

As­sess the groom and guides To start let’s take an in-depth look at the char­ac­ter­is­tics of the groom. What type of hair does this char­ac­ter have? how will it need to move? What at­tributes are al­ready avail­able on the curves? Grindel­wald has wavy locks and frizzy strands. These el­e­ments should be treated sep­a­rately since they’ll move dif­fer­ently. his guide curves have ids which match a guide id at­tribute on the groom.

This is im­por­tant, we’ll need to gen­er­ate those if they don’t ex­ist. We also need point ids and uv at­tributes for all curves and groups to sep­a­rate frizz from locks.

02

Gen­er­ate group ID for sub-guides Grindel­wald has too many guide curves for his hair type. each lock of hair should stay to­gether, so we need one curve per lock. For best re­sults, group the guides by hand. select some curves, use split to iso­late them, then in­vert se­lec­tion. set in­verted as de­fault for the split node. us­ing the q hotkey to re­peat last com­mand, quickly make se­lec­tions and gen­er­ate a long chain of split nodes.

When fin­ished, con­nect the sec­ond out­put of ev­ery split to a switch, and use a loop to as­sign a group id and to merge the curves back to­gether.

03

Gen­er­ate sub-guide curves now we’ll gen­er­ate sub-guide curves. it­er­ate over the orig­i­nal guides in a loop us­ing the new group id. in one stream iso­late the curve roots and add a point in their cen­tre. in the other stream use Re­sam­ple to cre­ate a tan­gentu at­tribute point­ing along the curves. Gen­er­ate a ve­loc­ity field based on tan­gentu us­ing the fluid source node.

now use Vol­ume Trail to trace a curve through this field start­ing from the cen­tred root point. Trans­fer any needed at­tributes to this new curve, and make sure its prime id matches the group id on the orig­i­nal guides.

04

Sim­u­late the sub-guide curves speed is king. Aim for one to two min­utes per it­er­a­tion. Lo­calise the sim to make it eas­ier to work with. Fo­cus on a small sec­tion of guide curves – the rest of the hair will re­spond the same way. Re­duce the col­li­sion res­o­lu­tion. use sub­steps to deal with high fre­quency mo­tion, not to fix ex­plod­ing wires. ex­plo­sions can be fixed by prop­erly bal­anc­ing set­tings. Once we are happy with the mo­tion, sim the whole set of guides and start in­creas­ing col­li­sion res­o­lu­tion, ac­cu­racy and sub­steps. Rogue wires can be fixed post-sim, don’t ad­just the whole setup for one or two wild curves.

05

Sim­u­late the guide curves now use the wire de­former to bind the guide curves to the sub­guides. We can wire cap­ture post-sim by us­ing the match­ing sub-guide/group ids. The goal is to in­tro­duce sec­ondary mo­tion on the finer guides while pre­serv­ing the mo­tion of the first sim. This is a sub­tle ef­fect but will add re­al­ism to the fi­nal look. use the same strate­gies as in step 4 to it­er­ate as quickly as pos­si­ble.

06

Do it all again (and again) Grindel­wald needs to trans­form into an­other char­ac­ter (Aber­nathy) who has his own groom, so we’ll need to re­peat steps 1-5. At this point we can also run sep­a­rate sim­u­la­tions for dif­fer­ently be­hav­ing hair, like Grindel­wald’s frizz, or to get a di­rected per­for­mance out of a spe­cific bit of hair.

Fo­cus on the needs of each sec­tion in­stead of try­ing to make one sim that will work for ev­ery­thing. com­bine the sims so we’re left with one set of simmed guides for Grindel­wald and one for Aber­nathy.

07

Iden­tify blend tar­gets for trans­for­ma­tion Let’s start the trans­for­ma­tion. Work­ing with static guide roots only, de­form Grindel­wald’s points to Aber­nathy’s head. The grooms are parted dif­fer­ently, so shift the points ac­cord­ingly. cre­ate a master ar­ray de­tail at­tribute. For each of Grindel­wald points com­pare the near­est Aber­nathy points to the master ar­ray un­til we find one that’s not in the list. That’s our tar­get. Add this tar­get to the master ar­ray, and fin­ish it­er­at­ing un­til all points have a tar­get. The char­ac­ters have a dif­fer­ent num­ber of guides – al­most 3:1, so run this process on a third of the points at a time.

08

An­i­mate blend tran­si­tion now that we have our tar­gets, we need to an­i­mate the tran­si­tion. copy the tar­get ids from the root points to the simmed guides. An­i­mate the blend as de­sired, adding time off­sets and speed vari­a­tion to make the tran­si­tion less lin­ear. snap the curve roots to the trans­form­ing head ge­om­e­try us­ing ray, and off­set the rest of the curve to pre­serve its shape. since we have three curves con­verg­ing to one, only blend to about 95 per cent of the way and use noise to add some slight vari­a­tion to the tar­get shape.

Fo­cus on the needs of each sec­tion in­stead of try­ing to make one sim that will work for ev­ery­thing

09

Clean up trans­form­ing guides At this point the guides are look­ing pretty good, but there’s a bit of mess to clean up. Fix stretch­ing. Blend any weirdly mov­ing guides with static bound guides to dampen their mo­tion. Ray any in­ter­sect­ing curves to the out­side of the head, carve them to the cor­rect length, then re­sam­ple back to the cor­rect num­ber of points. in this case we see the hair in­ter­sect­ing the eye­brows, so off­set the col­li­sion ge­om­e­try to ac­count for this.

10

Bind and de­form groom it’s time to de­form the full groom! use the match­ing guide ids on on the groom/guides to wire cap­ture, then wire de­form the groom to the fin­ished guides.

use a ma­trix to pre-trans­form the groom and static guides to roughly match the trans­form­ing head ge­om­e­try. This will min­imise the dis­tance the wire de­form needs to move the groom, im­prov­ing the look of the de­for­ma­tion.

11

Add fine de­tails now we need to fin­ish the look of the hair. The hair is shrink­ing from long to short, and should be tran­si­tion­ing from wavy to straight. Right now the waves are get­ting com­pressed and and even more curly. use a com­bi­na­tion of re­sam­pling and blend­ing to smooth the shape. Push the hairs to­wards their guide to blend down the frizzy hair, or to cre­ate a wet look where re­quired. con­trol these ef­fects us­ing a uv at­tribute and ramp­ing along the length of the hair. snap the hair roots to the head ge­om­e­try with a falloff to avoid kinked curves.

12

Clean up data and ren­der! Looks good – now clean up any un­needed at­tributes, and make sure all ren­der at­tributes have been pre­served. The eas­i­est way to do this is to copy the fi­nal P and any other needed at­tributes to a freshly loaded ver­sion of the groom by point id.

Re­move any miss­ing hairs, move back to world space, then cal­cu­late ve­loc­ity and ac­cel­er­a­tion. cache that out and we’re ready to ren­der!

use a ma­trix to pre-trans­form the groom and static guides to roughly match the trans­form­ing head ge­om­e­try. This will min­imise the dis­tance the wire de­form needs to move the groom, im­prov­ing the look of the de­for­ma­tion

Bio Michael is an FX lead and gen­er­al­ist TD who has been work­ing with Im­age En­gine De­sign Inc for just un­der seven years.

03

04

02

01

07

08

05

06

11

12

10

09

Newspapers in English

Newspapers from UK

© PressReader. All rights reserved.