O_DisparityGenerator
O_DisparityGenerator插件用于为立体图像创建视差字段。一种视差场将一个视图中像素的位置映射到另一视图中其对应像素的位置。它包括两组视差向量:一个将左视图映射到右侧,另一个将右视图映射到左侧。
下列Nuke插件依赖视差字段来产生其输出:
• O_OcclusionDetector
• O_ColourMatcher(在3D LUT和Local Matching模式)
• O_FocusMatcher
• O_VerticalAligner(在Local Alignment模式)
• O_NewView
• O_InteraxialShifter
• O_VectorGenerator
• O_DisparityToDepth,和
• O_DisparityViewer。
输入和控制
连接类型 |
连接名称 |
功能 |
输入值
|
g |
可选的面具指定计算差异的区域。您可以使用它为前景元素创建视差层。 |
忽视 |
可选遮罩,用于指定要从视差计算中排除的区域。 注意: 两个视图中都应存在掩码,并且O_DisparityGenerator期望alpha值为0(对于背景)或1(对于前景)。 |
|
解算器 |
如果Source连拍序列不包含O_Solver能够很好匹配的功能,您可以在使用相同相机设置拍摄的另一个连拍序列上使用O_Solver。如果这样做,请将O_Solver连接到此输入。 |
|
资源 |
一对立体声图像。图像后应跟随O_Solver节点,除非您正在使用Solver输入。 |
Control (UI) |
Knob (Scripting) | Default Value | 描述 |
O_DisparityGenerator |
|||
Views to Use |
viewPair |
Dependent on source |
设置要用于创建视差字段的两个视图。这些视图将被映射为左眼和右眼。 |
Ignore Mask |
ignoreMask |
None |
设置遮罩类型以排除序列的区域: 注意: 两个视图中都应存在掩码,并且O_DisparityGenerator期望alpha值为0(供使用的区域)或1(供忽略的区域)。 • None -请勿使用忽略遮罩。 • Source Alpha -使用的Alpha通道Source剪辑为忽略蒙版。 • Source Inverted Alpha -使用反向的Alpha通道Source剪辑为忽略蒙版。 • Mask Luminance -使用的亮度Ignore输入作为忽略掩码。 • Mask Inverted Luminance -使用反向亮度Ignore输入作为忽略掩码。 • Mask Alpha -使用的Alpha通道Ignore输入作为忽略掩码。 • Mask Inverted Alpha -使用反向的Alpha通道Ignore输入作为忽略掩码。 |
Foreground Mask |
foregroundMask |
None |
设置一个可选的蒙版指定计算差异的区域。您可以使用它为前景元素创建视差层。您也可以使用忽视遮罩以排除前景区域中的元素。 注意: 两个视图中都应存在掩码,并且O_DisparityGenerator期望alpha值为0(对于背景)或1(对于前景)。 • None -不要使用前景遮罩。 • Source Alpha -使用的Alpha通道Source剪辑作为前景蒙版。 • Source Inverted Alpha -使用反向的Alpha通道Source剪辑作为前景蒙版。 • Mask Luminance -使用的亮度Fg输入作为前景遮罩。 • Mask Inverted Luminance -使用反向亮度Fg输入作为前景遮罩。 • Mask Alpha -使用的Alpha通道Fg输入作为前景遮罩。 • Mask Inverted Alpha -使用反向的Alpha通道Fg输入作为前景遮罩。 |
Noise |
noiseLevel |
0 |
设置在计算视差字段时,O_DisparityGenerator在输入素材中应忽略的噪声量。 值越高,视差场越平滑。如果发现在低对比度图像区域中视差字段嘈杂,则可能需要增加此值。 |
Strength |
strength |
1 |
设置左右视图之间匹配像素的强度。 较高的值可让您将一个图像中的相似像素准确地匹配到另一图像,即使结果视差字段参差不齐,也可以专注于细节匹配。较低的值可能会错过局部细节,但不太可能为您提供奇数次的杂散矢量,从而产生更平滑的结果。 |
Consistency |
consistency |
0.1 |
将应用左右差异的约束设置为一致。增加该值以鼓励左右视差向量匹配。 |
Alignment |
alignment |
0.1 |
设置约束差异以匹配上游O_Solver节点定义的水平路线的量。 值0使用无约束运动估计来计算视差。值的增加迫使差异一致。在大多数情况下,您希望将此设置为0或默认值0.1。 |
Sharpness |
sharpness |
0 |
设置在计算的视差字段中不同的对象边界应如何。 增加此值可产生不同的边框和单独的对象。减小该值可将视差层一起模糊并最小化遮挡。 为了使用O_NewView,O_InteraxialShifter,O_FocusMatcher和O_Retimer更好地构建图片,可以将此值设置为0。 |
Smoothness |
smoothness |
0 |
设置图像匹配后作为后期处理应用于视差字段的额外平滑量。 值越高,结果越平滑。您可以将其与Sharpness参数以分别消除镜头中不同对象的视差字段。 |
Parallax Limits |
|||
Enforce parallax limits |
enforceParallax |
disabled |
启用后,O_DisparityGenerator将视差限制为指定的Negative和Positive值以删除不正确的视差矢量。您可以使用O_DisparityViewer中的视差直方图显示查看视差范围。 |
Negative |
negativeParallax |
-100 |
设置最大负视差,以像素为单位。使用负视差时,左侧图像中的像素位于右侧像素中的右侧,并且对象出现在屏幕平面的前面。 负视差由对齐图像的最大视差L.x和最小视差R.x值定义。 |
Positve |
positiveParallax |
100 |
设置最大正视差,以像素为单位。使用正视差时,左侧图像中的像素位于右侧像素中的左侧,并且对象出现在屏幕平面的后面。 正视差由对齐图像的最小视差L.x和最大视差R.x值定义。 |
影片教学
欢迎从铸造厂来到Ocula。我叫Jon,在本教程中,我们将看一下在Ocula 3.0中设置和检查DisparityGenerator节点的过程。视差在整个Ocula中都使用,并且是连接左视图和右视图之间的部分的向量,因此它通知Ocula有关如何匹配图像以及如何与另一个视图一起更新视图的信息。它用于对齐板,颜色匹配,焦点匹配,创建z通道,更改轴间距,更改深度,重建视图,关联眼睛之间的旋转以及进行重定时。因此,您可以预先计算出镜头的视差,将其烘烤,然后在补偿中使用。让我们快速看一下其中的一些操作。
Ocula中的VerticalAligner节点可以基于视差的垂直分量对输入素材进行逐像素更新,以使其水平对齐。如果我们切换到此素材的Anaglyph,我们可以看到这一点。如果我看一下这里的素材,并将其与更新的垂直对齐的素材进行比较,则会完成每个像素的更新。
ColorMatcher节点还使用视差将一个视图的颜色拖到另一个视图上,以纠正两个视图之间的任何差异。因此,这是左右输入的素材,这是校正后的素材。现在已经匹配了颜色,因此这是基于这些视差矢量,使用右视图中的颜色来更新左侧的颜色。同样,焦点匹配器可以将一个视图的外观拉到另一个视图上以更新焦点。因此,这是输入素材,与右侧相比,它在左视图上略有偏离。我们可以通过使用视差拉动外观来更新左视图,以匹配右视图上的焦点。如果我们有一个匹配移动的摄像机,您还可以获取这些视差矢量,并将其转换为z传递,将它们转换为深度值以在comp中使用。因此,在这里,我们基于这些视差矢量进行了一次z传递,并使用了匹配移动的摄像头进行三角测量以创建3D点。Ocula中的InteraxialShifter节点将使用视差移动图像,以更改场景中的深度。因此,这是我们的输入素材,这是我们新的轴间距,并且我们更改了深度。更容易看出我们是否切换到视差直方图在我们的DisparityViewer节点中。这是我们的输入素材,这是我们的新视差,它显示了轴间间距变化时的压缩深度。
现在,您还可以使用视差通过Ocula中的NewView节点从另一个视图重建一个视图。在这里,我们使用左图像通过使用视差矢量将左像素推过来重建右图像。因此,与原始的右视图相比,这是重建的右视图。您还可以使用视差推入roto。在这里,我在左眼中创建了一个roto,并将其推到了右眼。最后,我们使用Ocula中的视差来创建左眼和右眼一致的运动矢量。因此,视差将左右运动连接起来,确保它与我们对其进行的任何重定时一致。差异对于所有Ocula操作都是至关重要的。让我们看一下现在设置DisparityGenerator,并查看这些视差向量。
在DisparityGenerator中,您需要找到使用视图为左眼和右眼。它还具有两个掩码输入-一个忽略面具在视差计算中排除图像的一部分。例如,视差被破坏的地方,或者如果您想排除前景元素以尝试拉出其背后的视差。你也有一个前景面具,并定义了计算视差的区域,因此您可以旋转出图像的特定部分并在那里计算视差,以拉出镜头中的视差层。您还具有控制视差计算的参数,因此强度定义图像的匹配程度。您可以增加强度强制视差匹配图像。一致性定义视差左右向量的一致性。对准是视差向量满足Solver上游传递的对齐数据的权重。您可以增加它,甚至将其设置为0以忽略对齐数据。你有一个清晰度参数定义视差向量中不同对象的程度,因此您可以增加清晰度拉出场景中不同图层之间的视差边界。您还可以通过增加光滑度参数。最后,在这里,如果您需要设置差异计算的限制,则可以通过单击加强视差限制并设置(负和正)(以像素为单位)的限制。
让我们看看已经计算出的差异。我们可以切换查看器以显示差异,在这里,差异显示为RGBA图像。我可以拒绝它以更轻松地查看它,或者实际上,我在这里所做的工作是将视差复制到RGBA,并进行了分级以使其更容易看到。本质上,它显示视差左向量为红色和绿色,视差右向量为蓝色和alpha。因此,红色和绿色x,y以及视差右向量为蓝色和alpha x,y。左侧视差是将左侧图像拉到右侧的向量,因此它从右侧像素开始并指向相应的左侧像素。右视差是将右图像拉到左侧的向量,因此它从左像素开始并指向相应的右。使用此图像,我们可以看到参数如何影响视差计算。如果将其强度更改为2,我希望它进一步强制图像匹配器。您可以看到它开始变得有点嘈杂,迫使图像匹配,但是它可能更准确。因此,增加强度,如果您没有获得准确的匹配。
实际获得准确匹配的另一种方法是增加清晰度稍有不同,因为它允许差异将镜头中不同元素的匹配分开。如果我把清晰度在这里,并增加一点,您可以看到它拾取了视差内部的不同对象边界,并允许视差在不同的层之间分离。最后,要调整的另一件事是光滑度。如果需要平滑这些矢量,则可以在此处启用过度平滑。当您悬殊地工作时,最好将它们预先烘焙以用于合成。因此,您可以使用不同的参数设置来渲染它们,可以使用默认设置,可以使用强设置,可以使用锐利设置和平滑设置,然后可以在视差矢量之间进行选择无需回去调整。
现在,让我们看一下检查它们并检查差异的质量。检查视差矢量的最佳方法是在Ocula树中使用它们。我最喜欢的是做一个NewView,将左边的像素拉到右边,反之亦然。因此,这是原始的右侧图像,在这里我们通过使用视差将左侧像素拉到右侧上方来重建了右侧图像。如果原始权利和我们重建的权利并列,那么这些差异向量必须运行良好。因此,图像看起来对齐良好,我们可以在这里通过将重建的图像和原始图像合并,并将其放入StereoReviewGizmo中进行检查,设置为区别。您也可以将其视为CheckerBoard。本质上, 区别工具,您在这里看到的只是左眼和右眼之间的色差,因为它们现在与视差矢量很好地对齐。如果视差不太正确,您将看到图像未对齐。您可以使用Ocula中的DisparityViewer节点查看视差。在这里,我们可以看到视差作为矢量叠加在图像上。您可以将其切换为显示视差直方图,总结场景的深度,并将视差与您为镜头设置的任何视差限制进行比较。如果您违反这些限制,则可以切换以查看违规叠加层(视差违规)以查看图片中发生了什么。所有这些选项都会呈现出来,因此您可以使用视差矢量将它们烘焙出来,然后视差直方图为了测试comp树中发生的任何重新收敛,在这里非常方便。您可以预先计算板的视差,可以进行补偿工作,然后可以重新计算视差并将其再次视为视差直方图查看场景中的融合是否发生了变化。因此,在这里,我刚刚放入一个ReConverge节点,当我四处移动时,可以看到视差直方图将移动,显示场景深度的移动。
因此,本教程在Ocula 3.0中的DisparityGenerator上进行了总结。我们已经研究了Ocula中使用Disparity的位置,参数设置以及如何对其进行调整。我们还使用Ocula中的NewView节点查看了质量检查,并使用DisparityViewer进行了检查。
您好,我叫Dan Ring,我将向您展示一些使用和校正视差图的高级技术。视差图最常见的用途是建立新视图。我们将介绍一些可在Ocula 3.0中使用的便捷技巧,尤其是如何构建需要更少修饰的更好的新视图。现在,将您称为“英雄”视图,而不是对一个视图进行重大更改的场景,现在您希望将相同的更改应用于另一视图。当我说出重大更改时,这可能意味着您已经创建了一个干净的背景板,移除了一个摄像头小推车,在新颖的东西上进行了涂漆或合成,对一个区域进行了颜色处理,等等-任何需要花费大量时间的事情,您不想为第二只眼睛做两次。在此示例脚本中,我将使用跟踪到地面的CheckerBoard来表示通过我们的左眼进行的重大更改。然后,我们希望将这些更改推到另一种观点,在这种情况下,是我们的右眼。CheckerBoard可以让您更轻松地查看出现问题的时间。我们还将假设有人在两种视图中都为我们的舞者画了旋转面具。这使我们可以更轻松地将舞者合成回到任何推入的背景板上。
让我们从没有Ocula的情况下开始做起。一种方法是将跟踪的摄像机设置与场景的几何形状一起使用,然后将“英雄”视图投影到场景上。然后,您可以使用ScanlineRender获取新视图。在这里查看结果,您可以看到它做得很好。但是,它确实有两个重要且不平凡的要求:第一个要求您对场景有良好的跟踪,第二个要求您具有准确的场景几何形状。在我们的CheckerBoard示例中,场景的几何形状不必那么复杂-一张简单的卡片就足够了-但是对于像建筑物侧面这样的更复杂的事物,您当然需要更详细的几何形状,并且在许多情况下情况下,那是不可能的。
现在,让我们尝试使用Disparity Generator和NewView节点以标准Ocula方式从左眼向右推动。与大多数Ocula管道一样,我们从O_Solver开始,并设置了相关的关键帧,并抛出所有错误的匹配项。现在我们顺其自然,并使用O_DisparityGenerator为我们获得一些差异。请注意,我们在未经处理的板上产生视差,然后使用Shuffle节点引入CheckerBoard左眼,然后再将其提供给O_NewView节点以提供新的右眼。为了告诉NewView我们要从左侧建立右眼,我们将输入项在这里剩下,然后我们将插值位置一直到1。在本教程中,我们将对每个NewView节点使用相同的设置。如果我们看一帧,您会发现它做得不好。看着舞者的陪伴,您可以通过CheckerBoard的波浪线看到舞者的动作严重影响背景视差。这正是我们所不想要的。相反,我们需要一种与前景分开生成背景差异的方法,并且可以使用新的忽略面具 Ocula的O_DisparityGenerator中的功能。这告诉视差生成器不要计算指定区域中的任何视差,而是使用其边界周围的视差填充它。
在此示例中,我在前景舞者周围绘制了粗略的roto。现在,如果我们查看原始图像的视差并忽略了生成器(CheckerBoard)节点,则可以看到舞者已被有效地绘制,从而为我们提供了一个完美平滑,可用的背景视差板。如果我们随后将此差异提供给NewView节点,则可以看到它做得更好。在两眼之间推动之后,直线保持笔直。如果我们重新组合起舞者,您会看到CheckerBoard不再受舞者的影响,并且随着时间的推移仍会保持平滑。现在,让我们在原始背景板重建与我们的图层增强重建之间切换,以更清楚地看到效果。此示例显示了使用Ocula的视差层可以发挥多么强大的作用,更不用说在视图之间推动背景变化而无需相机跟踪和在几何体上进行投影的操作是多么容易。
在本教程的下一部分中,我们将开发前面显示的技术,以便为背景和前景区域获得更好的新视图。对于这种情况,假设您一直在大量固定并处理舞者和左眼的背景元素,以至于右眼不再与左眼相似。现在,您想在其他视图中推送这些编辑。尽管摄像头跟踪和投影工作流程适用于背景元素,但可能不适用于前景。因此,自然而然地,我们转向Ocula的NewView工作流程来帮助我们。首先,让我们看看通过将O_NewView节点连接到O_DisparityGenerator从视差创建新视图的最简单,最标准的方法。如您所见,它做得不好。我们在舞者的边缘周围出现了很多失真和伪影,背景的某些部分(例如道路的中心和路边)没有正确变形。为了解决这个问题,我们将巧妙地使用视差生成器,忽略和前景蒙版分别从前景和背景中提取视差,然后在最后结合结果以提供更加清晰的另一种视图。在本教程的前面,我们了解了如何使用ignore mask提取背景差异,因此现在就开始使用它。让我们将与之前相同的粗体roto蒙版应用到O_DisparityGenerator。查看NewView节点,我们现在可以看到背景得到了更好的处理,并且沿着道路的路缘和中心线有不错的直边。但是,由于我们决定忽略舞者的所在区域,因此我们实质上已经舍弃了视差,因此我们现在必须分别进行估算。另请注意,在估算新视图之前,我们正在改组舞者的alpha蒙版。稍后将使用它。
为了准确地拉动舞者的视差,我们将向O_DisparityGenerator节点提供舞者的alpha蒙版,作为前景蒙版。这明确告诉视差生成器,它必须与两个视图中的蒙版区域匹配。现在,当我们从前景差异创建新视图时,可以确定背景不会影响舞者的差异。例如,查看NewView,您会发现舞者几乎不会扭曲,这正是我们想要的。现在,让我们使用舞者的Alpha来合成前景和背景。除了舞者的重影效果外,新的盘子看起来非常漂亮。特别是,我们在舞者或背景的边界周围看不到任何奇怪的变形。重影效应是由于以下事实:这些区域在左视图中被遮挡,因此,当我们从左构建右视图时,我们没有正确的数据可用于重构。尽管我们大部分的“英雄”视图都可以正确转移,但是这些幻影区域将需要由压缩艺术家处理,可能会应用与“英雄”视图相同的处理方式。通过一些简单的遮罩操作,您可以快速识别这些区域。
在结束本教程时,我将作一点欺骗,并假装我是通过简单地从原始右眼复制它们来画出这些缺失的部分的。尽管颜色有些差,但是由于我们没有进行任何颜色匹配,因此您可以看到原始的右眼边界与我们的新视图重建如何很好地对齐。这让我们知道我们的印版重建工作流程做得很好。您可以使用我们网站上随附的脚本和素材自己尝试这些技术。至此,本Ocula教程介绍了如何处理视差图。