虚拟摄像机组件快速入门

虚拟摄像机组件是一个基础架构,是在虚幻引擎中编译自定义虚拟摄像机的基础。

Choose your operating system:

Windows

macOS

Linux

概述

虚拟摄像机组件(VCamComponent)(Virtual Camera Component (VCamComponent)) 是支持在 虚幻引擎(Unreal Engine) 中编译自定义虚拟摄像机的基本组件。

利用VCamComponent,用户可以通过添加自定义的 修饰器(Modifiers) 输出提供程序(Output Providers) 在虚幻引擎中驱动电影摄像机。

目标

此快速入门指南旨在引导你使用虚拟摄像机组件完成创建虚拟摄像机的基本步骤。

目的

学习完本教程后,你将了解以下内容:

  • 如何在场景中放置摄像机以及添加VCamComponent。

  • 如何向摄像机添加修饰器以自定义其行为。

  • 如何添加基本键输入以启用和禁用修饰器。

  • 如何使用不同的输出提供程序。

1 - 必要设置

在开始之前,你需要在项目中启用相应的插件。

  1. 点击 设置 > 插件(Settings > Plugins) 以打开 插件(Plugins) 菜单。

    插件菜单

  2. 搜索 虚拟摄像机(Virtual Camera) Live Link 远程会话(Remote Session) 插件并启用它们。

    虚拟摄像机

    Live Link

    远程会话

  3. 重启编辑器。

阶段成果

你现在可以开始创建虚拟摄像机了。

2- 创建虚拟摄像机

  1. 放置Actor(Place Actors) 面板上,选择 过场动画(Cinematic) 类别,然后点击 电影摄像机Actor(Cine Camera Actor) 并将其拖动到你的场景。

    拖动电影摄像机Actor

  2. 选择电影摄像机Actor之后,转到 细节(Details) 面板并选择 CameraComponent

    选择CameraComponent

  3. 点击 添加组件(Add Component) 按钮,搜索并添加 VCam 组件。

    搜索VCam

    确保VCam组件是CameraComponent的子项。

  4. 点击选中项以添加组件。

  5. 在场景中自由移动电影摄像机actor,并根据需要调整 当前摄像机设置(Current Camera Settings) 。在下例中,我们移动摄像机,将镜头框定场景中的猫鼬,然后调整摄像机,始终使主题处于焦点上。

    调整摄像机

    你可以转到

    [使用电影摄像机Actor](AnimatingObjects/Sequencer/HowTo/CineCameraActors)
    文档页面,了解有关调整摄像机设置的更多信息。

  6. 选择摄像机actor,然后在组件层级中选择 VCam 组件。

    选择VCam组件

  7. 现在可以看到 虚拟摄像机(Virtual Camera) 部分下提供了各种属性。

    虚拟摄像机属性

这些属性如下:

属性

说明

启用(Enabled)

此开关启用和禁用整个虚拟摄像机组件。

Live Link主题(Live Link Subject)

这是通过Live Link插件使用的主题。摄像机使用主题的变换在场景中定位摄像机。

将视口锁定到摄像机(Lock Viewport to Camera)

将从虚拟摄像机的视点渲染的视口。

禁用Sequencer生成的组件(Disable Component when Spawned by Sequencer)

当虚拟摄像机组件由序列生成时,禁用该组件。

目标视口(Target Viewport)

这是组件用于渲染其视图的视口。

输出提供程序(Output Providers)

包含所有输出设备目标的列表。

修饰器上下文(Modifier Context)

这是一个对象,包含在所有修饰器之间共享的任意数据。

修饰器堆栈(Modifier Stack)

包含添加到组件的所有修饰器的列表。

阶段成果

你已经在场景中放置了电影摄像机Actor并添加了虚拟摄像机组件。现在已经可以通过添加修饰器来自定义摄像机。

3 - 添加修饰器

通过添加自定义效果和行为来模拟现实摄像机行为,修饰器可以操控摄像机。你可以使用蓝图或C++创建自定义修饰器,将其添加到堆栈以将不同的效果分层。

堆栈中的修饰器将按照添加顺序来执行,因此需要注意添加修饰器的顺序。

