功能演示:TAVP 虚拟摄影棚数字资产终端系统介绍

image.png|1390

系统介绍:面向影视虚拟拍摄的数字资产终端系统,覆盖资产预览下载、nDisplay 集群遥控、iPad 现场调光;我负责整体系统架构设计,以及除后台服务器外的全部客户端开发(TavpClient、TavpListener、资产服务器、IpadRemoteControl)。


项目背景

时光坐标是一家影视公司,资产部门积累了大量基于 Unreal Engine 的场景资产。在 LED 虚拟拍摄现场,导演和灯光团队需要在快节奏、高压力的环境中快速切换场景、调整光影,传统流程存在以下痛点:

  • 每个场景 × 每个摄影棚都需要单独做 nDisplay 工程配置,依赖 UE 专业人员,成本高、周期长
  • 资产分散在各独立工程中,无法统一预览、下载、使用
  • 现场操作需要在控制室与 LED 屏幕之间快速联动,缺少低门槛的移动端控制手段

TAVP 虚拟摄影棚数字资产终端系统(TimeAxis Virtual Production)是我设计并主导开发的端到端解决方案:

  • 将分散的 UE 场景资产整合为统一下载、一键打开的数字资产库
  • 搭配 iPad 控制端,现场人员可实时调整场景光影参数,无需回到控制台前操作 UE 编辑器

各模块说明

模块 平台 职责
TavpClient UE(控制室主控机) 独立设计与实现 — 登录、资产库 UI、OBS 下载、集群连接与遥控
TavpListener UE(各渲染机,自启动) 独立设计与实现 — TCP 监听、接收指令、拉起/关闭 UE 渲染进程
资产服务器 UE(场景进程内嵌) 独立设计与实现 — HTTP 服务,接收 iPad 控制指令
IpadRemoteControl iOS(iPad) 独立设计与实现 — 局域网发现主节点、场景参数遥控
tavp 后台服务器 华为云 参与各个API接口设计与对接

系统架构

0.2系统架构.png

现场部署拓扑

大型摄影棚的典型部署方式:

  • 控制室:一台主控机运行 TavpClient(不负责渲染),操作员在此登录、选景、下发集群指令
  • 机房:若干台渲染机直连 LED 屏幕,每台渲染机自启动 TavpListener(监听端口 3180
  • 拍摄区:iPad 与主控机处于同一局域网,连接主渲染节点上的资产服务器进行光影调节

核心架构设计:资产与摄影棚配置分离

这是我设计的系统最关键的技术决策,解决了「多场景 × 多摄影棚」工程配置爆炸的问题。

问题

按常规虚拟拍摄流程,每个场景需要针对每个摄影棚单独配置 nDisplay 集群、硬件参数、控制逻辑。影视公司有大量场景资产,摄影棚又有不同账户和硬件布局,配置复杂度随场景数量线性增长,且必须由 UE 专业人员操作。

方案

将系统拆为三层,把「资产服务器 + 摄影棚硬件配置」与「场景内容」解耦

层级 内容 打包形式 更新方式
场景资产 各项目独立的场景内容(模型、灯光、序列等) 各资产独立 .pak 按资产单独下载更新
摄影棚配置 nDisplay 节点布局、各渲染机 IP/分辨率/窗口位置 TAVPNdisConfig.ndisplay + JSON 配置 按账户登录后从云端拉取
运行时服务 资产服务器(HTTP)、集群控制逻辑 统一 CommonScenes.pak 全摄影棚共享,更新 pak 即可

我负责的核心模块

1. TavpClient — 资产终端客户端

整体 UI 框架UMainWidget 为根容器,页面切换由 UWidgetSwitcher 驱动):

Widget 职责
ULoginWidget OAuth 登录、OBS TST 初始化
UTAVPAssetMainWidget 资产列表(全部 / 我的 / 审核)、分类筛选、搜索
UTAVPAssetDetailWidget 资产详情、领取、多图预览
UTAVPAssetBoxWidget 单资产卡片:下载 / 打开 / 关闭,进度条
UTAVPFunctionWidget 左侧导航、设备节点连接状态(可 Tick 刷新)

