IKFK Arm

1. SCHOUDERREGIO

Bewegingsanalyse

Dit is misschien wel het meest complexe gedeelte van het hele lichaam.  Het schoudergewricht kan alle kanten op draaien. We kunnen echter ook onze schouders ophalen. Dat betekent dat er nog een gewricht voor de schouder zit, namelijk het sleutelbeen. Het schouderblad beweegt vooral met het sleutelbeen mee. Het sleutelbeen zit voor aan bovenkant de borstkas en loopt schuin naar het schoudergewricht. Het schouderblad zit aan de achterkant van de borstkas en bepaald oriëntatie van de arm op zo’n 30˚ naar voren toe.

Wanneer we gaan riggen, moeten we kiezen voor een bonestructuur waarmee we de juiste bewegingskarakteristiek voor elkaar krijgen.

Het eerste gewricht doet sleutelbeen/schouderblad. Vaak wordt deze geplaatst op het begin van het sleutelbeen, maar dieper in het lichaam.

Het tweede gewricht is het schoudergewricht, op de schouder geplaatst.

Er is nog een automatisme, welke we in de rig mee kunnen nemen: Wanneer we onze arm omhoog doen, roteert het schoudergewricht. Echter, wanneer de arm bijna in een rechte hoek met ons lichaam is, roteert vanaf dat moment het sleutelbeen voornamelijk om de arm omhoog te krijgen.

Je zou zeggen, doe daar een paar slimme driven keys, en de zaak beweegt naar behoren. Maar de schouder moet ook omhoog kunnen, onafhankelijk van de arm. Als ik driven keys op bijvoorbeeld een translatie zet, kan ik deze niet meer gewoon gebruiken.

Dan heb ik nog een issue met FK en IK, hoe krijg je al die dingen correct werkend, en dan moet je ook nog kunnen switchen en blenden tussen FK en IK.

Bone Setup

Alles begint bij een cleane bonestructuur, zorg ervoor dat  alle rotaties nul zijn.  Ideaal is niet de crucifix figuur met de armen recht  naar buiten toe, Maar in een hoek van 30˚ naar voren toe. Het grote voordeel daar van is, dat de armen niet langs het lichaam zwaaien (robotachtig), maar voor het lichaam eindigen (veel natuurlijker) Sommige riggen de armen in een hoek van 45˚ naar beneden toe omdat er dan zo min mogelijk deformatie plaatsvindt.

  • Voor de test beginnen we met de Joint Tool in een Front View, de eerste joint (sleutelbeen) in het midden van het scherm.
  • Zet de tweede joint (schouder)  iets hoger en een stukje naar links.
  • Zet de derde joint (elleboog) in het Top View zo, dat deze ongeveer een hoek van 30˚ maakt met de schouder.
  • Zet de vierde joint (pols) eveneens in het Top View, doe dit zo, dat de elleboog een lichte hoek maakt en de pols iets naar voren staat.

In dit voorbeeld is de extra joint voor de ellepijp/spaakbeen weggelaten. Wanneer je de volledige arm wilt maken, gebruik dan bone-setup zoals verderop beschreven is bij de elleboog / pols regio.

IK Setup

Eerst hebben we een paar controlobjecten nodig:

  • Maak een Nurbs Circle met oriëntatie X, noem deze armIKCTRL.
  • Groep deze met alleen zichzelf en noem deze groep armIKgrp.
  • Plaats deze armIKgrp met pointsnap (v) op de pols.
  • Om het object van een juiste oriëntatie te voorzien maken we een (tijdelijke) Orient constraint.
  • Selecteer eerst het target (de elleboog-joint) en dan armIkgrp.
  • Vervolgens Constrain-> Orient.
  • In de Outliner in de hiërarchie van armIKgrp, vinden we de orientconstrain, delete deze.
  • Bij Window->General Editors->Channel Control maak ScaleX, Y, Z non-keyable. Scale verdwijnt uit de Channelbox.

Herhaal deze hele operatie, alleen noem de circle  shoulderIKCTRL en de groep shoulderIKgrp.

  • plaats en oriënteer deze op de schouder.
  • Nu maken we de Ikhandles:
  • IK Handle  Tool -> optiebox. Kies ikRPSolver.
  • Zet de IK Handle van schouder naar pols.
  • Noem deze armIK en parent deze onder armIKCTRL.
  • IK Handle  Tool -> optiebox. Kies ikSCSolver.
  • Zet deze handle van het sleutelbeen naar de schouder.
  • Noem deze shoulderIK en groep deze onder shoulderCTRL.
  • Hide de ikhandles en test met translaties beide controlobjecten.
  • Ga naar Channel Control en verwijder alle attributes, behalve translaties.

