镜头内视效快速入门

关于在LED摄影棚中使用镜头内视效的入门指南

Windows
MacOS
Linux

本入门页面展示了如何在虚幻引擎中设置项目以便使用镜头内视效(in-camera VFX)。读完本文后,你将:

  • 获得一组同步的nDisplay节点。

  • 获得镜头内视效的内外视锥。

  • 获得通过Live Link整合的实时摄像机追踪系统。

  • 获得一个带有可开启色键标记功能的绿幕。

  • 获得颜色校正体积(Color Correction Volumes),以便调整光照和颜色来匹配实物场地。

  • 可以启动所有集群节点并当场测试。

第1步 - 为镜头内视效创建项目

设置镜头内视效项目最简单的方法是通过镜头内视效示例 项目创建你的项目。

  1. 打开 Epic Games启动程序(Epic Games Launcher)

  2. 学习(Learn) 标签页中,找到 镜头内视效示例(In-Camera VFX Example) 项目。

  3. 在该项目页面上,单击 空闲(Free)

  4. 单击 创建项目(Create Project)

  5. 在你的设备上指定位置,以保存该项目并选择 创建(Create)

  6. 启动 虚幻引擎(Unreal Engine) 并打开 In-Camera VFX示例(In-Camera VFX Example) 项目。

在示例项目中 内容(Content) > 地图(Maps) 下,有两个关卡,分别是 主关卡(Main)空舞台(EmptyStage)。想通过虚幻引擎了解关于in-camera VFX的内容,打开 主(Main) 关卡。要开始一个全新的设置,可使用 空舞台(EmptyStage) 作为项目的起点。示例项目和关卡会自动启用必要的插件,提供辅助用的蓝图,配置其他设置,并将示例配置文件包含在内。

插件

  • nDisplay: 用于实现多屏渲染的虚幻引擎技术。

  • Live Link: 采集实时数据(如动作捕捉和摄像机追踪)的虚幻引擎API。

  • Live Link Over nDisplay: 主节点接收Live Link数据,并以一种高效且同步的方式重新分发追踪数据。

  • Multi-User Editing: 可在共享会话中使用多个编辑器。

  • Virtual Production Utilities: 虚拟制片(Virtual Production)的实用插件。

  • Media Framework Utilities: 与实时视频、时间码和SDI采集卡上同步锁定(genlock)相关的实用插件。

  • Aja 或 Blackmagic Media Player:为SDI采集卡提供支持。

蓝图

在In-Camera VFX示例项目中,你可以看到关卡使用了特殊的层级设置。此层级用于控制舞台的定位,并确保实际舞台和虚拟舞台能同时呈现。

in-camera VFX示例项目中包含的蓝图

Blueprint Object

Description

BP_StageOrigin

舞台原点(Stage Origin)相当于一个顶层控制对象,它可以移动所有与其绑定的子Actor,包括追踪摄像机、角色和道具。

BP_InCameraStageSettings

此资产包含用于自定义舞台的设置。项目中默认提供了色键标记(chroma-key marker),你也可以在"细节"面板的"色键"分段中更改此资产的材质。在渲染部分中,如果你想要让某些对象位于该关卡中,但不显示在LED墙上,你可以将这些对象添加到"隐藏图层"(Hidden Layers)数组中。你可以指定"光卡"(Light Cards)分段中的光卡图层。这些光仅在外部视锥中可见,以向LED舞台提供光照。

BP_SamplePawn

此对象会为虚拟世界中的追踪摄像机创建一个起点位置,并驱动该摄像机的整体运动。该Pawn应包含一个摄像机组件以正常发挥作用,并需要将"自动占据玩家"(Auto Possess Player)设为"玩家0"(Player 0)。

BP_IncameraSettings

此蓝图指定哪个摄像机用于内视锥。你需要在"重新投影的电影摄像机"(Reprojected Cine Camera)中指定该摄像机,该属性位于"细节"面板的"默认"分段中。蓝图还能确定内视锥的混合区域,以及"Incamera Frame"分段中的视场(FOV)乘数。

BP_WarpMonitor

此蓝图用于指定静态网格体,静态网格体用于描述屏幕上的几何体,以及用于扭曲视口。这些网格体需要根据LED屏幕以厘米为单位缩放,并相对于追踪原点进行偏移。

InnerFrustumCamera

控制虚拟世界中摄像机追踪的电影摄像机资产。

