接下来的章节主要是通过几个例子来介绍3D-Equalizer的主要特征。这些例子的3D-Equalizer工程文件可以在projects目录下找到。
教程一:引导工程“ball_bluebox1”
运动匹配处理,我们可以从下文中总结出从2D图片序列帧内获取3D运动信息的方法。“Environments concept(环境概念)”部分介绍了3D-Equalizer的高效率用户界面。在“Creating a new project(创建新的工程)”和“Creating a new sequence(创建新的序列帧)”部分,我们介绍如何创建工程,包括序列帧的获取。“Creating a new pointgroup(创建新的点组)”和“Creating a new point(创建新的点)”描述了在追踪序列帧的时候如何添加点。“Tracking markers(追踪标志)”部分描述了追踪的不同方法。然后,在“Defining camera parameters(定义摄影机参数)”部分,摄影机几何信息和运动路径的重建。然后在“Editing dummy objects(编辑假定物体)”和“生成预览影片”部分,可以让我们进行预览操作。为了能够与你的动画软件相结合,我们可以将重建的点与重建的摄影机路径导出。不同的导出文件将在“Reference Manual(参考手册)”。这样,我们就完成了3D-Equalizer部分的基础学习。
开 始
l 双击启动3D-Equalizer。
l 输入licences,然后选择双击列表中的licences。

3D-Equalizer软件的licenses
主窗口
当Licence正确加载后,一个简单的,独立的窗口会在桌面的地步打开。这个窗口叫做主窗口。他主要包含了几个按钮,一个文本输入款以及一个指定当前帧的滑动器(V4版本直接会出现窗口)。还有包含几个菜单函数。3D-Equalizer的工作流程一般是从主窗口的菜单的函数开始。

主窗口
3D-Equalizer的预设
l 现在选择Main Window::Options::3DEqualizer Preferences。
打开3DEqualizer预设窗口。上面的文本输入框中包含了默认的不同文件的搜索路径,想3D-Equalizer工程,图片文件等等。左边的按钮打开一个标准的文件导航窗口来指定路径。
选项菜单General Units可以让你定义单位系统,用于给不同的3D-Equalizer文本输入框,为了表示距离或者位置的值。
注意事项:
为了能够获得流畅的工作流程,3D-Equalizer使用了几个OpenGL函数。OpenGL驱动质量跟其他的一些操作系统和显卡非常不一样,你可以试着通过设置“OpenGL Image Rendering”选项来提高3D-Equalizer的性能。其中“Regular”选项是个不错的选择。
l 根据自己的需要来修改3D-Equalizer的预设选项,点Close按钮可以保存并关闭设置。

3D-Equalizer预设窗口
环境概念
基于3D-Equalizer的主窗口,这里有几个其他的主窗口可以通过菜单Main Window::Windows里的函数打开。每一个窗口提供了一个特定的函数组,像图片操作,点操作或者显示统计信息。
l 请选择菜单Windows::Frames,Windows::Zoom,Windows::Overview以及Windows::Pointgroups
Frame窗口,Zoom窗口,Overview窗口以及Pointgroups窗口将会被打开。
l 整理下新打开的窗口,这样他们就不会重叠在一块了。
如你所见到的,打开并整理好这些窗口需要些时间。为了适应3D-Equalizer的工作流程,不同的窗口界面非常有必要额。3D-Equalizer有几个定义好的窗口界面可供选择。这些窗口界面被叫做“environments(环境)”。
l 选择Main Window::Environments::Motiontracking。
所有以前打开的窗口都将被关闭,然后另外一组窗口将被打开。你可以通过这种方式在不同的工作环境下快速切换。
注意事项:
为了充分利用环境特征,SGI/Linux系统下的“Auto Windows Placement(自动排列窗口)”可以使用。
l 切换不同的环境,找到合适的环境。
使用桌面排列工具,可以将一些你不想在3D-Equalizer的做的任务分离出来。
l 请按主窗口的图标按钮。
所有的3D-Equalizer窗口包括主窗口都被关闭,然后就是一个图标,表示整个程序被关闭了。
l 点击图标
如你所见,窗口又打开了(晕,这手册,太无语了)
创建新的自定义环境
l 在Environments菜单里请选择“Single Window”。
除了主菜单外,所有的菜单都被关闭。
l 选择菜单Main Window::Environments::Configure。
Configure Environments窗口会打开。使用这个函数,你可以创建、删除以及修改自己的环境。
l 点击Add按钮,创建一个新的环境。
一个新的的名称将会出现在列表的最底部。
l 点击主窗口菜单栏的Environments,就可以在里面看到刚才添加的自定义环境。
如你所看到的,一个新的,接下来我们继续修改它。

Configure Environment
l 请选择新创建的选项。然后在下面文本输入框内输入新的名称“Custom”。
l 现在打开Zoom窗口,Overview窗口和Pointgroups窗口。激活Main Window::Playback::Show Playback Controls选项,显示主窗口的回放控制窗口。整理窗口,保证他们不重叠在一起。
l 在Configure Environments窗口内点击Save按钮。
这样,当前的环境将会保存到选择的环境选项,包括主窗口的回放控制窗口。
l 关闭Configure Environments窗口(点击close按钮)。
l 从主窗口的Environments里选择环境“Motiontracking”。然后选择新的环境“Custom”。
如你所看到的,3D-Equalizer的用户界面非常简单快捷。所有窗口的位置,包括主窗口,都被存放在environments内。
注意事项:
在这个课程内,我们将会使用3D-Equalizer自带的默认环境进行作业。如果你修改了这些默认环境,你可以将他们回复到初始状态。选择Main Window::Environments::Reset To Defaults。注意,使用这个命令将会删除掉自定义的环境。
创建新的工程
现在我们可以开始做作业了。在下面,我们将追踪129帧序列帧,在3D空间内重建摄影机的运动路径。
l 请选择Main Window::Projects::New
3D-Equalizer的数据库被重置。所有对象被删除,用户界面回复到默认值。
l 在Environment菜单内选择“Motiontracking”环境
Motiontracking环境比较适合作业的开始。因为基本上所有的标准窗口都被打开了。
创建新的序列
3D-Equalizer可以在一个序列里控制多个序列帧。我们将在最后一个教程内彻底的讨论这点。现在我们先创建一个序列帧。
l 请点击Frames窗口的左下角的Add按钮。
然后会出现一个窗口问你是创建一个序列还是参考帧
l 点击“Add Sequence”按钮。
另外一个窗口会打开,可以让你定义新的序列帧的所有的设置选项。

