交互式变形是编辑几何模型的重要手段,目前出现了许多实时、直观的交互式变形方法。本文介绍一种利用线性混合蒙皮(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,其中rd分别表示实部和对偶部,ε表示对偶算子。对偶四元数是实部和对偶部都为四元数的对偶数,又可称为八元数。常规四元数只能表示空间旋转,而对偶四元数可以表示空间任意旋转和平移的组合。

  对偶四元数的数学形式为:

其中qrqd都为四元数,ε表示对偶算子。

  利用旋转和平移信息计算对偶四元数的方法如下:

其中r代表旋转单位四元数,t代表平移四元数,t = [0 tx ty tz]。

  利用对偶四元数计算旋转和平移的方法如下:

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

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

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

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

 

本文为原创,转载请注明出处: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)的更多相关文章

  1. 骨骼蒙皮动画(SkinnedMesh)的原理解析(一)

    http://blog.csdn.net/jimoshuicao/article/details/9253999 一)3D模型动画基本原理和分类 3D模型动画的基本原理是让模型中各顶点的位置随时间变化 ...

  2. 骨骼蒙皮动画(SkinnedMesh)

    骨骼蒙皮动画也就是SkinnedMesh,应该是目前用的最多的3D模型动画了.因为他可以解决关节动画的裂缝问题,而且原理简单,效果出色,所以今天详细的谈一下骨骼蒙皮动画的相关知识. 关节动画中使用的是 ...

  3. 骨骼蒙皮动画(SkinnedMesh Animation)的实现

    http://blog.csdn.net/zjull/article/details/11529695 1.简介 骨骼蒙皮动画,简称骨骼动画,因其占用磁盘空间少并且动画效果好被广泛用于3D游戏中,它把 ...

  4. [3dmax教程] 人物+骨骼+蒙皮+动画教程

    人物+骨骼+蒙皮+动画完整教程选准备好一个人,做人的方法我在这里就不做了,大家可以学都用poser来做一个.  在大腿里建立4根骨骼! 在前视图中移动如图所示位置! 做一段简单的骨骼向前伸的动画,做4 ...

  5. 骨骼蒙皮动画(Skinned Mesh)的原理解析(二)

    http://blog.csdn.net/jimoshuicao/article/details/9283071 2)蒙皮信息和蒙皮过程 2-1)Skin info的定义 上文曾讨论过,Skinned ...

  6. JavaScript基于时间的动画算法

    转自:https://segmentfault.com/a/1190000002416071 前言 前段时间无聊或有聊地做了几个移动端的HTML5游戏.放在不同的移动端平台上进行测试后有了诡异的发现, ...

  7. MugLife静态照片变3D动画算法研究

    原文:MugLife静态照片变3D动画算法研究 MugLife app是一款可以将静态照片变成3D动画的手机应用,如下效果图所示: 大家可以看到,这个静态图具有了类3D的动画特效,是不是很好玩? 这种 ...

  8. 用队列模拟jquery的动画算法

    Aaron最近疯狂的爱上了算法研究,估计又要死伤不少脑细胞了,我喜欢捡现成的,可以省些力气.发现他写的一段源码,运行一下,还蛮好玩的,于是拿来分析一下,一来吸收下里边的营养,二来加深一下源码学习的功力 ...

  9. 解决Spine骨骼混合动画错乱问题

    Spine是一个很好的制作2D骨骼动画的软件,其中提供的混合(mix)动画功能可以很柔和过度两个不同的动画,但在混合时期,稍有不善,非常容易出现各种错乱.在Spine2D骨骼动画群上,有人提出全K帧. ...

随机推荐

  1. 获取linux服务器基本信息脚本

    为了方便日常运维写的一段简单脚本,用于集中获取服务器操作系统.CPU.内存使用.负载.硬盘使用.网络信息. 脚本比较简单,就不解释了,有兴趣的朋友请自行查看. #!/bin/bash##Name:sy ...

  2. 【Java每日一题】20161213

    package Dec2016; public class Ques1213 { public static void main(String[] args){ String str1 = " ...

  3. 又一个半成品库 weblog rpc client

    我基本上属于半成品专业户,去看我的github就知道. 下午又撸了一个weblog rpc client库,而这又一次证明了一个有技术但没有产品能力的程序员是没有卵用的. 因为当做好了库的雏形,但与具 ...

  4. 2分钟在eclipse下使用SpringBoot搭建Spring MVC的WEB项目

    1. 首先用eclipse创建一个maven工程, 普通maven工程即可 2. 修改pom如下: <?xml version="1.0" encoding="UT ...

  5. HTML5定稿

    HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了 本文转载自: http://www.cnblogs.com/tuyile006/p/4103634.html ...

  6. Quartz.net配置文件实例及cron表达式详解

    从XML文件创建作业 最新版本的quartz.net支持直接从xml文件创建作业,使用起来很方便.配置文件的格式可以参考下面的例子 <?xml version="1.0" e ...

  7. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...

  8. 怎么使用jQuery

    jQuery的强大我何文启(个人主页:hovertree.com)就不用多说了,那么怎么使用jQuery呢? 首先,下载jquery.下载地址:http://hovertree.com/hvtart/ ...

  9. IIS6.0添加上.net4.0后,以前的.net系统出现“服务器应用程序不可用”的错误提示解决办法

    把VS2010开发的网站.net4.0部署到Windows Server 2003的服务器上去, Windows Server 2003操作系统自带的为IIS 6.0,IIS 6.0一般只支持.NET ...

  10. 使用React制作一个可配置的页面生成器[0]

    背景 上班两年多,终于来到一家互联网公司,告别之前的朝九晚六的腐败生活,开始了11116的码农之旅. 因为公司做的是直播相关的业务,所以伴随着直播,不定期的就会有运营活动-.- 但是这类活动留给码农的 ...