GreenScreenPlane

这是绑定到电影摄像机上的平面,添加了色键材质。切换此资产的可视性,以开启或关闭绿幕。

DisplayClusterRootActor

DisplayClusterRootActor的位置定义了投射外视锥的视角。

nDisplay配置文件

nDisplay配置文件是对计算机和显示屏关系和详细信息的说明。样本nDisplay配置文件包含在示例中。你可以通过使用设备的文件管理器,在 /Content/ExampleConfigs 下的项目文件夹中找到它们。关于nDisplay配置文件的更多信息,请参见nDisplay Configuration File Reference

第2步 - 创建LED面板几何体

这部分用示例展示了如何创建曲面LED墙。不同的LED摄影棚可能各不相同,因此请调整相关步骤以匹配你的显示器的尺寸和布局。

这些步骤展示了如何创建几何体,以便模拟真实世界中的LED面板。在此示例中,一面曲面墙由两个网格体组成。用到了两个网格体是因为它们将由不同的设备渲染。网格体上的每个方块代表一个500mm x 500mm的摄影棚,像素间距为2.6mm。

曲面LED墙的网格体表现形式。点击查看大图。

网格体的建模位置和方向应与真实世界的LED面板相一致。在此示例中,它们以直立的方式建模。几何体应以厘米为单位建模。

每个网格体应有两个带特定顺序的UV集。第一套UV集用于计算nDisplay的PICP_Mesh投影策略投影。第二套UV集用于确保色键追踪标记跨两个视口之间的接缝正确移动。

创建带有下列规格的UV集:

  • 首个UV集应缩放以覆盖范围0-1内的整个UV空间。此UV集应尽量均匀展开,以避免拉伸。缩放可以不具统一性。确保UV边缘周围没有间隔,且该UV不得超过0-1的范围。

    网格体的首个UV集

  • 第二套UV集应让UV对齐,以使其在相同的接缝处作为实际硬件配置匹配。它们的长宽比还应该与网格体一致。

    网格体的第二个UV集

创建网格体后,将几何体从3D建模软件中导出,然后将其导入至虚幻项目。

第3步 - 定义你的项目中的LED屏幕

你需要自定义项目中的页面布局和几何体,以反映你当前场景所含的内容。这些网格体应与真实世界中与你的追踪系统相关联LED墙的实体位置和尺寸一致。场景所用的追踪系统带有一个零点。这些网格体应置于相同的真实世界坐标中,因为其与追踪系统相关联。配合你的追踪设备找到零点位置,并相对于此零点测量偏移情况。

执行以下步骤以修改和自定义引擎中的页面布局和几何体:

  1. 在项目的 世界大纲视图(World Outliner) 中,单击 编辑BP_WarpMonitor(Edit BP_WarpMonitor)。

    编辑世界大纲视图中高亮显示的BP_WarpMonitor

  2. 在BP_WarpMonitor的 蓝图编辑器(Blueprint Editor) 中,切换至 视口(Viewport) 标签页。

  3. 默认情况下,示例中的BP_WarpMonitor中有四个静态网格体。选择并删除这四个网格体。

    BP_WarpMonitor中的默认网格体

  4. 找到两个导入的网格体并将它们拖入 组件(Components) 面板内的 根(root) 对象下。

    BP_WarpMonitor中导入的网格体

  5. 旋转并平移网格体以匹配面板的位置和方向,这些面板与真实世界中的追踪原点对应。在此示例中,面板正面为135 cm,到右侧的距离为50 cm并位于追踪原点上方13 cm。

    放置和旋转BP_WarpMonitor中的墙以匹配与追踪原点相关的LED墙物理布局

  6. 蓝图编辑器(Blueprint Editor) 中,切换至 事件图表(Event Graph) 标签页。

  7. 分配扭曲网格体至视口(Assign Warp Mesh to Viewport) 功能在运行时间扭曲网格体。由于现在只有两个网格体,请删除四个 分配扭曲网格体至视口(Assign Warp Mesh to Viewport) 节点的最后两个。

    点击查看大图。

  8. 将左墙的网格体从 组件(Components) 标签页拖至 事件图表(Event Graph)。将其连接至 网格体组件(Mesh Component) 输入,以实现 分配扭曲网格体至视口(Assign Warp Mesh to Viewport) 功能之一。将 Viewport_Id 重命名为 vp_1。对右墙网格体和另一个 分配扭曲网格体至视口(Assign Warp Mesh to Viewport) 功能重复此操作。将第二个 Viewport_Id 重命名为 vp_2

    点击查看大图。

  9. 蓝图编辑器(Blueprint Editor) 中,选择 组件(Components) 标签页中的网格体。在网格体 细节(Details) 面板的 渲染(Rendering) 部分中,将 可见(Visible) 参数设为 false,以免几何体被渲染。

