Choose your operating system:
Windows
macOS
Linux
本入门页面展示了如何在虚幻引擎中设置项目以便使用镜头内视效(in-camera VFX)。读完本文后,你将:
-
获得一组同步的nDisplay节点。
-
获得镜头内视效的内外视锥。
-
获得通过Live Link整合的实时摄像机追踪系统。
-
获得一个带有可开启色键标记功能的绿幕。
-
获得颜色校正体积(Color Correction Volumes),以便调整光照和颜色来匹配实物场地。
-
可以启动所有集群节点并当场测试。
第1步 - 为镜头内视效创建项目
设置镜头内视效项目最简单的方法是通过 镜头内视效示例 项目创建你的项目。
-
打开 Epic Games启动程序(Epic Games Launcher) 。
-
在 学习(Learn) 标签页中,找到 镜头内视效示例(In-Camera VFX Example) 项目。
-
在该项目页面上,单击 空闲(Free) 。
-
单击 创建项目(Create Project) 。
-
在你的设备上指定位置,以保存该项目并选择 创建(Create) 。
-
启动 虚幻引擎(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示例项目中,你可以看到关卡使用了特殊的层级设置。此层级用于控制舞台的定位,并确保实际舞台和虚拟舞台能同时呈现。
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面板相一致。在此示例中,它们以直立的方式建模。几何体应以厘米为单位建模。
每个网格体应有两个带特定顺序的UV集。第一套UV集用于计算nDisplay的PICP_Mesh投影策略投影。第二套UV集用于确保色键追踪标记跨两个视口之间的接缝正确移动。
创建带有下列规格的UV集:
-
首个UV集应缩放以覆盖范围0-1内的整个UV空间。此UV集应尽量均匀展开,以避免拉伸。缩放可以不具统一性。确保UV边缘周围没有间隔,且该UV不得超过0-1的范围。
-
第二套UV集应让UV对齐,以使其在相同的接缝处作为实际硬件配置匹配。它们的长宽比还应该与网格体一致。
创建网格体后,将几何体从3D建模软件中导出,然后将其导入至虚幻项目。
第3步 - 定义你的项目中的LED屏幕
你需要自定义项目中的页面布局和几何体,以反映你当前场景所含的内容。这些网格体应与真实世界中与你的追踪系统相关联LED墙的实体位置和尺寸一致。场景所用的追踪系统带有一个零点。这些网格体应置于相同的真实世界坐标中,因为其与追踪系统相关联。配合你的追踪设备找到零点位置,并相对于此零点测量偏移情况。
执行以下步骤以修改和自定义引擎中的页面布局和几何体:
-
在项目的 世界大纲视图(World Outliner) 中,单击 编辑BP_WarpMonitor(Edit BP_WarpMonitor)。
-
在BP_WarpMonitor的 蓝图编辑器(Blueprint Editor) 中,切换至 视口(Viewport) 标签页。
-
默认情况下,示例中的BP_WarpMonitor中有四个静态网格体。选择并删除这四个网格体。
-
找到两个导入的网格体并将它们拖入 组件(Components) 面板内的 根(root) 对象下。
-
旋转并平移网格体以匹配面板的位置和方向,这些面板与真实世界中的追踪原点对应。在此示例中,面板正面为135 cm,到右侧的距离为50 cm并位于追踪原点上方13 cm。
-
在 蓝图编辑器(Blueprint Editor) 中,切换至 事件图表(Event Graph) 标签页。
-
分配扭曲网格体至视口(Assign Warp Mesh to Viewport) 功能在运行时间扭曲网格体。由于现在只有两个网格体,请删除四个 分配扭曲网格体至视口(Assign Warp Mesh to Viewport) 节点的最后两个。
-
将左墙的网格体从 组件(Components) 标签页拖至 事件图表(Event Graph) 。将其连接至 网格体组件(Mesh Component) 输入,以实现 分配扭曲网格体至视口(Assign Warp Mesh to Viewport) 功能之一。将 Viewport_Id 重命名为 vp_1 。对右墙网格体和另一个 分配扭曲网格体至视口(Assign Warp Mesh to Viewport) 功能重复此操作。将第二个 Viewport_Id 重命名为 vp_2 。
-
在 蓝图编辑器(Blueprint Editor) 中,选择 组件(Components) 标签页中的网格体。在网格体 细节(Details) 面板的 渲染(Rendering) 部分中,将 可见(Visible) 参数设为 false ,以免几何体被渲染。
10. 编译(Compile) 并 保存(Save) 蓝图。
第4步 - 设置nDisplay配置文件
尽管你可以从头开始创建这些配置文件,但还是强烈建议从提供的示例配置文件开始操作,并对其进行更改以描述你的特殊设置。这些样本配置文件包括一个简单的设置和各部分的进一步说明文档。
执行以下步骤以更改其中一个示例配置文件,以匹配上一个部分中的页面设置:
-
使用你的设备的文件管理器导航至你的项目文件夹。
-
在文本编辑器中打开 Content/ExampleConfigs/Simple_InCameraFrustum.cfg 。
-
在文件的 群集节点(Cluster nodes) 部分中:
-
通过添加 master="true" sound="true" ,将群集节点之一设为主节点。
-
更改节点的 IP地址 以使之与你的设备匹配。
-
分配两个窗口至群集节点。
[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"
-
-
在文件的 应用程序窗口(Application windows) 部分中:
-
添加你的设备监控器分辨率至窗口节点。在此示例中,监控器分辨率为2560x1440。
-
任何镜头内窗口都需要包含 rtt_inner 视口,后者负责内视锥。
-
分配与BP_WarpMonitor Blueprint、 vp_1 和 vp_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"
-
-
在文件的 视口(Viewports) 部分中:
-
将LED面板的分辨率添加至对应的视口。在本示例中,由于每个箱体(cabinet)均为500mmx500mm,像素间距为2.6mm,所以每个箱体像素为192x192。因此,左墙为4x4个箱体的网格,其分辨率为768x768,而右墙为3x4箱体的网格,分辨率为768x576。
-
将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
-
-
在 投影策略(Projection policies) 部分中,添加 PICP_Mesh 和 摄像机 投影策略,让nDisplay获知将提供的网格体上的投影作为基础,而视口则以摄像机为基础。
[projection] id="proj_warp" type="picp_mesh" [projection] id="proj_incamera" type="camera"
-
文件其他部分保留不变。选择 文件(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设置中,有 主 计算机和其他计算机 群集 。主计算机是管理和调度输入信息的集中位置。主计算机还确保了该群集内的所有计算机均处于同步状态,且同时接收输入和内容和数据。请参阅 nDisplay Overview ,了解nDisplay设置上的更多信息。
nDisplayListener
nDisplayListener是存在于主计算机和该集群内每台计算机上的极简应用程序。Listener可接收各种远程命令;如通过某个路径和参数列表启动已有项目,或终止某个项目。Listener必须在启动程序之前运行。
执行以下步骤,在所有计算机上启动nDisplayListener:
-
打开你设备上安装虚幻引擎的文件夹,并导航到文件夹 UE_4.25/Engine/Binaries/DotNET/ 。
-
在该文件夹中,运行 nDisplayListener.exe 。
启动程序
启动程序可同时启动可用计算机上的多个项目,只要这些计算机都在后台运行监听器(Listener)即可。启动程序可在本地网络上从任何计算机运行。
执行以下步骤,在一台计算机上启动nDisplayListener:
-
打开你设备上安装虚幻引擎的文件夹,并导航到文件夹 UE_4.25/Engine/Binaries/DotNET/ 。
-
运行 nDisplayLauncher.exe 以打开nDisplay启动程序窗口。
-
在 启动程序标签页(Launcher Tab) 的nDisplay启动程序窗口中,选择 添加项目到Editor -game 。
-
导航至位于 Engine\Binaries\Win64 中的UE4可执行文件。选择 UE4Editor.exe 并单击 打开(Open) 。
-
在新的 选择UE4项目(Select UE4 Project) 窗口中,导航至你想要启动的UE项目文件。选择项目并单击 打开(Open) 。此操作将把引擎和项目路径添加至 应用程序(Applications) 列表。
-
在 配置文件(Config Files) 字段右侧,选择 添加(Add) 。导航至该项目的nDisplay配置文件并选中它。
-
在 应用程序(Applications) 列表中选择项目并单击 运行(Run) 。
-
nDisplay将打开并运行该项目。
注意(Note): 你也可以在所有计算机上部署该项目的可执行文件包。但是,如果使用此方法,你需要打包另一个可执行文件,才能发送更新至所有计算机。通过在带有 -game 的编辑器中运行项目,你可以在多用户会话中,将项目内的更改发送至其他计算机。
第6步 - Live Link
Live Link是虚幻引擎内摄取实时数据的框架,这些实时数据包括摄像机、光源、变换信息和基本属性。对于in-camera VFX,Live Link在分发追踪摄像机的信息时具有至关重要的作用,可将其启用,以配合nDisplay将追踪信息送至每个群集节点。虚幻引擎通过Live Link实现了对多种摄像机追踪合作伙伴的支持,其中包括Vicon、Stype、Mo-Sys和Ncam,以及多种其他专业追踪解决方案。
注意: 这一步的关键是你要有一个可用的Live Link源。
要通过带nDisplay的Live Link追踪内部摄像机视锥:
-
在 虚幻编辑器(Unreal Editor) 中,前往主菜单并选择 窗口(Window) 。在下拉菜单中,选择 Live Link 以打开Live Link面板。
-
在Live Link面板中,选择 添加源(Add Source) 按钮。在下拉菜单中,选择你想要使用的Live Link源。
-
单击 预设(Presets) ,然后选择 另存为预设(Save As Preset) 。
-
在主菜单中,选择 编辑(Edit)> 项目设置(Project Settings) 。
-
在 项目设置(Project Settings) 中的 插件(Plugins) 下,选择 Live Link 。
-
将Live Link预设添加至 默认LiveLink预设(Default Live Link Preset) 以在项目运行时自动应用预设。
-
在 世界大纲视图(World Outliner) 中,选择 InnerFrustumCamera 。
-
在 细节(Details) 面板的 组件(Components) 部分,选择 LiveLinkComponentController 。
-
在 Live Link 部分,将 主题表示(Subject Representation) 字段更改为live link源。
-
保存项目。
-
在nDisplay启动程序中,添加 -messaging 至自定义命令行参数。
-
运行nDisplay。
-
现在,可通过live link源追踪内部摄像机视锥。
第7步 - 绿幕和色键
你可以将在虚拟世界中更改内视锥中LED面板上的内容,将其改为带有色键标记的绿幕。
执行以下步骤让绿幕变得可见,并修改色键标记:
-
在 世界大纲视图(World Outliner) 中,选择 GreenScreenPlane 。
-
在 细节(Details) 面板的 渲染(Rendering) 部分中,启用 可见(Visible) 字段。
-
在 世界大纲视图(World Outliner) 中,选择 BP_IncameraStageSettings 。
-
在 细节(Details) 面板的 色键(Chromakey ) 部分中,有选项可供修改边缘模糊和色键标记。
第8步 - 色彩校正体积
通过 色彩校正体积(Color Correction Volumes) ,你可以调整并校正场景中环境和对象的色彩。通过调整色彩校正体积,你可以在真实世界组合和LED墙显示的环境之间匹配光照和阴影。
要为你的场景添加色彩校正体积,执行以下步骤:
-
在编辑器的 内容浏览器(Content Browser) 中,打开 视图选项(View Options) 面板并启用 显示引擎内容(Show Engine Content) 和 显示插件内容(Show Plugin Content) 。
-
选择 内容(Content) 旁边的文件夹图标。在列表中,展开 VirtualProductionUtilities内容(VirtualProductionUtilities Content) 并选择 CCV 。
-
将蓝图 BP_ColorCorrectVolume 添加到该场景中。
-
在 世界大纲视图(World Outliner) 中选择 BP_ColorCorrectVolume 。
-
在 细节(Details) 面板的 默认(Default) 部分中,展开 色彩校正(Color Correct) 参数。
-
展开 全局(Global) 参数并修改 伽马(Gamma) 色彩以更改体积的颜色。
第9步 - 看你的了
本指南介绍了如何在LED屏幕上设置显示内容,如何在多台计算机上启动你的项目,以及如何将摄像机追踪整合到项目中。
多显示设置要求实现软件和硬件层面的同步。使用相同的模拟时间信息,不仅生成的内容要在所有PC上同时准备就绪,而且还需要在正确的时间进行显示交换(将当前图像换成视频卡缓冲区中的下一个图像),以免显示中出现类似撕裂的瑕疵效果。关于在设备上设置显示同步和genlock,以在多个显示之间创建无缝视图的信息,请参阅 nDisplay中的同步 。
除了同步显示外,引擎的时间码和帧生成需要匹配来自摄像机的输入。如何在所有设备之间同步时间码以及同步锁定(genlock)引擎的步骤,请参见 时间码以及同步锁定 。
要在拍摄影片时控制场景和显示,你可以尝试数种in-camera VFX方法:
-
通过 Multi-User Editing 实时实现现场场景修改
-
通过 Composure 实时合成