创建你的第一个修饰器

  1. 在内容浏览器中点击右键,在 虚拟摄像机(Virtual Camera) 类别下选择 VCam修饰器(VCam Modifier)

    创建虚拟摄像机修饰器

  2. 将你的蓝图命名为VCM_Sine,然后双击将其打开。

    将蓝图命名为VCM_Sine

  3. 事件图表(Event Graph) 中,你会注意到两个默认节点 - Event On Initialize Event On Apply 。将修饰器添加到修饰器堆栈时,将会调用 Event On Initialize 节点一次。此节点类似于蓝图中的 Construction Script 节点。 Event On Apply 节点将会每帧执行,类似于蓝图中的 Event Tick 节点。

    默认节点

  4. 事件图表(Event Graph) 中,点击右键并搜索和选择 Now 节点,并将其添加到图表。

    Now节点

  5. 返回值(Return Value) 引脚拖出一根引线,并选择 提升为变量(Promote to Variable) 。将变量命名为 StartTime

    创建StartTime变量

  6. StartTime 连接到 Event On Initialize 节点,如下所示。

    将StartTime连接到Event On Initialize

  7. Event On Apply 节点上,从 摄像机组件(Camera Component) 引脚拖出一根引线,然后搜索和选择 Get World Location 以创建相应节点。

    选择Get World Location

  8. 右键点击 Get World Location 节点的 返回值(Return Value) 引脚并选择 分割结构体引脚(Split Struct Pin)

    选择分割结构体引脚

  9. 摄像机组件(Camera Component) 引脚拖出一根引线,然后搜索并选择 Set World Location 。将此节点连接到 Event On Apply ,如下所示。

    选择Set World Location

  10. 右键点击 Set World Location 节点中的 新位置(New Location) 引脚,然后选择 分割结构体引脚(Split Struct Pin) 。连接X和Y值,如下所示。

    选择分割结构体引脚

  11. StartTime 变量拖动到 事件图表(Event Graph) 中,然后选择 Get StartTime 。 按照前述方式,将 Now 节点添加到图表。

  12. 提取两个节点的值,从结果引脚中拖出一根引线,然后搜索并选择 Get Total Seconds ,如下所示。

    选择Get Total Seconds

  13. Get Total Seconds 节点拖出一条引线,然后搜索并选择 浮点*浮点(float * float)

    选择浮点*浮点

  14. 右键点击 事件图表(Event Graph) ,然后搜索并选择 Get Pi 。将 Pi 节点连接到multiplication节点。

    选择Get Pi

    将Pi连接到multiplication节点

  15. multiplication 节点上点击 添加引脚(Add pin) 以添加另一个输入。

  16. 创建名为 FrequencyScale 的新浮点变量,将其连接到 multiplication 节点。编译蓝图,输入1作为 FrequencyScale 的默认值。

  17. multiplication 结果拖出一根引线,然后搜索并选择 Sin (Radians) ,如下所示。

    选择Sin (Radians)

  18. Sin 节点拖出一根引线,然后搜索并选择 Map Range Clamped

  19. 创建名为 Wave Minimum Wave Maximum 的两个节点,并按照如下所示连接它们。

    Map Range Clamped

  20. 编译蓝图,将 Wave Minimum 的默认值设置为 -10 。然后,将 Wave Minimum 的默认值设置为 10

  21. 右键点击 事件图表(Event Graph) ,然后搜索并选择 Addition 节点。将 Get Actor Location 节点中的Z值与 Map Range Clamped 节点的结果连接起来,如下所示。

  22. addition 节点的结果与 Set Actor Location 节点的Z值连接起来,如下所示。

    添加Z值

  23. 转至 变量(Variables) 部分并为所有浮点变量点击 眼睛(eye) 图标以使其公开,如下所示。

    将变量设置为公开

  24. 编译并保存蓝图。

将修饰器添加到堆栈

现在,你已经准备好将自定义修饰器添加到 修饰器堆栈(Modifier Stack)

  1. 选择你的摄像机actor,然后在组件层级中选择 Vcam 组件。

  2. 点击修饰器堆栈上的 加号(plus sign) ,将条目添加到列表。

    将修饰器添加到堆栈

  3. 添加名称 Sine Movement 并取消选中 启用(Enabled) 复选框。

    添加名称Sine Movement

  4. 点击 下拉箭头(dropdown arrow) 以打开 生成的修饰器(Generated Modifier) ,然后从列表中选择 VCM_Sine

    从列表中选择VCM_Sine

  5. 选中 启用(Enabled) 复选框以查看运作中的修饰器。你现在应该可以看到摄像机actor在场景中移动。

    VCC_SineMovement.gif

  6. 在你的修饰器激活时,可以展开 生成的修饰器(Generated Modifier) 行并看到公开的公共变量。你现在可以修改这些值并查看即时发生的更改。

    展开修饰器公共变量

