Unity的SkinnedMeshRenderer

Unity中的SkinnedMeshRenderer主要用于处理有动画的网格,其关键在于蒙皮技术,将顶点绑定到骨骼上,通过骨骼的运动实现网格的动态效果。SkinnedMeshRenderer的蒙皮数据包括骨骼影响顶点的权重和骨骼偏移矩阵。此外,它还可用于实现角色换装效果,但不支持批处理。

SkinnedMeshRenderer蒙皮网格过滤器

有动画的网格用SKinnedMeshRenderer,静止不动的网格用MeshRenderer

SKinnedMeshRenderer 的精华在于蒙皮,所谓的蒙皮并不是模型的贴图,而是Mesh本身,蒙皮是指Mesh中的顶点附着在骨骼之上。可以这么说,具有蒙皮(Skin数据)的Mesh就是SkinnedMesh,没有蒙皮数据的就是一个普通的静态Mesh。蒙皮数据决定顶点如何绑定到骨骼上。顶点的蒙皮数据包括顶点受到哪些骨骼影响以及这些骨骼影响该顶点时的权重(weight),另外对于每块骨骼还需要骨骼偏移(BoneOffsetMatrix)用来将顶点从Mesh空间变换到骨骼空间。谷歌控制蒙皮运动,动画控制骨骼的运动

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

public class ChangeAvator : MonoBehaviour
{
    public GameObject[] objects;


    void Start()
    {
        gameObject.AddComponent<SkinnedMeshRenderer>();
        Change();
    }

    /// <summary>
    /// 换装
    /// </summary>
    public void Change()
    {
        //集合合并Mesh网格
        List<CombineInstance> combines = new List<CombineInstance>();
        //集合获取material
        List<Material> materials = new List<Material>();
        for (int i = 0; i < objects.Length; i++)
        {
            //获取单个Mesh
            Mesh mesh = objects[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMesh;
            CombineInstance combine = new CombineInstance();
            //单个赋值
            combine.mesh = mesh;
            //集合添加合并
            combines.Add(combine);
            materials.Add(objects[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial);
        }
        Mesh mesh1 = new Mesh();
        mesh1.CombineMeshes(combines.ToArray(),
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值