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(),

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

被折叠的 条评论
为什么被折叠?



