摄像机镜头校准概述

"摄像机校准"插件的概述。

Windows
MacOS
Linux

介绍

要想利用CG渲染和实时视频创建准确的构图,需要在虚幻引擎中有一个虚拟摄像机,能够准确地模拟用于捕获现实世界视频画面的物理摄像机。虚拟摄像机的位置和方向必须紧密匹配物理摄像机的位置和方向,并且其追踪信息必须匹配视频内容的确切计时,以确保每个视频帧准确同步到摄像机在每个时刻的位置。

摄像机校准(Camera Calibration) 插件向用户提供了简化的工具和工作流程,用于在编辑器中校准摄像机和镜头。此校准流程会生成所需的数据,以准确地将虚拟摄像机与物理摄像机在空间中的位置对齐,并对物理摄像机的镜头失真建模。该插件引入了"镜头文件"资产类型,其中封装了摄像机和镜头的所有校准数据。

"摄像机校准"插件还包含一个功能强大的镜头失真管线,它能获取校准后的失真数据,并将准确的后期处理效果应用于CG渲染。失真后期处理效果可以直接应用于电影摄像机Actor,以在电影渲染队列中使用,或者应用于Composure的CG层。

该插件的工具和框架可扩展并且很灵活,可支持范围广泛的一系列镜头和工作流程。

摄像机校准

聚焦和光圈映射

"摄像机校准"插件使用"镜头文件"资产将原始聚焦和光圈值转换为"电影摄像机"组件使用的物理单位。例如,原始输入值可能包括通过LiveLink从外部设备流送的编码器位置(绝对位置或规格化位置)。这些值还可以转换为合适的单位,但这需要微调以实现更高的准确性。

校准后的数据

校准后的镜头数据可能因摄像机的聚焦和变焦而异。因此,要实现高质量校准,用户经常需要使用多个聚焦和变焦点进行校准。失真参数、摄像机固有属性和节点偏移全部与其关联的聚焦和变焦值一起存储在镜头文件中。通过在存储的聚焦和变焦点之间插值,可以针对任何聚焦和变焦位置评估校准后的镜头文件。

失真参数

"摄像机校准"插件进一步支持为多种物理镜头型号定义的准确镜头失真后期处理效果。这些镜头型号定义了一组失真参数,用于计算镜头周围各种位置的失真。

该插件支持球状失真模型,该模型基于Brown-Conrady模型,并使用五个失真参数(K1、K2、K3、P1、P2)。这些参数没有单位,并且在校准流程中计算。该插件可扩展,并且允许用户添加对使用不同参数的额外模型的支持。

摄像机固有属性

摄像机固有属性包括焦距和图像中心,并且定义了摄像机坐标系中的3D点如何映射到2D图像。这些固有属性也必须校准,以准确地对摄像机和镜头建模。

根据校准方法的不同,焦距可以使用物理单位(毫米)或像素数计算。焦距经常表示为2D向量(Fx, Fy),其中的长度应该大致相等。为了将表示通用化,镜头文件会将校准后的焦距存储为除以图像传感器宽度和高度(以毫米为单位)或除以图像分辨率(以像素为单位)的规格化值。

规格化之后,Fx和Fy不再彼此大致相等,但(Fx, Fy)应大致等于你的长宽比。

校准后的图像中心考虑了镜头与摄像机图像传感器之间的物理不对齐情况,但通常应该接近理想的中心。图像中心通常也按物理单位(毫米)或像素计算,并且表示为2D向量(Cx, Cy)。类似于焦距,图像中心通过除以传感器宽度和高度(以毫米为单位)或除以图像分辨率(以像素为单位)来规格化。规格化之后,图像中心应该接近(0.5, 0.5)。

节点偏移

镜头的节点是光线收敛到的点。在虚幻引擎中,虚拟摄像机应放在虚拟世界中的这个节点处,确保真实对象和CG对象正确匹配。

"节点偏移"校准是单独的校准步骤,用于查找追踪的物理摄像机的姿势,并计算该姿势与你的追踪数据之间的偏移。这可确保在摄像机移动时,虚拟摄像机的变换将继续设置为物理镜头的节点。

ST地图

ST地图是一种图像,其中每个像素的值对应于UV空间中失真的图像坐标。ST地图可以使用虚幻引擎外部的校准工具来生成,并且可以用于后期处理,以改变对场景纹理取样时使用的UV。

为了支持已从外部工具生成校准后数据的用户,"摄像机校准"插件支持直接将ST地图的输入到镜头文件。

镜头文件资产编辑器

镜头文件资产编辑器提供了多个校准工具,用于自动使用校准后的数据填充镜头文件。该编辑器还提供了一个曲线编辑器,用户可以在其中调整计算后的结果。

校准步骤

虚幻引擎中的校准步骤包括镜头失真校准、节点偏移校准,以及用于输入静态镜头信息的步骤。校准步骤的列表可扩展,这意味着程序员可以实现额外的校准工具并将其添加到编辑器。

镜头信息

用户可以输入静态镜头数据,例如镜头型号名称和序列号,还可以输入摄像机数据,例如图像传感器的尺寸。

