计算帧间像素运动的算法 — 生成运动矢量。对运动跟踪、帧插值和动态模糊合成至关重要。
计算连续帧之间的像素运动——这就是光流分析的核心业务。该算法逐帧比较亮度模式、边缘和纹理,并为每个像素分配一个运动矢量。这种矢量场表示精确地显示了每个区域的移动方向和速度。在片场,你最早会在剪辑和VFX流程中用到它,但其质量在很大程度上取决于你最初的素材——运动模糊和噪点是干净的流计算的天然敌人。
在实践中,你主要会在三种场景中使用光流分析:运动跟踪——当你跟踪3D跟踪标记或想要稳定有机运动时,只要纹理具有代表性,光流就能比手动点标记提供更快的結果。帧插值——对于你未在片场拍摄的慢动作效果,该算法会根据运动矢量计算中间帧。这在清晰、线性的运动(摄像机平移、物体飞行)中效果惊人地好,但在遮挡或快速剪辑过渡时会变得不干净。运动模糊合成——如果你的原始素材过于清晰,或者你需要事后添加运动模糊,则可以使用矢量场来模拟运动方向和强度。
其局限性你已知晓:遮挡(一个物体遮挡另一个物体)会带来问题,因为算法无法知道被遮挡的像素属于哪里。阴影和光照变化会混淆基于亮度的相关性。高频纹理(草、水、噪点)会产生错误的矢量,因为局部模式相似。因此,在现代VFX流程中,你经常使用基于学习的光流模型(深度学习方法),它们对遮挡和光照更具鲁棒性——但计算量也更大。经典的块匹配或基于梯度的算法速度更快,并且在素材干净时通常足够使用。
在片场本身,你无法直接控制光流分析,但你可以做好准备:清晰、纹理丰富的表面有帮助,平坦或均匀的区域则是一个挑战。如果你知道你的素材稍后将使用光流进行处理——用于跟踪或插值——请避免极端的运动模糊,并使用足够的光照对比度。在剪辑和合成软件(Nuke、After Effects)中,光流如今已是标准;较新版本提供GPU加速计算,因此你可以快速迭代工作,而无需长时间等待渲染时间。