zoukankan      html  css  js  c++  java
  • AnimDynamics简介

    转自:http://www.cnblogs.com/corgi/p/5405452.html

    AnimDynamics简介

    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属性后效果:

  • 相关阅读:
    MySQL:批量修改表的排序规则
    Python黑客编程3网络数据监听和过滤
    springboot redis 项目实战 完整篇
    C#读取U盘序列号
    AS3,ReferenceError: Error #1056: 无法为 ×× 创建属性 ×××。
    知道挖掘机如何从货车上下来吗?
    一次进销存软件架构的实践(二)——业务外观层设计
    重构你的软件企业
    遇到了火狐扩展全部丢失的问题
    分布式系统设计原理与方案
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/8444137.html
Copyright © 2011-2022 走看看