最近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ヘッドセットやメガネを出したら、連携したいなぁ。

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