最近 macOS アプリを趣味で開発しています。「VCam」というアプリです。

追記: MoguraVR さんがめちゃめちゃわかりやすく記事を書いてくれたみたいです。ありがとうございます!

Mac でも使えるアバターアプリ「VCam」β 版がリリース! Zoom 会議にも対応 - MoguraVR https://www.moguravr.com/vcam

経緯

仕事はフルリモートなので、オンライン会議をすることがありますが、カメラオフだとちょっとさみしいし、 カメラオンにするとバランスボールに乗ってボヨンボヨンしてるところを見られてしまう という問題がありました。

そこで VTuber みたいな感じで参加すれば良さそうと思い、色々試してみましたが、Zoom 等で VTuber 風のアバターを表示するためには OBS などの外部ツールを使ったりする必要があり、気軽にサクッとアバターになれず、面倒でした。

というわけで、macOS で気軽にアバターになれるアプリ「VCam (ブイキャム)」を作ることにしました。

VCam

詳しく知りたいよ、DL したいよという方はこちらからどうぞ。

最初に載せた Twitter の動画を見るとイメージしやすいですが、このアプリ単体で Zoom や Google Meet などにアバターの映像を送ることができます。

技術的には仮想カメラという仕組みを使って、アバターの世界の映像を Zoom などに送っています。
AVFoundationの機能を適切に使っているアプリにならどんなアプリにも映像を送れるので便利です。

他にもiPhone の画面を映す機能スクリーンキャプチャを映す機能絵文字でリアクションする機能などの機能があります。

他の細かな機能やアップデートはこちらの Twitter に動画付きで載せているので、気になる方はフォローお願いします!

https://twitter.com/vcamapp

そういえば、Zoom にも最近アバターになる機能が増えましたね。

この機能のおかげで先日 全員がアバターになってオンライン会議する夢が叶いました。Zoom のアバター機能は影の付け方やアニ文字のような動きが、日本人的にはちょっと怖い感じで逆に面白いのですが、VCam とは方向性が違いそうなので、自分は VCam を使っていきます。

技術的なこと

このアプリ、実はアバターの世界は Unity、それ以外のUI は SwiftUIで作っています。

え、そんなことできるの!?って思う方もいると思いますが、Unity にはUnity as a Library (UaaL)という機能があって、Unity をネイティブアプリの一部に埋め込むことができます、モバイルや Windows なら…

🤔

このアプリは macOS アプリとして作っているので、実は UaaL は使えないんですよね 😢

そこで、独自の方法を編み出して、埋め込みました。
ここで説明するには文章量が長くなりそうなので、どこかの勉強会で話す機会があれば話そうと思います。macOS x Unity x SwiftUI という謎の技術領域なので需要があるかわかりませんが、良さげな会があれば呼んでください。

このアプリには結構面白い実装が入っていて、

  • macOS アプリに Unity 画面を埋め込む
  • macOS 12.3 から使えるようになった新しい画面キャプチャ API
  • iPhone の画面キャプチャ、キャプチャボードの映像等を Swift でハンドリングして、Unity 側で表示
  • Swift と Unity 側でのデータのやり取り I/F を自作ツールで自動生成

などをやっています。

普段 iOS アプリを開発している技術者としてはプラットフォームの API を直接使ってゴリゴリ開発したい標準の 3D 系の API (SceneKit 等) では面倒な 3D の描画を Unity で簡単に実現したい、という個人的な需要を満たしているのがポイントです。

ネイティブで書いているおかげでパフォーマンスチューニングもしやすいです。気軽に日常で使えるコンセプトに反しないよう、トラッキング等をしていても OBS より軽く動くようにしています。

VCam vs OBS

Unity を使っているのに macOS だけで良いの?という話もありますが、そもそもVTuber 系のアプリが Windows ばかりに集中している状況を改善したいという思いもあって作り始めたので、一旦は macOS 向けに進めていきます。

Mac を使っている人がアバターになるための選択肢の一つになれるように、最新のネイティブ機能を活用しながら、アプリを作っていきたいです。

macOS アプリは今回はじめて作ったのですが、iOS の知識で今はなんとなく作れているという感じです。この機会にもう少し学んで、正しい macOS アプリにしていきたい気持ちもあります。

そういえば、野良の macOS アプリって雑にビルドして配布しているのかと思ってましたが、公証 (Notarization) を受けて配布していたのですね。最初に作ったアプリを別の Mac で動かしたら起動しなくて困りました。
WWDC21 の Faster and simpler notarization for Mac apps というセッションで公証を受けるための最新の方法が 6 分でわかりました、ありがとう WWDC。macOS は知らないことが多く、成長してる感があって楽しい段階です。

あと、今は開発フローが完全には整っていないのですが、誰でも簡単に開発できる状況が作れたら、少しずつ OSS 化してみんなで開発できたらいいなと思ってます。

Apple が AR ヘッドセットやメガネを出したら、連携したいなぁ。

長くなりましたが、まだ機能や品質が完璧ではないですが、よかったら使ってみてください。