主流的 骨骼蒙皮动画 顶点变换方式的一个细节的思考
来源:互联网 发布:2017天猫双11销售数据 编辑:程序博客网 时间:2024/06/08 17:42
常见的骨骼蒙皮动画的顶点变换大致思路是:
将绑定姿势(比如说类人模型的T姿势)下的顶点位置 变换到 对应骨骼的局部空间(用该骨骼的绑定姿势空间下矩阵的逆) 再以该骨骼的所需时间点时对应的矩阵处理,重新变换到模型空间。
如果该顶点对应多个joint,将获得的多个新坐标加权平均。
以前一直觉得这个算法在对应多个joint时是错的。
以前我的理解是:
以对应两个joint为例,某顶点P的模型空间坐标为Pmodel ,该点在joint0局部空间坐标根据骨骼蒙皮动画约定总是 P0, 在joint1局部空间坐标根据骨骼蒙皮动画约定总是P1。 joint0到模型空间的总矩阵M0,joint1到模型空间的总矩阵M1。权重分别w0, w1。
假设绑定姿势对应t0时间点
Pmodelt0 = P0× M0t0 × w0 + P1 ×M1t0 × w1 (1)
求Pmodelt1
常见算法的公式是
Pmodel t1 = Pmodelt0 × (M0t0)-1× M0t1 × w0 + Pmodelt0 × (M1t0)-1× M1t1 × w1 (2)
如果把等式(1)带入上式,就会得到一个不伦不类的东西。实际上应该是将等式(1)中的两项分别做等式(2)中两项的处理。所以我一直觉得常见算法这里有问题。
今天又想了想,原来没毛病。
还延续我的假设,但是如果将P0 设为Pmodelt0 × (M0t0)-1,同理将P1设为Pmodelt0 × (M1t0)-1,这样等式(1)从数学上来说就退化成一个恒等式,如果不化简等式(1),直接带入等式(2),等式(2)就成立了。
从实际意义上来说,如果令在绑定姿势时的模型空间顶点坐标(加权平均后的) 和 顶点坐标在绑定姿势时在各个joint的局部坐标变换到模型空间坐标 相等。
(也就是实际上没必要加权平均了,这时候该点从各个joint算出来的坐标都相等)
也就是绑定姿势时模型空间顶点坐标 乘以 各个joint的逆矩阵,得到一个坐标,令这个坐标为顶点坐标在对应joint的局部坐标。
这时就可以简化顶点的计算方式,也就是常见算法。
这里可以随意假设局部坐标,只要满足假设的这套 局部坐标 可以满足等式1就行。
如果恰好假设以上那个假设,那就很方便计算。
- 主流的 骨骼蒙皮动画 顶点变换方式的一个细节的思考
- 蒙皮骨骼动画的理解
- 蒙皮骨骼动画的理解
- MD5模型的格式、导入与顶点蒙皮式骨骼动画I
- MD5模型的格式、导入与顶点蒙皮式骨骼动画I
- 骨骼蒙皮动画的原理解析
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- 骨骼蒙皮动画的原理解析
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- 骨骼动画的核心,你必须了解的骨骼初始变换矩阵和蒙皮初始变换矩阵!
- 提高Shader Model 2.0 蒙皮骨骼动画的骨骼限制
- 巧用带有骨骼动画的四种蒙皮技术
- 骨骼蒙皮动画(Skinned Mesh)的原理解析(一)
- 骨骼蒙皮动画(Skinned Mesh)的原理解析(二)
- 骨骼蒙皮动画(Skinned Mesh)的原理解析
- 骨骼蒙皮动画(Skinned Mesh)的原理解析
- 读书笔记总结(链接)
- java线程中断的理解
- 实现生产组和消费者的机制,利用共享内存实现文件的打开和读写操作,PV操作。
- 线程池详解
- 【LeetCode】442. Find All Duplicates in an Array
- 主流的 骨骼蒙皮动画 顶点变换方式的一个细节的思考
- QTransform Qt坐标转换
- H5---面试题八
- mAP,精确率,召回率,查重率,查准率的定义
- Linux操作系统上安装Java-学习笔记
- 68. Text Justification
- WPF UI Automation
- 序列化DataTable
- List接口的实现类LinkedList的使用