Create Sequence
l 点击Sequence Settings::Browse
一个标准的文件导航窗口被打开。
l 选择序列所在的路径。
3D-Equalizer将会自动的扫描路径,符合序列要求的自动归类为一组序列帧。最终标识符,样式,起始和结束文本输入款内根据序列名称自动填写。图片的分辨率将会出现在Res的文本输入框内。
注意事项:
如果Res输入框还是显示“”,请检查图片文件的权限,如果需要, 可以在Unix的shell命令行里通过chmod赋予权限。
“Identifier”文本输入框内是图片文件的基本名称。这个输入框内的内容被用于标识3D-Equalizer内创建的序列物体。另外,它也被用于标识在输入处理过程中的3D摄影机对象。你可以在任何时候修改序列的名称。
这个课程序列帧是25帧每秒的。
l 在Rate Fps输入框内输入25。
每一个交织的帧都包含两个所谓的场,交替时间大概是1/50秒。这里有两个选项:Interlace-Even First(偶数优先)和Interlace-Odd First(奇数优先)。你可以在这里指定场的类型。(V4版本这里好像有bug,大家可以试试,我这里图片显示不对。只有在全范围显示的时候才是对的,如果缩放,图片就不对)
l 教程里面的序列请选择Interlace-Odd First。
l 然后按OK按钮。
关闭窗口后,我们就可以在Frames Window窗口内看到序列对象了。我们的新序列将会自动变成当前的对象,因此在Frames Window窗口里以高亮显示。而且,第一帧被加载,然后显示在Overview Window以及Zoom Window内。帧的名称显示在Overview Window显示区域的图片下的右边。
为了修改序列的属性,点击Frame Window的Modify按钮或者简单的双击列表内的条目。

Frames Window
随笔:这里是V3版本的,现在的V4版里,修改了很多,大伙可能找不到这个窗口(或者去掉了),不过我们可以直接在对象导航器(Objects Browser),类似这个,不过包含的信息更多,直接在这里双击Cameras里面的条目。
序列帧导航
这里的导航是指播放功能,比如步进播放,播放,倒放,等等。
l 点击Main窗口的+1按钮,在主窗口的文本输入框内输入帧号码,拖动序列帧滑块,点击End/Begin按钮,查看各个按钮的功能。
l 鼠标移动到Zoom窗口内,按键盘向左向右键,查看功能。
如你所看到的,你可以步进式的播放序列帧。这个功能在追踪的时候非常有用。
l 激活选项Main Window::Options::Frame Keyboard Grid::10 Frames,这样,我们在按向左向右键时,看下效果。(4里面没找到这个选项在哪。。)
现在你可以以10帧的速度步进了。这个主要用于很长的序列。不过我们下面不需要这个,所以关闭这个选项
l 勾选Main Window::Options::Frame Keyboard Grid::Off
缓存的建立
对应每一个3D-Equalizer工程文件有两个影像档案。这两个档案包含了影片缓存以及工程序列的预览影片以及参考帧。预览影片的目的等会在后面将,现在我们先来讲解下影片缓存。
一般来讲,影片缓存主要用于加速3D-Equalizer的工作速度。它们可以帮我们创建预览影片以及提高帧的导航速度,特别是那种高分辨率的图片序列。为了使它更加清晰,并不需要使用这个功能(用了速度很快),但是它可以使你的工作更加简单。如果想要启用这个功能,首先,你必须保存工程文件。
l 选择Main Windows::Projects::Save As。一个弹出的对话框内输入工程文件名然后点击OK。
l 选择Main Window::Playback::Create Cache Movie。在弹出的对话框内点击Create only Current Cache Movie按钮。
3D-Equalizer就开始创建缓存ball_bluebox1。
随笔:4版本的有些不一样,不过也差不多,大家可以根据官网的视频来对照。
使用影片缓存
l 打开Preview环境
这个环境比较方便播放预览以及影片缓存。
l 勾选Overview Window::View::Display::Cache Movie
Overview窗口会显示缓存的目录
l 选择Main Window::Playback::Output::All Windows,然后按Play按钮进行播放。
3D-Equalizer开始播放。相对于预览影片,缓存影片是在OverviewWindow里播放的。Main窗口的主题栏显示了一些播放的速率的信息。
随笔:4版本的缓存创建选择Playback::Export Buffer Compression File…,参考官方视频
l 按Stop按钮,停止播放,然后选择Motiontracking环境。
l 前后拖动帧滑块查看效果。
如果你的机子有足够的内存,整个图片(129帧)将会在创建影片缓存的时候加载到内存中。这种情况下,你可以直接拖动帧滑块在Zoom和Overview窗口内查看图片。不过如果你没有足够的内存,在按住帧滑块拖动时,有些图片会以黑色显示,不过你放开滑块,图片就会被夹在进来。特别是,如果图片是高分辨率的序列帧,一次只要少量的帧数被保存在内存里。这种情况下,影片缓存可以帮你检查序列帧。
l 激活Overview Window::View::Show Cache while Dragging选项,并且拖动帧滑块。
在我们拖动滑块的时候,Overview窗口会显示影片缓存的内容,在你放开鼠标的时候,Overview窗口就又回复到正常的显示模式。
l 激活Overview Window::View::Display::Cache Movie
这样Overview窗口将会一直显示影片缓存的内容了。
注意事项:
你可以强制要求3D-Equalizer来加载图片到内存中,选择Main Window::Playback::Fill Imagebuffers。如果图片的分辨率是video而且你有足够的内存支持,这个功能会加速追踪的处理。
创建新的点组
到现在,我们介绍了简单的准备工作。在下一部分我们将会一步一步的讲解3D空间内摄影机的运动。
基本的步骤一般是相同的。被追踪的特征点就是所谓的点对象。每一个点对应于一个确定的特征点。这些部分可以是窗口的边缘,人的鼻子以及Marker等。下面是重建摄影机运动或者一个对象的规则:
1. 所有的特征点,被点追踪,然后用于重建,特征点之间需要严格的界限,不能干预其他点
2. 在每一帧,至少得有4个点。
3. 最少得有6个点
4. 至少有两帧有必须有6个点,用于关键帧。
你可以手动的定义2个关键帧,或者让3D-Equalizer自动选择他们。为了保证能够成功的获得重建过程,两个关键帧必须从视图的不同的点中显示组或者对象!。最简单的例子,在剩余的帧里有四个普通的点,这4个点同样出现在关键帧内。在实际情况下,4个点还是不够的。事实上,在整个序列帧中进出当前帧时这些点包含了非常复杂的状态。在过去,我们有碰到需要投射100个点的情况。这种情况下,突出的16个追踪点被叫做参考帧。在这个教程的例子里,我们将会创建并追踪6个点,然后让3D-Equalizer自动选择关键帧。
3D-Equalizer的另外一个重要的特征就是重建物体和摄影机在三维力的运动。将我们的ball_bluebox1作为例子,它可以在同一个工程作业里单独的定义球的运动和摄影机的运动,并将他们导出给其他3维软件。我们将在Multiple pointgroup。现在我们先讲下摄影机的运动。
为了将每个三维运动都重建出来,我们需要点组对象,对应于每一个摄影机或者每个物体。每个点组都有其自己的点群用于重建过程。这个已经在上面提到过,点组的点追踪特征点,特征点本身跟其他的特征点有着严格的界限。