阶段成果

在此部分中,你学习了如何使用蓝图创建自定义摄像机修饰器。你学习了有关 初始化时(On Initialize) 应用时(On Apply) 事件的指示,以及如何使用它们来创建自定义行为。

你还学习了如何将自定义修饰器添加到 修饰器堆栈(Modifier Stack) ,以在编辑器中操控你的虚拟摄像机。

4 - 使用输入系统

当前输入事件实现是一个占位符,将来会被更高级的版本取代。

虚拟摄像机组件可以直接在修饰器中使用编辑器输入事件,为用户提供更多的功能按钮。

以下是如何使用此系统将更多功能添加到你的修饰器。

目标

本节我们的目标是将键输入添加到修饰器,这样我们就可以通过按一个按键来启用和禁用效果。

创建输入事件

  1. 打开 VCM_Sine 蓝图。

  2. Event On Apply 拖出一根引线,然后创建 Branch 节点。将 True 引脚连接到 SetWorldLocation 节点。

  3. 创建新的布尔值变量,然后将其命名为 Active 。将此变量连接至 Branch 节点,如下所示。

    添加Active branch

  4. 编译并保存。

  5. 右键点击 事件图表(Event Graph) ,然后搜索并选择函数 Get VCamInputSubsystem

    Get VCam Subsystem

  6. VCam Input Subsystem 节点拖出一根引线,然后搜索并选择 Bind Key Up Event

    Bind KeyUp Event

  7. 从红色 委托(Delegate) 引脚拖出一根引线,然后搜索并选择 添加自定义事件(Add Custom Event) 。将新的自定义事件命名为 ToggleActivation

    添加自定义事件

    切换激活

  8. Active 变量拖动到 事件图表(Event Graph) ,然后选择 Set Active 。将 ToggleActivation 执行引脚连接到 Set Active 节点。

  9. 将另一个 Active 变量拖动到 事件图表(Event Graph) ,然后选择 Get Active 。从 Get Active 节点拖出一根引线,然后搜索并选择 Not 。将 Not 节点连接到 Active 引脚,如下所示。

    切换Active变量

  10. Bind Key Up Event 节点上,点击 键盘(keyboard) 图标并按S键,将其绑定到事件。或者,可以按 下拉箭头 并从列表中选择需要的键。

    绑定S键

    S键已绑定

  11. 返回你的场景,并在 VCM_Sine 修饰器激活时,按S来开启或关闭效果。

  12. 由于此事件每次在用户按S键时都会执行,因此当用户出于其他目的按此键时可能会引发冲突。例如,如果用户使用字母S对内容浏览器中的资产重命名,就会执行该事件。为了防止这种情况,可以向代码中添加额外的安全措施。

  13. ToggleActivation 事件和 Set Active 节点之间添加 Branch 节点,如下所示。

    添加Branch节点

  14. 键事件(Key Event) 引脚拖出一根引线,然后搜索并选择 Get Input from Key Event 函数。

    获取输入事件

  15. 从该节点拖出一根引线,然后搜索并选择 Is Shift Down 函数。

    添加Is Shift Down节点

  16. 最后,将该节点连接到 Branch ,如下所示。

    将节点连接到Branch

  17. 你的事件现在将仅在同时按下Shift和S键时执行。

阶段成果

在此部分中,你添加了在按下S键时执行的输入事件。此事件将启用和禁用修饰器的效果。此外,你添加了Shift键作为安全措施,以防止用户出于其他目的按下S键时可能发生的冲突。

5 - 添加输出提供程序

输出提供程序(Output Provider) 系统用于将虚拟摄像机的输出路由至各种提供程序,包括视口、使用远程会话协议的设备、Composure插件和各种受支持的视频捕获卡。

输出提供程序列表始终按照从上到下的顺序执行。

