当前位置: 首页 > article >正文

SkinnedMeshRenderer相关知识

SkinnedMeshRenderer和MeshRenderer

unity中SkinnedMeshRenderer是CPU去更改顶点位置的。
而当使用MeshRenderer时,可以靠GPU来进行蒙皮(即更改顶点位置)。
SkinnedMeshRenderer是多线程处理的,在小程序游戏中,只支持同步处理,所以小程序游戏最好使用MeshRenderer去进行蒙皮处理

蒙皮

描述

将骨骼(Bone)与网格(Mesh)的顶点(Vertices)关联起来的过程。

顶点动画

描述

通过在动画帧中直接修改mesh顶点的位置来实现,通常在mesh顶点数目较少,动画简单的情况下使用,如草的摆动,树的摆动,水的波动等

蒙皮动画

描述

通过在动画中直接修改bone的位置,让mesh的顶点随着bone的变化而变化,通常用于人形动画,如人物的跑动,跳跃等

原理

顶点在骨骼下的相对坐标保持不变,骨骼根据动画作移动。

bones

SkinnedMeshRenderer skinnedMeshRenderer = go.GetComponent<SkinnedMeshRenderer>();
Transform[] bones = skinnedMeshRenderer.bones;
描述

用于对网格进行蒙皮的骨骼。

bindposes

Mesh mesh = skinnedMeshRenderer.sharedMesh;
Matrix4x4[] bindposes = mesh.bindposes;
描述

每根bone从mesh空间到自己的bone空间的变换矩阵。
绑定姿势。每个索引处的绑定姿势引用索引相同的骨骼。
当骨骼处于绑定姿势时,绑定姿势是骨骼变换矩阵的逆矩阵。

boneWeight和vertices

描述

boneWeight:描述 4 个影响网格顶点的蒙皮骨骼权重。
vertices:mesh的顶点位置的副本或分配新顶点位置数组。

关系

BoneWeight和vertices的下标在Unity中是一一对应的。每个BoneWeight数组中的元素都直接关联到vertices数组中相同索引的顶点。这意味着,如果你有一个顶点数组和一个蒙皮权重数组,它们的大小(长度)通常是相同的,并且数组的每个索引位置都对应于同一个网格顶点的蒙皮信息。

Mesh mesh = skinnedMeshRenderer.sharedMesh;
BoneWeight[] boneWeights = mesh.boneWeights;
Vector3[] vertices = mesh.vertices;
bones、bindPoses和boneWeight的关系

通过boneWeight的boneIndex0存储的骨骼索引能够拿到bones数组中的骨骼Transform数据。
通过boneWeight的boneIndex0存储的骨骼索引能够拿到bindPoses数组中的骨骼变换矩阵数据。

Transform bone = bones[boneWeight.boneIndex0];
Matrix4x4 bindpose = bindposes[boneWeight.boneIndex0];

http://www.kler.cn/a/469585.html

相关文章:

  • 防止密码爆破debian系统
  • 《一文读懂PyTorch核心模块:开启深度学习之旅》
  • pytest日志显示
  • 鸿蒙HarmonyOS开发:基于Swiper组件和自定义指示器实现多图片进度条轮播功能
  • 【shell编程】报错信息:Non-zero Exit Status(包含7种解决方法)
  • 开源模型迎来颠覆性突破:DeepSeek-V3与Qwen2.5如何重塑AI格局?
  • Linux下ssh远程命令详解及示例
  • 反规范化带来的数据不一致问题的解决方案
  • SQL拦截器 翻译整个sql语句
  • STM32学习(四)
  • Multisim更新:振幅调制器+解调器(含仿真程序+文档+原理图+PCB)
  • OceanBase到MySQL实时同步方案
  • 【JVM】总结篇-类的加载篇之 类的加载器 和ClassLoader分析
  • 如何排查 Apache Doris 中 “Failed to commit txn“ 导入失败问题?
  • QML学习(七) 学习QML时,用好Qt设计器,快速了解各个组件的属性
  • 数字化供应链创新解决方案在零售行业的应用研究——以开源AI智能名片S2B2C商城小程序为例
  • 数据结构大作业——家谱管理系统(超详细!完整代码!)
  • 【数据可视化-11】全国大学数据可视化分析
  • 填充矩形C++
  • 云图库平台(四)——前端用户模块开发
  • Go语言触发异常的场景有哪些
  • 字玩FontPlayer开发笔记5 Tauri初体验
  • Android授权USB使用权限示例
  • C++拷贝构造函数与赋值操作符的区别
  • Docker-文章目录
  • unity学习8:unity的基础操作 和对应shortcut