镜头失真校准

用户可以选择用于计算失真参数和摄像机固有属性的校准算法。该插件包含一种算法,它使用刚性棋盘格网格,利用OpenCV计算失真。此步骤可扩展,所以让程序员可以继承UCameraLensDistortionAlgo类来实现额外的算法。

节点偏移校准

用户可以选择校准算法和校准器对象,以用于计算节点偏移。该插件包含三种算法:点方法、Aruco标识、棋盘格。此步骤可扩展,所以程序员可以继承UCameraNodalOffsetAlgo类来实现额外的算法。

失真管线

"镜头失真"管线将使用摄像机和镜头数据来创建应用于最终渲染的准确失真效果。

有三种主要类型的输入数据,可用于对现实世界镜头的失真建模:

流送每帧失真参数和摄像机固有属性的LiveLink镜头源。

  • 流送摄像机FIZ以评估"镜头文件"资产的LiveLink摄像机源。

  • 使用摄像机Actor的当前聚焦和变焦来评估"镜头文件"资产。

接收输入数据并生成失真状态的底层对象称为 镜头失真处理程序(lens distortion handler)。向处理程序提供输入数据的对象称为失真数据的 生产者(producers)。从处理程序接收输出置换贴图并将其应用于图像的对象称为失真数据的 消费者(consumers)

镜头失真处理程序将接收失真参数和摄像机固有属性作为输入,并且将生成失真UV置换贴图和引用该置换贴图的后期处理材质。置换贴图分辨率可以在项目设置中指定,并且相较于最终渲染分辨率可以相对较小(例如,128 x 128)。

失真数据的生产者

有一些第三方摄像机追踪供应商,除了使用自己的协议提供基本摄像机位置和方向之外,还会提供校准后的镜头失真信息。此镜头数据(包括失真参数和摄像机固有属性)将针对每帧进行流送,并且可用于在无需"镜头文件"资产的情况下计算失真。为了将此数据流送到虚幻引擎中,我们提供了LiveLink镜头角色和镜头控制器。

镜头控制器将实例化新的镜头失真处理程序,并流送它从LiveLink源接收的数据。实例化的处理程序类型取决于镜头型号,这也必须由LiveLink源指定为静态数据。

对于在虚幻引擎中执行摄像机校准的用户,我们向LiveLink摄像机控制器添加了"镜头文件"资产。存在镜头文件时,摄像机控制器将在通过LiveLink流送的聚焦和变焦位置评估该镜头文件。此评估会在镜头文件中最接近的校准点之间插值,以生成当前帧的失真参数、摄像机固有属性和节点偏移。

或者,如果镜头文件包含ST地图,这些内容也会基于通过LiveLink流送的聚焦和变焦来插值。

静态摄像机FIZ和"镜头文件"资产

一些用户可能不通过LiveLink流送实时摄像机数据,因此管线还支持使用虚拟摄像机的当前聚焦和变焦设置评估镜头文件。

"摄像机校准"插件引入了可以添加到电影摄像机Actor的"镜头失真"组件。此组件可以直接基于当前摄像机设置评估镜头文件。

蓝图

用户可以使用蓝图创建镜头失真处理程序对象,并驱动其失真状态,而无需指定镜头文件。此工作流程不适合使用实时视频合成CG元素,但可用于偏好失真外观的纯CG项目。

失真数据的消费者

带有"镜头失真"组件的电影摄像机

"镜头失真"组件可以添加到电影摄像机Actor,以从场景中的所有生产者接收失真数据。

用户可以从组件设置中选择失真源。选择失真源后,后期处理材质将自动添加到目标摄像机组件,该组件会接收所选失真源生成的失真置换贴图。

将失真效果应用于摄像机并不会影响可能以该摄像机为目标的所有Composure CG层。

Composure CG层

用户可以在Composure CG层设置中指定失真源。可用源列表将基于关卡中当前正在为CG层的目标摄像机生成失真数据的生产者。

选择失真源后,后期处理材质将自动添加到CG层的场景捕获组件。此材质会接收所选失真源生成的失真置换贴图。请注意,目标摄像机必须是电影摄像机Actor。

将失真效果应用于CG层并不会影响目标摄像机的渲染输出。

过扫描

为了恰当地使CG图像失真,需要的输入像素往往超过原始非失真渲染中可用的像素。为了确保失真图像在每个像素包含有效数据,我们必须 过扫描 非失真渲染,从场景生成少量额外渲染。

过扫描中需要的额外像素百分比由镜头失真处理程序基于当前失真状态计算。然后,过扫描因子(Overscan Factor) 被失真消费者用于扩大非失真渲染的视野(FOV),然后再应用后期处理失真材质。这会生成带有更宽场景视图的非失真图像,但是目标图像分辨率与原始非失真图像相同。

用户还可以从失真生产者设置指定过扫描乘数,其中用户可以指定应该应用多少计算的过扫描(从0x到2x的任意数字)。

非失真

镜头失真处理程序会计算非失真置换贴图,该贴图可从蓝图访问。这样一来,用户就能创建自定义后期处理材质,然后应用这些材质以逆转传入媒体源中的失真。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消