Blender物体跟踪实战教程
什么是blender物体跟踪?
对于视频后期处理而言,想要在图像中某个物体表面添加效果或新建物体,都需要建立在图像跟踪的前提下,因为我们的视频往往存在机位移动或主体移动,甚至两者皆有,不做跟踪,新建的效果只会固定在某一个地方,手动逐帧调整对于10秒就至少240帧的视频而言也是不现实的事情,所以,学会跟踪很重要。
而一般来说,我们无论在After Effect、Cinema4D、MAYA、Blender等软件中,默认启用的跟踪模式都是摄像头反求,也即通过画面中物体移动的透视变化来反推摄影机的位置,所以一般在完成跟踪计算后,我们会看到物体处于静止状态,而摄像头在不断地运动。
显然,摄影机反求适用于机位移动而主体不怎么动的拍摄主题,对于机位基本固定,但物体不断移动的内容而言,摄影机反求带来的问题就是整个新建的3D空间都会移动,而我们此时可能只想要其中某一些跟随移动,而另一些则保持静止或对素材视频中其他物体进行另外的跟踪,这时候就应该使用物体跟踪。
第零步,建议使用传统相机拍摄的素材
素材是跟踪信息的来源,而对于大多数3D软件而言,手机拍摄的视频素材有几个关键的缺陷,其一是解析力差,手机的视频优化方向主要在自动色彩映射、自动HDR等方面,而我们进行跟踪操作时经常需要200%甚至300%放大来标定跟踪点,且跟踪计算的依据是图像中的纹理对比度细节,这恰恰是手机视频相对薄弱而相机较为强势的方面。
其二是编码兼容性一般,以iPhone为例,原生相机拍摄的H.265视频总会出现各种问题,即便是转码至H.264也无法解决,使用第三方相机APP设置H.264拍摄的素材会相对稳定,但依然远比不上传统相机。
第一步,开启物体跟踪并选择正确的焦距
在Blender最上方标签页中点击“+”号,选择VFX-Motion Tracking进入跟踪工作面板,导入视频,选择与视频匹配的渲染帧率并预加载到内存后,在右侧“跟踪”栏的“物体”选项卡中新建一个“Object”,这样就能开启物体跟踪模式了。注意,这时候一定要正确填写你拍摄视频素材时所采用的镜头焦距,比如我使用松下GH5S的12-42mm镜头广角端进行拍摄,那么其等效全画幅焦距就是24mm,于是填24mm,具体设置如上图。
第二步,对物体实施跟踪并解算
跟踪点应该选择在对比强烈的位置,如下图所示,选择文字边缘、纹理凸出点等等,可以通过右侧“跟踪”栏来查看具体的标记位置并进行微调,这样才能在较少人工干预的情况下完成跟踪。其实任何的跟踪对视频素材都有较高的要求,首先是尽量不要有快速位移,因为这会形成明显的动态模糊,导致跟踪点丢失,只能逐帧手动跟踪,费时费力且准确度会明显下降。其次是尽量避免表面反光,因为表面发光也会导致跟踪点错误判断,虽然手动选择RGB通道可以一定程度缓解这个问题,但也会明显增加工作量。
跟踪过程中如果某些点断线,就需要手动定位到断线那一帧,G键手动移动到应有的位置后继续跟踪,再断线就反复这一流程,如果需要干预的次数太多,不妨考虑换一个跟踪位置进行尝试。
物体跟踪完成后跟摄影机反求一样需要进行解算,如上图所示,在跟踪界面的左侧可以进入到解算选项卡,这里可以勾选“关键帧”选项,Blender会自动选取视角差最大的两帧来进行计算,不过有时候自动选取的效果并不一定是最好的,如果你的结算结果误差总是非常高,但查验跟踪效果又没有发现问题,那可能就是关键帧没有选对,这时候可以尝试再次自动选择或干脆手动。
一般来说,物体跟踪的解算误差在1个像素左右已经算是比较好的,摄影机反求往往要求控制在0.5像素以内,如果更换关键帧后依然有很高的解算误差,建议重新选择跟踪点进行跟踪解算。如果误差并没有特别大,比如3~5个像素,可以通过删除误差值较高的跟踪点,或降低高误差跟踪点解算权重的方法来降低整体解算误差。
第三步,跟踪点3D标记并加载物体跟踪效果
在解算完成后,按A全选所有跟踪点,解算选项卡的“几何数据”中点击“网格3D标记”,就能在3D工作区内生成如下图的一个点阵图。这时候按空格键播放会发现它并不会跟随移动,这是因为我们还没有将物体跟踪的解算结果进行加载。
如下图所示,选择点阵图,并在“物体约束属性”选项卡里添加“物体解算”,物体选择为“Object”,相机则选择“Camera”,再点击“设置反向”,这时候再按空格键,就能看到点阵图跟随图像移动的效果了。
最后一步,导入想要添加的3D素材
为什么要将跟踪点导入到3D工作区当中?这是因为物体跟踪的物体位置与摄影机并没有联动关系,我们需要一个准确的位置信息来方便对齐新添加的物体,这些网格标记的跟踪点就是最好的选择。
完成上一步之后,接下来就是导入或者新建我们想要的物体了,以本文的案例来看,我们的目的是将手里的瓶子替换成一个“雷神之锤”,所以如上图,我将事先做好的“雷神之锤”导入到blender 3D工作区,并从摄影机视角和侧面视角来缩放、旋转对齐,并仔细观察整个视频播放过程中,新建的物体可否对原物体进行完整遮挡。
最后在合成面板中加入“影片剪辑”模块,并使用“Alpha上叠”模块连接“渲染层”,这样就能在最终渲染中实现想要的图像输出了,当然,为了增加真实性,也需要将本应在新建物体前方的手指等位置抠出并放到最前端,我们的最终效果就基于下图的合成设置而来。
原文地址:https://www.cnblogs.com/blendermx/p/15040073.html
- 使用CNN(LSTM架构)进行序列预测基于TensorFlow
- 【独家】周志华教授gcForest(多粒度级联森林)算法预测股指期货涨跌
- 如何利用SOTER,1个版本内完成指纹支付开发?
- Rafy 框架 - 大批量导入实体
- Rafy 框架 - 执行SQL或存储过程
- 关于activitygroup过时,用frament替换操作
- Rafy 框架 - 为数据库生成注释
- CNN预测股票走势基于Tensorflow(思路+程序)
- 路径查找器AI
- android推荐使用dialogFrament而不是alertDialog
- 自定义圆角和园边的实现
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
- 应用潜在语义分析技术将文档进行3D可视化
- 利用神经网络算法的C#手写数字识别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法