Overivew Window显示一个影片缓存
让我们来查看下教程的序列帧。
l 先选择Motiontracking环境,然后激活Overview Window::View::Show Cache while Dragging选项。
l 将帧滑块前后拖动,查看序列帧。
摄影机看起来在一个小车上然后从左边移动到右边,拍摄一个蓝色的摄影棚以及在摄影棚地板上从右边滚到左边的一个蓝色的漂亮的画了一些白色的Marker的小球。在摄影棚的地板和蓝幕上也做了一些marker。我们将会追踪6个这样的marker,四个在地板上,两个在墙上,为了求出摄影机相对于摄影棚的相对运动,首先,我们需要创建一个点组对象。
l 选择菜单Pointgroups Window::Pointgroup::Add Pointgroup

创建点组
打开创建点组的对话框,其中最重要的点组的属性是Pointgroup Type参数。这里有camera pointgroups和object pointgroups选项。camera pointgroup的点用于重建摄影机的运动,而object pointgroup的点用于重建物体的运动,就像素材里的蓝色的球。
l 设置点组类型为Camera Group,修改pointgroup的标识符为studio,点击OK。
我们可以在Pointgroups窗口内看到我们修改后的结果。
随笔:可以在对象导航器里面看到效果。
创建新的点
l 在Pointgroups窗口内点击Add,对应点组studio创建新的点。
点了Add按钮后,会弹出创建点的对话框。在标识符的文本输入框内输入点的名称。我们可以给点A,B,C或者1,2,3这样的名称。你也可以使用更复杂的名称比如near_to_hair,eyebrow,near_to_nose等。请不要使用空格键。使用复杂而富有含义的长的名称在复杂的工程作业里比较容易被识别。3D-Equalizer将会自动提供独特的01,因此你不必要去修改它。
在标识符输入框的下方,你可以看到Color选项。这个可以定义点在屏幕上的颜色。你应该根据镜头中的内容调节颜色是的两者之间达到最大的对比。在我们这个例子中,选择红色比较合适,如果你喜欢绿色,可以将颜色调成绿色。
3D-Equalizer主要突出3种不同的追踪模式。Pattern追踪模式是一种标准的追踪模式,你可以追踪镜头里所有能够追踪的特征点。Marker追踪模式只能追踪marker。追后的Edge/Corner追踪模式主要用于追踪转角,然后在扩展到直边。3DE的不同的追踪模式将在后面详细讲解。
随笔:可以直接在对象导航器内直接右击点,modify里面直接修改即可,具体看官方视频。
l 将追踪模式设置为Marker
这样创建的点将启用Marker追踪模式。
l 点击OK。

创建点
点被建好后,在Pointgroups列表内可以看到新加了一条条目。如果你再次想要修改点的属性,选择窗口内的条目,然后点击Modify或者双击,在出现的窗口里修改即可。
追踪Marker
下一个任务就是追踪镜头里的6个Marker,从而获得每个点的2维追踪曲线。将视图拉近(放大),方便我们放置追踪点。

Zoom窗口
在你开始追踪点01的2D曲线前,先熟悉下窗口的功能。
l 请按中间来移动视图,俺右键来缩放视图。
现在我们开始追踪点01,。然后,我们接下来再追踪剩下的5个Marker。如下图所示:

6个被追踪的Marker
l 先切换到第一帧。
l 缩放并移动视图,将需要放置点的Marker移动并放大到视图中间。
l 确保点01在Pointgroups Window里面被选中,并在Marker的中间点击左键
OK,定义好了第一个点。两个长方形将会出现在点的周围:中间是一个实线长方形,用于定义搜索图案,外面是一个虚线长方形,用于定义搜索区域。
l 按住Ctrl然后在然后拖动窗口边缘。
可以看到边缘会对称的进行缩放(由于现在网上放出的版本是v4beta版,可能有些功能上被阉割了,这个功能我按ctrl没用)
l 现在请调节搜索图案的范围(实线区域)。保留至少两个像素点在Marker与实线边缘,然后在根据Marker的运动幅度来调节搜索区域,一般来说是搜索图案的两倍大小。

