2020-1-25 DynamicBone动态骨骼插件

可能很多项目使用了DynamicBone却没有好好研究过参数效果和优化,先对优化方面进行小的总结:

  1. 碰撞体的优化,只使用必要的碰撞体(参与碰撞运算的刚体)。
  2. 骨骼链的优化,根骨骼和骨骼链段数合理(参与物理运算的动态骨骼柔体)。
  3. 参数优化,限制物理运算的刷新频率Update Rate可以从默认的60修改为30;碰撞体的设置尽量只添加需要进行碰撞的部位。

一、碰撞体

Dynamic Bone Colider (Script) 定义了碰撞体的中心、半径、高度、方向等属性。

举例:以M2举例,成男的骨架上需要在头、躯干、大腿、小腿上设置了7个碰撞体,比如在Bip001 L Thigh大腿骨骼上挂脚本,设置的碰撞体参数如下:

二、Skeleton上的Dynamic Bone柔体参数

以M2举例,成男使用了10根动态骨骼在头发、袖子、裙摆的根骨骼上。

每个骨骼上设置参数和对应的碰撞体,举例:披风需要与7个碰撞体进行碰撞,头发只需要与头、躯干3个碰撞体进行碰撞。

目前柔体参数设置的问题在于过于轻飘、弹性太小容易乱飞,对DynamicBone物理参数的理解如下:

  • Damping 阻尼:值越小,表现的越轻;值越大,越重。比如:头发稍重,布料稍轻。
  • Elasticity 弹性,伸缩:值越小,越容易弹飞;值越大越像弹簧。比如:前摆弹性太小时,摆动幅度会摆到身后。弹性参数是最难把握的,需要配合阻尼参数一起调整效果。
  • Stiffness 硬度:值越小,越柔软;值越大越硬。目前使用的头发和布料都属于比较柔软的,参数设置到0.1基本上没有太大问题。
  • Inert 惯性:值越大,惯性越小。参数一般设置在0.5以上,避免动作幅度较大时,摆动过大。

使用曲线可以让骨骼链的参数有过渡,曲线值继承于参数值。

曲线推荐设置平滑的过渡,最大到最小参数的差异不能太大。

三、修改后的参数值参考

 

 

 

披风

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DynamicRandomWind : MonoBehaviour
{
    private DynamicBone[] dynamicBones;
    public bool isWindActive = true;
    public float windForceValue;

    void Start()
    {
        dynamicBones = GetComponents<DynamicBone>();
    }

    void Update()
    {
        Vector3 force = Vector3.zero;
        if (isWindActive)
        {
            force = new Vector3(Mathf.PerlinNoise(Time.time, 0.0f) * 0.005f * windForceValue, 0, 0);
        }
        for (int i = 0; i < dynamicBones.Length; i++)
        {
            dynamicBones[i].m_Gravity = force;
        }
    }
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值