Så håller du IK-fotmål på plats när du rör en karaktärs kropp
Håll varje fotmåls position i världskoordinater konstant medan du flyttar karaktärens kroppskontroll, så hålls IK-fötterna på plats. Låt benlösaren justera lederna mellan den rörliga kroppen och det fasta målet. Om ett mål ärver rörelse från kroppen ska du separera det transformförhållandet eller kompensera för det innan IK-lösningen beräknas.
Den här guiden är till för kreatörer som poserar en riggad virtuell karaktär vars kropp ska guppa, luta sig eller förskjutas medan båda fötterna stannar på plats. Arbetsflödet nedan kombinerar dokumenterat transform- och IK-beteende med en praktisk diagnostiksekvens. Terminologin i Unity och Godot ger konkreta referenspunkter.
Varför rör sig fotmålen med kroppen?
Ett mål kan ha oförändrade lokala koordinater och ändå röra sig genom scenen. Lokala transformeringar beskriver ett objekt i förhållande till dess förälder, så när en överordnad nod flyttas ändras även barnets transform i världskoordinater. Godot dokumenterar den här skillnaden genom transform och global_transform. Använda 3D-transformeringar — Godot Engine
Börja med att visa fotmålskontrollerna och flytta kroppen lite åt sidan. Titta på målen separat från de synliga fötterna. Om ett mål rör sig med kroppen ska du granska dess överordnade noder: det kan ligga under bäckenet, kroppskontrollen eller en annan grupp som rör sig.
Bedöm inte uppsättningen enbart utifrån fälten för lokal position. Notera målets position i världskoordinater före och efter förflyttningen. Då kan du skilja mellan två användbara frågor: lämnade målet sin avsedda position, eller lyckades benet inte följa ett stillastående mål?
Hur bör du organisera kropps- och fotkontrollerna?
Använd separata kontrollgrenar för kroppsrörelse och fotmål som ska stå stilla. En praktisk uppställning placerar skelettet och kroppskontrollerna i en gren och vänster och höger fotmål i en annan gren under en stillastående scenkontroll. Det viktiga är att kroppskontrollen du manipulerar inte flyttar målgrenen.
En gemensam övergripande karaktärskontroll kan fortfarande innehålla båda grenarna om du bara flyttar kroppen under den. Om du däremot flyttar den övergripande kontrollen flyttas båda grenarna. Bestäm om din åtgärd betyder ”förskjut kroppen ovanför fötter som står stilla” eller ”flytta hela karaktären” innan du väljer kontroll.
Om programmet stöder oberoende transformarv kan det vara ett annat alternativ. Exempelvis gör Godots Node3D.top_level att en nod slutar ärva transformeringar från sin förälder. Det här är en dokumenterad transformfunktion; den ställer inte in en IK-lösare i sig. Node3D — Godot Engine
När du ändrar ett måls förälder eller dess arvsläge ska du bevara dess befintliga position i världskoordinater. Notera först dess position och orientering i världskoordinater, ändra relationen och återställ sedan positionen. Kontrollera resultatet innan du flyttar kroppen igen.
Vad gör du om målet måste ligga under en förälder som rör sig?
Spara den planterade positionen i världskoordinater separat och beräkna målets nödvändiga lokala position utifrån förälderns aktuella transform. För position gäller sambandet: målets lokala position = inversen av förälderns aktuella transform i världskoordinater × målets sparade position i världskoordinater. Unity tillhandahåller konvertering från världskoordinater till lokala koordinater via InverseTransformPoint. Transform.InverseTransformPoint — Unity
Tänk på ett illustrativt exempel med enbart förflyttning. Ett mål är placerat vid X = 1.0 i världskoordinater, och dess förälder börjar vid X = 0.0. Dess lokala X är därför 1.0. Flytta föräldern till X = 0.3, så behöver målet en lokal X på 0.7 för att stanna vid X = 1.0 i världskoordinater. Om den lokala X-koordinaten lämnas vid 1.0 flyttas målet till X = 1.3 i världskoordinater.
Den här subtraktionen fungerar bara i det förenklade exemplet. En roterad eller skalad förälder kräver full transformkonvertering. Unitys TransformPoint omvandlar en lokal position till världskoordinater och tar uttryckligen hänsyn till skala. Därför bör du använda en punktoperation, inte en riktningsoperation, för positionskonvertering. Transform.TransformPoint — Unity
Spara den planterade positionen när foten går in i sitt planterade tillstånd. Återanvänd det sparade värdet medan kroppen rör sig. Om du sparar målet igen efter att det har ärvt rörelse lagras förskjutningen som en ny referens. Om orienteringen också måste vara fast ska du spara och konvertera målets orientering utöver positionen.
Hur ställer du in benens IK så att de följer målen?
Kontrollera kedjans tilldelningar i lösaren innan du testar en stor poseringsförändring. I Unity Animation Rigging 1.4.1 använder Two Bone IK transformeringarna Root, Mid och Tip, ett Target och en valfri Hint. För ett enkelt karaktärsben med två segment motsvarar dessa höftled, knäled och fotled. Hint styr böjriktningen. Two Bone IK — Unity Animation Rigging
Använd full inverkan från constrainten och full inverkan från målets position i det första testet. Kontrollera målets rotationsinverkan separat. Unity visar dessa som separata vikter, så positionsföljning och orienteringsmatchning kan testas var för sig. Inställningen Maintain Target Offset i Unity bevarar en initial skillnad i position eller rotation mellan spetsen och målet. Two Bone IK — Unity Animation Rigging
Rikta in målen mot de avsedda fotledspositionerna innan du aktiverar begränsningarna. Om du avsiktligt använder en förskjutning ska du dokumentera vad den motsvarar. En oförklarad initial förskjutning gör det svårare att senare jämföra målet med den lösta ledpositionen.
Ställ in den avsedda knäböjningen med hint- eller polkontrollen och flytta sedan kroppen en liten bit. Se till att hintens placering är begriplig under hela testet. Om du ändrar målet, kroppen och böjkontrollen samtidigt blir det svårare att avgöra vad som orsakade ett oväntat resultat.
Hur långt kan kroppen röra sig medan båda fötterna står stilla?
Fasta mål innebär inte att alla kroppspositioner går att nå. För en ideal kedja med två segment, obundna leder och utan sträckning måste avståndet från benets rot till målet geometriskt ligga mellan |längden på det övre segmentet − längden på det nedre segmentet| och längden på det övre segmentet + längden på det nedre segmentet. Faktiska ledgränser kan minska det intervallet.
I ett illustrativt exempel med en karaktär vars segment är 0.45 och 0.45 scenenheter långa är den geometriska maxräckvidden 0.90 enheter. Om höften är 0.80 enheter ovanför fotledsmålet och 0.30 enheter åt sidan är avståndet √(0.80² + 0.30²), ungefär 0.854 enheter. Det ligger inom det ideala intervallet. Om det horisontella avståndet ökas till 0.50 enheter blir avståndet ungefär 0.943 enheter, vilket överskrider intervallet.
Använd beräkningen för att skilja ett räckviddsproblem från ett transformproblem. Om målet står stilla men kedjan inte kan nå det ska du minska kroppens förflyttning eller flytta kroppen så att båda benen får plats. Bedöm varje ben separat: en förskjutning åt sidan kan föra det ena målet närmare och det andra längre bort.
Låt båda benen vara synligt böjda i den första fungerande posen och testa små rörelser. Utöka kroppens rörelseomfång först efter att du har kontrollerat var varje ben närmar sig sina räckviddsgränser. Se omfånget som ett resultat specifikt för riggen, inte som ett förflyttningsvärde att kopiera från en annan karaktär.
Hur får du hela foten att stå stilla i stället för bara fotleden?
Definiera vad ”planterad” betyder för din rigg. Ett stillastående fotledsmål anger en ledposition, men foten behöver också en avsedd orientering. Sulans kontaktpunkt och fotledens pivotpunkt är olika referenspunkter. Bevara deras avsedda förskjutning när du placerar kontrollen.
Ett användbart diagnostiskt test är att hålla fotledspositionen stilla och bara rotera kroppen. Observera hälen och tån. Om de rör sig runt fotleden ska du granska fotens orienteringskontroller och eventuella separata tåkontroller. Testet isolerar den synliga kontakten från målpositionen.
Spara den avsedda planterade orienteringen tillsammans med positionen. Jämför båda med den sparade posen medan kroppen rör sig. Godots dokumentation om transformeringar förklarar att en transform består av ett origo och en bas som representerar orientering och skala, vilket gör den till en användbar referens för att förstå en komplett pose. Använda 3D-transformeringar — Godot Engine
Hur felsöker du glidning i en repeterbar ordning?
Använd följande sekvens som ett praktiskt diagnostiskt hjälpmedel baserat på transform- och lösarbeteendet ovan. Ändra en förutsättning i taget och börja med den minsta kroppsrörelse som återskapar problemet.
| Observation | Kontrollera först | Nästa åtgärd |
|---|---|---|
| Målet rör sig med kroppen | Överordnade noder som rör sig och ärvda transformeringar | Separera kontrollgrenarna eller återställ den sparade positionen i världskoordinater |
| Målet står stilla, men fotleden missar det | Kedjans tilldelningar, positionsinverkan och räckvidd | Kontrollera inställningarna och minska sedan kroppens förflyttning |
| Fotleden står stilla, men hälen eller tån rör sig | Fotens orientering och kontaktförskjutning | Återställ den avsedda planterade orienteringen |
| Knäet böjs oväntat | Hintens eller polens placering | Testa böjkontrollen med små kroppsrörelser |
| Resultatet skiljer sig mellan dragning och uppspelning | Vilket system som skriver till respektive kontroll och när | Granska de utvärderade transformeringarna under uppspelning |
Använd en uttrycklig beroendeordning för animerade eller procedurgenererade uppsättningar: fastställ kroppens pose, återställ eller konvertera de sparade målen och beräkna sedan benens IK. Bekräfta hur programmet schemalägger dessa åtgärder. Att ett återanropsnamn förekommer visar inte i sig att lösaren läser det uppdaterade målet i samma utvärderingsomgång.
Avsluta med att testa en kort loop: flytta kroppen åt sidan, sänk den, rotera den lite och återgå till startposen. Jämför varje måls position och orientering i världskoordinater med dess sparade referens hela tiden. När målen står stilla blir de återstående justeringarna mer specifika: kroppsrörelse inom räckvidden, konsekvent knäriktning och den fotorientering som krävs för att bibehålla den avsedda kontakten.