调节追踪区域
l 按快捷键center marker按钮数次(v4是gouge Marker)。
3D-Equalizer将会解析搜索区域的内容,然后寻找marker的中心,然后将点放置到该位置。只要Center M按钮被按着,一条白线将会出现在marker附近,用于清晰的标明3DE可以从环境中辨别出marker。
这个函数对于判断一个marker是否能够被软件清晰的识别非常有用。有几个原因会导致3D-Equalizer在markertracking模式下可能找不到marker的中心。我们将会在Tracking point on the screen教程里详细讨论。不过最大的问题一般是在调节追踪区域上,例如搜索图案太小以至于marker不能匹配上去,如下图所示:

现在我们确保3D-Equalizer能够找到marker的中心,我们可以继续追踪。
l 按Track按钮的右方向键(不是键盘上的那个),进行步进追踪。
下一帧(第二帧)将会加载到内存里,然后追踪点的中心将会放置到该帧的marker中心位置,点的2D运动曲线将会相应的更新。
l 继续按右方向键几次。
这种是手动的步进追踪,一般用于在3D-Equalizer追踪出问题的时候用。
l 按Track按钮,开始自动追踪。
按了后,Track按钮就会变成Stop按钮,3D-Equalizer开始自动一帧一帧的追踪marker。当追踪程序还在处理过程中时,Zoom窗口的导航控制选项一直激活着。
l 为了能够让视图以追踪点为中心,我们可以点击cneter 2D按钮。(v4版本里的,手册里写的是不断按中键和右键来手动移动缩放。)
大概到了64帧,marker被球挡住,不能够被追踪。
l 按Stop按钮停止追踪。
按钮重新变回Track,追踪进程停止。
l 拖动帧到63帧,在这帧里,marker是被遮挡住前能看到最完整的最后一帧。
l 激活Zoom Window::View::Show MotionCurve选项。
一条红色的线将显示在Zoom Window区域,即点的追踪路径曲线。
l 按End Point按钮,然后查看2D运动曲线在Zoom Window里的效果,以及Timeline Window上的变化。
点了该按钮后,我们可以看到2D运动曲线将会被裁剪到当前帧为止(在此处会添加一帧关键帧)。在此关键帧之后的所有运动曲线都将无效,除非我们在后面再添加一个起始点(也会添加一个关键帧,这个添加的点还是原来的点,并非创建新的点)。有效的追踪曲线将以实线显示,无效的部分将以虚线显示。如果我们再次在End point帧处点击End Point,那当前帧会变为起始帧,然后2D曲线又开始有效。
Timeline窗口将2D运动曲线以图解的形式显示出来。有效的运动曲线部分被显示成灰色长方形,无效部分显示为虚线。
l 拖动帧滑块来查看影片缓存,知道marker重新出现。
看到marker又重新出现了,我们就可以继续追踪该点。
l 将帧滑块移动到能够重新的看到marker的帧处,然后点左键,重新定义了一个起始点(关键帧)。
2D运动曲线重新起效,可以从当前帧继续追踪。

Timeline窗口内显示的运动曲线长方形图解
l 按Center M数次,确保3D-Equalizer能够清晰的识别marker的中心。
l 重新点击Track按钮。
l 激活Zoom Window::Options::Auto Center(V4版本在右下角的一个按钮,上面提到过)。
当前点的追踪曲线的位置将自动被居中,这样可以一目了然的查看追踪的图案的准确性。
l 然后我们继续在地板上放置点02,03,04.如下图:

4个追踪点
在你完成剩下的4个点的追踪后,我们可以在Timeline窗口看到当前所有的点的运动曲线的直方图。在一些真里面,4个点都存在,但是有些帧里面只有2个或者3个追踪点有效。如果某些帧内,追踪点数不够计算运动路径,则会以红色显示。如下图:

4个点的运动曲线
l 现在在墙上添加两个追踪点05,06.如下图所示:

05,06追踪点
在你完成追踪后,每一帧都包含了至少4条有效的2D的运动曲线,并且Timeline窗口内没有显示任何红色的帧。这样,运动追踪步骤已经完成,我们现在可以开始从2D运动曲线里重建3维运动信息的步骤了。
有效视图区域的调节
关于计算3D运动轨迹步骤的要求,我们是可以指定的,如何将图像从现实中映射并将其数字化为图片文件。这就意味着我们必须指定胶卷的位置,如果有条件的话,也可以记录图片里的映射轴的中心。
l 请切换到Motiontracking#3环境,然后移到80帧。
l 然后在Zoom Window里全屏显示。
如你所见,教程里的序列帧在左边和右边有黑色的边,这些边并不属于图片本身。同样,黑色区域也可能会出现在图片的上下边缘。去除黑色部分的图片区域叫做有效视图区域。有效视图区域的边界用虚线来表示。有效视图区域的中心为一虚线组成的十字符号。这个十字符号表示用于3D-Equalizer重建步骤的相机模型映射轴的中心。
现在,你需要将白色的线竟可能精确的偏移到有效视图区域。

调节有效视图区域边界
l 按住Ctrl+左键拖动上面的有效视图区域边界。
如你所见,你可以将边界线上下拖动。
l 调整4调FOV线。
定义摄影机参数
我们已经完成了二维追踪任务,现在我们开始重建摄影机在三维里的运动轨迹。这里,我们需要指定下记录该镜头的摄影机的一些属性。例如:焦距,镜头畸变等等。如果我们知道了所有的摄影机参数,我们可以简单的在Camera Adjustment窗口的文本输入框内输入,然后用3D-Equalizer计算出摄影机在三维空间内的运动轨迹。不过一般情况下,摄影机的一些参数经常会丢失或者因为其他原因而不全。3D-Equalizer可以帮你计算这些丢失的信息。

