Search Unity

FINAL IK - Full Body IK, Aim, Look At, FABRIK, CCD IK... [1.0 RELEASED]

Discussion in 'Assets and Asset Store' started by Partel-Lang, Jan 15, 2014.

  1. BaseOfCoding

    BaseOfCoding

    Joined:
    Jul 27, 2018
    Posts:
    11

    Hello~! Partel reply thank you!

    1. umm.. I have turned off the "plant feet".
    As you say, the character is small, so the HMD is fixed, but the character is fly.
    To solve this problem, is there no choice but to use calibration?
    We are currently building a multiplayer game, and we want to make all characters the same size regardless of the user's height.
    Is it impossible?

    2. I recorded it because it would be better to show the video than explain it.
    One of our game characters is the gorilla.
    But compared to other characters are quite large.
    So I want to know if IK works strangely.
    Please note that there is no problem with rigging.
    Here is a video link to the problem.
    It's a motion when you stretch your arm and turn your arm.
    I want to know if I need to reduce my arms and chest or if there is another solution.

    3. Oh and I have a question.
    After UnityEngine.XR.disablePositionalTracking = false I wonder if it's ok to use the method of adjusting Camera to the character's eye position

     
    Last edited: Dec 10, 2019
  2. mattis89

    mattis89

    Joined:
    Jan 10, 2017
    Posts:
    1,151
    Hello! I try to use final IK quadraped component with timeline, dont seem to work...does final ik/puppetmaster only work with animator component? @Partel-Lang
     
  3. ROBYER1

    ROBYER1

    Joined:
    Oct 9, 2015
    Posts:
    1,454
    @Partel-Lang I got the VRIK Interaction system working almost perfectly but the handmodel left/right is getting mixed up, the right bindings are happening for the left hand etc so the fingers get bent back but the hand is in the correct position.

    Please see the example project emailed by my username at gmail.com and also mentioned here http://root-motion.com/qa/index.php...n-system-package-hands-dont-connect-correctly
     
    Last edited: Dec 11, 2019
  4. ROBYER1

    ROBYER1

    Joined:
    Oct 9, 2015
    Posts:
    1,454
    (Sorry for the double post), this is what I see!
    handsbentback.PNG
     
  5. gliealonso

    gliealonso

    Joined:
    Oct 21, 2018
    Posts:
    117
    I think I can reply your second question, I believe you just have to tweak the VRIK Wrist to Palm Axis and Palm to Thumb Axis, however, if you put the value = to 0, IT WON'T WORK, you have to leave 0.01 at least, like the image attached.
     

    Attached Files:

    Partel-Lang likes this.
  6. BaseOfCoding

    BaseOfCoding

    Joined:
    Jul 27, 2018
    Posts:
    11
    Oh~! thank you^^
    However, It was decided that modeling would be replaced.
    But let's do it. Thank you so much.

    @gliealonso
     
    gliealonso likes this.
  7. ROBYER1

    ROBYER1

    Joined:
    Oct 9, 2015
    Posts:
    1,454
    I believe this issue is down to the orientation of the model's hands/fingers although I'm stumped at the moment otherwise!
     
  8. ROBYER1

    ROBYER1

    Joined:
    Oct 9, 2015
    Posts:
    1,454
    I finally fixed this and here is the solution:

    I was trying to pose my character's hands to those of the Pilot models with VRIK Interaction package, obviously the rotations didn't match or were inverted/completely off. I had to duplicate the hand bones of my character and set them up with the Hand pose script as new interactable poses on the objects for it all to work correctly. If you simply try to use the existing example hand poses on the interactable objects with your own character model that isn't the pilot, you may find the poses do not match.
     
    Partel-Lang likes this.
  9. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    Please check out the "Penetration Avoidance" demo, that is all I have currently.

    Hey,
    1. With PuppetMaster you can set different value for Collision Resistance for each character. Also there are the Boosters that you can use to give temporary immunity and/or impulse boost to one of the puppets when you start the attack animation.

    2. Yes, PuppetMaster uses ConfigurableJoint's targetRotation and Slerp Drive to articulate the muscles.
    Hey,
    1. If you need all characters at the same size, all you have to do is move the camera rig up/down so the HMD is at the height you need. Then you can use the same avatar size for all players. But the downside of course is that shorter players won't be able to reach the floor and taller ones have their hands going through the floor when they touch the ground.

    2. I think the problem in your video with the arms is that the "Palm To Thumb Axis" and "Wrist To Palm Axis" in VRIK arm settings are wrong. Could happen if you copied VRIK over from another character that had different bone orientations. Please right-clik on VRIK header and select "Guess Hand Orientations".

    3. Not sure what you meant, sorry.

    Hey,
    Yes, Timeline is not supported yet. It will require a massive hack, but working on it. In the meanwhile you could bake your quadruped to animation using the Baker and then use just the baked animation in Timeline instead.

    Cheers,
    Pärtel
     
    mattis89 likes this.
  10. mattis89

    mattis89

    Joined:
    Jan 10, 2017
    Posts:
    1,151
    awesome thanks!
     
  11. MetalDonut

    MetalDonut

    Joined:
    Feb 7, 2016
    Posts:
    127
    Hey All,

    I'm using the grounder IK by having a Gameobject called "FinalIKGrounder" as a child of my character (root) with the following components on it (Full Body Biped IK, Grounder FBBIK, Grounder Body Adjuster).

    It used to work great. I've since added a few new animations and for some reason now it forces my character into T-Pose if I enable the FinalIKGrounder Gameobject. If I disable it then my character animates fine (obviously without the correct foot placement on slopes).

    I'm not even sure how any of these scripts could even override the main animations nor am I sure I'm setting things up correctly. I only want the feet to be placed properly when on uneven surfaces.

    Any advice would be much appreciated!

    Thanks,

    MD
     
  12. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    If you disabled "Fix Transforms" in FullBodyBipedIK, will it change? That is the only thing in FIK that could force your character to T-pose, although it does so in Update, which runs before Animator update and should not cause this issue. Maybe you disabled the Animator and updated it via Animator.Update()? That would result in Fix Transforms running after animation and forcing it to T-pose.

    Best,
    Pärtel
     
  13. BaseOfCoding

    BaseOfCoding

    Joined:
    Jul 27, 2018
    Posts:
    11
    Thank you for your answer.
    But what I was wondering was not the answer to number one.
    Final IK works well, but the problem is that the character avatar looks below, depending on which height you set.
    It keeps the size of all characters, regardless of the height of the users, and asks if there is a way for the camera to be placed in the eyes of the character avatar.
    Is there only calibration available?
    We are so curious about this. If you know please tell me the please answer.

    ex ) Regardless of the height value set on the device, such as VR chat, the character's size should be maintained correctly and the character avatar should not appear below.
     
  14. h00man

    h00man

    Joined:
    Apr 17, 2017
    Posts:
    54
    thanks, that's a big help :)
     
  15. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    Not sure I understood you correctly, but if the avatar is shorter than the heigh of the HMD, you can calibrate it like this:
    Code (CSharp):
    1. float sizeF = (ik.solver.spine.headTarget.position.y - ik.references.root.position.y) / (ik.references.head.position.y - ik.references.root.position.y);
    2. ik.references.root.localScale *= sizeF;
    That adjusts avatar size. If you need to keep the size of the avatar, the only other option would be to adjust the height of the HMD, there is no other way logically.

    Cheers,
    Pärtel
     
  16. LazyOnion

    LazyOnion

    Joined:
    Mar 6, 2018
    Posts:
    22
    Hello,

    in VRIK is it possible to have an animation for the legs (instead of the setup with the pelvis position)? I am unable to set it without disabling vrik or setting the spine pos/rot weight to 0

    Cheers,
    Lazyonion
     
  17. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    If you set locomotion weight to 0, the lower body will be free to animation. Moving the head will still affect the pelvis though, the only way to keep the pelvis in place would be to weigh in Pelvis Position/Rotation Weight.

    Best,
    Pärtel
     
  18. MetalDonut

    MetalDonut

    Joined:
    Feb 7, 2016
    Posts:
    127
    Yes, you're right if I turn fix transforms off then the character now animates but the legs are crazy glitchy - they flicker violently when trying to walk on hills/slopes. Is this an issue with the order things are being called maybe? How can I address this? Thx
     
  19. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    Do you have the Animator disabled and a script that is calling Animator.Update() or using an asset like Opsive's TPC that does it? If so, you'll need to disable the IK components too and call ik.solver.FixTransforms() before and ik.solver.Update() right after the Animator is updated because IK needs to run on top of animation.

    Best,
    Pärtel
     
  20. DirtyHippy

    DirtyHippy

    Joined:
    Jul 17, 2012
    Posts:
    224
    Hi -

    I have been using a somewhat modified version of LookAtController for a while and it works great. However, I'm just getting to looking investigating a little issue I've had for a while. The issue is this:

    1) Choose target to right side of source. Agents smoothly looks to the right side. Good.
    2) Choose no target. Smoothly weighs out the lookat ikposition so his animation takes over and he looks forward. Good. Keep in mind the ik position is still on the right side (just weighed out).
    3) Choose a new target to the left. Agent starts weighing back in the ikposition - but the lookat is still on the right side. The lookat target starts smoothly lerping to the left (good) but since it starts on the right the source actually starts looking right for a small bit before looking back to the left (as the ikposition swings around from the right to the left).

    I'm trying to figure out how best to handle this scenario. It feels like the ikposition needs to be corrected, but since it could be at an arbitrary weight I'm not sure how to do it.

    Thanks!
     
  21. Redux

    Redux

    Joined:
    Nov 10, 2011
    Posts:
    146
    I'm curious if it's possible to run an additive animation over the top of finalIK's AimIK. If not what solution is reasonable?
     
  22. MetalDonut

    MetalDonut

    Joined:
    Feb 7, 2016
    Posts:
    127
    This is helpful, thanks. I realized I am using an Animator AND am overriding animation states. I have my Animator Component update mode to "Animate Physics" instead of "Normal" which is what caused the issue as it's then using FixedUpdate not Update. Can IK Grounder work with FixedUpdate instead of update and if so how do I change it? I'm using RigidBodies and Ragdolls so I prefer to keep my animator to use Fixed Update if possible. Thanks
     
  23. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    I looked at the demo and when I switched target to null and then to the other side, it snapped IKPosition to the new target immediately before starting to weigh in, so it's probably something with your modification. If you'd send me your version of it I might be able to help.

    Hey,
    Not possible to do this with the Animator, but if playing recoil or reloading animations with AimIK is what you needed to do, then you can have AimIK work in "additive mode" instead.
    Use this code:

    Code (CSharp):
    1. public AimIK ik;
    2.         [Tooltip("The direction of the animated weapon aiming in character space. Tweak this value to adjust the aiming.")] public Vector3 animatedAimDirection = Vector3.forward;
    3.  
    4.         void LateUpdate () {
    5.             ik.solver.axis = ik.solver.transform.InverseTransformVector(ik.transform.rotation * animatedAimDirection);
    6.         }
    Or use the AimController component (check out the "Aim Controller" demo) and enable "Use Animated Aim Direction".

    It will assume your weapon is aiming forward with the animation and offset from that, that maintains the look and feel of all your reloading, recoil and equipping animations. Tweak the "Animated Aim Direction" vector if the character is not aiming exactly forward in the underlying animation.

    If the Animator is in AnimatePhysics mode, Final IK will detect that and update in LateUpdate, but only if a FixedUpdate has been called during the frame. Unless you have disabled the IK component and calling ik.solver.Update() from somewhere. I could take a look at your project if it's possible for you to send it over.

    Cheers,
    Pärtel
     
  24. DirtyHippy

    DirtyHippy

    Joined:
    Jul 17, 2012
    Posts:
    224
    Hi -

    You can repro this in your sample. You snap but only when the weight reaches 0.

    To test:

    1) Move the left/right look at targets further to the left/right to make the issue more pronounced.
    2) Set "Weight smooth time" to 4 and "Target smooth time" to 8 (to make the issue more pronounced)
    3) Play
    4) Let it weigh in the left node
    5) Once weighed in, set target to null
    6) When weight reaches < 0.1 - but _not_ zero - change to right node.
    7) Note the behaviour I originally described in the previous post - the lookat ik position starts lerping from left and the head kind of pauses and looks back left a little before turning right due to the ikposition being weighed in.

    It doesnt look as bad in this sample but it is still there. I'm using a deer's neck/head for testing and different weights rather than a humanoid, etc, so maybe my test use case this just looks worse when it happens. They key is you set the target to null and then set another target before the weight reaches 0.
     
  25. MetalDonut

    MetalDonut

    Joined:
    Feb 7, 2016
    Posts:
    127
    "I could take a look at your project if it's possible for you to send it over."

    That would be great! My project is huge, so I can send over a stripped down version so you can see what's going on. I'll send to your support email. Really appreciate it! Thx!
     
  26. justdizzy

    justdizzy

    Joined:
    Mar 8, 2016
    Posts:
    89
    Is there a way to use Penetration Avoidance with just ArmIK? I have an object that I want the arm to reach around / get limited by, not pass through when the target gets too far.
     
  27. arie1994

    arie1994

    Joined:
    Jun 30, 2016
    Posts:
    86
    when full body biped ik is on- it rotates the clavicles for no good reason, creating the horror in the attached screenshot.
    why would it happen and how do I make it stop?
    ikTwistBug.jpg
     
  28. gliealonso

    gliealonso

    Joined:
    Oct 21, 2018
    Posts:
    117
    Check all references from your FBBIK , per example, see if upper arm is linked with upper arm, and not upper arm with lower arm.
     
    Partel-Lang likes this.
  29. gliealonso

    gliealonso

    Joined:
    Oct 21, 2018
    Posts:
    117
    Hi Partel,

    I'm adding takedowns to my game, and I wanted a way to grab the opponent limbs and such, and I was checking the demo scene IK Before Physics, but I'm wondering if there is an easier way to do this?

    Otherwise I was thinking about checking the position of the grabbed location, and finding the nearest opponent limb, and using animator ik to make the opponent limb go to the location that you grabbed.

    edit: (Or would it be the same as picking up an object with rigidbody?)

    Many thanks,
    Gabriel.
     
    Last edited: Jan 6, 2020
  30. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    Ok, I see, but thing is, the controller can only snap the IKPosition to the new target when weight is 0. If it snapped to the new target with weight > 0, you'd see the head snapping from one rotation to another within a frame. So I'm sorry, I don't know how to improve it. Maybe try setting Target Switch Smooth Time to a lower value when you assign a new target when it previously was null. Or set Weight Smooth Time to a lower value when nulling the target. Or lerp ik.solver.IKPosition to character.position + character.forward * 10f while target is null, that might be the best solution.

    I'll take a look in a minute, thanks!

    Hey,
    Sorry, no, that script requires FullBodyBipedIK. But to create a similar behaviour for ArmIK, you basically just need to sphere cast from the shoulder towards the normal IK target position and if hits anything, set IK position to RaycastHit.point instead.

    Hey,
    Please check the References of FBBIK, maybe you have shoulder bones assigned as upper arms? Normally FBBIK doesn't even know about the shoulders so it can not twist them like that unless they have been assigned as something in the References.

    Hi, Gabriel

    Have you seen the "Melee Grab" demo? It has Grab.cs on the left forearm muscle, that checks collisions with it and adds a joint between the arm and the collided object and unpins the other puppet. You could use something like that together with IK Before Physics to move the hand to where you want to grab the other guy from. You could make something like a "magnet" for the hand. When the takedown animation starts, start checking if there is a grabbable body part within a distance from the hand. If there is, blend in IK weight and set IK position to that body part. Once there is physical contact, create the joint to glue them together.
    That's how I'd approach this at least.

    Cheers,
    Pärtel
     
  31. justdizzy

    justdizzy

    Joined:
    Mar 8, 2016
    Posts:
    89
    If I wanted to switch to using CCD or FABR so I could use rotation limiters, how do I get the "hand" to match the target rotation, which would needs be a priority over position?
     
  32. spelafort

    spelafort

    Joined:
    May 8, 2017
    Posts:
    37
    Hi Partel,

    I'm using both final IK and puppet master on a navmesh agent. I modelled my scene after the demo. But no matter what I do I seem to have absurdly exaggerated falls where the agent flies off the map. It feels very 'floaty' and the agent ends up sliding quite far from the object of collision for no apparent reason.

    I've tried:

    -changing all the rigid body weights for the puppet to be higher (also tried lower, both did nothing)
    -lowering the max rigidbody velocity (this is the most obvious, it seemed to help a bit but even lowering it to 0.1 seems to result in floaty falls)
    -getting rid of the finalIK components, including the effectors (did nothing)
    -tweaking the parameters for the navmesh agent (especially acceleration etc., also seemed to do nothing).

    Any idea of what I could try here? The navmesh agent in the demo is so elegant, but I can't figure this out :)
     
  33. khos

    khos

    Joined:
    May 10, 2016
    Posts:
    1,487
    Dear Pärtel,
    I would like to ask if the following is possible with Final IK, which is to switch/blend between ragdoll and IK/animator, I want to achieve a look where the player can get up after being knocked over/down but smoothly. Is that possible?
    I have seen something being done with puppetmaster, can final IK do similar ragdoll type physics.
     
  34. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    Rotation is not supported by CCD nor FABRIK algorightms. But you could just do just
    Code (CSharp):
    1. ik.solver.bones[ik.solver.bones.Length - 1].transform.rotation = ik.solver.target.rotation;
    after the solver has solved (use ik.solver.OnPostUpdate delegate to get a call after each update).
    Don't have a better solution other than that, sorry.

    Hey,
    Maybe you have PuppetMaster gameobject parented to the NavMeshAgent? If so, the sliding might be caused by the Navmesh continuing to move after puppet got unpinned and carrying the puppet along with it. If that's not it, it is difficult to guess, if you could send it over as a unitypackage, I'd take a look.

    Hey,
    Final IK doesn't do any ragdoll physics, it is all about inverse kinematics. In FIK there is only the RagdollUtility scene, that does do smooth blending from ragdoll back to animation, but you don't really need FIK for that if you don't have it.
    Here's the logic:
    1. Before blending to animation, store the position and rotation of the pelvis and localRotations of all the child Transforms.
    2. Make a parameter like ragdollWeight.
    3. When starting to get up, set ragdollWeight to 1, enable the Animator
    4. In LateUpdate(), blend ragdollWeight to 0 and lerp/slerp the position/rotation of the pelvis from stored state to current state by ragdollWeight:
    Code (CSharp):
    1. ragdollWeight = Mathf.MoveTowards(ragdollWeight, 0f, Time.deltaTime * blendSpeed);
    2. if (ragdollWeight <= 0f) return;
    3.  
    4. pelvis.position = Vector3.Lerp(pelvis.position, storedPelvisPosition, ragdollWeight);
    5. pelvis.rotation = Quaternion.Slerp(pelvis.rotation, storedPelvisRotation, ragdollWeight;
    5. Do the same for all the child localRotations.

    Btw I have another asset that does all the advanced ragdoll stuff - PuppetMaster.

    Best,
    Pärtel
     
  35. spelafort

    spelafort

    Joined:
    May 8, 2017
    Posts:
    37
    Ah that was it-- thanks so much for the continued support!
     
  36. Michal_Stangel

    Michal_Stangel

    Joined:
    Apr 17, 2017
    Posts:
    151
    Hello,

    could you please advise me how to set Grounder for character without legs? I already successfully set GrounderFBBIK for my DAZ human character, GrounderIK for spider-like characters and GrounderQuadruped for dog-likes, but have no luck with this one.

    Tried both GrounderIK and GrounderQuadruped . Fiddling with Grounder settings, using different bones as Pelvis. I also created 4 empty objects placed as 4 legs, used them as Limb IK and referencing them inside Grounder component.

    I want it to being rotated 1:1 with terrain.

    Michal
     

    Attached Files:

  37. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    Sorry, I do not understand, why would you need Grounder for a character with no legs? Is that a walking brain? :)
     
  38. Michal_Stangel

    Michal_Stangel

    Joined:
    Apr 17, 2017
    Posts:
    151
    :) It's basically slime:
    https://assetstore.unity.com/packages/3d/characters/creatures/slime-blob-monster-pack-pbr-57835
    Also have some snake-like creatures.

    I somehow thought that solver will rotate whole body to fit terrain if I create 4 pseudo legs at the bottom (on each side), create Limb IK for each one and reference it in GrounderIK or GrounderQuadruped and set something in options.
    Before Final IK I used my own leg-terrain raycasting to rotate characters on slopes, so I guess this is the way to go for no-leg characters...? :)
     
  39. chrisk

    chrisk

    Joined:
    Jan 23, 2009
    Posts:
    704
    Hi, Partel,
    I have a rather a sticky question for you to answer but I would like your honest opinions.

    I love FinalIK and I really appreciate you opened new possibilities, however, I also love the new Animation Rigging system. I'm pretty sure you are familar with it as it will directly compete with FinalIK. The dev even mentioned that it plans to match FinalIK in terms of features.

    When compared, the new Animation Rigging system has finer granular modules and provides more general solution than FinalIK. And it's more in-line with the DOTS system also for the future proofness. And I honestly like it where it's going. And it allows our animator has more control over IK setup as well.

    Things are evolving and what I would like to know is that what your plan is on FinalIK. Will it remain as a different solution or it will embrace the Animation Rigging system?

    Depends on what path you take, I'll have to either just migrate all my IK setup to the new Animation Rigging system or keep FinalIK as a layer on top of the Animation Rigging system. Having two solutions in the IK setup will make things complicated and I don't wish to have two different systems in the same setup.

    What I wish is that you support FinalIK as an extension to the Rigging. The Rigging system is completely open-source and with your expertise, I'm pretty sure you can provide lots of cool extensions.

    A similar story exists between NGUI and UGUI. NGUI is definitely served its purpose well before UGUI but no new asset mentions about NGUI compatibility anymore. I don't want FinalIK to take the same path as NGUI.

    Thanks for your opinion.

    Cheers!
     
  40. giantdoor

    giantdoor

    Joined:
    Sep 11, 2018
    Posts:
    52
    Hi Partel, this has probably been asked before, but I couldn't find a good way to search for it in this monstrously long thread :D
    Is it possible to combine RotationLimits and the FullBodyBipedIK? I'm just trying to prevent the arms of my character from clipping through the body, but so far with no luck :(
     
  41. Slaghton

    Slaghton

    Joined:
    Sep 9, 2013
    Posts:
    139
    realtime baker.jpg
    When using realtime baker+VRIK for humanoid I get the waist positioning where the feet should be. Anyway to correct for this?
    (Can set root transform position (y) to -1 to correct height placement in animation but when foot ik is selected in animator the feet go up into the waist. Think its connected to the position being off by 1 unit)
     
  42. BigPoodle

    BigPoodle

    Joined:
    May 27, 2015
    Posts:
    6
    Hi!
    I've just been testing AimController demo, but found
    that the dummy character actually turns to face the aim target (that is placed
    outside of maxRootAngle) even with turnToTarget disabled.
    turnToTargetTime also seems to have no influence over the rate of rotation.
    Am I missing something?
    I am using the latest version of Final IK on Unity 2019.3.
     
  43. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Hey,
    Yes, without legs it would be much more efficient to just rotate the blob to surface normal:
    Code (CSharp):
    1. Quaternion q = Quaternion.FromToRotation(transform.up, raycastHit.normal);
    2.  
    3. transform.rotation = Quaternion.Slerp(transform.rotation, q * transform.rotation, Time.deltaTime * rotationSpeed);
    And use SphereCast, it will be much more reliable than Raycast.

    Hey and thank you for your concern! :)

    I have already tried making AnimationRigging versions of a couple of my solvers, but they ended up being considerably slower than what I already had. There are also some limitations to stuff like making raycasts, preventing me from making a Grounder-like foot placement correction system with it. As for matching FIK in terms of features, I wish them luck with that, I am about 6 years ahead of them hehe. But seriously, for the current performance, I see no point in making custom Animation Rigs, so I will skip the Animation Jobs and go directly to DOTS when it matures to a production ready thing. For now I don't see a lot of developers choosing to spend 10x more time going with DOTS to gain some performance, there are easier ways to optimize.

    Hey,
    Not possible, sorry, but you could try using Bend Goals to keep the elbows out of the body instead.
    It is possible to solve RotationLimits on top of FBBIK though, but the hand will not match the target anymore when a limit is violated. This is how:

    Code (CSharp):
    1. public RotationLimit[] limits;
    2. public FullBodyBipedIK ik;
    3.  
    4. void Start() {
    5. foreach (RotationLimit limit in limits) {
    6. limit.enabled = false;
    7. }
    8. ik.solver.OnPostUpdate += AfterFBBIK;
    9. }
    10.  
    11. void AfterFBBIK() {
    12. foreach (RotationLimit limit in limits) {
    13. limit.Apply();
    14. }
    15. }
    Hey,
    Yeah, select the produced animation clip, then set all the "Based Upon"-s to "Original".

    Hey,
    If you have turnToTarget disabled, it will just make sure character angle is kept within maxAngle from the target direction. With turnToTarget enabled, it will smoothly turn to target direction when maxAngle reached. That turning time is defined by turnToTargetTime. If turnToTarget is disabled, turnToTargetTime has no effect, it is actually the smooth interpolation of the aiming vector that makes it appear smooth.
    If you wish to disable turning to root entirely, just set maxRootAngle to 180.

    Cheers,
    Pärtel
     
    BigPoodle likes this.
  44. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    This is right, most people are viewing DOTS as an experimental but inevitable thing. We will all go there, there's no question because it's internally Unity 2.0. But right now? probably not!

    Also I get the feeling that the most use of DOTS from mainstream customers will come via visual scripting, so it'll be up to authors like you to support it when the time comes, and that most likely will be better for them to interact with your code via DOTS visual scripting.

    I wonder if your code didn't make it further than Unity games sometimes ;)
     
  45. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Thanks for the visual scripting thing, I hadn't thought of that!

    I know it's best to jump on the train as early as possible, but at this early stage with everything still changing rapidly, it would be more like jumping in front of a train. But we're all just fortune tellers now, every day I thank the gods, at least I didn't write a shader tool and end up in Render Pipeline Hell. :)
     
  46. giantdoor

    giantdoor

    Joined:
    Sep 11, 2018
    Posts:
    52
    That would be probably fine, thank you a lot! Also, how resource expensive would that call be?
     
  47. Partel-Lang

    Partel-Lang

    Joined:
    Jan 2, 2013
    Posts:
    2,554
    Depends on which RotationLimit you use. RotationLimitAngle is almost nothing, RotationLimitPolygonal is the heaviest. RotationLimitSpline just gets some angles and evaluates an AnimationCurve.
     
  48. chrisk

    chrisk

    Joined:
    Jan 23, 2009
    Posts:
    704
    I understand that you want to wait until the dust settles down. That's the sentiment most of the Asset developers I talk to. Timing-wise, it's the worst time to be a Unity developer. Unity promised so many things but I don't see we will see the promised land any time soon. I feel like we are trapped between the future and leftovers. But honestly. I don't know if there has been any best time to be a Unity developer though. They just cannot deliver and when they do, it feels like 20% short and they stop at that. Smart developers will stay within the boundaries, but sometimes we have to push the boundaries. This is where all the sadness comes from.
    One thing I learned for sure is that I'll make a clicker style game to stay well inside of the boundaries. Very sad.
     
  49. Slaghton

    Slaghton

    Joined:
    Sep 9, 2013
    Posts:
    139
    I found out the issue with baking animation and character waist being ground level. I have 2 blender rigs but both were causing that issue. Using the dummy model or different model from asset store worked. I wonder if this is solely a blender quirk or if rigs need to be setup in a certain way.
    (Guess I can test by importing and exporting that model from asset store)
    Edit:Not blender, importing working rig and exporting still works. Just have to figure out what setup it likes now
     
    Last edited: Jan 18, 2020
  50. BigPoodle

    BigPoodle

    Joined:
    May 27, 2015
    Posts:
    6
    I see, thanks for the clarification.