【Nuke合成】使用CameraTracker解算摄像机位置(图文详解)

VFX大学 Nuke合成影视制作 【Nuke合成】使用CameraTracker解算摄像机位置(图文详解)

正在查看 8 条回复
  • 作者
    帖子
    • #55447

      韩十七
      参与者
      青骑士

      哈啰V友们大家好呀,我是世界上最好看的小仙女——十七,今天继续和大家聊 CameraTracker 节点。

      在之前的帖子里,十七和大家分享了CameraTracker中UserTrack的用法:

      【Nuke合成】如何使用CameraTracker中的User Track?(图文详解)

      当我们完成跟踪过程后,就进入解算摄像机位置环节了。

      CameraTracker会使用跟踪信息计算摄像机位置,并将位置信息添加到视窗中的跟踪特征点上。

      在CameraTracker属性面板上,点击Solve。解算器会选择相对较远的关键帧子集,以便图像中有足够的视差来定义跟踪点的3D位置。

    • #55454

      韩十七
      参与者
      青骑士

      一、查看解算数据

      我们可以使用 Settings 选项卡的 Display 参数,控制解算数据在视窗中的显示:

      • Show tracks – 显示或隐藏2D跟踪信息。
      • Show projected 3D points – 显示或隐藏3D点的2D位置。
      • Show key tracks only – 只显示最长的跟踪点,这些跟踪点是用于计算解算结果的。
      • Show 3D marker – 在3D视窗中显示或隐藏每个点的3D标记。

      在2D跟踪点上会使用交通灯颜色标记,以便在 AutoTracks 选项卡中找到合适的跟踪点拒绝阈值,默认为琥珀色(介于黄色和咖色之间的一系列淡黄与棕色),绿色表示良好的跟踪点,红色表示较差的跟踪点。

      圆圈和十字架是解算过的自动跟踪点经过重新投影后的3D点,这些3D点圆圈越接近特征点,解算结果越好。

      鼠标悬停在点上时会显示解算信息。

      CameraTracker 还可以在 3D 视窗中创建点云,这样我们就可以来回切换检查 2D 点和已解算的 3D 点的相对位置。在 2D 视窗中选择一些点,然后按 Tab 键切换 2D 和 3D 空间,检查点的位置即可。

      在 2D 序列中选择一些点

      这些点在 3D 视图中显示的位置

    • #55455

      韩十七
      参与者
      青骑士

      检查自动跟踪曲线

      CameraTracker 属性面板 Auto Tracks 选项卡的曲线向我们展示了更多详细的解算信息,我们可以同时选择所有曲线,也可以选择单根曲线(如 error – rms,即 root mean square,均方根误差)查看更详细信息。

      这里十七和大家解释下什么是均方根误差。均方根值是将所有值平方求和,求其均值,再开平方所得到的值。均方根误差是用来衡量观测值同真值之间的偏差的。在 error – rms 曲线中,真值即跟踪点的位置,观测值即解算后重新映射的点的位置。

      小提示:我们可以按F键,将选中的曲线最大化地展示在坐标图中。

      选中所有解算曲线

      选中一根曲线

      通过观察曲线,我们可以初步判断出哪些帧的跟踪遇到了问题,例如,右图的均方根误差曲线在当前帧出现了明显的上跳。

      在这种情况下,我们可以尝试调整 Keyframe SpacingSmoothness 参数更新一下解算。

      图中的曲线分别表示以下信息:

      • Solve Error – 显示常量 SolveError 参数。
      • error min – 每帧重新投影的最小误差(以像素为单位)。
      • error rms – 每帧重新投影的均方根误差(以像素为单位)。
      • Error track – 基于每个跟踪点的寿命计算出的每帧重新投影的最大均方根误差(以像素为单位)。
      • error max – 每帧重新投影的最大误差(以像素为单位)。
      • Max Track Error – 显示常量 Max RMS Error 参数。
      • Max Error – 显示 Max Error 阈值参数。
    • #55458

      韩十七
      参与者
      青骑士

      检查解算的 User Tracks

      我们可以在 UserTracks 选项卡中的 User Track 表中检查已解算的 User Track 的误差。如果误差很高,我们可以检查一下 2D 特征点轨迹的 x、y。或者,我们也可以取消勾选 User Track 的 e(enable,即启用)列,将其从场景中移除,然后点击 Solve 再次解算。

      User Track 的 3D 位置(x,y,z)也会显示在列表中,就像 3D 视图一样。

      小提示:在解算摄像机后,我们可以创建 User Track,在镜头中提取特定的 3D 位置。为了产生精确的 3D 点,User Track 必须定义在具有良好视差的3帧或更多帧里。我们创建 User Track 后,需要在 User Track 列表中选中它,然后点击 Update XYZ 按钮,从当前解算中对该跟踪点的 3D 位置进行三角测量。

      小提示:自动跟踪后,我们也可以根据需要选择自动跟踪点,将它提取为 User Track,这样解算器会把这个跟踪点作为一个重要跟踪点锁定起来。如果自动跟踪在画面中的特定部分跟踪得很好,但是这个区域仍然没有得到正确的解算,可以使用这个方法。

    • #55472

      韩十七
      参与者
      青骑士

      预览运动匹配质量

      解算完成后,我们可以通过预览添加到 3D 场景中的对象来查看解算质量。

      【方法一】

      1. 在 2D 视窗中,右键一个跟踪点(或选中几个理想情况下在同一平面上的跟踪点),然后选择 create > cube

      CameraTracker 将创建一个 Cube 节点,并将它放置在选中点的平均位置上。我们可以使用这个立方体测试它与输入素材的匹配程度。

      小提示:我们可以使用 Cube 属性面板的 uniform scale 参数调节立方体的大小。

      2. 在 CameraTracker 属性面板上,将 Export 菜单设置为 Scene+ 并点击 Create

      CameraTracker 将创建一个 3D 场景,场景还包含 Camera、PointCloud、ScanlineRender,以及一个 LensDistortion 节点,对输入素材去畸变。

      3. 将 Cube 节点连接到 Scene 节点的输入上。

      4. 查看从 ScanlineRender 的输出画面。

      我们在第1步中创建的立方体和 CameraTracker 生成的点云会显示在校正过镜头畸变的素材上面。

      5. 滑动时间线,查看立方体和点云是否“粘”在镜头上,如果是,就可以调整场景啦;如果不是,则需要继续排障。

      【方法二】

      1. 在 CameraTracker 属性面板上,将 Export 菜单设置为 Camera 并点击 Create

      CameraTracker 会创建一个 Camera 节点,用来模拟真实世界的摄像机。

      2. 在 2D 视窗中,右键一个跟踪点(或选中几个理想情况下在同一平面上的跟踪点),然后选择 create > cube

      CameraTracker 将创建一个 Cube 节点,并将它放置在选中点的平均位置上。我们可以使用这个立方体测试它与输入素材的匹配程度。

      小提示:我们可以使用 Cube 属性面板的 uniform scale 参数调节立方体的大小。

      3. 启用 Undistort Input

      CameraTracker 会校正输入素材的镜头畸变。

      4. 确保 CameraTracker 和 Camera 的属性面板是打开的。

      5. 在视窗中按 Tab 键切换到 3D 视图。

      6. 通过视窗右上角的菜单,将我们在步骤1中创建的摄像机设置为当前摄像机,然后点击按钮将 3D 视图锁定为该摄像机视角。

      7. 在视窗的顶部,将视窗合成下拉菜单设置为 over,这样的话,经过 CameraTracker 去畸变的输入素材会叠加在 3D视图的点云上。

      8. 滑动时间线,查看立方体和点云是否“粘”在镜头上,如果是,就可以调整场景啦;如果不是,则需要继续排障。

    • #55481

      韩十七
      参与者
      青骑士

      二、排除解算故障

      CameraTracker 中有一些排障工作流程,可以用来提高解算精度。不过这里十七还是要提醒大家,良好的解算结果还是取决于良好的跟踪数据。

      ——————

      使用曲线阈值删除跟踪点

      我们可以使用 AutoTracks 选项卡的阈值参数动态拒绝跟踪点,并移除它们,以提高精度。下面以 error – rms(均方根误差)给大家讲解下。

      1. 点击属性面板的 AutoTracks 选项卡,并选中 error – rms 曲线。

      小提示:我们可以按F键,将选中的曲线最大化地展示在坐标图中。

      如上图所示,我们可以看到在第195帧附近,误差曲线有一个明显的上跳。

      2. 将视窗播放头移动到受影响的区域,并检查视窗中已跟踪的特征点。

      3. 降低属性面板中的 Max Track Error 参数,此时阈值之外的跟踪点会变成红色。

      Max Track Error 设置为6

      Max Track Error 设置为2

      4. 点击 Delete Rejected 移除所有指定阈值之外的跟踪点。

      小提示:我们还可以手动移除跟踪点,在视窗中选中要删除的跟踪点,并右键,选择 tracks > delete selected

      5. 点击 Update Solve,重新解算受影响的帧范围。

      6. 使用 Settings 选项卡的 Solving 参数进一步改善解算结果:

      • Camera motion – 设置 CameraTracker 在求解解算过程中应考虑的摄像机运动。
      • Keyframe Separation – 调整关键帧之间的分离值。

      高分离值会产生较少的关键帧和较大的扩散,通常用于较慢的摄像机运动。

      低分离值会产生较多的关键帧和较紧密的扩散,通常用于快速摄像机运动。

      注意⚠️启用此参数后,Reference Frame 参数将决定在哪里放置第一个关键帧。

      • Smoothness – 较高的值有助于平滑摄像机路径。
      • Reference Frame – 此参数可以指定更新摄像机解算的起始帧,以及确定放置第一个关键帧的位置。

      注意⚠️请勾选 Set reference frame 启用此参数。

      ——————

      优化解算结果

      AutoTracks 选项卡上,Refinement 选区,有三个优化参数可以帮我们改进解算结果。如果 CameraTracker 选项卡上的 Errorper frame 参数的值相对较高,可以尝试使用内围跟踪点优化解算结果。内围跟踪点由曲线阈值定义,还可以优化焦距、摄像机位置或摄像机旋转。我们可以先在 Output 选项卡上手动编辑摄像机解算,然后选择:

      • Focal Length – 勾选此项以优化摄像机的焦距。
      • Position – 勾选此项以优化摄像机位置。
      • Rotation – 勾选此项以优化摄像机旋转。

      最后,点击 Refine Solve

    • #55482

      韩十七
      参与者
      青骑士

      三、使用提取的跟踪数据更新解算结果

      在 CameraTracker 中,我们可以使用跟新的跟踪数据向已有摄像机添加更多帧。不过一般情况下,帧范围不能扩展很远,通常情况下扩展范围为 10~15%,因为已有的解算会将 3D 点锁定到固定位置,所以将新的 2D 跟踪数据匹配到 3D 点上会产生很高的跟踪误差,而 CameraTracker 会拒绝这些误差。

      比如说,我们已经解算了第 1~10 帧,那么现有的 3D 跟踪点都是基于这些帧的数据得来的。如果我们将这个解算路径扩展到第20帧,使第 11~20 帧上的 2D 点匹配已计算的 3D 点,一般不会得到好的匹配,而且扩展范围的解算误差会增加。

      要使用更新的跟踪数据来更新解算结果:

      1. 跟踪其他帧。

      如果被拒绝的跟踪点(红色高亮显示)太多,可以尝试减少更新的画面帧。

      2. 点击 Update Solve 计算新的跟踪数据。

      如果被拒绝的跟踪点太多,我们会发现,还不如重新跟踪整个帧范围然后使用完整的新数据解算摄像机位置,哈哈哈哈哈哈哈……从头开始解算需要使用所有帧上的视差信息,因此得到的整体解算误差会比较低。

    • #55483

      韩十七
      参与者
      青骑士

      好啦,这次十七的教程就到这里啦,如有疑问,可以跟帖留言,十七会尽快回复哦。

      点击十七的头像可以查看更多精彩教程呢~

      如果本教程对您有所帮助,点击我的头像,加我为好友,就可以看到我得更新啦,也可给我发私信,点击帖子顶部得收藏放入收藏夹,方便将来再次查看~,并将本帖推荐给您的朋友哦~

      本帖未经允许不得转载,禁止二次转载,转载请注明出处并保留在本站的完整链接,谢谢^_^

    • #68720

      睡觉是个体力活
      参与者
      军士

      学习飘过

正在查看 8 条回复
  • 在下方一键注册,登录后就可以回复啦。
error: 提示:内容受到保护!!
-->