摄影机调整窗口
l 在Main Window环境菜单里打开Camera Adjustment Window。
Camera Adjustment Window可以允许你创建删除摄影机对象。一个摄影机包括上面提及的摄影机参数,比如焦距,镜头畸变等。
Camera Adjustmen Window里面没有类似摄影机在三维空间中的位置以及旋转等信息输入框。这些信息只针对序列帧,参考帧以及点组。每一个序列或者参考帧必须对应一个摄影机,通过它们来定义摄影机的参数(非直接定义)。
现在,让我们来熟悉下Camera Adjustment Window的界面,然后来试着给我们的序列帧连接一个新的摄影机。
l 点击左下角的Add按钮。
你可以创建一个新的摄影机:camera #2。我们可以在上面的列表内看到我们新创建的摄像,很明显,这个列表时用于包含当前工程作业中所有可用的摄影机。当前选中的摄影机的属性将会在下面的文本输入框内显示出来。
l 选择default camera然后按Delete。
我们删除了default camera。我们可以看到列表内已经没有了该摄影机的条目,所有的输入框也都被清除。
l 选择摄影机camera #2。
Camera Adjustment Window的文本输入框显示了camera #2的属性,现在我们将序列帧连接到摄影机上。
l 确保序列被选中状态,按Frame Window::Modify。
然出修改窗口。
l 点击Camera::Browse。
另一个对话框被打开,显示当前工程里所有可用的摄影机。
l 在列表里选择camera #2,然后点击OK。
现在,camera #2已经连接到序列帧上了。我们可以在Camera::Browse button的右边的文本输入框指定的序列帧路径。
l 然后点击OK。
注意事项:
在一个工程作业里竟可能的使用少量的摄影机。如果不同的镜头使用同一个摄影机拍摄的,使用同样的焦距,你可以创建一个摄影机,然后将所有的帧连接到摄影机上。3D-Equalizer非常有效的从同一个摄影机获取信息。
现在让我们来更加详细的查看下摄影机的属性。每一个摄影机由14个不同的摄影机参数。它有时候很难被理解,特别是对于运动匹配领域的新用户。因此Camera Adjustment Window隐藏了所有摄影机高级参数,这些高级参数并不是必须的。
l 请点击Advanced View按钮。
3D-Equalizer现在显示了所有可编辑的摄影机参数。可以看到几个文本输入框内预定的几个摄影机参数。下面一些输入框的参数可以对设定的参数进行假定选择:Fixed,Fine Adjust,Unknown以及。镜头畸变可以选择Fixed,Fine Adjust和Unknown。
在Fov Size(有效视图区域)文本输入框内,你在上一部分调节的那四根白线,可以在这里输入数值(v4我没找到调节FOV的参数,估计得写python调节)。在这个教程里,我们给的序列帧是一个交织的视频序列帧(带场)。请保持FOV高度为整个帧的高度,不是帧的一半。
这个窗口的作用在后面的Selected Topics章的Camera adjustment部分进行讨论。
在好则个教程里,我们只介绍一些重要的函数。一般对这个窗口内的参数只是做如下修改原则:一个摄影机,根据我们刚才所学的,是由四个参数决定的。这些参数以粉红色显示。所有的其他参数(灰色)都以数学化的方式依赖于这几个粉红色的参数。你可以选择性的决定哪个参数被3D-Equalizer用于确定摄影机。当你在这几个选项之间切换时,你可以看到,只有一些设置选项可以使用。因为3D-Equalizer要确保摄影机参数是一直的。你不能设置选项为dependent,以为内3D-Equalizer在计算时,需要这个参数。
如果参数不知道,可以将其设置为Unknown。在这种情况下,你不需要在相应的输入框内输入数值,即告诉3D-Equalizer你不知道这个数值是多少。当你知道参数的大概数值时,将选项设置为Fine Adjust并输入数值。如果你确定知道参数数值,将其设置为Fixed并输入数值。
在大部分情况下,你并不需要填写这些高级选项,因此,让他们隐藏着吧。
l 按Simple View按钮,隐藏高级设置。
原则上,这里只有两个参数必须定义。第一个,我们需要设置图片或者序列帧的像素比。这个值主要依赖于拍摄的硬件。这里有一个列表,一般情况下所用的分辨率以及像素比:
Video, PAL 720×576 1.06667
Video, PAL 768×576 1.0
Video, NTSC 720×486 0.9
Film, scanned any 1.0
一般的像素比
在我们的例子里,图片尺寸是720*576的分辨率,交织视频,PAL系统。使用SGI O2的工作站进行数字化处理。不幸的是,数据单里显示的像素比并不是标准的720*576的值,而是1.0926.
l 设置Pixel Aspect field为Fixed,在输入框内输入1.0926值。
下面,让我们来看下镜头畸变参数。真实的摄影机镜头组有时候会将图片非线性畸变。这就意味着,图片沿着边缘弯掉了。
l 激活Overview Window::View::Show Distortion Grid
我们可以看到红色的网格显示在当前帧上。它表现了当前帧所连接的摄影机的镜头畸变效果。
l 在Lens Distortion的文本输入框内输入几个不同的值,范围在-0.05-0.2之间,然后查看畸变网格。
值0.0没有产生任何畸变效果。值小于0.0会产生枕型效果,值大于0.0会产生桶型效果。一般video摄影机的畸变在0.02-0.08之间。好的电影摄影机的镜头组经常看不出一点畸变。因此这种摄影机拍出来的畸变值可以设置为0.

