骨骼蒙皮动画算法(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#+ArcEngine10.0+SP5实现鼠标移动动态显示要素属性信息
为了解决鼠标移过动态显示要素属性的问题,我在网上先是查到的只能显示单个要素的属性,就是直接在arcmap中设置好的那个tips就可以显示,但是这种显示效果只是简单的实现了显示要素的属性值,可是没有对该 ...
- sqlserver 时间格式函数详细
一.时间函数 在使用存储过程,sql函数的时候,会遇到一些对时间的处理.比如时间的获取与加减.这里就用到了sql自带的时间函数.下面我列出这些函数,方便日后记忆,使用. --getdate 获取当前时 ...
- Data type confusion: what is an int(11)?
http://everythingmysql.ning.com/profiles/blogs/data-type-confusion-what-is-an Over and over I see cu ...
- [moka同学转载]Yii2 checkBookList的使用
use yii\helpers\Html; use yii\helpers\ArrayHelper model层代码 $model = new Model()//要存储的model $aclb = A ...
- 设计模式学习之路——Facade 外观模式(结构型模式)
动机: 组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战.如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系 ...
- 【HTML DOM】Node.nodeValue的用法
目录结构: // contents structure [-] 语法 注意 详述 实例 参考文章 Note.noteValue 属性返回或设置当前属性的值. 语法 value = node.nodeV ...
- mysql存储过程详解
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- SVN(Cornerstone)-添加忽略文件
1.打开CornerStone,找到偏号设置,找到Subversion选项 2.去看"Use default global ignores"前面的"勾",删除& ...
- SCRIPT5011:不能执行已释放Script的代码
环境:win7 64位 IE9 错误:SCRIPT5011:不能执行已释放Script的代码. 现象:在父窗体的close()中调用嵌套的iframe页面的js方法返回一个对象时抛此异常. 原因:在一 ...