10.编译(Compile)保存(Save) 蓝图。

第4步 - 设置nDisplay配置文件

尽管你可以从头开始创建这些配置文件,但还是强烈建议从提供的示例配置文件开始操作,并对其进行更改以描述你的特殊设置。这些样本配置文件包括一个简单的设置和各部分的进一步说明文档。

执行以下步骤以更改其中一个示例配置文件,以匹配上一个部分中的页面设置:

  1. 使用你的设备的文件管理器导航至你的项目文件夹。

  2. 在文本编辑器中打开 Content/ExampleConfigs/Simple_InCameraFrustum.cfg

  3. 在文件的 群集节点(Cluster nodes) 部分中:

    1. 通过添加 master="true" sound="true",将群集节点之一设为主节点。

    2. 更改节点的 IP地址 以使之与你的设备匹配。

    3. 分配两个窗口至群集节点。

      [cluster_node] id="node_1" addr="192.168.1.100" window="wnd_1" master="true" sound="true"
      [cluster_node] id="node_2" addr="192.1.68.1.38" window="wnd_2"
  4. 在文件的 应用程序窗口(Application windows) 部分中:

    1. 添加你的设备监控器分辨率至窗口节点。在此示例中,监控器分辨率为2560x1440。

    2. 任何镜头内窗口都需要包含 rtt_inner 视口,后者负责内视锥。

    3. 分配与BP_WarpMonitor Blueprint、vp_1vp_2 中名称匹配视口至两个窗口。

      [window] id="wnd_1" viewports="rtt_inner, vp_1" fullscreen="true" WinX="0" WinY="0" ResX="2560" ResY="1440"
      [window] id="wnd_2" viewports="rtt_inner, vp_2" fullscreen="true" WinX="0" WinY="0" ResX="2560" ResY="1440"
  5. 在文件的 视口(Viewports) 部分中:

    1. 将LED面板的分辨率添加至对应的视口。在本示例中,由于每个箱体(cabinet)均为500mmx500mm,像素间距为2.6mm,所以每个箱体像素为192x192。因此,左墙为4x4个箱体的网格,其分辨率为768x768,而右墙为3x4箱体的网格,分辨率为768x576。

    2. 将rt_inner视口保持与样本配置一致。

      [viewport] id="vp_1"  x="0" y="0" width="768" height="768" projection="proj_warp" buffer_ratio="1"
      [viewport] id="vp_2" x="0" y="0" width="768" height="576" projection="proj_warp" buffer_ratio="1"
      [viewport] id="rtt_inner"   x="0" y="1440" width="1920" height="1080" projection="proj_incamera" rtt=true
  6. 投影策略(Projection policies) 部分中,添加 PICP_Mesh摄像机 投影策略,让nDisplay获知将提供的网格体上的投影作为基础,而视口则以摄像机为基础。

    [projection] id="proj_warp"      type="picp_mesh"
    [projection] id="proj_incamera"     type="camera"
  7. 文件其他部分保留不变。选择 文件(File)> 另存为(Save as) 并重命名配置文件。在此示例中,最终配置文件应类似于:

    [info] version="23"
    
    [cluster_node] id="node_1" addr="192.168.1.100" window="wnd_1" master="true" sound="true"
    [cluster_node] id="node_2" addr="192.1.68.1.38" window="wnd_2"
    
    [window] id="wnd_1" viewports="rtt_inner, vp_1" fullscreen="true" WinX="0" WinY="0" ResX="2560" ResY="1440"
    [window] id="wnd_2" viewports="rtt_inner, vp_2" fullscreen="true" WinX="0" WinY="0" ResX="2560" ResY="1440"
    
    [viewport] id="vp_1"  x="0" y="0" width="768" height="768" projection="proj_warp" buffer_ratio="1"
    [viewport] id="vp_2" x="0" y="0" width="768" height="576" projection="proj_warp" buffer_ratio="1"
    [viewport] id="rtt_inner"   x="0" y="1440" width="1920" height="1080" projection="proj_incamera" rtt=true
    
    [projection] id="proj_warp"      type="picp_mesh"
    [projection] id="proj_incamera"     type="camera"
    
    [camera] id="camera_static" loc="X=0,Y=0,Z=0"
    
    [general] swap_sync_policy="1"
    
    [network] cln_conn_tries_amount="10" cln_conn_retry_delay="1000" game_start_timeout="30000" barrier_wait_timeout="5000"

