骨骼蒙皮动画算法(Linear Blending Skinning)
交互式变形是编辑几何模型的重要手段,目前出现了许多实时、直观的交互式变形方法。本文介绍一种利用线性混合蒙皮(Linear Blending Skinning,LBS)技术来实现网格变形的方法,线性混合蒙皮技术由于计算速度优势使得其成为商业应用中最主要的方法之一。蒙皮算法一般分两步:第一步用户在几何模型上选择一系列控制单元,并计算几何模型受这些控制单元的影响权重;第二步用户拖动控制单元,几何模型随控制单元发生相应变形。第一步中权重的计算决定了蒙皮算法的效果,如果想要几何模型发生自然、高质量的形变,必须得有一种高效准确的权重计算方法。
文章[Jacobson et al. 2011]介绍了一种有界双调和权重(Bounded Biharmonic Weights,BBW)的计算方法,该权重能使得几何模型发生平滑变形。定义控制单元为Hj∈Ω,j = 1, … , m,每个控制单元Hj的仿射变换为Tj,对于顶点p∈Ω,线性混合蒙皮算法给出变形后p’的位置为控制单元仿射变换Tj的加权线性组合:

其中wj(p)为顶点p受控制单元Hj的权重影响。
对于有界双调和权重wj的计算方法,其数学表达式如下,最小化问题可以转化为求解对应的Euler-Lagrange方程,即双调和方程Δ2wj = 0,而其同时满足设定的限制条件,因此作者将这种权重命名为有界双调和权重。

