Avizo用户使用手册-9
[TOC]
Chapter 9
9 动画与影片
本章的教程介绍以下主题:
Creating animations创建动画——使用Animation Director创建动画Creating movie files创建影片文件——使用Movie Maker模块
9.1 创建动画
在本教程中,你将学习如何使用Animation Director模块,在Avizo中创建一段由若干操作构成的动画序列。在我们的示例中,我们将使用透明度、相机旋转和裁剪等效果来可视化一个多边形模型,使可视化效果更有意义、更具吸引力。
本教程涵盖以下主题:
- 为演示创建一个初始项目
- 为一个
Ortho Slice模块制作动画 - 在演示过程中激活其他模块
- 使用相机旋转或pathZ
- 移除已经定义的事件
- 把内部曲面与外部曲面叠加
- 使用裁剪逐渐加入外部曲面
- 高级裁剪问题
- 插入断点并定义演示片段
- 使用功能键在演示片段之间跳转
- 在演示序列中定义局部循环
- 存储并重放演示序列
一旦你学会了如何定义一段动画演示序列,你还可以在第9.2节中进一步学习如何把该演示录制成影片文件。
9.1.1 创建项目
首先,我们需要一个Avizo项目,它包含我们想要进行的可视化和动画所需的全部数据和模块。在我们的示例中,我们选用巧克力棒扫描数据集chocolate-bar。首先从AVIZO_ROOT目录加载data/tutorials/chocolate-bar.am。右键单击绿色数据图标,从该数据集的弹出菜单中选择,把一个Bounding Box模块附加到该数据。使用鼠标在3D查看器中围绕该模型导航。
图 9.1:带有Bounding Box和Ortho Slice的数据chocolate-bar.am。
9.1.2 为Ortho Slice模块制作动画
让我们上下移动Ortho Slice平面,以查看数据的样子。注意Ortho Slice模块有一个名为Slice Number的端口。如果你改变该滑块的值,就会在查看器中看到平面在移动。
现在,让我们用Animation Director模块为这个滑块制作动画,作为我们的第一个练习。在工具栏中单击Animation Director按钮。
一个新的部件随即可见,它承载着Animation Director的用户界面。
图 9.2:Animation Director用户界面。
与其他部件一样,这个部件也是可停靠的,你可以把它放置在Avizo用户界面中一个方便的位置。通过单击工具栏中的相关按钮激活Animation Director之后,当前可用模块中所有可以被制作动画的端口,都会被扩展出一个额外的按钮——一个秒表图标。
图 9.3:模块属性中被扩展的端口。
在我们开始为Ortho Slice的切片位置制作动画之前,先来快速看一下Animation Director部件的一些GUI元素(见下图:时间轴中的事件与关键帧)。
如你所见,用户界面被分为左右两个面板。在左侧面板中,你可以控制显示在右侧面板中的时间轴。该时间轴有一个主时间滑块。当前动画的名称可以通过直接在当前动画名称字段中书写来更改。例如,我们可以把它命名为”CandyAnimation”。
现在我们可以为Ortho Slice的切片位置制作动画了。我们通过单击Slice Number端口的秒表按钮来安排起始事件:
图 9.4:被扩展的Slice Number端口。
单击该秒表按钮会在Animation Director时间轴中创建一个新的关键帧,并且该事件会被列在用户界面的左侧面板中。如果你把鼠标光标停留在时间轴面板中那个橙色的小菱形符号上方,就会激活一个小的输入字段,你可以在其中调整时间以及与该端口关联的相应数值。要调整这个时间安排,你也可以简单地把该菱形图标拖动到时间轴上所期望的位置。
图 9.5:时间轴中的事件与关键帧。
通过这个操作,我们定义了切片位置动画的起点。接下来我们要定义动画应当结束的时间。为此,我们把主时间滑块拖动到时间轴上所期望的时间,例如00:04.000,也就是4秒。下一步,我们通过在该模块的属性中设置Slice Number端口,或者在查看器窗口中交互式地定位切片,来设置Ortho Slice模块的切片位置。使用这两种方法中的任意一种,把Slice Number端口的值设为294。
再次单击秒表按钮后,关键帧就在时间轴中被创建出来了:
你可以通过把主时间滑块重新定位到00:00来测试你的第一个动画——可以单击Jump To Start按钮,也可以在Current Time控件中输入所期望的时间。
图 9.6:时间轴中的起始事件关键帧与结束事件关键帧。
最后,通过单击Play Forward按钮或按F4键来启动动画。要停止动画,请单击Stop按钮或按F3键。
注意:动画时间并不是真实的物理时间。所指定的时间是Avizo将会尽可能遵守的时间。如果某个被制作成动画的属性需要一定的时间来处理(计算、查看器重绘等),Avizo不会跳过它,而是会等到该动画步骤完成后再继续。这意味着,例如一段时间范围为30秒的动画不会恰好运行30秒,而是会运行30秒或更长。
作为一个练习,把主时间滑块调整到时间00:12,把Ortho Slice的Slice Number位置设为0,然后再次单击秒表按钮。这会在时间轴中创建另一个关键帧。按上述方法重新启动动画。切片应当先在4秒内从切片编号147移动到294,然后在接下来的8秒内减小到0。
注意:如上所述,你可以通过把鼠标光标悬停在关键帧图标上方、并在其用户界面变为可见后单击它(悬停对话框)来编辑单个关键帧的时间和数值。此外,你也可以通过在时间轴上拖动关键帧来修改它的时间。为了更改关联端口的数值,你可以把主时间滑块定位到该关键帧的时间上,然后在该模块的属性区域中使用用户界面调整该端口的值。为了在时间轴上把某个端口的所有关键帧向前或向后移动,请把鼠标光标定位在两个相邻关键帧之间。你会注意到一条深灰色的连接条,并且该序列的所有关键帧都被选中(由橙色的菱形指示)。
现在你可以通过拖动这条深灰色的条,把所有被选中的关键帧向前或向后移动。
9.1.3 在查看器窗口中激活模块
接下来,让我们在移动了Ortho Slice之后,为数据集中的内部结构添加一个可视化。在当前项目之外再加载数据集data/tutorials/chocolate-bar.surf。创建一个Surface View模块并把它附加到该曲面。单击黄色的Surface View模块以查看其用户界面。在Materials端口中选择Chocolate和All,并按下缓冲区端口中的Remove按钮。
图 9.7:移动相邻的关键帧。
这会显示该模型的内部曲面。
图 9.8:可视化Ortho Slice与Surface View工具时的查看器与网络。
如果你想手动开启和关闭曲面可视化,你会使用Surface View模块的查看器开关(橙色矩形)。如果你想把这个动作包含到你的动画序列中,你需要执行以下操作:
- 单击
Surface View模块以选中它。 - 把
Animation Director的主时间滑块调整到例如00:12。 - 单击
Surface View模块属性区域中最上方的秒表图标。 - 从下拉菜单中选择
Visibility in Viewer 0。
图 9.9:Surface View的秒表与开关按钮。
为了测试这个新添加的事件,请使用上述任一方法把Animation Director的主时间滑块设回开头。正如你可能已经注意到的,系统在时间00:00处自动添加了另一个事件,以便默认把该曲面模型视为不可见。像之前一样启动动画。切片来回移动。当主时间滑块到达00:12时,曲面模型被开启。
注意:你可以简单地通过在时间轴上拖动相应的关键帧菱形,来改变Surface View变为可见的时间。
9.1.4 使用相机旋转
为了从各个方向观察这个3D模型,让我们为演示序列添加一个相机旋转。
从Project / Create Object...菜单中选择Animations And Scripts / Camera Orbit。通过在Camera Orbit模块中播放时间滑块来试试这个旋转。如果你不喜欢这个旋转轴,把时间滑块重置为0,在查看器窗口中导航到一个良好的起始视角,然后单击Camera Orbit模块中的recompute。注意Camera Orbit时间滑块的取值范围是从0到360。
一旦你对这个相机旋转感到满意,就把它添加到时间轴中:
- 把主时间滑块设置到相机旋转应当开始的时间,例如00:10。
- 选择
Camera Orbit模块。 - 单击
Camera Orbit模块Time端口旁边的秒表按钮,并单击Time: Value。 - 把主时间滑块设置到相机旋转应当结束的时间,例如00:14。
- 把
Camera Orbit模块的Time端口调整到其最大值(360)。 - 再次单击
Time端口的秒表按钮。
现在播放该演示以查看结果。在移动了切片并开启曲面模型之后,视角会被旋转,从而可以从各个方向看到该曲面。
9.1.5 移除一个或多个事件
你可以通过把鼠标光标悬停在所期望的关键帧上方来移除事件。当该关键帧的用户界面变为可见时,你可以单击垃圾桶图标来移除该关键帧。
要移除与某个模块端口相关联的所有关键帧,你可以单击左侧面板中与该端口名称位于同一行的垃圾桶图标。
9.1.6 把内部曲面与外部曲面叠加
现在我们想要展示叠加在内部模型之上的外部曲面。
- 把第二个
Surface View模块附加到chocolate-bar.surf数据集。由于Exterior和All被选为默认材料,这会呈现出外部曲面。 - 单击第二个
Surface View模块。它应当被称为Surface View 2。 - 从
Draw Style端口中选择transparent。 - 在
Buffer端口内部,在Materials端口中选择Chocolate和All并单击Add。 - 为了能看到外部曲面下方的内部曲面,可以在
Animation Director部件中跳到时间步00:14或更晚。 - 使用
Surface View 2中的BaseTrans滑块调整透明度的程度(例如0.7)。 - 通过单击
Draw Style端口中的more options并选择Vertex normals来平滑外部曲面。
就像我们对内部曲面模型所做的那样,我们可以在动画序列中的某个时间点开启外部曲面模型:
- 把主时间滑块设置到我们的曲面应当变为可见的时间,例如00:14。
- 单击
Surface View 2模块属性区域中最上方的秒表图标。 - 从下拉菜单中选择
Visibility in Viewer 0。
同样,通过播放动画序列来查看结果。
9.1.7 使用裁剪逐渐加入外部曲面
与其只是在某一个时间点开启外部曲面,我们可以让它从上到下逐渐地出现在内部曲面之上。为此,我们使用Ortho Slice平面来裁剪外部模型,然后向下移动Ortho Slice平面。
- 把主时间滑块移动到你先前选定的、使
Surface View 2模块变为可见的那个时间(例如00:14)。 - 单击
Surface View 2模块。 - 单击
Surface View 2模块属性区域中最上方的秒表图标。
图 9.10:带一个Ortho Slice与两个Surface View的查看器与网络。
- 从下拉列表中选择
Clip using Ortho Slice。 - 把鼠标光标移动到时间轴中新创建的关键帧上方,并等待其用户界面变为可见。
- 在该关键帧的用户界面中,选择单选框
on以启用clipping using Ortho Slice。
为了让外部曲面变为可见,我们最后必须让Ortho Slice朝场景底部运动:
- 把主时间滑块设置到你为使
Surface View2可见而设定关键帧的位置,例如00:14。 - 在
Project View中选择Ortho Slice模块。 - 单击
Slice Number端口的小秒表图标,以在时间轴中设置一个新的关键帧。 - 把主时间滑块移动到你希望动画结束的时间,例如00:22。
- 把
Slice Number的值移动到294。 - 再次单击
Slice Number端口的小秒表图标。
图 9.11:选择Clip using Ortho Slice并在时间轴中启用裁剪。
从头开始或者从00:14开始启动动画,然后观看结果。
作为最后一步,你可能希望在外部曲面出现的同时再次旋转视角。你可以简单地在第二个时间范围内复用之前的相机旋转:
- 把主时间滑块设置到你开始让外部曲面可见的时间,例如00:14。
- 选择
Camera-Orbit模块。 - 单击
Time端口的秒表图标并选择Time: value。这会在时间轴中插入一个新的关键帧。 - 把主时间滑块移动到你希望相机旋转结束的时间,例如00:22。
- 把
Time端口的时间值设为0。 - 再次单击
Time端口的秒表图标并选择Time: value。
为了避免在显示切片294时Ortho Slice遮挡住曲面视图,你可以在动画期间更改它的Transparency模式。
- 把主时间滑块移动到你希望更改
Transparency值的时间,例如00:12。 - 把
Ortho Slice模块的Transparency端口设为Alpha,然后单击Transparency端口的秒表图标。这会在时间轴中插入一个新的关键帧。Transparency端口位于Ortho Slice的Display Options端口中。 - 把主时间滑块移动到00:00,然后把Ortho Slice的Transparency设为”None”(见图9.12)。
图 9.12:更改Ortho Slice的Transparency模式。
从头开始或者从00:14开始启动动画,然后观看结果。
9.1.8 关于裁剪的更多说明
裁剪有时会比我们示例中的情况稍微复杂一些,因为它可以以两种不同的朝向应用于一个平面。这意味着你既可以裁掉平面上方的一切,也可以裁掉平面下方的一切。遗憾的是,你处于这两种情况中的哪一种,并不总是显而易见。
不过,你可以在Animation Director中简单地反转裁剪朝向。在我们的示例中,你只需把主时间滑块设置到实际裁剪之前的某个时间。接下来,你需要更新执行裁剪的那个模块的动画——在我们的例子中即Ortho Slice模块。现在,单击Ortho Slice属性区域中最上方的秒表图标,并从下拉列表中选择Invert clipping orientation。
图 9.13:如何在Animation Director中简单地反转裁剪的朝向。
你并不一定要使用Ortho Slice模块来进行裁剪。正如你可能已经观察到的,Ortho Slice模块可能会遮挡住你想要展示的部分内容。在这种情况下,更好的做法是从Project / Create Object...菜单中选择Other / Clipping Plane来创建一个空的Clipping Plane模块。把该模块附加到你想要裁剪的数据集上(例如我们示例中的chocolate-bar.surf),然后就像之前使用Ortho Slice模块那样使用这个Clipping Plane进行裁剪。
9.1.9 断点与功能键
我们在本教程中创建的动画序列,会自动贯穿我们所定义的完整时间范围运行,默认为一分钟。有时可能希望把动画拆分为若干片段,使动画在指定的位置停止,并可以在你希望的时候继续。
为了实现这一点,你可以在Animation Director时间轴中插入断点(breaks)。让我们在内部模型出现之后立即插入这样一个断点:
- 把主时间滑块设置到
Surface View出现的时间,例如00:12。 - 在
Animation Director的左侧面板中单击+ Add special event按钮。 - 从下拉列表中选择
Add Break。时间轴顶部会创建一个新的关键帧,指示该Break。
图 9.14:在Animation Director中添加断点。
这样,动画就会在时间00:12处停止,那正是模型被开启的时刻。当你从头播放动画时,你会注意到在内部结构被开启之后,动画就停止了。
让我们在时间步00:14处插入第二个断点,那正好是外部曲面开始出现之前。按上述方法操作,只是把触发时间用00:14代替00:12。
如果你从最开始运行动画,它会在内部曲面被显示出来之后停止。单击Play Forward按钮或按F4键以继续动画。
按功能键F4试试看。演示会继续下去。
同样地,动画会在即将显示外部曲面之前停止。你同样可以按F4继续演示。总的来说,在动画运行的任何时刻,你都可以按F3键手动停止它。按F4则会从动画停止的位置继续。
如果你像上面那样定义了断点,还有两个额外的功能键在某种意义上允许你在动画片段之间导航:按F9会跳回上一个断点或动画的最开头,而按F10则会跳到下一个断点,或者动画的最末尾。
注意:如果你使用F9/F10,那么只会执行跳转。所以你需要按F4才能从新的时间步开始播放。
请注意,你可以通过勾选Animation Director模块More Options面板中的Skip Break开关来禁用这些断点。你甚至可以通过勾选Activate Function Keys端口中的No开关来禁用功能键的定义:
图 9.15:禁用断点与功能键。
9.1.10 循环与Goto
某些类型的动画可能还需要另一项功能,那就是循环的定义。如果你只是想让整个演示循环运行,你可以使用Animation Director模块的内置功能轻松做到:
你可以切换位于主VCR按钮(如Play)与主时间控件之间的相应按钮:Play Once、Play Loop或Play Swing:
现在如果你播放动画,它会从头播放到尾(Play Once),或者从头重新开始(Play Loop),或者正向播放、反向播放,如此往复(Play Swing)。
图 9.16:循环选项:Play Once、Play Loop或Play Swing。
不过,你可能想让演示的某一部分循环运行,然后在按键时停止循环并继续动画。你可以使用Animation Director模块的Goto功能轻松做到这一点:
- 在
Animation Director模块中把主时间控件调整到时间00:11:950。 - 单击
+ Add special event按钮。 - 从下拉列表中选择
Add Goto。时间轴顶部会创建一个新的关键帧。 - 把鼠标光标移动到这个新创建的关键帧图标正上方,该
Goto的用户界面就会出现。 - 在
Time To Jump To字段中输入你希望从此处跳转到的时间,在本例中为00:04:000。
图 9.17:Goto,跳转到用户指定的时间。
现在当你运行该动画序列时,它会在时间00:04与00:12之间的片段中循环,只显示Ortho Slice向上移动、向下跳回、再向上移动,如此往复……你可以通过单击Animation Director控制面板的停止按钮或按F3来停止这个循环。若要在循环之后继续,你需要按F10跳到下一个片段,然后按F4重新开始播放。
9.1.11 存储并重放动画序列
正如你现在可能已经注意到的,一旦你定义好一个动画序列,存储它是相当容易的:只需从菜单中选择File/Save Project来保存整个Avizo项目即可。Animation Director模块会随项目一起被保存,你所定义的动画序列也是如此。
当你把该项目重新加载到Avizo中时,项目的状态会与你保存时相同。这意味着,如果你希望演示从头开始,那么在保存项目之前,应当注意把Animation Director的主时间滑块重置为00:00。
加载项目之后,你可以通过单击Animation Director模块的播放按钮或按F4来启动演示。如果你想在项目加载后立即自动运行演示,你可以使用勾选More Options面板中Activate Auto Start时出现的自动启动功能。
图 9.18:启用自动启动模式。
只需勾选Yes单选按钮以激活Activate Auto Start功能,然后保存项目。当你再次加载它时,演示就会自动开始运行。
9.2 创建影片文件
在本教程中,你将学习如何使用Movie Maker模块,把一段自行创建的动画序列录制成影片文件。
在我们的第一个示例中,我们将仅使用一条相机路径来为场景制作动画;而在第二个示例中,我们将依托第9.1节中所创建的动画演示。
9.2.1 把Movie Maker附加到相机路径
如果你已经为自己的数据创建了一个可视化,并且想要制作一部从各个方向或从某些有趣视角展示该可视化的影片,你可以创建一条合适的相机路径,并通过让相机沿该路径运动来录制影片。
让我们创建一个简单的示例。从tutorial子目录加载chocolate-bar.am数据集,并为它附加一个Isosurface模块。选择等值面阈值410并按Apply按钮。
图 9.19:用Isosurface可视化chocolate-bar.am。
创建简单相机路径最容易的方法是使用Camera Orbit模块。从Project / Create Object...菜单中选择Animations And Scripts / Camera Orbit,并按下这个新创建模块的播放按钮。在时间滑块播放时,你可以在查看器中观看场景旋转。
要把一个动画场景录制到影片文件中,你需要把一个Movie Maker模块附加到某个拥有时间滑块端口的模块上。影片的录制方式是逐个遍历各个时间步,并沿途对查看器进行快照。
在我们的示例中,Camera Orbit模块有一个时间滑块,因此我们可以在Project View中右键单击Camera Orbit图标并从弹出菜单中选择Movie Maker,从而把一个Movie Maker模块附加到它上面。
图 9.20:把Movie Maker附加到Camera Orbit。
图 9.21:Movie Maker模块的参数。
在Movie Maker模块中,首先单击Filename端口中的Browse按钮,并输入一个影片文件名,例如C:/tmp/test.mpg。后缀.mpg表明影片文件格式将是MPEG,这是一种被广泛接受的数字影片格式,能达到良好的压缩比。
接下来,把Movie Maker模块的参数调整为你所喜欢的设置,例如更改帧数、图像尺寸或压缩质量。详情请参阅Movie Maker文档。
在我们的示例中,让我们选择180帧,并保持所有其他参数不变。由于Camera Orbit模块执行的是完整的360度旋转,这180帧中的每一帧都将代表相对于前一帧旋转两度。按下Apply按钮开始录制。
在Movie Maker模块驱动Camera Orbit模块并累积快照期间,请等待一段时间。请注意,录制过程中的速度与影片的播放速度是不同的。 现在用你选择的影片播放器(例如Windows Media Player或类似工具)观看所生成的影片文件test.mpg。请对录制参数进行试验,直到获得所期望的结果(例如,通过改变Compression quality值来控制文件大小和图像质量;尝试不同的图像尺寸,看看你的计算机能够流畅显示的影片到什么尺寸为止;以及改变帧数来控制旋转速度)。
9.2.2 由动画演示创建影片
为了录制一个更复杂动画场景的影片,我们加载在第9.1节(创建动画演示)中所创建的某个项目。
正如你可能记得的,Animation Director模块的基本思想是:你定义一组将在某条时间轴上执行的事件。通过单击Animation Director的play按钮来查看这一点。你应当能看到一段效果不错的动画演示。
要由一段用Animation Director定义的动画创建影片,只需单击Animation Director面板的Movie Creation按钮即可。随后会出现以下面板:
Animation Director模块在内部使用一个Movie Maker模块来创建影片。该模块已经被预先配置好,以便创建一部遵循Animation Director模块所定义动画设置(时长、帧率、文件名……)的影片。不过,如有需要,你也可以调整这些参数。只需单击Create Movie按钮即可生成影片。
图 9.22:Animation Director模块的影片创建参数。