畸变网格
一个video摄影机可以用于拍摄序列帧。这些摄影机将会造成较小的畸变。
l 输入0.05的畸变值,选择Fixed。
最后,我们还要定义下摄影机镜头的类型。在原理上,3D-Equalizer有两种不同的方式。你可以指定焦距,摄影机水平或者垂直视角。
一般情况下,摄影机镜头的焦距是可用的。但是不幸的是这个参数非常依赖底片的尺寸。例如10mm焦距的video摄影机与10mm焦距35mm底片的摄影机拍摄的效果完全不同,因为video摄影机的CCD芯片(等同于底片)比35mm摄影机的底片要小很多。
如果知道了摄影机的底片以及焦距,我们可以计算出摄影机的镜头。不过,这里又出现一个问题。图片在数字化处理的过程中,经常被裁剪掉一部分。也就是说,数字化图片只能够表示实际底片尺寸的一部分。在这种情况下,指定的焦距就必须稍微的修改下来配合被裁剪过的底片尺寸。
通过摄影机的水平和垂直镜头视角来主观的定义摄影机镜头。这些参数并不依赖于摄影机底片尺寸。例如,video或者电影摄影机的45.0°水平镜头视角将会产生同样的效果。一个大于50.0°的镜头视角表示广角镜头,小于30°的镜头表示长焦镜头(狭角镜头)。



长焦镜头(狭角镜头) 常规角度镜头 广角镜头
遗憾的是摄影机角度并不是可用的,而当我们裁剪了图片后,会造成摄影机角度被改变的问题(相对来说)。
因此,用3D-Equalizer来帮你确定摄影机镜头是非常有用的。在我们的例子里,我们没有任何关于摄影机镜头的信息。这个图片素材是由一个常规的镜头拍摄的。
l 将horizontal angle输入框旁边的菜单选项设置为Unknown。检查Pixel Aspect textfield文本框,如果需要将选项设置为Fixed,输入1.0926数值。
现在静茹摄影机调整步骤。
l 按Adjust按钮,开始调整处理。
屏幕中,出现几个信息,表示当期的计算进程。3D-Equalizer将会试着计算那些标明为Unknown状态的参数,然后再优化标明为Fine Adjust的参数。你可以点击处理进程窗口的Cancel按钮来停止每一级的计算。参数会使用当时最好的结果作为值。

状态窗口
3D-Equalizer完成了调整处理,计算出了一个水平视角值为44.88°。
现在请看下Status Window。你可以看到一条绿线,表示每一帧重建摄影机路径的质量。它表示2D运动追踪点与3D重建后的点之间的像素偏差。中间有一条以AV命名的虚线以及一个数字。这个数字表示序列帧的平均偏差。在0.35以下,就说明结果非常不错。
我们可以在教程目录下的/projects/里找到ball_bluebox1.3de工程文件,包含了所有上面的步骤,如果不清楚的可以直接在里面找到工程文件作为参考。
使用Status Window进行错误分析
在下面部分,我们将介绍如何通过Status Window来解析追踪错误。
l 请打开ball_bluebox2.3de工程文件。你可以在教程目录的/projects/下面找到。
简单来说,这个工程类似于上面部分所讲的那个文件。有序列帧ball_bluebox1以及一个摄影机点组studio,其中包含了6个点。不过它包含的追踪信息相对上个工程文件来说不是很精确。
l 从Main Window的Environments菜单里面选择Camera Adjustment,然后我们来看下Camera Adjustment窗口。
如你所看到的,摄影机已经定义的非常好。水平镜头视角为46.6,像素比为1.0926以及畸变设置为0.06.因此,我们不需要调整摄影机参数,我们只需要从2D追踪信息计算3D摄影机运动路径这里查看。
l 选择Main Window::Calc::Calc All Objects from Scratch
3D-Equalizer开始一般的计算处理。在计算完毕后,我们来看下Status window。这里有一条波峰非常高的曲线段。这条曲线的平均偏差值为0.467,几乎是上面部分所提到的两倍。

状态窗口
l 从Environment菜单里选择Orientation。
一些窗口被打开了。在中间部分是Orientation Window。这个窗口时显示所有的3D物体,包括摄影机,点,运动路径等。这个窗口的主要目的是让你将3D信息重建到全局坐标里,并编辑单独的3D模型对象。模型对象可以被渲染成mov形式保存。现在让我们来看下重建3D摄影机运动路径。
l 激活Orientation Window::View::Show Camera Path
一条红色的线显示在摄影机的模型后面,表示当前帧的3D摄影机运动路径。它看起来像条曲线,只是在中间部分看起来有点波动幅度很大。

摄影机的运动路径
这种波动主要是因为追踪错误,我们可以用以下方法进行去除。(以下操作v4版与v3版相差很大,大家可以自己试试)
l 在environment菜单内打开Status environment。
这样,我们就可以方便的操作Status Window了。
l 按住中键,然后拖动鼠标。
这样可以移动视图。
l 按住右键,然后拖动鼠标。
如你所看到的,鼠标变成缩放样式,我们可以缩放status Window视图。
l 选择Status Window::View::Reset View。
视图自动匹配Status Window窗口。(缩放整个视图)
l 按住Ctrl然后右键在视图区域的中间拖动。
这样自动将选择的区域匹配status Window窗口。(放大显示选中的区域)
l 按住Ctrl然后按住左键拖动。
我们可以选择点的追踪序列,并以橘黄色显示。
l 选择Status Window::View::Reset View,按住Ctrl然后在波动的曲线帧的中间位置点击鼠标左键(大约在70帧处)。
现在当前帧应该在70帧左右。偏差曲线的波动说明,在当前这些帧里,有一个或者几个点没有追踪准确。我们现在需要试着找到这些帧,然后矫正他们的追踪错误。