关于nDisplay配置文件的更多详细信息,请参见nDisplay Configuration File Reference 。你可以在nDisplay Projection Policies 中阅读关于基于网格体和PICP_Mesh投影的策略。

如果你的文件以任何方式被误配置,渲染节点将无法启动。每个节点都会寻找其他节点,以确保全部运行。如果一个被误配置,所有节点都将关闭。如果你遇到此问题,每个节点会添加一个日志文件至 Project/Saved/Logs 并带有关于该问题的更多信息。

第5步 - 通过nDisplay启动你的项目

图表中说明了nDisplay如何通过网络运行,并为in-camera VFX实现设备的显示成像。点击查看大图。

在nDisplay设置中,有 计算机和其他计算机 群集。主计算机是管理和调度输入信息的集中位置。主计算机还确保了该群集内的所有计算机均处于同步状态,且同时接收输入和内容和数据。请参阅nDisplay Overview ,了解nDisplay设置上的更多信息。

nDisplayListener

nDisplayListener是存在于主计算机和该集群内每台计算机上的极简应用程序。Listener可接收各种远程命令;如通过某个路径和参数列表启动已有项目,或终止某个项目。Listener必须在启动程序之前运行。

执行以下步骤,在所有计算机上启动nDisplayListener:

  1. 打开你设备上安装虚幻引擎的文件夹,并导航到文件夹 UE_4.25/Engine/Binaries/DotNET/

    nDisplayListener和nDisplayLauncher在用户计算机上的位置

  2. 在该文件夹中,运行 nDisplayListener.exe

    nDisplayListener运行截图

启动程序

启动程序可同时启动可用计算机上的多个项目,只要这些计算机都在后台运行监听器(Listener)即可。启动程序可在本地网络上从任何计算机运行。

执行以下步骤,在一台计算机上启动nDisplayListener:

  1. 打开你设备上安装虚幻引擎的文件夹,并导航到文件夹 UE_4.25/Engine/Binaries/DotNET/

    nDisplayListener和nDisplayLauncher在用户计算机上的位置

  2. 运行 nDisplayLauncher.exe 以打开nDisplay启动程序窗口。

  3. 启动程序标签页(Launcher Tab) 的nDisplay启动程序窗口中,选择 添加项目到Editor -game

    nDisplay启动程序窗口,带添加项目到Editor -game高亮显示

  4. 导航至位于 Engine\Binaries\Win64 中的UE4可执行文件。选择 UE4Editor.exe 并单击 打开(Open)

  5. 在新的 选择UE4项目(Select UE4 Project) 窗口中,导航至你想要启动的UE项目文件。选择项目并单击 打开(Open)。此操作将把引擎和项目路径添加至 应用程序(Applications) 列表。

  6. 配置文件(Config Files) 字段右侧,选择 添加(Add)。导航至该项目的nDisplay配置文件并选中它。

  7. 应用程序(Applications) 列表中选择项目并单击 运行(Run)

  8. nDisplay将打开并运行该项目。

注意(Note): 你也可以在所有计算机上部署该项目的可执行文件包。但是,如果使用此方法,你需要打包另一个可执行文件,才能发送更新至所有计算机。通过在带有 -game 的编辑器中运行项目,你可以在多用户会话中,将项目内的更改发送至其他计算机。

Live Link是虚幻引擎内摄取实时数据的框架,这些实时数据包括摄像机、光源、变换信息和基本属性。对于in-camera VFX,Live Link在分发追踪摄像机的信息时具有至关重要的作用,可将其启用,以配合nDisplay将追踪信息送至每个群集节点。虚幻引擎通过Live Link实现了对多种摄像机追踪合作伙伴的支持,其中包括Vicon、Stype、Mo-Sys和Ncam,以及多种其他专业追踪解决方案。

注意: 这一步的关键是你要有一个可用的Live Link源。