Optioneel:  automatische schouder bij arm omhoog

Er is een control die de schouder omhoog kan doen, bijvoorbeeld als het karakter de schouders ophaalt. Maar wanneer  een mens een arm omhoog brengt, gaat de rotatie in eerste instantie via het schoudergewricht maar wanneer de arm ongeveer even hoog is als de schouder, gaat ook de schouder omhoog.

De shoulderIKCTRL wil je vrij houden voor handmatige animatie. Wil je iets automatiseren dan zou je de groep daarboven kunnen gebruiken. Dat wordt dan de driver bij Driven Keys en de armIKCTRL de driver. Het Attribute is in beide gevallen TranslateY.

  • driver wordt armIKCTRL TranslateY
  • driven wordt shoulderIKgrp, TranslateY.
  • Maak de keys in een Front View;
  • de eerste stand armIKCTRL evenhoog als schouder en shoulderIKgrp ongewijzigd.
  • Set de driven key.
  • De tweede stand is allebei een stuk omhoog, armIKCTRL een klein stukje, shoulderIKgrp ongeveer het dubbele.
  • Set driven key.
  • Test de beweging van beide controlobjecten opnieuw.
  • Het is nu mogelijk om schouders op te halen onafhankelijk van het optillen van de arm.

FK Setup

Om onderscheid te maken met de IK-controls, gebruik nu een andere vorm curves, bijvoorbeeld een vierkante curve voor de FK-controls:

  • het eerste object komt op de schouder (shoulderFKCTRL en shoulderFKgrp)
  • de tweede komt op het sleutelbeen (clavicalFKCTRL en clavicalFKgrp).
  • de derde komt op de elleboog (elbowFKCTRL, en elbowFKgrp)
  • de vierde komt op de pols (wristFKCTRL en wristFKgrp)
  • Bij Channel Control haal ik alle attributes weg behalve de rotaties.
  • In de Connection Editor verbinden de rotaties van de controbjecten met de juiste joints.
  • Bij de elbow hoeft alleen rotateY te worden verbonden.
  • Test de beweging, de orientatie kan soms gespiegeld zijn, waardoor de rotatie precies de tegengestelde richting opgaat.
  • Herstel dit zonodig door de FKgrp 180 graden te roteren in Y.
  • Voor we de beweging FK kunnen testen, moeten we eerst de IKBlend attributes op de IKhandles op 0 te zetten.

IKFK Switch

Het is handig om de IkBlend Attributes te besturen vanaf een control-object, meestal kies ik dan de IK-control van de arm:

  • Selecteer de armIKCTRL
  • Modify->Add Attribute met Name: IKFK ,min 0, max 1, default 1
  • Open de Connection Editor met links het nieuwe IKFK-attribute.
  • Selecteer de Ikhandle en reload right.
  • Hilight beide attributes IKFK en IkBlend
  • Connect dezelfde IKFK ook met de Ikhandle van de schouder.

Nu breidt ik de switch uit met het zichtbaar/onzichtbaar maken van de IK/FK-controls

  • Channel control: maak visibility weer keyable bij shoulderIKCTRL, shoulderFKCTRL, ClavicalFKCTRL, elbowFKCTRL en wristFKCTRL
  • Animate->Set Driven Key->Set
  • Driver: ArmIKCTRL.IKFK
  • Driven: shoulderIKCTRL, shoulderFKCTRL en ClavicalFKCTRL visibility
  • 1e keyframe: IKFK=1, shoulderIKCTRL.visibility=on, de andere 2 visibility=off
  • 2e keyframe: IKFK=0, shoulderIKCTRL.visibility=off, de andere 2 visibility=on
  • Test de switch

Hook up Controls

Alles werkt nu als het goed is, maar de controlobjecten gaan nog niet mee als de hele rig verplaatst wordt. Om alles vast te maken gebruik ik Parent Constrain met de optie maintain offset.

De FK-controls constrain ik aan de shoulderjoint en de clavicaljoint. Niet direct maar met de FKgrp:

  • Selecteer shoulder ( joint ), in de channelbox ctrl-select shoulderFKgrp
  • Constrain->Parent Constrain
  • Herhaal dit met clavical en clavicalFKgrp

De IK-controls kunnen niet aan de locale bones worden vastgemaakt zoals de FK-controls. Zij worden vastgemaakt voorbij de chain waar zij invloed op uitoefenen. Dat kan een spine-joint zijn of de rootjoint.

  • Selecteer de rootjoint, in de ChannelBox ctrl-select ArmIKgrp
  • Constrain-> Parent Constrain