我们来看一下虚拟摄像机组件随附的可用输出提供程序。

视口输出提供程序

此提供程序将虚拟摄像机的视图直接输出到编辑器中的视口。

  1. 选择 VCam 组件并点击 输出提供程序(Output Providers) 旁边的 加号(plus sign) ,向列表添加新提供程序。

    向列表添加提供程序

  2. 从列表中选择 视口输出提供程序(Viewport Output Provider) 选项。

    视口输出提供程序

  3. 你现在可以在不同的提供程序之间看到共享的属性:

    属性

    说明

    激活(Is Active)

    启用和禁用提供程序。

    UMG覆层(UMG Overlay)

    覆盖在图像输出上面的UMG控件。

    使用重载分辨率(Use Override Resolution)

    设置输出图像的自定义分辨率。在使用具有固定分辨率的外部设备时,此功能尤其有用。

    重载分辨率(Override Resolution)

    这是输出图像的固定分辨率。

  4. 作为示例,点击 UMG覆层(UMG Overlay) 下拉菜单,然后搜索并选择 TestUMG 以将测试控件添加到视口。

    添加测试UMG

  5. 最后,通过点击复选框,将输出提供程序设置为 激活(Active)

    将输出提供程序设置为激活

  6. 你现在应该可以在场景中的主要视口上看到覆层。以下示例展示了如何自定义摄像机输出以满足特定需求。

    UMG覆层

虚幻远程输出提供程序

此提供程序将主要编辑器视口输出至通过远程会话协议连接的远程设备。任何通过此方法连接的兼容设备都可以用于此目的。

接下来,你需要将项目配置为使用远程会话连接外部设备。

  1. 打开你的 设置 > 项目设置(Settings > Project Settings)

    打开项目设置

  2. 转至 UDP消息(UDP Message) 部分,将你的 单播端点(Unicast Endpoint) 设置为你计算机的IP地址,在IP的末尾添加 :0 以指示端口号。

    单播端点

  3. 转至 渲染(Rendering) 部分,然后在 默认设置(Default Settings) 下,将你的 帧缓冲像素格式(Frame Buffer Pixel Format) 设置为 8位RGBA(8bit RGBA)

    帧缓冲格式

  4. 重启编辑器。

iOS设备设置

  1. 从应用商店中将 虚幻远程2应用 Unreal Remote 2 app 下载到你启用了ARKit的iOS设备上,并启动应用。

    iOS设备

  2. 输入你计算机的IP地址,并点击 连接(Connect) 按钮尝试建立连接。

连接你的设备

  1. 点击Unreal Remove 2应用上的 连接(Connect)

  2. 在你的虚拟摄像机actor上选择 VCam 组件,然后从输出提供程序下拉列表中选择 虚幻远程输出提供程序(Unreal Remote Output Provider)

    选择远程输出提供程序

  3. 你现在应该可以看到映射在设备界面上的主编辑器视口。

    设备上映射的界面

媒体输出提供程序

媒体输出提供程序(Media Output Provider) 将虚拟摄像机的输出发送到 虚幻媒体框架 支持的任何设备,例如Black Magic和AJA的视频捕获卡。

选择设备之后,你可以选择用于指定输出参数的 输出配置(Output Config)

输出配置

如需了解如何使用虚幻媒体框架的更多信息,请访问"媒体框架"文档页。

Composure输出提供程序

Composure输出提供程序(Composure Output Provider) 将虚拟摄像机的输出发送到 渲染目标 ,该输出可以被 Composure插件 直接使用。此外,你可以指定将用于渲染摄像机视图的 Composure图层目标(Composure Layer Targets)

Composure插件

如需了解如何使用Composure插件的更多信息,请访问 使用Composure的实时合成 文档页。

阶段成果

在此部分中,你学习了如何将不同的输出提供程序添加到虚拟摄像机组件。你现在可以使用虚拟摄像机直接输出到编辑器视口,或通过远程会话协议输出到外部设备。

你还学习了如何发送输出,以供虚幻媒体框架和Composure插件处理。

后续步骤

现在你已经知道了如何编译自己的虚拟摄像机,如需查看虚幻引擎中随附的预编译虚拟摄像机Actor,请前往 虚拟摄像机Actor快速入门

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