zoukankan      html  css  js  c++  java
  • [UE4]AnimDynamics简介

    AnimDynamics简介

    Author:Jia Zhipeng

     

    AnimDynamics是UE4.11 Preview 5测试版本发布的AnimationBlueprint中的新节点。功能是通过简单物理模拟计算,更新骨骼位置。优点是避免了使用纯物理模拟时计算量过大,并且能实现近似物理效果。尤其用于悬垂物(辫子,锁链等自由下垂物体)上可以获得非常好的结果。

    原理:在AnimDynamics节点里,能够绑定RigidBody关联到指定Bone上,通过计算RigidBody的动量,在风,重力影响下更新动量,以及考虑附加的线性和角度的Limit,刷新Bone和RigidBody的位置。

    代码位置:AnimNode_AnimDynamics类

    关键代码:

    FVector Force = FVector(0.0f, 0.0f,UPhysicsSettings::Get()->DefaultGravityZ) * InBody->Mass *InBody->GravityScale;

    Force += WindVelocity *InBody->WindData.WindAdaption;

    InBody->LinearMomentum += Force *DeltaTime;

    InBody->NextPosition =InBody->Pose.Position + InBody->LinearMomentum * InBody->InverseMass *DeltaTime;

    一、Preview预览功能

    Preview Live :实时预览功能,能够看见绑定的Box

    Show Linear Limits : 显示线性空间限制

    Show Angular Limits : 显示角度限制

    Show Planar Limit : 显示平面限制

    Show Collision Spheres : 显示碰撞球体,用于计算平面限制

    二、Setup

    Chain 是否使用链式Body绑定。若true则Bound Bone是Chain起点,Chain End是Chain终点,链中每个Bone都会绑上一个RigidBody。若false则只能选择BoundBone,对单个Bone绑定控制。

    Bound Bone :Body绑定的骨骼

    Chain End :使用链子时的终点

    Box Extents :Body的ShapeBox的大小,用于计算惯性张量InverseTensor。Box体积大小与惯性大小成正比。

    Local Joint Offset :Body相对于Bone的偏移值。偏移后类似于钟摆效果。

    Gravity Scale :重力作用比例,重力大小使用UPhysicsSetting中的Gravity

    Linear Spring :是否线性反弹,body会尝试弹回初始位置

    Angular Spring :是否角度反弹,body会尝试和指定角度目标一致

    Linear Spring Constant :计算线性反弹时的系数,越大反弹力越强

    Angular Spring Constant :计算角度反弹时的系数,越大反弹力越强

    三、Wind

    Enable Wind :是否受风影响。

    Wind Scale :风力影响系数。

    四、Constraint 限制

    设定目的是限制物理模拟过程Body的Transform,通过限制能避免Body运动到非预期的位置,在预期范围内运动。

    Constraint Setup 限制初始化

    Linear XLimit Type,LinearYLimit Type,Linear ZLimit Type:X,Y,Z方向上的限制类型,Free是自由运动,Limited则下列限制生效。

    Linear Axes Min, Linear AxesMax :线性运动的范围。若都是0则锁定线性位置。

    之后角度限制尚未尝试,推测与线性限制差不多,限制Body的角度运动范围。

    五、Planar Limit

    平面限制,能够设定一个平面,避免Body运动超过该平面。CollisionType和Sphere Collision Radius设定碰撞类型和球半径,用于计算Body和平面碰撞信息。

    六、Settings

    Alpha值用于融合当前位置和经过AnimDynamics计算后的位置。0则不受该节点影响。

    七、示例

    节点设定:


    无AnimDynamics节点影响时:


    受AnimDynamics节点影响,设置好绑定Body属性后效果:


  • 相关阅读:
    Apache 虚拟主机 VirtualHost 配置
    EAX、ECX、EDX、EBX寄存器的作用
    Python中文文档 目录(转载)
    八度
    POJ 3268 Silver Cow Party (最短路)
    POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
    2013金山西山居创意游戏程序挑战赛——复赛(1) HDU 4557 非诚勿扰 HDU 4558 剑侠情缘 HDU 4559 涂色游戏 HDU 4560 我是歌手
    HDU 4549 M斐波那契数列(矩阵快速幂+欧拉定理)
    UVA 11624 Fire! (简单图论基础)
    HDU 3534 Tree (树形DP)
  • 原文地址:https://www.cnblogs.com/corgi/p/5405452.html
Copyright © 2011-2022 走看看