Omdat een parentconstrain beslag legt op translaties en rotaties, moeten we opletten dat het te constrainen object deze niet in gebruik heeft. Daarvoor gebruiken we ook steeds de groep van het controlobject. Alleen shoulderIKgrp heeft  driven keys op translateY.  De oplossing is nogmaals groepen.

  • Selecteer shoulderIKgrp en Edit-> Group
  • Rename de groep in shoulderIKconstrain
  • Selecteer de rootjoint, in de ChannelBox ctrl-select shoulderIKconstrain
  • Constrain-> Parent Constrain

2. ELLEBOOG / POLS  REGIO

Bewegingsanalyse

De elleboog is een duidelijke zaak, het is een scharnier, en kan alleen een kant uit roteren( positive Y).
De pols heeft in twee richtingen vrijheid: in Y, de hand heen en weer bewegen vanuit de pols, en in Z, de hand op en neer bewegen.

Het draaien om zijn eigen as, in X, kan de pols niet. Echter deze beweging zit in de gehele onderarm. Het zijn twee botten die om elkaar heen draaien: de ellepijp en het spaakbeen.

Bone Setup

  • Deze is gelijk aan die van het vorige hoofdstuk, behalve voor de laatste joint zit nog een extra joint, de wristtwist.
  • Zorg dat de laatste 3 joints in een 100 % rechte lijn met elkaar zitten. Dit is later belangrijk voor een correcte IK-solve.
  • Teken de bones eerst recht in de front-view, gebruik gridsnap(x) om ze 100% recht te krijgen.
  • Roteer daarna de schouder in Y-richting 30 graden naar voren.
  • De elleboog een eveneens in Y richting een paar graden naar voren.
  • Het probleem is nu, dat er rotaties op de joints zitten, deze willen we niet want we willen een zo clean mogelijke structuur en resetbaarheid.
  • De posities zijn nu goed, dus kunnen we nu met de Joint Tool en met behulp van pointsnap(v) een nieuwe bonestructuur maken.
  • De enige complicatie nu is dat de nieuwe chain, onder de oude gegroepeerd is.
  • In de channelbox slepen we de nieuwe chain onder de oude vandaan.
  • Delete de oude chain.
  • Geef de nieuwe goede namen.


Setup

  • Controleer of de local axis’ van de bones goed staan, x steeds naar de volgende joint, z consequent naar dezelfde kant.
  • Ga daarvoor naar component mode (F8) en klik op het vraagteken in de Statusbar.
  • Selecteer de wristtwistjoint.
  • Ga naar de Attribute Editor en vink Y en Z uit bij Joint- Degrees of Freedom.
  • Selecteer nu de wristjoint en vink X uit.
  • De rest van de rig zit vooral in de weighting van de geometrie en de hoe de control werkt.

Om te demonstreren hoe deze rig werkt hebben we geometrie nodig.

  • Maak daarvoor een simpele cylinder met voldoende spans/vertices.
  • Zet die om de arm van de bonestructuur.
  • Doe een Skin-> Bind Skin -> Smooth Bind.
  • Verdeel de weights van de onderarm tussen de wristtwist en de wrist.
  • Naar de elleboog toe krijgt de wristtwist alle weights en naar de pols toe de wrist.
  • Gebruik hiervoor de Paint Weights Tool.

Control

Het gaat hier om de FK-control van de pols. De IK-control, beschreven in de Schoudersectie zal met deze bonesetup correct werken.

Nu willen we een control-object, die georiënteerd is in de richting van de pols en de rotaties en translaties moeten 0 zijn.

  • Maak een polycube
  • verbreek de verbinding met de initial shading group in de Hypergraph, zodat deze niet gerenderd wordt.

Wanneer we deze dan op de pols plaatsen en oriënteren, en een Freeze Transform doen, dan worden de waarden inderdaad 0. Maar wanneer we willen roteren, zien we dat onze cube weliswaar naar de pols gedraaid is, maar de rotaties naar de wereld georiënteerd zijn. Om dit op te lossen:

  • Groepeer de cube in zichzelf, direct na het creëren
  • Plaats dan de hele groep op de pols
  • doe een Orient Constrain op de groep met wristtwist als target.
  • Delete de Orient Constrain.

Nu zien we dat de waarden van de cube 0 zijn en wanneer we de Rotate Tool activeren zien we dat de cube naar de pols georiënteerd is. De groep van de cube wordt gebruikt om de control vast te maken aan de wrist.

Als laatste maken we de control werkend, omdat het FK is gebruiken we alleen de rotaties:

  • In Channel Control hevelen we alle overbodige attributes over naar non-keyable.
  • In de Connection Editor verbinden we RotateX van de twistwrist met de Rotate X van de control,
  • en RotateY en RotateZ van de wrist met rotate Y en Z van de control.
  • Test de control, als het niet werkt, kijk dan nog even of de local axis van de joints goed staan.

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s