做MR拍摄或者混合现实内容的人应该都遇到过需要把虚拟场景和真人融合的需求。早期大家习惯用After Effects后期抠像,或者用第三方插件做合成,但流程割裂、实时性差,迭代一次就要等渲染。后来我接触到UE4的Composure框架,配合HTC VIVE的定位追踪数据,直接在引擎里完成绿幕抠像和虚实画面合成,生成MR视角,整个流程顺畅非常多。
这篇文章不是泛泛介绍功能的,是我自己跑通一整套流程之后的经验整理。从设备摆位、绿幕布光、VIVE定位器绑定虚拟相机,到Composure里各个抠像节点的参数调试,再到拍摄时常见问题的排查思路,尽量写完整,新手能照着搭,有经验的人也可以当参考对照。
1. 项目整体思路与方案选型
1.1 到底解决什么问题
所谓MR视角,简单说就是让观众同时看到真实世界的人和虚拟世界的内容,两者在同一个画面里融合。UE4绿幕抠像合成HTC VIVE的MR视角,本质上是一条把真实拍摄、引擎渲染、实时合成串起来的技术路径,最终输出的是连续的实时画面,而不是后期渲染出来的单帧。
为什么要用这个组合?我自己的对比经验是:单独用UE4渲染虚拟场景很容易,单独用相机拍绿幕人物也不难,难在"虚实同步"。你需要真实相机的位置参数、虚拟相机的位置参数完全一致,真实演员的动作姿态和虚拟角色的交互也要对齐,还要满足实时合成的要求。HTC VIVE的定位系统负责提供真实世界的空间追踪,UE4负责把追踪数据映射到虚拟相机,绿幕抠像再负责把真实人物从背景里分离出来,三者一组合,MR视角就能在引擎里实时输出了。
这适合谁去研究?如果你是做虚拟直播、MR短视频、产品展示、教育培训类交互内容的,或者想探索虚拟制作但预算有限,这套方案比专业级虚拟棚便宜得多,效果足够支撑大部分创作需求。
1.2 方案选型:为什么是UE4、绿幕和VIVE的组合
不是所有MR都要用这三个东西。有些团队用单纯的头显穿透模式,也就是戴着VIVE直接看AR叠加效果,但外接屏幕上的观众看不到完整的融合画面。有些团队用专业虚拟拍摄系统,但成本动辄几十万,流程也复杂。最亲民也最灵活的,就是绿幕拍摄加引擎实时合成这条路。
选择UE4而不是其他引擎,核心原因有几个。
其一,Composure框架本身就是为实时合成设计的,内置了抠像、图层混合、输出管理一系列能力,不需要额外写很多后期逻辑。其二,UE4的虚拟场景渲染质量在实时引擎里属于第一梯队,光追加上Lumen(高版本)的全局光照效果已经能骗过大部分人的眼睛。其三,社区资源丰富,关于VIVE定位接入、相机标定、抠像参数调整的讨论很多,踩坑有参考。
选择HTC VIVE,是因为它作为PC VR设备,追踪精度和稳定性经过了大量验证。尤其Vive Tracker这个配件,可以绑在相机上做空间定位,这是实现MR视角最省事的方式之一。相比用标记点视觉追踪或者惯性传感器,激光定位的抗干扰性更好,在绿幕棚里的灯光明亮环境下依然稳定。
1.3 方案的架构图拆解
整套系统分三个核心链路:
- 视频链路:真实相机拍摄绿幕画面,通过采集卡输入到UE4的Media Plate或者外部帧流,作为合成输入源。
- 追踪链路:HTC VIVE的定位器(Lighthouse)实时解算相机和演员头显的位置,通过SteamVR插件传输给UE4,驱动虚拟相机和虚拟角色的位置。
- 渲染合成链路:UE4实时渲染虚拟场景,Composure把绿幕画面抠像后与虚拟场景做层间混合,最终输出到监视器或直播推流。
三个链路缺一个都不行,任何一个环节出问题都会直接影响最终画面效果。我自己测试的时候一开始只关注视频链路,总觉得画面抠不干净是绿幕问题,后来才发现VIVE定位数据抖动导致的虚拟相机晃动,才是边缘闪烁的元凶。所以搭建方案时,一定要把三条链路当成一个整体来调,不要孤立排查问题。
2. 绿幕环境搭建与设备准备
2.1 设备清单和场地布置
做这套方案,硬件准备其实比软件调试更影响最终效果。我整理一下我惯用的设备组合:
- HTC VIVE头显一套,包含两个定位器基站、两个手柄,用于空间追踪和演员视角参考。
- Vive Tracker一个以上,用于绑定在相机云台或者摄影师手腕上做追踪。
- 支持4K视频输出的相机,比如无反或摄像机,手动设置快门、光圈、ISO。
- 视频采集卡,需要支持SDI或者HDMI信号输入到电脑,建议4K60P的规格,低于1080P的话扣像细节会明显不足。
- 绿幕布套件,包括支架、绿幕布、补光灯。
- 一块足够大的场地,至少需要4米乘4米的无遮挡活动空间。
场地布置上,最大的坑是绿幕褶皱和阴影。绿幕布不能有太多褶皱,但完全拉平也不容易。我的做法是把绿幕布用夹子横向拉紧,底部压重物,避免走路带起布料形成动态阴影。灯光方面,绿幕照明和人物照明要分开控制。绿幕要均匀照亮,最好用柔光灯大角度照射,避免在幕布上出现光斑和暗区。人物光要单独打,不然人物的投影会落在绿幕上,抠像时人物的脚部区域容易产生脏边。
布光时我会尽量让人物站在离绿幕两米以上的地方,这是为了控制绿色溢出——幕布上的绿光反射到人物身上,头发边缘和衣服轮廓会染上一层淡绿色,抠像后期处理起来非常麻烦。距离越远,溢色问题越轻微,后期抠像的容错率就高很多。
2.2 相机设置与追踪设备固定
相机拍摄参数直接决定抠像素材的质量,不能依赖后期全能修正。我的习惯是:
- 快门速度在1/100秒左右,避免动态模糊太大导致边缘难以识别。
- 光圈控制在F4到F5.6之间,保证景深足够深,避免人物移动出焦导致抠像边缘模糊。
- ISO尽量压低,一般在400以内,超过800之后噪点会让色度键抠像的边缘出现颗粒感。
- 白平衡手动调到室内灯光色温,建议5600K到6500K之间,根据你灯光实际色温来。
这些参数不是死规矩,但方向明确:优先保证画面干净、噪点低、景深足够。你不想在Composure里看到绿色边缘像锯齿一样抖动,那前期就得把这些参数控制住。
追踪设备固定方式,我的经验是把Vive Tracker直接装在相机热靴或云台配件上,使用小型球头和魔术臂固定。方向尽量朝外,避免遮挡基站扫描视线。固定之后做一套校准,让Tracker坐标系和相机镜头光轴对齐,这样追踪数据加上一个偏移量,就能映射到虚拟相机的位置了。
2.3 软件环境版本搭配建议
软件版本方面,建议使用UE4.26或者4.27,这两个版本对SteamVR插件和Composure的兼容性都很稳定。高版本UE5虽然渲染更强,但插件接入VIVE追踪和绿幕合成的工作流会有不少改动,试错成本高。等你在4.27上跑通了,再往新版本迁移会更高效。
需要启用的插件:
- SteamVR Plugin:负责接收VIVE的定位数据。
- Composure:负责合成和抠像。
- Media Framework和Media Plate:负责接入外部摄像头信号。
- VCAM(Virtual Camera)功能如果需要,可以用Live Link VCAM插件,但不是必须。
我这里要特别提醒一句:插件启用顺序经常被忽略。正确顺序是在项目设置里先启用Composure,再启用SteamVR,否则部分蓝图节点会显示为无效引用。我遇到过因为顺序反了导致蓝图编译报错的情况,重启项目才能恢复。
3. 核心原理与参数细节解析
3.1 绿幕抠像原理与色键逻辑
绿幕抠像的原理并不复杂,核心是基于色度差异进行前景和背景的分割。我们在像素的颜色空间里做判断:当一个像素的绿色分量明显高于红色和蓝色分量时,就认为它属于背景,需要被移除;反之则属于前景,需要保留。这个思路用一句话说就是:把"最绿的像素"变成透明像素。
但实际操作中,绿色不会那么纯粹。受灯光不均匀、反光、衣物颜色相近等因素影响,绿色背景会呈现从黄绿到青绿的渐变。所以抠像算法还需要两个关键参数:色度容差(Chroma Tolerance)和亮度范围(Luma Range)。前者决定多大范围的绿色色调被视为背景,后者决定多大范围的明暗变化可以被接受。这两个参数调大了容易把人物边缘吃掉,调小了又会残留绿色背景边缘。我自己的调试方式是先给一个中等容差,看哪片区域残留最多,再局部调整,而不是猛拉参数试图一把搞定。
3.2 Composure框架结构拆解
Composure是UE4里的一个实时合成框架,核心概念是Compositing Elements,也就是合成元素。每一个元素可以是一张图、一段视频、一个渲染通道或者一个相机画面,它们像Photoshop的图层一样叠加起来。绿幕抠像逻辑通常是这样组织的:
- 底层:虚拟场景画面,也就是最终替代绿幕的背景。
- 顶层:Media Plate的实时视频画面,即相机拍摄的绿幕素材。
- 中间层:Chroma Key节点,对上层的实时视频做抠像处理,生成带透明通道的前景层。
- 混合结果:前景层叠加在虚拟场景上,通过Composure输出到屏幕。
实际操作时我通常不会只挂一个Chroma Key节点,而是串联几个关键节点:先做Despill(去溢色),再做边缘收缩和羽化,最后做一个Alpha的轻微侵蚀。这样比单个节点调多组参数效果可控得多,不同问题用不同环节解决,不会互相干扰。
3.3 关键参数调试的心得
抠像参数是这套流程里最考验耐心的一环。我总结几个最值得关注的参数项:
- Luma Key:控制亮度抠像,主要用于去除较暗的阴影部分。
- Chroma Key Inside/Outside:Inside值决定判定为背景的颜色范围,Outside值决定保留前景的边缘过渡。
- Edge Color Correction:调整边缘颜色偏移,消除绿色溢出带来的色偏。
- Kernel Decontamination:核心去污,用于进一步清除前景边缘残留的背景色。
- Alpha Erosion:让Alpha通道边缘向内收缩,消除绿色边缘。
数据上我给一个经验起始值:Chroma Inside控制在0.24左右,Outside在0.04左右,Luma的范围按下限0.1、上限1.0来试,Edge Softness在1像素到3像素之间。这个组合在大多数均匀布光的绿幕场景下都能得到一个基础的干净抠像,之后再根据人物服装和头发的细节微调。
4. HTC VIVE定位驱动虚拟相机的对接过程
4.1 定位系统的工作原理与调试要点
HTC VIVE的定位系统叫作Lighthouse,原理是两个激光基站轮流扫出水平和垂直的红外激光,设备上的光电传感器接收信号后,通过计算激光到达的时间差来解算自身相对基站的位置和姿态。这个方式有个好处:不受可见光干扰,绿幕棚里灯再亮也不影响定位稳定。
调试定位系统的要点,首先是基站架设高度,建议在2米到2.5米之间,俯视拍摄区域,避免两个基站之间有遮挡。其次是保持基站之间的视距可见,激光扫描需要基站间能互相看见,形成同步。我的经验是两个基站对角布置,一个指向拍摄区域中心,一个指向另一个基站方向。
既然是MR视角拍摄,不仅要追踪相机,可能还要追踪演员的头显和手柄。但实践中我的建议是:除非演员需要和虚拟场景有复杂交互,否则头显和手柄的追踪可以作为辅助,核心还是相机的Vive Tracker数据。因为绿幕拍摄时演员戴着头显会遮挡面部,很多动作交互反而难做。
4.2 把追踪数据映射到虚拟相机
在UE4里,虚拟相机要复刻真实相机的空间位置和姿态,最简单的方式是创建一个CameraActor,然后用Vive Tracker的WorldTransform直接驱动它。流程大致是这样的:
- 在场景里创建一个CineCameraActor。
- 在关卡蓝图中通过SteamVR得到对应Tracker的Transform。
- 每一帧将Tracker位置和旋转赋值给CineCameraActor。
- 保存一个初始偏移量,用于校准Tracker和镜头光轴的偏差。
需要特别注意,Tracker安装在相机热靴上时,和镜头光轴之间有物理偏移。这个偏移如果不做补偿,虚拟相机的画面和真实画面之间就会出现位置偏差,最明显的表现是:人物明明站在虚拟场景的地板中心,实际合成画面里却偏到了左边。
偏移校准的方法:拍一个静止参照物,比如一个放在场景里的小球,在真实画面里标记小球位置,然后调整虚拟相机的偏移量,直到虚拟小球的位置和真实拍摄的小球重合。这个校准工作必须在每一版相机固定方式改变后重新做一次,节省不了的。
4.3 抖动过滤与数据平滑
VIVE定位数据虽然稳定,但在手持相机或者移动云台时,多少会有少量高频抖动。这种抖动在虚拟场景里会被放大,尤其是靠近物体边缘的时候,合出来的画面边缘会像微风吹过一样左右晃动。
我处理的方案是在蓝图里对追踪数据做一个低通滤波,或者说平滑处理。简单说,不要直接赋值Tracker的当前Transform,而是用当前值和上一帧值的插值,把高频跳动削掉。插值系数Alpha可以设在0.2到0.5之间,取多少取决于你的实际帧率。帧率60P的时候,Alpha可以小一些,平滑效果更好;帧率30P的时候,Alpha要稍微大一点,否则相机会显得反应迟钝。
这中间有一个平衡点:平滑太强烈,虚拟相机跟不上真实相机的快速运动,画面会拖影;平滑太弱,抖动又会显现。我的经验是先用0.3的Alpha跑一段,观察三维空间的边缘抖动,再微调。这一步是容易被忽略但提升观感非常明显的细节。
5. 完整实操流程记录
5.1 从清场到绿幕布置的实操顺序
我每次搭建拍摄环境会按照固定顺序走,避免来回返工。第一步清场,确保拍摄区域没有反光物体和高亮物品,否则会在绿幕上形成光反射。第二步搭绿幕支架,拉平幕布,压好底部。第三步架设灯光,先打绿幕背景光,再打人物光,用测光表或者实时视频波形调整均匀度。第四步架设相机和采集卡,固定好Vive Tracker,测试拍摄画面是否正常输出到UE4。第五步开VIVE定位基站,确认SteamVR里Tracker被识别。
整个流程大概需要三十分钟到四十分钟,看似琐碎,但我吃过亏:赶时间跳过了绿幕均匀度测试,结果后期抠像怎么调都有一块区域抠不干净,最后只能重拍。绿幕均匀度检查有个快速办法,把相机输出调成黑白模式或者查看亮度波形,如果整个画面亮度一致,没有明显的波形谷,基本就合格了。
5.2 UE4场景搭建与材质设置要点
虚拟场景的搭建质量和配套才有说服力。我的习惯是先做场景尺寸核对,确保虚拟场景和真实拍摄区域的比例一致。如果虚拟场景的墙体高于真实绿幕覆盖范围,合成画面顶部就会出现"悬空"穿帮。
材质设置上,虚拟场景的光照要与真实灯光方向匹配。最简单的验证方法是:在真实场景里放一个参考光源,看虚拟场景里的主光源方向是否一致。如果真实光从右侧打过来,虚拟场景里却是左侧光照,合成画面里的人物阴影方向和场景阴影方向相反,视觉上会非常违和。
如果是室内场景,配上Lumen或静态光照烘焙,质感和动态光影表现都更自然。如果是室外场景,需要重点调节Tone Mapping和曝光参数,避免虚拟天空过曝或者前景过暗。
5.3 绿幕合成节点配置与输出设置
Composure的初始设置,建议直接通过Window打开Composure面板,创建CompositingElement,勾选UseSharedMaterial。实际操作中,我习惯一个元素负责一个任务:VideoSource元素负责接入相机画面,Keying元素负责对视频做Chroma Key,最终Output元素负责把前景和背景混合。
设置节点时需要注意输出格式。Composure支持直接输出到Game View,或者输出到媒体输出器用于直播。我建议调试阶段用Game View窗口预览,但正式拍摄或直播时用媒体输出器,因为Game View会叠加游戏UI信息,不干净。
输出分辨率取决于实际应用。如果目标是直播平台,1080P60足够;如果目标是后期存档,建议4K。但要留意4K实时抠像的GPU负载很高,显卡不够的情况下会掉帧,导致合成画面卡顿和延迟,反而得不偿失。
5.4 合成画面对准与视觉验证
所有节点配置完成后,最后一步是验证合成画面对准。这里我常用一个方法:在虚拟场景中放置一个明显的标记物,比如一个高亮立方体,然后在真实场景中同一个位置放置一个真实标记物,两者叠加对齐后,说明虚拟相机和真实相机的空间匹配是准确的。
这个验证过程中我通常让一个人站在真实标记物旁边,观察他手脚是否和虚拟地面对齐。如果人物看起来像浮在场景上方,说明虚拟相机高度偏高了;如果人物陷入地面,说明高度偏低。通过调整虚拟相机的偏移量Y轴或Z轴,可以快速修正。
6. 常见问题与排查技巧实录
6.1 画面边缘闪烁与残像
表现:人物边缘尤其是头发和衣物轮廓处出现闪烁的绿色或者半透明残像。
排查方向:首先检查绿幕均匀度,其次检查灯光造成的绿色反射,再检查Chroma Key参数是否过松。实际操作里,大部分情况是灯光和溢色引起的。我的建议是:先用灯光解决大部分问题,再用Despill节点解决剩余问题,参数只是最后微调。
如果边缘闪烁只出现在运动过程中,还要检查追踪数据平滑度。相机快速移动时,如果虚拟相机定位抖动,边缘就会因为空间错位而产生闪烁感。
6.2 人物与虚拟场景位置错位
表现:人物看起来没有站在虚拟场景的预设位置上,偏左、偏右、偏高或者偏低。
排查方向:先校准Vive Tracker和相机之间的偏移量,这占了九成原因。还有一个隐蔽的坑是虚拟相机用的镜头FOV参数和真实相机不匹配。Composure里CineCamera的FOV默认是90度,但真实相机可能是60度或者70度,如果FOV不匹配,即使位置对准了,透视比例也是错的,画面里的物体会感觉被拉伸或者压缩。
解决方式是获取真实相机的传感器尺寸和镜头焦距,算出对应FOV,填入CineCamera参数。这一步很多人会忽略,但它对画面真实感影响极大。
6.3 延迟与掉帧导致的口型不同步
表现:人物说话的口型和虚拟场景的声音不同步,或者画面卡顿。
排查方向:链路延迟主要来自两个地方,视频采集卡的数据传输延迟和渲染合成的GPU负载延迟。要尽量降低延迟,建议视频采集卡用支持零延迟或者低延迟模式的型号,同时关闭垂直同步,牺牲一点画质保证实时性。另外把Composure的渲染分辨率降到1080P,在输出阶段再上采样到目标分辨率。
如果GPU负载太高,关闭光线追踪效果真的能顶一阵。我实测过,开启光追后GPU占用高到85%以上,一关闭直接降回55%,整个合成链路稳得多。MR拍摄追求的是实时稳健,画面质感通过材质和后处理还有大量手段可以弥补,不用死磕光追。
6.4 绿幕反光与演员服装问题
表现:演员的白色衣服或者面部皮肤出现淡淡的绿色,特别是在边缘位置。
排查方向:这是绿幕拍摄最经典的问题。绿幕大面积反射,把绿色投到了前景物体上。解决思路有三个:拉大人物与绿幕的物理距离;给前景光增加一点品红补偿来中和绿;在抠像后加一个Despill节点做去溢色。
衣服问题更麻烦,如果演员穿绿色衣服,不管灯光怎么调,都会被抠成透明。开拍之前可以准备备用服装,避免绿色、黄绿色和接近绿色的颜色。某次拍摄,演员穿了一件军绿色外套,现场光线偏黄,肉眼看着还可以,结果抠像时整个人跟背景融为一体,重拍浪费了一个多小时,现在每次都会检查服装色板。
7. 个人实践经验与扩展方向
7.1 我自己调试这套流程的时间分配
如果是从零开始做这套系统,我的时间分配建议是:环境搭建和设备调试占四成,Composure参数调试占三成,VIVE追踪对接占两成,最后的合成微调占一成。很多人会把大量时间花在Composure参数上,但从我的经验来看,环境灯光和追踪稳定的问题解决越早,后面抠像越轻松。
有一次拍摄,绿幕光打得很均匀,但忘了检查基站位置有一个被灯光架挡住了。VIVE的追踪数据一会有信号一会没信号,虚拟相机的位置在场景里跳来跳去,合成画面跟着乱抖。排查了两个多小时才发现是物理遮挡问题。之后我在架设阶段都会特意围绕基站的视场范围做一圈遮挡检查,不只是看基站在技术上是否开机,还看它的扫描范围有没有被灯架、支架挡住。
7.2 后续可以扩展的方向
这套绿幕加VIVE的MR方案,后期扩展空间很大。你可以把动态捕捉的骨骼数据接入UE4里的虚拟角色,让虚拟角色跟随真人动作,形成完整的虚拟主播或者虚拟人内容。也可以把追踪数据接入到多机位虚拟切换系统,让导播在多个MR视角之间切换,产生跨机位的虚实融合效果。
如果团队预算充足了,还可以引入专业的信号同步方案,把相机时码和引擎渲染帧进行更加严格的锁定,彻底消除音画延迟。不过在这之前,先把绿幕布光、追踪校准、Composure参数这套基本功打磨好,对于绝大多数MR内容创作来说,已经完全够用了。
最后分享一个我习惯性的收尾动作:每次拍摄结束前,不要马上拆绿幕,把所有追踪设备关机重启一遍,重新检查追踪信号和合成画面,确认一切正常再拆。别小看这一步,MR拍摄环节多、链路长,任何一个环节松动都会让你回到片场重新拍第二遍,而重拍的成本永远比多检查一遍高得多。