在 Linux 下进行 Live3D 直播
前言
我在自己的新电脑上装了个 Arch Linux 发行版,接下来就该各种折腾啦。
最近在亲友练手的 3D 模型的基础上做了个能用于直播的 VRM 模型,所以想看看在 Linux 下有没有可用的直播方案。
然而,很遗憾。
好,那就折腾 plusplus!
我的需求:
- 完全免费;
- 至少能展示 VRM 模型;
- 至少能捕捉面部,动捕更好;
- 能通过 OBS 直播。
本文仅适用于 Linux 发行版,并假设读者已经在实体机安装了 Linux。
如果您只是想体验 Linux,强烈建议使用虚拟机或 WSL。
不建议套娃运行软件,如在 Linux 虚拟机运行 Wine 等。
截至文章发布前,我仍未找到较好的一站式解决方案。
如果你发现了更好的解决方案,欢迎评论。所以 Warudo 什么时候支持 Linux 啊
VRigUnity 实现动捕
VRigUnity 是一款基于 MediaPipe 的软件,可以展示 VRM 模型、通过摄像头捕捉动作、发送和接收 VMC(VirtualMotionCapture)协议数据等等。

软件是全英文的,你可能需要一些英文功底。
一些有用的东西:
- 鼠标可以移动画面。
Settings - Model - Select Model自定义 VRM 模型。Settings - Camera修改摄像头参数,设置背景,也可以开启虚拟摄像头。Settings - Advanced - UI Settings - Anti Aliasing设置抗锯齿。Settings - Bones选择想要接受捕捉的骨骼。Start / Stop Camera控制摄像头。
如果没什么别的需求,只用这款软件直播就足够了,直接用虚拟摄像机就好可以用绿幕 + 抠图。
使用虚拟摄像机相关功能前,需要先安装v4l2loopback包。不同发行版安装方式略有差异。
截至文章发布前,软件的虚拟摄像机功能仅支持 Windows。
Linux 功能不完整,只能做到配置(安装)虚拟摄像机,无法传输画面。
手动配置虚拟摄像机 [1]:
1 | |
软件也有一些缺点,比如没法使用 BlendShape。
但是没有关系,我们可以和其他软件联动!
使用 Windows 软件 (以 Warudo 为例)
Windows 下方案有很多,比如VSeeFace、Live3D、VRChat 等等。在这里推荐另一款软件 Warudo,用着很爽。
问题来了,上述软件都是 Windows 软件,Linux 没法直接运行,怎么办?
我觉得可以请出大名鼎鼎的Wine 兼容层了。
Proton (Wine) 兼容层设置
Warudo 是在 Steam 发行的,因此我建议用 Valve 开发的基于 Wine 的Proton 兼容层或者用 Proton GE。
Proton 可以自行安装,也可以通过 Steam 的兼容性设置安装。这个可以参考 Steam Deck 相关教程 [2]。
使用 Proton 7-8 可以直接运行 Warudo;但在 Proton 9,由于默认开启了 NVAPI 支持,直接运行可能会报错。因此,如果使用新版 Proton,需要在 Steam 中设置启动参数:
1 | |
我建议各位如果用 Linux 发行版作为主力系统,CPU 一定要选带核显的,不然后期容易哭死。
VMC 设置
如果直接在软件里调用摄像头,会出现一些令人难蚌的问题。看图说话。


使用 MediaPipe 捕捉并打开摄像头显示,发现摄像头画面异常;使用 OpenSeeFace 发现无法读取(提示 No Frame)。
摄像头本身是正常的,而且如果使用虚拟摄像头等方法,问题依然存在。个人推测是兼容层的问题。
以及,主机与 Wine 程序有一层可悲的厚障壁(大概),除网络通信外,常规通信手段不可用。
我的方案是:在 VRigUnity 进行动捕的基础上,通过 VMC 将数据传到 Warudo。
首先,在 Warudo 中重新配置追踪模板,选择 VMC 模板,一路配置即可,注意记一下端口号,默认为39539。
如果模型的嘴只用了 BlendShape,需要将 “唇形同步” 选项设置为 “永远开启”。
然后在 VRigUnity 中设置相关参数:
- 将
Settings - Advanced - VMC Settings - VMC Sender端口号设置为39539或自行设置的端口号; - 建议关闭
Settings - Advanced - UI Settings - Show Model,并调低窗口大小,以节约资源。

配置完成,Enjoy!

NDI 传输
现在还有最后一座大山摆在面前:如何将画面传给 OBS。
除了最简单的绿幕 + 抠图以外,Warudo 内置了三种画面输出方式 [3]:
- Spout
- NDI
- 虚拟摄像头
这三种方式均支持透明背景输出。其中,Spout 是适用于 Windows 的快速实时路由;NDI(Network Device Interface)是一种通过网络传输视频的接口协议。
由于那层可悲的厚障壁,通过 NDI 传输透明背景画面也许是最好的办法了。
直接安装obs-ndi 插件,然后开启相关设置即可。
经测试,使用 NDI 传输高分辨率画面会产生明显的卡顿和延迟,即使是本机到本机也是如此!
建议缩小输出画面大小、在 OBS 中修改带宽等设置或者使用绿幕 + 抠图的方式采集画面。
使用该插件前,需要先安装 NDI Runtime,安装方式见 GitHub Wiki。
个人建议手动安装到/usr/local目录,Arch 用户也可以找 AUR 包ndi-sdk。
另外,如果手动编译安装,需要下载正确版本的 SDK,否则会报错。
该插件需要开启 Avahi 服务:
1 | |
另外,如果在不同设备间传输,可能需要配置防火墙,参考 Wiki 即可。
我建议大家通过包管理器安装 OBS 插件;如果手动安装,最好安装在用户目录。
在用户目录安装 OBS 插件:
- 在
~/.config/obs-studio目录下新建plugins文件夹。 - 打开插件压缩包。注意 deb 包也可以作为压缩包打开,但需要打开内部
data.tar*压缩包。 - 检查压缩包内容,根据包结构将文件复制到指定位置。
如果压缩包结构是这样的(第一层通常为插件名):
1 | |
请直接解压到~/.config/obs-studio/plugins文件夹。如果压缩包内第一层不是插件名,你可能需要先新建一个文件夹再解压。
如果压缩包结构是下面这样:
1 | |
请参考第一种结构新建对应文件夹,然后把压缩包内usr/lib/x86_64-linux-gnu/obs-plugins下所有内容解压到~/.config/obs-studio/plugins/<plugin-name>/bin/64bit目录,把usr/share/obs/obs-plugins/<plugin-name>下所有内容解压到~/.config/obs-studio/plugins/<plugin-name>/data目录。
如果你的系统不是 64 位 x86 系统,目录会有所变化,但大差不差,自己解决吧。
这条说明可能会作为新文章发布。
总结
经过这么一顿折腾,终于实现了一套 Live3D 直播流程,可喜可贺啊!
话说回来,这东西还是过于折腾了,而且 Arch 提供的 OBS 没有浏览器和 Websocket 功能,想直播还有很长的路要走啊……
通过手动编译安装的方法,笔者的 OBS 具有上述功能。
但由于 Wayland 不支持直接监听键盘鼠标输入,曾经在 Windows 用的很爽的 input-overlay 插件只能监听手柄输入了,哭哭。
等罢。