function U = lbs(V,T,W)
% Inputs:
% V list of vertex positions
% T list of transformations for each controls point, for 2D:
% by by #controls, for 3D: x by # controls
% W weights, # vertices by # handles matrix of weights
% Output:
% U list of new vertex positions dim = size(V,);
m = size(T,);
TT = reshape(permute(T,[,,]),[dim+,dim*m])';
VV = [V(:,:dim)'; ones(1,size(V,1))];
VVV = reshape((TT*VV)',[size(V,1),dim,m]);
WW = permute(repmat(W,[,,dim]),[,,]);
U = sum(WW.*VVV,);
end



但是即使计算得到精确的权重值之后,线性混合蒙皮算法仍会出现皮肤塌陷的问题。例如假设两个控制单元分别绕z轴旋转角度-π/2和π/2,并且这两个控制单元对某个计算点的影响权重是相同的,都为0.5。直觉上我们希望得到一个单位旋转矩阵,但是实际上得到的是一个x方向和y方向退化的旋转矩阵,这就使得在该计算点处会出现塌陷现象。

利用对偶四元数来代替旋转矩阵可以解决上述塌陷问题。常规四元数只能表示空间旋转变换,它的数学形式为q = [cos(θ/2) nxsin(θ/2) nysin(θ/2) nzsin(θ/2)],其中单位向量[nx ny nz]表示通过原点的旋转轴,θ表示旋转角度。对偶数的概念类似于复数,它的数学形式为ẑ = r + dε并满足ε2 = 0,其中r和d分别表示实部和对偶部,ε表示对偶算子。对偶四元数是实部和对偶部都为四元数的对偶数,又可称为八元数。常规四元数只能表示空间旋转,而对偶四元数可以表示空间任意旋转和平移的组合。
对偶四元数的数学形式为:

其中qr和qd都为四元数,ε表示对偶算子。
利用旋转和平移信息计算对偶四元数的方法如下:

其中r代表旋转单位四元数,t代表平移四元数,t = [0 tx ty tz]。
利用对偶四元数计算旋转和平移的方法如下:

当对偶四元数仅表示空间旋转变换时,其表达式为:

当对偶四元数仅表示空间平移变换时,其表达式为:

利用对偶四元数对点p进行转换后得到点p’:

其中q和q*分别代表对偶四元数及对应的共轭对偶四元数。

本文为原创,转载请注明出处:http://www.cnblogs.com/shushen。
参考文献:
[1] Alec Jacobson, Ilya Baran, Jovan Popović, and Olga Sorkine. 2011. Bounded biharmonic weights for real-time deformation. ACM Trans. Graph. 30, 4, Article 78 (July 2011), 8 pages.
[2] Ladislav Kavan, Steven Collins, Jiří Žára, and Carol O'Sullivan. 2008. Geometric skinning with approximate dual quaternion blending. ACM Trans. Graph. 27, 4, Article 105 (November 2008), 23 pages.
骨骼蒙皮动画算法(Linear Blending Skinning)的更多相关文章
- 骨骼蒙皮动画(SkinnedMesh)的原理解析(一)
http://blog.csdn.net/jimoshuicao/article/details/9253999 一)3D模型动画基本原理和分类 3D模型动画的基本原理是让模型中各顶点的位置随时间变化 ...
- 骨骼蒙皮动画(SkinnedMesh)
骨骼蒙皮动画也就是SkinnedMesh,应该是目前用的最多的3D模型动画了.因为他可以解决关节动画的裂缝问题,而且原理简单,效果出色,所以今天详细的谈一下骨骼蒙皮动画的相关知识. 关节动画中使用的是 ...
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
http://blog.csdn.net/zjull/article/details/11529695 1.简介 骨骼蒙皮动画,简称骨骼动画,因其占用磁盘空间少并且动画效果好被广泛用于3D游戏中,它把 ...
- [3dmax教程] 人物+骨骼+蒙皮+动画教程
人物+骨骼+蒙皮+动画完整教程选准备好一个人,做人的方法我在这里就不做了,大家可以学都用poser来做一个. 在大腿里建立4根骨骼! 在前视图中移动如图所示位置! 做一段简单的骨骼向前伸的动画,做4 ...
- 骨骼蒙皮动画(Skinned Mesh)的原理解析(二)
http://blog.csdn.net/jimoshuicao/article/details/9283071 2)蒙皮信息和蒙皮过程 2-1)Skin info的定义 上文曾讨论过,Skinned ...
- JavaScript基于时间的动画算法
转自:https://segmentfault.com/a/1190000002416071 前言 前段时间无聊或有聊地做了几个移动端的HTML5游戏.放在不同的移动端平台上进行测试后有了诡异的发现, ...
- MugLife静态照片变3D动画算法研究
原文:MugLife静态照片变3D动画算法研究 MugLife app是一款可以将静态照片变成3D动画的手机应用,如下效果图所示: 大家可以看到,这个静态图具有了类3D的动画特效,是不是很好玩? 这种 ...
- 用队列模拟jquery的动画算法
Aaron最近疯狂的爱上了算法研究,估计又要死伤不少脑细胞了,我喜欢捡现成的,可以省些力气.发现他写的一段源码,运行一下,还蛮好玩的,于是拿来分析一下,一来吸收下里边的营养,二来加深一下源码学习的功力 ...
- 解决Spine骨骼混合动画错乱问题
Spine是一个很好的制作2D骨骼动画的软件,其中提供的混合(mix)动画功能可以很柔和过度两个不同的动画,但在混合时期,稍有不善,非常容易出现各种错乱.在Spine2D骨骼动画群上,有人提出全K帧. ...
随机推荐
- cors解决webapi post时报错405 method not allowed
nuget控制台敲入以下命令:Install-Package Microsoft.AspNet.WebApi.Cors –IncludePrerelease 打开WebApiConfig.cs添加如下 ...
- C#正则表达式验证
public class VerifyUtil { /// <summary> /// 判断输入的字符串只包含汉字 /// </summary> /// <param n ...
- 表达式括号匹配(stack)
题目描述 假设一个表达式由英文字母(小写).运算符(+.-.*./)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右括号是否匹配,若匹配,则返回“YES”:否则返回 ...
- MySQL 5.7 create VIEW or FUNCTION or PROCEDURE
1.视图 a. CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY INVOKER VIEW `sakila` ...
- 关于Java语言和面向对象记录
本科时常用的c语言是面向过程的语言,而Java是面向对象的语言 Java语言的11个关键术语 简单性.可移植性.面向对象.分布式.高性能.解释型.健壮性.多线程.安全性.动态性.体系结构中立 面向对象 ...
- 弄一个ajax笔记方便查询-基础知识篇
jQuery对Ajax做了大量的封装,jQuery采用了三层封装: 最底层的封装方法为:$.ajax() 通过最底层进一步封装了第二层的三种方法:.load().$.get().$.post() 最高 ...
- Git分布式版本控制学习
git和SVN都是版本控制系统.git是命令行操作,不喜欢的就算了,看完如果有身体不适还请及时就医~ git WIN32百度网盘下载地址:http://pan.baidu.com/s/1c1AeY9 ...
- [JS]笔记14之事件委托
-->什么是事件委托-->事件委托原理-->事件委托优点-->事件源 / 目标源 一.什么是事件委托 通俗的讲,onclick,onmouseover,onmouseout等这 ...
- 实现bootstrap布局的input输入框中的图标点击功能
使用bootstrap布局可以在input的输入框中添加譬如登录名输入框中的一键清除图标和密码输入框中显示密码的小眼睛图标.如下图: 但是在将图标放入input输入框中,这些小图标是无法获得点击事件的 ...
- AE创建一个空白的Shapefile
1.IField和IFieldEdit区别: IFieldEdit是继承IField的,因为IField的属性大部分是只读的(read-only),所以IFieldEdit就在IField的基础上多了 ...