错误的追踪点
l 激活Zoom Window::Options::Auto Center and zoom closer into the image。
l 将鼠标移动到Zoom Window里,然后按键盘上下方向键。检查每个点在当前帧的位置。
在你每次点击上下方向键时,在点组里的上一个点或者下一个点将被选中,并且自动在Zoom Window的视图里居中。检查后发现除了02点的位置不对外,其他所有的点的位置看起来都可以。
l 移动鼠标到Zoom Window里面,然后按键盘左右方向键,检查追踪位置是否有问题。
如你所看到的,在58-76帧之间,追踪点02由于蓝球的接近,在marker附近产生影子,导致追踪marker出问题。从直观上来判断,我们可以认为追踪区域过大。
l 移到57帧,减小追踪图案区域(中间的实线长方形),保证蓝色球的阴影没有覆盖到追踪图案区域。然后按Center M。确保追踪点能够非常清晰的分辨出Marker中心。
l 然后再次按左右方向键。
这样我们可以发现追踪变的准确很多。我们仔细看下,可以发现追踪区域随着帧数的变化产生变化(对追踪区域K了关键帧)。我们在57帧修改追踪图案,等于在57帧处添加了一个关键帧。下一帧的追踪图案会看起来大好多,因此下一帧的追踪图案会比其他帧要大好多。为了解决这个问题,让我们来减小下一帧的追踪图案区域。
l 点击Key+按钮。
切换到02追踪曲线的下一个关键帧,在77帧
l 修改77帧的追踪图案,接近57帧大小。
l 点击Track按钮。
追踪开始。3D-Equalizer确认需要被追踪的帧数部分。需要追踪的帧数会以亮灰色显示。
l 02被追踪,并确保追踪的准确。
l 在追踪处理完成后,查看下状态窗口。
如你所看到的,绿色的偏差曲线在70帧左右始终还是有大的波动,偏差平均值还是0.467像素。这里,我们需要手动更新偏差曲线。
l 按Status Window里的Update。
偏差曲线被更新。波动部分就没有了,偏差平均值保持在0.25左右。
l 打开Orientation环境,然后查看下3D摄影机的运动路径。
如你所见,摄影机运动路径里还是有一个比较明显的波动。这里我们也需要更新下摄影机的运动轨迹。选择Main Window::Calc::Calc All Objects From Scrach。这个函数会需要花点时间来计算,因为它是从新计算所有的东西。我们可以通过值计算选择的点组来对摄影机路径进行更新。
l 选择Main Window::Calc::Finetune Selected Pointgroup。
这样,摄影机的路径将被更新,而波动也将随之而去。
注意事项:
函数更新偏差曲线和三维运动轨迹非常有用,特别是在有多个帧和点的工程作业里。不过它需要至少得需要你稍微修改下曲线后才能使用。如果这个函数失败了,可以尝试另外一个函数:Calc All Objects From Scrach来替代。
将整个重建的3D信息应用于全局坐标系内
在完成重建摄影机路径后,下一步骤就是将结果应用于全局坐标系内。在理论上,如果你对三维内摄影机的运动路径并不是很精确的话,你可以不执行这个步骤。
首先,先让我们来了解下3D Object Browser Window。它主要是用于选择对象。

3D Object Browser Window
l 在Scene条目上点击左键,展开查看整个场景的对象。
场景条目被选中,坐标空间将Scene在Orientation里标志成红绿蓝,表示场景被选中。
这个3D对象被称作scene node(场景节点)。它表示一个一个包含了其他3D物体组的坐标空间。将3D信息应用于全局坐标系就是指移动场景节点(移动选装整个场景)。
l 现在,让我们来仔细的看下Orientation Window的操作

Orientation Window
l 按住Alt+左键。
旋转视图。
l 点击Top,Side和Front按钮来查看不同的视图。
3D对象分别以顶视图,左视图和前视图显示。
l 按住Alt+中键。
平移视图。
l 按住Alt+右键。如果弹出一个菜单,就按Shift+Alt来替代。
鼠标光标变成一个玩具小车符号。拖动鼠标,我们可以缩放视图。
l 拖动Orientation Window左边的竖直滑块。
也可以实现缩放功能。
l 选择3D Object Browser Window里面的scene节点。激活左边的scale按钮,按住左键拖动。
随着鼠标左右拖动,整个场景节点随之缩放(包括其中的所有对象)。
l 激活左边的rotate按钮,按住左键。
整个场景包括所有对象都绕着本地的X轴方向旋转。
l 在Orientation Window里点击中间或者右键。
整个场景节点绕着本地的Y轴或者Z轴旋转。
l 按住Shift+左键。
整个场景节点以全局坐标系的X轴为方向进行旋转。
l 尝试以不同的方式旋转整个场景。
使用鼠标函数,你可以修改Orientation Window里面的每一个3D对象。另外,这里还有一种方法来定义3D对象的属性。
l 双击3D Object Browser里的scene节点条目,或者单击它的Modify(修改)按钮。

