实时渲染(第三版):第四章 转换 4.5 变形
来源:互联网 发布:百度云同步盘 mac 编辑:程序博客网 时间:2024/05/21 10:20
4.5 变形
从一个3D模型变形到另外一个有时在执行动画时有用。假设某个模型显示于t0时刻,我们希望在t1时刻将之改变为另外一个模型。从t0到t1的这段时间,是使用某种插值生成的一系列连续的混合的模型。变形的一个示例如图4.13所示。
变形由两个主要的问题组成,分别叫做顶点对应问题和插值问题。给定两个模型,它们可能拥有不同的拓扑结构、不同的顶点数目和不同的网格连接性,通常不得不从建立顶点对应开始。这是一个难题,已有很多该领域的研究,有兴趣的读者可以参考Alexa的调查。
不过,如果在两个模型间有一对一的顶点对应关系,那么可以基于逐个顶点执行插值。即是说,对第一个模型中的每个顶点,在第二个模型中必须仅存在一个顶点与之对应,反之亦然。这让插值成为一项简单的任务。比如,可以对顶点直接使用线性插值(启发插值方式参考节13.1)。为计算时间t∈[t0,t1]的变形顶点,我们首先计算s = (t - t0)/(t1 - t0),然后计算线性顶点混合,
m = (1 - s)p0 + sp1, (4.57)
其中,p0和p1是对应的两个顶点。
变形的一个有趣的变种,用户拥有更多直观的控制,通常叫做变形目标或混合形状。基本思想可以使用图4.14解释。
图 4.13 顶点变形。每个顶点都定义了两个位置和法线。每个帧中,中间位置和法线由顶点着色器进行插值求出。
图 4.14 给定两个口型,可以计算出一组差异向量去控制插值,甚至推断。在变形目标中,差异向量用来增加到中性面孔上的移动。使用差异向量的正值权重,我们获得了一个微笑的嘴巴;使用负值权重,我们可以获得相反的效果。
开始时我们有一个中性的模型,在本例中是一个面孔,我们用N表示这个模型。另外,我们还有一组不同的面孔姿态。在示例演示中,仅有一个姿态:笑脸。通常,允许k≥1个不同的姿态,用Pi,i∈[1,...,k]表示。作为预处理,差异面孔计算为:Di = Pi - N,如,每个姿态减去中性面孔。
此时,我们拥有一个中性的模型N,和一组差异姿态Di。之后,我们可以使用下面的公式获得一个变形后的模型M:
它是一个中性的模型,只不过我们在它的上面使用权重wi增加了所需的不同姿态特性。在图4.14中,设置w1 = 1呈现完全微笑的面孔,如中间所示。使用w1 = 0.5则是一张半微笑的面孔。也可以使用负的权重和大于1的权重。
对于这个简单的面孔模型,我们可以增加另外一张拥有“悲伤”的眉毛的面孔。对眉毛使用一个负值权重则可以创建“快乐”的眉毛。既然替换是附加的,该眉毛姿态可关联用于笑口姿态。变形目标是一种强大的技术,给动画制作者提供了很多控制,因为可以互相独立地操作模型的不同特性。Lewis et al. 引入姿态空间变形(pose-space deformation),它组合了顶点混合和变形目标。支持DirectX10的硬件可以使用流输出和其他改进的功能,可以允许在一个单独的模型中使用更多的目标和仅在GPU上执行效果计算。
一个使用蒙皮和变形的真实示例显示于图4.15中。
图 4.15 角色雷切尔的面部表情和移动受控于蒙皮和顶点变形,它们被使用图形硬件支持所加速。
- 实时渲染(第三版):第四章 转换 4.5 变形
- 实时渲染(第三版):第四章 转换 4.3.1
- 实时渲染(第三版):第四章 转换 4.3.2
- 实时渲染(第三版):第四章 转换 4.4 顶点混合
- 实时渲染(第三版):第四章 转换 4.2.1 欧拉转换
- 实时渲染(第三版):第四章 转换 4.1.1 4.1.2
- 实时渲染(第三版):第四章 转换 4.1.3 4.1.4
- 实时渲染(第三版):第四章 转换 4.1.5, 4.1.6, 4.1.7, 4.1.8
- 实时渲染(第三版):第四章 转换 4.2.2 4.2.3 4.2.4
- 实时渲染(第三版):第二章 图形渲染管道 2.5
- 实时渲染(第三版):第一章 简介
- 实时渲染(第三版):第二章 图形渲染管道 2.1 体系结构
- 实时渲染(第三版):第二章 图形渲染管道 2.2 2.3
- 实时渲染(第三版):第二章 图形渲染管道 2.4 光栅化阶段
- 实时渲染(第三版):第三章 图形处理单元 3.1 3.2
- 实时渲染(第三版):第三章 图形处理单元 3.3 3.4
- 实时渲染(第三版):第三章 图形处理单元 3.5 3.6
- 实时渲染(第三版):第三章 图形处理单元 3.7 3.8
- oracle 无效数字
- 资治通鉴,一个特别的女人,辛宪英
- spriing内核心工具包之类对象工具类
- maven学习笔记
- db2cmd无法执行
- 实时渲染(第三版):第四章 转换 4.5 变形
- http://projecteuler.net/problem=14 [Answer:837799]
- MySQL的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。
- ubuntu 修改或创建交换分区的大小
- Linux中的curses编程
- SQL Server 和Oracle 数据类型对应
- 资治通鉴,卷七十九,羊祜的淡定
- BoneCP——配置参数
- U-Boot启动过程完全分析