Syphon与Spout协议在实时视觉创作中的工作原理

话题来源: 现场视频混音 Resolume Arena v7.23.0 rev 49330 (x64) Multilingual 专业VJ音频软件,音频响应系统-视频混合\实时合成\音乐节奏与动态视觉效果同步

在现场演出里,艺术家常常需要把一台机器生成的画面即时搬到另一台渲染软件上。Syphon(Mac)和Spout(Windows)正是为这类“画面搬运”设计的协议,它们把显卡内存中的纹理直接共享,而不是走文件或网络,省去几百毫秒的延迟。

Syphon的内部机制

Syphon基于OpenGL的纹理对象(GL_TEXTURE_2D),每帧在发送端调用glCopyTexture把渲染好的纹理标记为共享资源,接收端再通过系统提供的IOSurface句柄把同一块显存映射进自己的上下文。因为两端都在同一块GPU上,画面几乎是“零拷贝”传输,帧率可以保持在60 fps以上。实际使用时,只要在TouchDesigner里把输出节点的“Enable Syphon”打开,VJ软件如Resolume就能立刻捕获到完整的颜色空间和透明通道。

Syphon与Spout协议在实时视觉创作中的工作原理

Spout的实现细节

Spout在Windows上采用DirectX 11的共享纹理(DXGI共享句柄)或OpenGL的WGL_NV_DX_interop扩展。发送方创建一个ID3D11Texture2D对象并用IDXGIResource::CreateSharedHandle生成全局句柄,接收方通过OpenSharedResource把这块显存映射进自己的渲染管线。因为句柄是跨进程唯一的,多个软件可以同时读取同一帧画面,这也是现场灯光控制台能够实时同步投影内容的关键。

两者的共通点与差异

  • 共享方式均基于显卡内存,避免CPU搬运。
  • Syphon只在macOS生态内工作,依赖IOSurface;Spout专为Windows设计,依赖DXGI。
  • 在跨平台项目中,常见的做法是分别在Mac上用Syphon、在PC上用Spout,再通过NDI或SRT进行网络桥接。

现场案例:从TouchDesigner到Resolume的即时投影

去年在柏林的一场电子音乐节上,主视觉团队用TouchDesigner生成粒子云,开启了Syphon输出。Resolume的一个层级直接接入Syphon源,随后在每次鼓点触发时把粒子颜色映射到DMX灯具。整个链路从生成到投射不到30 ms,观众甚至能听到鼓声和光斑同步的瞬间惊呼。若把同样的装置搬到Windows平台,Spout把DX11纹理共享给VJ软件,同样实现毫秒级同步,却不需要额外的插件。

从技术层面看,Syphon和Spout把“显卡即内存”这条原则写进了协议栈,省去传统帧缓存再编码的步骤。对创作者而言,意味着可以把原本需要两三分钟的渲染时间压缩到现场即兴的瞬间。

评论(15)

提示:请文明发言

  • 花无缺

    有没有人试过用NDI桥接这两个协议?效果咋样

    3 天前
  • 幻想之舟

    柏林那场演出的光效同步听起来太酷了

    3 天前
  • 七巧板拼图家

    在Windows上试过Spout,确实比NDI快不少

    4 天前
    • 蜜桃哥歌 永久会员

      同感,延迟低很多

      4 天前
  • Mr.BananaGrabber

    所以macOS只能用Syphon,Windows只能用Spout?

    5 天前
  • 梦行客

    之前用Resolume接过TouchDesigner,延迟确实低得离谱

    7 天前
  • 社牛小专家

    Spout在Windows上怎么处理多显示器同步?

    7 天前
  • 搞笑预备役

    原来Syphon用的是OpenGL纹理共享,长知识了

    1 周前
  • 暮色游侠

    这俩协议在现场演出里真是神器啊

    1 周前
加载更多

已全部加载完毕