修改场景节点
对话框内包含了几个文本输入框,你可以直接在里里面输入场景节点的位置,旋转以及缩放值。这个对话框并不泛妨碍我们操作3D-Equalizer,所以我们可以让它开着,需要的时候修改它就行。
l 尝试修改其中里面的一些值。
l 选择Orientation Window::Orientation::Reset。
如你所看到的,场景节点的属性被重置为他们刚生成的状态。现在让我们继续在全局坐标系里来调节重建的3D信息。首先,我们来指调节下缩放。
l 在Pointgroups Window里面双击摄影机点组条目studio。
Modify Pointgroup对话框打开。这个窗口有点类似创建点组的对话框。在拍摄好场景后,我们在摄影棚里测量下两个marker的距离。我们来测量下03,04追踪点的距离,我们测量起来时114.6cm。我们现在定义一个所谓的距离约束,这样能够将整个场景节点的缩放值匹配起来。
l 激活按钮Distance Constraint Enable按钮。点击按钮Point #1,然后选择03,点击Point #2,选择点04,然后在Distance 输入框内输入114.6cm。
如你所注意到的,并不仅仅是3D摄影机运动轨迹,包括所有的对象的位置被重新自动计算,根据我们输入的现实世界距离进行缩放。
l Alt+右键,移动视图。
l 选择3D Object Browser Window里的scene节点。激活左边的scale按钮,点击左键。
如你所看到的,你将不再能够缩放scene节点,因为你已经定义了一个距离约束。
黑色的网格表示全局坐标系的xz平面,在这里,相对整个场景来说太小了,我们来放大下。
l 选择View::Set Grid Size。
打开设置网格尺寸的对话框。
在Grid Size文本输入框内输入100cm,然后点击OK按钮。
这样,黑色的网格看起来就匹配多了。
l 在3D Object Browser Window里面选择摄影机条目SEQ:Camera。激活左边的scale按钮,然后将摄影机缩小。
如你所见,3D摄影机对象以及它所投射的图片同事缩小。
让我们继续在全局坐标系里调整重建的3D信息。Marker被01-04点追踪,而Marker在现实世界里是在地板上,所以我们将01-04设置为地板。
l 选择View::Center On Origin。
这样,全局坐标系的原点被居中显示在Orientation Window里面。这个原点就是网格的中心。
l 点击右边的最下面的按钮。
按钮的图标从一个透视角度的立方体符号变成一个直角坐标系的立方体符号,表示当前的视图模式从透视图转为直角映射图。
l 点击按钮Side,看下点01-04.
点01-04看起来是一个平面。不过这个平面并不是跟网格在一个平面上。
l 选择点01,03,04,然后选择Orientation::Align 3 Points::XZ-Plane。
整个场景节点被自动变换,将3点坐在的平面自动匹配到xz平面上。
l 点击Top按钮,然后再次查看点01-04。
这些点没有跟全局坐标系里的x轴对齐,也没有跟z轴对齐。
l 选择点01和04,然后选择Orientation::Align 2 Points::X-Axis。
整个场景节点被自动变换,将2个点所在的之下自动匹配到全局坐标系下的x轴。
l 点击按钮Front。
l 选择01,然后选择Orientation::Move 1 Point::Origin。
场景的节点自动将平面匹配到xz平面。
l 点击Orientation Window的右下角。
视图转为透视角度。
l 以对象为目标旋转视图,检查调整好的3D信息。
点01-04精确地匹配到全局坐标系的xz平面上(黑色网格)。场景节点(scene node)被放在原点附近,看上去绕着三个轴旋转了一点点。
注意事项:
由于3D-Equalizer软件的性质的限制,在不同的3D对象之间有不少的限制。比如3D摄影机和相应的3D点之间的关系不能够被破坏,只要你修改3D对象,也就意味着修改了整个场景节点。
编辑模型对象
Orientation Window的第二个目的是为了创建和编辑三维空间里模型对象来测试追踪结果。
l 选择Orientation Window::Dummy::Create::Cube。
一个蓝色的立方体出现在黑色网格的中间。在3D Object Browser Window里面出现一条心的条目:Dummy Cube #1。
l 按住Ctrl+左键点击新创建的模型。
一个红色的轮廓线出现在立方体边缘,表示它被选中状态。3D Object Browser Window里面也表示为选中状态。
l 移动选中的模型,如前面提到的方式,点击左边的那些按钮来进行操作。
如你所看到的,你可以单独的移动模型,因此在编辑模型时,场景界定并不会被影响到。
为了获得最好的匹配质量,让我们试着将立方体精确的放在摄影棚地板上。
l 选中模型,然后点击Modify按钮。
打开模型修改对话框,我们可以看到它里面包含了几个文本输入框。

模型修改对话框
l 勾选Snap Dummy to Point,点击Browse按钮,选择04。
立方体的位置现在被约束到点04上,你再也不能够在3D空间内移动这个立方体。
l 选择Dummy::Reset All
模型的旋转和缩放尺寸将被回复,跟网格对齐。
l 激活Scale按钮,然后将模型缩放成细棒状,如下图:

模型对象
首先让我们来看看,我们追踪出来的3D信息是否准确。
l 拖动帧滑块,检查模型和图片的关系。
我们可以在视图中直接看到模型与图片的关系是否匹配。
l 激活Orientation Window::View::Camera View,拖动帧滑块,并查看视图。
Orientation Window的视图变成重建的3D摄影机。
l 选择模型,然后选择Dummy::Copy。
模型被复制到剪切板。
l 选择Dummy::Past。
一个新的模型被创建,不过它跟原来的立方体在一个位置,需要移动后才能看到。
l 选中复制的模型(可以在对象导航器里面选择),然后点击Modify,将其吸附到点02上。
生成预览影片
等编辑好模型对象后,我们可以创建一个预览影片用于查看摄影机是否重建成功。
l 打开Preview environment。
l 确保Main Window::Playback::Playback Output::Preview Movie is activated and press the button Play。(在V4里没找到这个)
3D-Equalizer开始生成预览影片。在所有帧被渲染完毕后,预览就开始以真实的速率(尽量)进行播放。模型对象很简单的直接映射到图片上。如果仔细看下模型的边缘,你可以看到一些失真的情况(锯齿)。
注意事项:
为了更高的性能,预览影片是直接渲染屏幕上的对象。在渲染时确保没有其他窗口在Overview Window的上面。(估计类似于截屏)
l 点击Stop按钮。
预览回放停止。
l 选择Options::Preview Settings。
弹出一个预览影片设置对话框。

编辑预览影片设置
l 激活Antialiasing按钮,然后点击OK。
你现在可以使用antialiasing 渲染模式了。
l 再次点击Play按钮
3D-Equalizer开始再次生成预览影片。这样,渲染出的两个物体看起来就好多了。反锯齿渲染可以让你能够更好的获得渲染质量。
Ball_bluebox3.3de可以在教程目录下的/projects/里找到,包括每一步骤。
导出重建的3D信息
一般情况下,3D-Equalizer工作流程的最后一步就是导出重建的3D信息,3D摄影机运动轨迹以及3D点的位置,为了配合三维软件。3D-Equalizer可以支持A|W PowerAnimator,SoftImage/XSI,Discreet Logic Flint/Flame/Inferno,NewTek Lightwave,3D Studio Max3,A|W Maya以及Kodak Cineon。
打开导出对话框Main Window::Project::Export。

导出A|W Maya
这些文件的各自的操作方式将在Reference Manual章的Main Window部分讲解。
注意事项:
在不同的动画软件里,以线框表现模型一般不会考虑像素比,因此一般来说,真实和被重建的点在这种表现方式中并不完全重叠。