核心服务类(单例)

职责
FTAVPSimpleHttp REST API 封装:登录、资产列表、TST 凭证
FTAVPFileManager 本地配置管理、ndisplay 解析、资产版本 diff、OBS 下载编排
FTAVPClient TCP 集群控制:Connection / StartProcess / KillProcess / RecvMessages

登录后自动初始化链路ConfigFlieInitProcess):

1
2
3
4
5
6
7
登录成功 → 设置 Authorization
         → 拉取全部资产 UE 版本列表
         → 检查 Studio 配置是否需要更新
         → 从 OBS 下载 TAVPNdisConfig.ndisplay
         → DeSerializeNdisConfig() 解析节点信息
         → FTAVPClient::Connection() 连接各渲染机
         → 检查各资产 JsonConfigFile 是否需要增量更新

2. TavpListener — 渲染机监听服务

独立 UE 程序,部署在各渲染机并设置开机自启动:

  • 监听 0.0.0.0:3180,接受 TavpClient 的 TCP 连接
  • 解析 Start----{exe路径}----{启动参数} 指令,调用 FPlatformProcess::CreateProc 拉起 CommonScenes
  • 解析 Kill 指令,终止当前渲染进程

3. 资产服务器(嵌入场景进程)

打包在 CommonScenes.pak 中,随 UE 渲染进程自动启动:

  • 内嵌 HTTP Server,暴露场景环境参数控制 API(光照、天光、后处理等)
  • 仅主渲染节点对外提供 HTTP 服务
  • 收到 iPad 指令后,通过 nDisplay Cluster Event 同步到所有从节点

4. IpadRemoteControl — iPad 移动端控制

iOS 端应用,面向拍摄现场的灯光师/导演:

  • 局域网内自动发现或手动输入主渲染节点 IP
  • HTTP 连接资产服务器,实时调节场景光影参数
  • UI 针对触摸操作优化,降低非 UE 专业人员的操作门槛

详细操作说明见《TAVP 虚拟拍摄 iPad 移动端控制系统用户手册 V1.0》


端到端业务流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
① 启动 TavpClient + 各渲染机 TavpListener(自启动)
② 操作员登录 → 获取 JWT + OBS 临时凭证(TST)
③ 自动下载/更新 Studio 配置
   · TAVPNdisConfig.ndisplay(各节点 IP、分辨率、窗口位置)
   · Studio Pak(资产服务器 + 摄影棚公共逻辑)
④ 解析 ndisplay JSON → 连接各渲染机 TavpListener(TCP :3180)
⑤ 浏览资产库 → 下载场景 zip → 解压 → 复制 pak 到 Content/Paks/
⑥ 点击「打开」→ Client 向所有 Listener 发送 Start 指令
   · Listener 在各渲染机拉起 CommonScenes.exe(nDisplay 集群模式)
   · UE 进程启动后自动运行内嵌资产服务器
⑦ iPad 打开 IpadRemoteControl → 连接主渲染节点 HTTP 服务
   · 主节点通过 nDisplay 集群事件将指令分发到各从节点
   · 现场实时调节 LED 屏幕上的场景光影

总结

TAVP 系统是我将 Unreal Engine、nDisplay 集群渲染、云存储与移动端控制结合的一次完整虚拟拍摄基础设施实践。除 tavp 后台服务器外,系统架构设计、TavpClient、TavpListener、资产服务器、IpadRemoteControl 均由我独立负责开发

核心贡献在于提出了「资产内容与摄影棚配置分离」的架构,通过统一 CommonScenes 工程规范 + 独立 Studio Pak,让影视公司的大量场景资产能在不同摄影棚中免配置、一键使用,显著降低了虚拟拍摄的技术门槛和现场操作成本。


演示与材料

功能演示:TAVP 虚拟摄影棚数字资产终端系统介绍

系统用户使用手册:《TAVP 虚拟摄影棚数字资产库终端系统用户手册 V1.0》

移动端使用手册:《TAVP 虚拟拍摄 iPad 移动端控制系统用户手册 V1.0》

image.png|1391