ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

grandMA2onPC与UE4灯光:DMX/Art-Net链路排查实战

grandMA2onPC与UE4灯光:DMX/Art-Net链路排查实战 1. 先把这条链路讲清楚MA 的数字信号是怎么变成 UE 里那盏灯的亮度的grandMA2onPC 控制 UE4 灯光本质上是把一个灯光行业用了三十年的控制协议塞进实时渲染引擎的蓝图里。你在 grandMA2onPC 里推一个推杆控台把数值写进某一根 DMX 通道通过网线以 Art-Net 广播出去UE4 这边的 DMX 插件收到包把对应的通道值解出来交给蓝图去驱动 Point Light 的 Intensity、材质参数、或者一个摇头灯模型的旋转。整条链路里没有任何神秘的东西每一个数值都能被追溯、被抓包验证这也是我偏爱这套方案的原因——出问题的时候你有地方可查。很多人第一次接触这个组合是在虚拟演播室、虚拟演唱会或者灯光预演previz的项目里导演希望先把灯位、cue 点、追光走位在引擎里跑一遍确认效果之后再进场装台。也有人是拿 UE 当便宜的 MA3D用一边在 onPC 上排 cue一边在引擎里看真实材质和体积光下的效果。不管你是哪一种只要涉及用控台驱动引擎里的灯你需要的知识是同一套网络协议选型、universe 映射、通道表对齐、蓝图取值。这篇文章不打算只给你几个菜单截图式的步骤。我会把每个环节为什么这么做讲透为什么 DMX 比 OSC 更适合这件事、Art-Net 和 sACN 到底该选哪个、universe 的起始编号为什么总是差 1、8bit 的 DMX 为什么在引擎里看起来会抖。同时我会把我自己在项目里踩过的坑完整还原出来包括那个让我查了两个小时的只有第一个 universe 有数据的问题。看完之后你应该能做到一台装了 grandMA2onPC 的电脑一根网线一台跑 UE4 的机器从零把链路打通并且知道断了之后该从哪一层开始查。需要先说明一点grandMA2onPC 的界面在不同版本之间菜单措辞会有变化UE 的 DMX 插件在 4.25 之前基本不可用4.26 之后才逐渐稳定成今天的样子。所以下文里的路径描述如果和你屏幕上的字不完全一样请按功能去找而不是按字面去找。1.1 为什么灯光预演这件事DMX 比 OSC 和 MIDI 都合适先说选型。用控台驱动引擎能用的协议其实不止一种DMXArt-Net / sACN、OSC、MIDI甚至还有直接走 TCP 自己写协议的。但真正在灯光行业里跑得通的只有 DMX 系。原因很朴素。第一grandMA2onPC 对 Art-Net 和 sACN 的支持是原生的、成熟的你在控台上配接灯具、写 cue、跑 sequence输出的就是标准的 DMX 数值不需要任何中间转换程序。第二DMX 的数据模型和灯光的思维方式完全一致一个 universe 512 个通道每个通道 0 到 255一盏灯的每个属性占几个连续通道。这个模型和灯具这个概念是一一对应的你在引擎里复现它等于直接复现了现场的接线逻辑。第三DMX 是广播式的、无连接的、丢包也不影响后续的这一条在实时演出里极其重要——你不会因为丢了一帧就整个状态错乱。OSC 的问题在于 grandMA2onPC 的 OSC 支持相对受限能发的东西不如 DMX 全面而且它是面向消息而不是状态的你得自己维护状态同步一旦丢包引擎里的灯可能就停在某个错误的值上。MIDI 的问题更直接7bit 精度、通道数量少、走 USB 还得额外驱动一个摇头灯的 Pan Fine 就没法准确表达。所以除非你只是想让引擎跟着节拍闪一下否则别绕这条路。还有一个更人话的理由DMX 是这个行业的通用语言。你今天用 onPC 驱动 UE明天换成别的控台、或者要把同一份数据分给实体灯和引擎里的虚拟灯通道表是共用的。这份资产是可以复用的而自研协议不行。1.2 Art-Net、sACN、MA-Net2 三条路我在项目里怎么选这三者都能承载 DMX但适用场景差异不小选错了会在现场吃大亏。协议传输方式端口精度典型场景我的使用倾向Art-NetUDP 广播64548/16bit小中型局域网、单交换机首选配置最简单sACN (E1.31)UDP 组播55688/16bit大型网络、多设备共享设备多、要跨交换机时用MA-Net2MA 私有-高MA 设备之间同步只在纯 MA 生态里用Art-Net 是广播这意味着同一网段里所有设备都会收到包配置上你几乎什么都不用做填个 IP 就通了。缺点是设备一多网络里全是广播包交换机压力大而且排查问题的时候不好定位是哪个源在发。sACN 是组播需要交换机支持 IGMP snooping配置门槛高一点但它在多控台、多引擎的环境下更干净。MA-Net2 是 MA 自己设备之间的同步协议用来做多控台备份、NPU 扩展。它不直接对第三方软件输出所以 UE 这边你不会去接它。我的经验是只要你的网络里只有一台 onPC 和一台引擎Art-Net 就够了别折腾 sACN。等你的项目里出现了两台控台、三台渲染机、一个像素映射服务器的时候再考虑切 sACN那时候网络规划也自然会跟上。顺便说一句Art-Net 和 sACN 是可以同时在网络上跑的端口不冲突UE 的 DMX 插件也允许你同时启用多个协议这一点在做主备双路的时候很有用。1.3 universe 映射那个永远差 1 的起始编号这是全线里最容易出错、也最容易被忽略的一环。DMX 的 universe 是逻辑分组你在 onPC 里看到的Universe 1和网络上 Art-Net 包里的Port-Address 0很可能指的不是同一个东西。grandMA2onPC 的网络设置里有一个Local Start的参数它的含义是本地第一个 universe 对应到网络协议上的起始 universe 编号。如果你把 Local Start 设成 0那么 onPC 里 patch 到 Universe 1 的灯在 Art-Net 上是以 universe 0 发出去的。如果你设成 1那就是 1 对 1最直观。UE 这边同理Project Settings 的 DMX 配置里有Local Universe Start和 universe 数量。它的含义是网络上传来的起始 universe映射到 UE 内部的第一个本地 universe。所以如果 MA 发的是 Art-Net universe 0而 UE 的 Local Universe Start 是 1那么 UA 里的 Universe 1 就对应 Art-Net 的 universe 0如果 UE 的 Local Universe Start 是 0那就是原样对应。我建议的固定做法是两边都设成从 1 开始1 对 1 映射。MA 侧 Local Start 1UE 侧 Local Universe Start 1然后所有 universe 数量都填够比如 8 个。这样你在控台上写的 Universe 3在 UE 里就是 Universe 3脑子不用换算排查的时候也不容易搞混。别小看这一条我见过太多次数据在动但灯不对最后发现就是这里差了 1。顺便提醒一句Art-Net 4 的 Port-Address 是 15 位等于 Net7位× Sub4位× Universe4位一共 32768 个 universe。你在 onPC 里一般只会用到前面的 Sub 0、Universe 0 到 15 这一段但如果你的项目里 universe 数量超过 16就得留意 Net 和 Sub 的定义了有些设备的界面上是分开填的。2. 动手之前先定死三件事IP 规划、universe 编号、通道表链路调不通八成不是软件问题而是这三件事里有一样没提前定。我现在的习惯是在开工程之前先在纸上把这三样写清楚贴在显示器边上后面所有配置都照着这张纸来。2.1 网段与 IP为什么 Art-Net 推荐用 2.x.x.x 或 10.x.x.xArt-Net 的规范里明确建议在 2.x.x.x 或 10.x.x.x 这两个网段上运行原因是避免和常见的办公网段冲突。这一条不是强制但强烈建议遵守尤其是当你的引擎机器同时还连着公司内网或者互联网的时候。我的常规配置是grandMA2onPC 机器IP 2.0.0.1掩码 255.0.0.0UE4 机器IP 2.0.0.2掩码 255.0.0.0直连一根网线或者接一台不带管理功能的千兆交换机掩码用 255.0.0.0 是 Art-Net 世界的习惯做法好处是 2.0.0.1 到 2.255.255.255 全在一个网段里你随便改 IP 都不会跑到网段外面去。用 255.255.255.0 也没问题只是改 IP 的时候要留意第三段。如果你只有一台电脑想同时在上面跑 onPC 和 UE做测试的时候很常见那就需要一块虚拟环回网卡。Windows 自带的环回适配器在设备管理器里不太好装很多人用第三方的虚拟网卡工具或者干脆装一个Microsoft KM-TEST 环回适配器。给它配上 2.0.0.1然后 onPC 和 UE 的网卡选择都指向它Art-Net 广播就能在这台机器内部走通。这一步我踩过坑直接往 127.0.0.1 发 Art-Net 有时候收不到因为有些实现会过滤环回地址用虚拟网卡配真实网段才稳。另外两个必须做的网络动作关掉所有无关网卡和 WiFi以及在Windows 防火墙里给 UDP 6454 开入站放行。防火墙这一条太多人栽在上面了UE 的 DMX Monitor 一片空白查了半天插件配置最后发现是防火墙把 UDP 包吞了。图省事的话在测试阶段直接把专用网络的防火墙关掉现场再逐条加规则。2.2 先用一盏只有 Dimmer的灯把链路跑通这一步是我强烈建议的流程。别一上来就把真实的摇头灯通道表导进去先用最简单的东西验证链路MA 侧配接一盏单通道的调光器或者手工做一个 8bit 只含 Dimmer 属性的 fixtureUE 侧也做同样一个 fixture type一个通道属性名叫 Dimmer。链路验证只需要三件事onPC 里把 Universe 1 的 Channel 1 给到 100%。UE 的 DMX Monitor 面板Window 菜单下名字各版本略有不同搜 DMX 就能找到里Universe 1 的 Channel 1 显示 255。场景里一盏 Point Light 跟着亮起来。这三步跑通说明网络层、映射层、插件层全部正确剩下的工作就只是把通道表对齐这件纯体力活了。如果这三步卡住问题一定在前面三层的某一层你可以按第 5 节的排查顺序来不用瞎猜。我之所以强调这个流程是因为真实的摇头灯通道表动辄 20 到 40 个通道还涉及 16bit 的 Pan/Tilt、色轮、图案轮、棱镜、聚焦一旦链路本身有问题你根本无法区分是网络不通还是通道表错位。用单通道先排除掉 80% 的变量后面会省下大量时间。2.3 通道表不对齐后面全是坑这是整个项目里最容易被低估的工作量。grandMA2onPC 用的是 MA 自己的灯具库UE 用的是 GDTF通用设备类型格式或者你手工建的 fixture type这两套东西的通道顺序默认不一定一致。举个具体的例子同一个型号的摇头灯MA 库里的通道顺序可能是 Pan、Pan Fine、Tilt、Tilt Fine、Dimmer、Shutter、Color、Gobo而某个 GDTF 文件里的顺序可能是 Dimmer、Shutter、Color、Gobo、Pan、Pan Fine、Tilt、Tilt Fine。这两个表在 DMX 层面上是物理不同的——你把 MA 的通道值按 GDTF 的顺序解得到的会是完全错误的属性。解决办法有三个按我的推荐度排序手工在 UE 里建 fixture type严格按 MA 库的通道顺序排。工作量大但绝对可控不会出现下次换了个人重新导 GDTF 就崩了的情况。在 MA 里自定义 fixture type按 GDTF 的顺序排。适用于你已经有现成 GDTF、并且现场不需要用 MA 物理控台去控这盏灯的场景。用 MA 的DMX 视图直接对通道绕开属性层面的映射。最原始也最稳代价是失去了属性级别的语义后面蓝图里只能按通道号取值。我一般用第一种。原因很简单现场执行的人只认控台上的推杆和 cue引擎这边是服务方应该迁就控台。而且 MA 库里现成的灯具类型最多现场随手换灯也不会出问题。需要补充一个细节MA 的灯具库里同一个型号可能有多个模式Mode通道数不同的版本比如一款摇头灯有 16 通道模式、24 通道模式和 32 通道模式。你在 MA 里选了哪个模式UE 里就必须建哪个模式通道数、顺序、属性类型都必须完全一致。这一步对不上后面的排查会非常痛苦。3. grandMA2onPC 侧从打开 Art-Net 到把第一个值推出去MA 这一侧要做的事情其实不多但顺序不能乱。核心是两件事先在网络设置里把 Art-Net 协议打开并指定起始 universe再把本地 DMX universe 的输出指向 Art-Net 端口。这两步是协议层和路由层缺一不可。3.1 在 Network 里启用 Art-Net 输出打开 grandMA2onPC进 Setup 菜单找到 Network。在这个窗口里你要找的是和 DMX 协议相关的设置区块通常会有 Art-Net 和 sACN 两个选项以及每个协议下若干端口的启用开关。勾选 Art-Net把起始 universe 设成 1或者按你第 1.3 节的约定来端口数量填够你的项目需要。不同版本的 onPC 里这个位置可能叫 Network Protocols也可能直接就叫 DMX Protocols还有的版本把它放在 Network 窗口的一个标签页里。名字不重要你只要找到哪个协议、从哪个 universe 开始、一共开几个这三件事就行了。这里有一个容易被忽略的点onPC 的网络设置里可能会让你指定使用哪块网卡。如果你机器上有多个网卡一定要选到接了那根网线的、配了 2.0.0.1 的那一张。选错了包会从另一块网卡发出去UE 那边永远收不到。这个坑我在现场遇到过当时机器上插着一条内网网线Art-Net 包全跑到内网去了。3.2 把本地 DMX universe 的输出指向 Art-Net协议打开了还得告诉 onPC哪个 universe 从哪个口出去。这一步在 DMX Universes 相关的列表里做你会看到每个本地 universe 都有一栏输出端口的设置。把 Universe 1 的输出选成 Art-Net 1Universe 2 选成 Art-Net 2以此类推。有一个我踩过的细节值得说一下如果你的工程是从别人那里拷来的或者是在有物理控台的配置里改的universe 的输出可能还指向物理 DMX 口或 MA-Net。这时候你在 onPC 上推推杆控台界面上看得到数值在变但网络上什么都没有。所以每次新接项目我都会花一分钟检查这个列表确认输出端口是 Art-Net 而不是别的。另外DMX Universes 里还有个合并Merge相关的设置。在极少数场景下你会需要把两路 DMX 合并到一个 universe比如主备控台那就要注意 HTP取最大值和 LTP取最新值的区别。灯光行业默认是 HTP但在虚拟灯光预演里如果你希望引擎严格跟随某一台控台LTP 可能更符合直觉。这个顺序不能错否则两路信号叠在一起的时候会出现奇怪的值。3.3 配接灯具用命令行走一个值协议和路由搞定之后就是配接。在 onPC 里新建一盏灯选好型号和模式patch 到 Universe 1 的 Address 1。然后就可以用命令行直接给值了。我习惯用最直接的方式验证命令行输入灯的编号按 At输入 100按 Please。也就是给这盏灯的所有属性设到 100%。打开 DMX SheetDMX 视图找到 Universe 1看 Channel 1 是不是 255。如果这里在动说明 MA 侧的输出完全正常问题在网络上或者 UE 侧。这个顺序很重要先在控台内部验证再验证网络最后验证引擎。很多人一上来就在 UE 里翻配置其实控台自己都没输出白折腾。补充一个实用的操作习惯在 onPC 里建一个测试用 Executor放一个 Chase追逐或者一个简单的 Sequence让它自动在几个值之间来回跑。这样你在 UE 那边调试的时候不用一直手推推杆数据会自己动看起来更直观。我甚至会用速度参数把它跑到 1 秒一个循环这样 DMX Monitor 上的数值变化用肉眼就能看出来。3.4 onPC 免费版的输出限制这件事必须先算清楚这一点必须提前说清楚不然你会陷入数据看起来在动但只有第一个 universe 有值的困惑。grandMA2onPC 是免费的但免费版本在参数数量和网络输出 universe 数量上是有上限的超过上限的部分需要接入 MA 的硬件比如 command wing、fader wing、NPU 之类才能解锁。这个上限具体是多少不同时期的授权政策会有调整我不在这里给死数字你在项目开始前一定要去官方当前的授权说明里对一遍。这个限制在灯光预演场景里影响是这样的如果你只有一盏灯、几个通道完全没问题但如果你要跑一整个舞台的 20 盏摇头灯加 40 台 LED 染色灯参数很可能超。所以我的建议是项目开始前先算参数总量灯具数量乘以每台的通道数再加上余量。如果超了考虑只把引擎里需要看见的那部分灯接进 DMX其余的在控台上不上电。或者用多条 universe 分散但要先确认你的授权允许输出这么多 universe。还有一种变通做法不用 onPC 的完整配接直接在 MA 里用一个DMX 通道直出的方式绕开灯具配接的参数计算。这种方式精度低、语义差但验证链路的时候够用。4. UE4 侧插件、DMX Library、Patch 与蓝图取值UE 这边是工作量最大的一块。DMX 插件在 4.26 之后逐渐成型主要包含几个部分DMX Engine核心、DMXProtocolArtNet / DMXProtocolSACN网络协议、DMX Fixtures灯具配接与属性。如果你用的是更早的 4.x 版本官方插件可能不完整那时候大家用的是社区的 Art-Net 插件逻辑类似但 API 不同。下面讲的是 4.26 及以后的路径。4.1 开插件与 Project Settings 里的 DMX 配置先开插件Edit → Plugins搜索 DMX把 DMX Engine、DMXProtocolArtNet 打开如果你的网络用 sACN就把 DMXProtocolSACN 也开上再打开 DMX Fixtures。改完要重启编辑器。重启之后进 Project Settings → Plugins → DMX这里有几个区块需要填Communication SettingsProtocol 选 Art-NetNetwork Interface Card 选你配了 2.0.0.x 的那块网卡。它下面还有个输入端口Art-Net 默认是 6454一般不用改。Universe Settings / Input Settings这里就是前面说的映射。Local Universe Start 填 1Num Universes 填你实际用到的数量比如 8。Art-Net 相关设置如果有起始 universe之类的字段按第 1.3 节的约定填 1。配置完之后最快验证方式是把 UE 的 DMX Monitor 面板打开在 Window 菜单下面各版本入口不一样搜 DMX 就行看 Universe 1 的通道值有没有跟着控台动。如果这里有值说明网络层和映射层全对剩下的都是应用层的事。有一点要提醒改完 DMX 的网络配置之后最好重启一次引擎。这两个插件在编辑器启动时初始化网络监听热改配置有时候不会立刻生效会让人误以为配置不对。4.2 建 DMX Library手工定义 fixture type在 Content Browser 里右键找 DMX 分类新建一个 DMX Library。这是所有灯具配接的容器。接下来是定义 fixture type。这里有个分岔导入 GDTF如果你的灯具型号在 GDTF 库里有现成的导入最省事。但要按第 2.3 节检查通道顺序和模式是否和 MA 库里的一致不一致就得手工改。手工新建在 DMX Library 里新建 fixture type逐个添加属性。属性需要设名称比如 Dimmer、ColorAdd_R、数据类型8bit / 16bit / 24bit、默认值。这一步很枯燥但做一次可以复用很久我建议第一次就做仔细把常用灯具都建好存成一个工程模板。属性命名这件事值得多说两句。UE 里有内置的标准属性名Dimmer、Pan、Tilt、ColorAdd_R/G/B、Shutter 等等蓝图里取值时用的就是这些名字。如果你在 fixture type 里把属性叫成Dimmer2或者DIM蓝图里就得用这个名字去取GM2 那边的属性名再怎样都不会影响 UE因为 DMX 层只认通道号不认名字。所以命名完全可以按你自己的规范来只要在蓝图里保持一致。我自己的命名习惯是直接用 UE 的标准名这样跟官方文档、示例工程、以及网上大多数教程都对得上减少沟通成本。4.3 Patch 到与 MA 完全一致的宇宙和地址fixture type 建好之后在 DMX Library 里新建 fixture patch指定用哪个 fixture type、patch 到哪个 universe 的哪个起始地址。这个地址必须和 MA 里一模一样。我一般会做一张对照表长这样MA 灯具编号灯具类型/模式MA UniverseMA AddressUE UniverseUE Address通道数1Spot 32ch Mode31111322Spot 32ch Mode3133133323Wash 24ch Mode216516524.....................这张表看起来笨但它能在排查的时候救你的命。当 UE 里第 5 盏灯不动的时候你可以直接对照这张表去查 MA 的 Universe 1 Address 之类有没有输出。一个常见的坑是地址重叠如果你在 UE 里 patch 的时候忘了算上一盏灯的通道数两盏灯的地址区间叠在一起后面那盏就会读到前面那盏的通道表现为两盏灯同时动。这种问题看 DMX Monitor 是看不出异常的只能靠对照表逐条核。4.4 蓝图里读属性Dimmer、Color、Pan/Tilt 的具体实现这是最有意思的一步。建一个 Actor Blueprint里面放上你要驱动的组件Point Light、Spot Light、静态网格体当作灯具的灯体、还有 DMX Fixture 组件来自 DMX Fixtures 插件。DMX Fixture 组件上要挂上刚才 patch 的那个 fixture patch。然后是蓝图逻辑。DMX Fixture 组件会提供一个 On DMX Updated 事件以及 Get Normalized Attribute Value 这类取值节点不同版本名称略有差异搜索 DMX 都能找到。整体思路是事件触发时把每个属性值取出来映射到你要驱动物理量上。具体到三类最常见的属性Dimmer亮度取值是 0 到 1乘上你设定的最大亮度比如 8000 流明直接 Set Intensity 给 Point Light 或者 Spot Light。这里建议用 Set Intensity 而不是改组件的相对亮度因为 DMX 送来的本身就是绝对值直接设更符合直觉。Color颜色ColorAdd_R、ColorAdd_G、ColorAdd_B 三个属性各取一个 0 到 1 的值Make Linear Color 之后 Set Light Color。注意 MA 的混色值是线性 DMX 值而引擎里的光照计算是在线性空间里的所以直接映射是合理的不需要做 gamma 校正。但如果你希望推杆的手感更接近实体灯可以考虑在取值之后加一个曲线Curve Float做非线性映射因为人眼对亮度的感知是非线性的。Pan / Tilt摇头这两个属性通常用 16bit取值后映射到角度范围。比如 Pan 从 -270 到 270 度Tilt 从 -135 到 135 度用 Lerp 映射之后 Set Actor RotationPan 对应 YawTilt 对应 Pitch。这里需要一个父级 Actor 承载整个灯具让灯体和灯光一起旋转而不是只转灯光组件。一个实战的写法建议是把每个属性的处理拆成独立的函数或宏比如 UpdateDimmer、UpdateColor、UpdateMovement然后用 Sequence 串起来。这样后面加属性的时候不用动主逻辑改一个函数就行。蓝图一大团的话维护起来会非常痛苦。4.5 8bit 抖动与 16bit 精度为什么引擎里的灯看起来在抽DMX 的通道值是 0 到 2558bit。这个精度在实体灯上不明显因为灯泡本身有惯性、有调光曲线人眼也不敏感。但放到引擎里尤其是驱动一个高亮的 Spot Light 亮度、或者肉眼看得很清楚的角度旋转时8bit 的阶梯感会非常明显——推杆缓慢移动的时候灯光会一跳一跳的。解决办法有三个我一般组合使用用 FInterpTo 或 RInterpTo 做插值。在 Tick 里把当前值和目标值做插值让过渡平滑。插值速度设成 6 到 10 左右比较合适太快了等于没做太慢了会有明显延迟。这是最通用的一招。Pan/Tilt 用 16bit。在 fixture type 里把这两个属性定义成 16bitMA 那边输出 coarse 和 fine 两个字节UE 这边会合成一个更精细的值角度就不会一格一格跳了。颜色做曲线映射。ColorAdd 三个通道各 8bit在低亮度区域分辨率特别差加一条曲线把低段拉开视觉上会好很多。顺便提一句DMX 的发送频率一般是 40Hz 左右但 UE 的 Tick 可能是 60Hz 或 120Hz。也就是说 DMX 数据每秒只更新 40 次但你的蓝图每秒跑 60 次以上会出现同一个值被连续读好几次的情况。这不影响正确性但如果你在 Tick 里做累加之类的操作要记得乘 DeltaTime别写成每帧固定增量。还有一个性能上的注意点不要在 Tick 里反复遍历所有灯具的所有属性。如果你的场景里有几十盏虚拟灯正确的做法是让每个灯具的 Blueprint 自己处理自己的事件而不是搞一个总控蓝图去轮询。UE 的 DMX Fixture 组件本身就会分发对应 patch 的更新事件用它是最省事的。5. 链路不通时的完整排查顺序从抓包到下位数据这套系统出问题的时候症状往往很模糊灯不动。但灯不动可能的原因有十几层。我总结了一套从下往上的排查顺序基本能在十分钟内定位到具体层级。5.1 第一步确认 onPC 内部真的有输出先别看 UE先看控台。在 MA 里打开 DMX Sheet或者在 Channel Sheet 里看通道值。给灯一个明确的值比如 At 100看对应的通道是不是 255。如果这里不动问题在 MA 侧跟 DMX 无关可能是灯具没配接、地址错了、或者被 Group / Preset 覆盖了。这种情况先解决控台内部逻辑。如果这里在动说明 MA 已经算出了 DMX 值接下来才轮到值有没有发到网络上。5.2 第二步用抓包确认包到底发出来没有这一步我用的是 Wireshark。在 UE 的机器上装一个或者用另一台笔记本接在同一交换机上过滤 udp.port 6454然后推一下控台的推杆。正常情况下你会看到一串持续的 UDP 包从 2.0.0.1 发往 2.0.0.255广播地址。点开任意一个包在数据部分能看到明文头 Art-Net后面跟着 OpCode、Protocol Version、Sequence、Physical、SubUni、Net、Length 这些字段。SubUni 和 Net 加起来就是那个包的 universe 编号。这一步能一次性排除掉三类问题完全没有包MA 侧没输出或者网卡选错了或者交换机/防火墙拦了。有包但 universe 号不对映射配置错了回到第 1.3 节重新对。有包但只有第一个 universe大概率是 onPC 的输出上限回到第 3.4 节。我强烈建议每个做这套系统的人都学会看 Art-Net 包。这个技能一旦掌握你会从猜问题变成看问题效率完全不同。5.3 第三步UE 收到了没有抓包确认有包之后回到 UE。打开 DMX Monitor看对应 universe 的通道值有没有动。如果不动可能的原因按概率排序网卡选错了UE 的 NIC 设置指向了别的网卡、universe 映射偏移、防火墙拦了入站、或者插件配置改了没重启。这四个我都在项目里遇到过其中网卡选错是最常见的。还有一个小概率情况你的 UE 机器上有多个网卡且都在同一网段。这时候 Art-Net 广播会从其中一个发出、从另一个进来UE 的接收可能绑在有线网卡上但你的发送走的是 WiFi导致收不到。解决办法就是第 2.1 节说的关掉无关网卡。DMX Monitor 里有值之后网络层就彻底没问题了剩下的都是应用层。5.4 第四步有值但灯不动问题在 patch 或属性名这时候要查三件事按顺序fixture patch 的 universe 和地址对不对跟第 4.3 节的那张对照表逐条核。特别注意地址有没有重叠。DMX Fixture 组件上挂的 patch 是不是你想要的那个。我遇到过在一个 Actor 里挂错了 patch结果这盏灯跟着另一盏灯动的情况。蓝图里取的属性名在 fixture type 里是不是真的存在。如果属性不存在取值节点会返回 0 或者默认值灯当然不动。这个错误在蓝图里不会报错只能靠核对。还有一个隐藏得很深的情况attribute 的字节序问题。16bit 属性在 DMX 上是 coarse 在前、fine 在后如果你的 fixture type 定义成了 24bit或者字节数填错了取值会把后面一个属性的通道也吃进去表现为这盏灯跟着旁边那盏灯一起动。这种情况只能靠仔细核对手工建的 fixture type。5.5 第五步数据对但看起来不对通常是精度和映射曲线如果链路全通、patch 正确、属性也在动但视觉效果和现场感觉差很远那问题不在通不通而在像不像。常见的有几种亮度曲线不对DMX 是线性的人眼是非线性的。实体灯出厂时自带调光曲线引擎里没有你得自己在蓝图里加曲线。颜色偏MA 的三原色混色和引擎的 Linear Color 在色域上不完全等价。想要更接近可以用色轮的角度值但 MA 发的是 RGB需要转成 HSV 再映射到色轮位置。摇头速度不对实体灯有电机加减速引擎里是瞬时的。给 Pan/Tilt 加 RInterpTo 就是在模拟这个惯性。闪烁Strobe不对DMX 上的 Strobe 是一个 0 到 255 的连续值表示频率。你需要在蓝图里把它映射成一个定时器频率值越大闪得越快同时要处理0 表示常亮、255 表示最快这种两端特殊定义。6. 在真实项目里我怎么组织这套流程前面都是技术细节这一节讲一点工程组织上的经验因为这些往往比技术本身更影响项目能不能顺利交付。6.1 一份链路文档比什么都有用每次做这类项目我都会在工程根目录放一个 markdown 文件里面写清楚网段规划、IP 分配、universe 映射约定、灯具配接对照表、fixture type 的命名规范、以及 DMX 插件的关键配置截图。这东西在项目开始的时候花你半小时但在后面节省的时间可能是十倍。因为灯光预演这类项目通常涉及两拨人——控台那边的人和引擎这边的人两个人的脑子里的Universe 1可能根本不是一回事。有一份文档沟通成本立刻下降一个量级。而且这份文档是可以复用的。做第二个类似项目的时候直接把网段和 universe 约定搬过去只改灯具对照表就行。6.2 用 Git 管理 DMX Library 和蓝图UE 的 DMX Library 是一个资产asset它和蓝图一样可以进版本控制。我强烈建议把 DMX Library、所有灯具蓝图、以及那份链路文档放进同一个仓库和场景资产一起管理。原因很实际灯具配接表是会被改的控台那边换一款灯、换一个模式引擎这边就得跟着改。有版本控制你能知道谁在什么时候改了什么而不是对着一个昨天还好好的的工程发呆。另外建议把 DMX Library 做成一灯一文件的结构而不是所有灯都挤在一个 Library 里。这样合并冲突的概率会小很多。6.3 用序列帧录制做离线的视觉校验DMX 是实时的有时候你需要在没有控台的情况下反复看效果。我的做法是在引擎里搞一个回放模式把一段时间内收到的 DMX 通道值全部录成一个快捷方式或者干脆用引擎的 Take Recorder 录一段然后离线回放。具体做法是在 DMX 更新事件里把每个属性值写进一个 buffer加上时间戳录成一张表。回放的时候按时间戳插值输出。这个功能做一次可以复用很久尤其是在给导演看效果的时候——你不需要把控台搬过来放一段录像就行。需要注意的是录制的采样率和 DMX 的发送率要对齐不然插值出来的曲线会失真。我一般按 40Hz 录和 Art-Net 的发送率一致。6.4 现场备份控台出问题的时候引擎该怎么办灯光预演虽然是预演但很多时候是给导演、给客户看的不能中途黑屏。所以我在每个项目里都会准备一条备份路径。最常见的是双路输入MA 一路 Art-Net另一路是一个简单的 MIDI 控制器或者一个 UDP 脚本一旦主路断了引擎里的灯具切换到一个安全状态比如保持当前值、或者缓慢过渡到一个固定的演出状态。UE 的 DMX 插件里可以同时启用 Art-Net 和 sACN也可以在主数据停更超过一定时间之后触发 fallback 逻辑这个在蓝图里用一个 Timer 就能实现。还有一个更简单的做法在引擎里内置一套演示模式断开网络的时候自动跑一段本地动画。这样即使控台挂了客户看到的也不是一片黑。我一般把这个开关做在关卡蓝图里按一个键就能切换。我自己在实际项目里踩过最狠的一次坑是控台和引擎不在同一个网段——控台那边为了连内网把 IP 改成了 192.168.x.xUE 这边还写着 2.0.0.2广播根本发不过去。那一次的教训是任何一次 IP 变更都要回头对一遍那份链路文档。还有一次更隐蔽onPC 的网络设置里网卡选错包从另外一块网卡出去了用 Wireshark 一抓立刻现原形但如果不抓包你可能会在 UE 的插件配置里白白折腾一个小时。所以把抓包当成排查的第一步而不是最后一步这是我做了几个项目之后最实在的一条心得。
返回列表