要通过带nDisplay的Live Link追踪内部摄像机视锥:

  1. 虚幻编辑器(Unreal Editor) 中,前往主菜单并选择 窗口(Window)。在下拉菜单中,选择 Live Link 以打开Live Link面板。

    Window下拉菜单中Live Link高亮显示的编辑器

  2. 在Live Link面板中,选择 添加源(Add Source) 按钮。在下拉菜单中,选择你想要使用的Live Link源。

    当添加Live Link源时,Mobu Live Link可用的截图

    在此示例中,Motion Builder为Live Link源。

  3. 单击 预设(Presets),然后选择 另存为预设(Save As Preset)

  4. 在主菜单中,选择 编辑(Edit)> 项目设置(Project Settings)

  5. 项目设置(Project Settings) 中的 插件(Plugins) 下,选择 Live Link

  6. 将Live Link预设添加至 默认LiveLink预设(Default Live Link Preset) 以在项目运行时自动应用预设。

    Live Link插件预设更改为Mobu Live Link预设

  7. 世界大纲视图(World Outliner) 中,选择 InnerFrustumCamera

  8. 细节(Details) 面板的 组件(Components) 部分,选择 LiveLinkComponentController

  9. Live Link 部分,将 主题表示(Subject Representation) 字段更改为live link源。

    InnerFrustumCamera的LiveLinkComponentController中主题表示字段更改的截图

  10. 保存项目。

  11. 在nDisplay启动程序中,添加 -messaging 至自定义命令行参数。

  12. 运行nDisplay。

  13. 现在,可通过live link源追踪内部摄像机视锥。

第7步 - 绿幕和色键

你可以将在虚拟世界中更改内视锥中LED面板上的内容,将其改为带有色键标记的绿幕。

引擎中绿幕开启的截图

执行以下步骤让绿幕变得可见,并修改色键标记:

  1. 世界大纲视图(World Outliner) 中,选择 GreenScreenPlane

  2. 细节(Details) 面板的 渲染(Rendering) 部分中,启用 可见(Visible) 字段。

  3. 世界大纲视图(World Outliner) 中,选择 BP_IncameraStageSettings

  4. 细节(Details) 面板的 色键(Chromakey ) 部分中,有选项可供修改边缘模糊和色键标记。

第8步 - 色彩校正体积

通过 色彩校正体积(Color Correction Volumes),你可以调整并校正场景中环境和对象的色彩。通过调整色彩校正体积,你可以在真实世界组合和LED墙显示的环境之间匹配光照和阴影。

色彩校正体积添加粉色至环境的截图

在示例项目中,色彩校正体积被用于添加粉色,以调整环境的颜色。

要为你的场景添加色彩校正体积,执行以下步骤:

  1. 在编辑器的 内容浏览器(Content Browser) 中,打开 视图选项(View Options) 面板并启用 显示引擎内容(Show Engine Content)显示插件内容(Show Plugin Content)

  2. 选择 内容(Content) 旁边的文件夹图标。在列表中,展开 VirtualProductionUtilities内容(VirtualProductionUtilities Content) 并选择 CCV

  3. 将蓝图 BP_ColorCorrectVolume 添加到该场景中。

  4. 世界大纲视图(World Outliner) 中选择 BP_ColorCorrectVolume

  5. 细节(Details) 面板的 默认(Default) 部分中,展开 色彩校正(Color Correct) 参数。

  6. 展开 全局(Global) 参数并修改 伽马(Gamma) 色彩以更改体积的颜色。

第9步 - 看你的了

本指南介绍了如何在LED屏幕上设置显示内容,如何在多台计算机上启动你的项目,以及如何将摄像机追踪整合到项目中。

多显示设置要求实现软件和硬件层面的同步。使用相同的模拟时间信息,不仅生成的内容要在所有PC上同时准备就绪,而且还需要在正确的时间进行显示交换(将当前图像换成视频卡缓冲区中的下一个图像),以免显示中出现类似撕裂的瑕疵效果。关于在设备上设置显示同步和genlock,以在多个显示之间创建无缝视图的信息,请参阅nDisplay中的同步

除了同步显示外,引擎的时间码和帧生成需要匹配来自摄像机的输入。如何在所有设备之间同步时间码以及同步锁定(genlock)引擎的步骤,请参见时间码以及同步锁定

要在拍摄影片时控制场景和显示,你可以尝试数种in-camera VFX方法:

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback