セミリモートで出番の減ったVエンジニア、勉強会で人気登壇者になります！

# はじめに

この記事は[株式会社ビットキー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/bitkey) 23日目の記事です。
バックエンドエンジニアのびやあき([@byakheee](https://twitter.com/byakheee))が日常の開発シーンでバーチャルエンジニアとしてお仕事する体験記です。

## どんな内容？

これを読むことで以下の情報が得られます。

- リモートワークでモデルを写しながらペアプロ開発に耐えられる現実的な構成
- バーチャル化して仕事をしたことによるフィードバック

## 環境は？

以下のような開発環境を前提にしています。

```
- MacBook Pro
- Docker Desktop (docker compose 常駐)
- Visual Studio Code
- Go言語 (gopls 常駐)

```

## 結論は？

- iPhoneをカメラとして使ってVtube Studioでモデルをレンダリングする
- Vtube Studioの出力をNDIでOBS Studioに映す
- DSP付きのオーディオインターフェースでEQやコンプはハードウェアに任せる
- ペアプロ、社内会議、オンライン勉強会など場所を選べば好評だった。

# プロローグ: バーチャル美少女受肉した日

2020年4月7日、日本における最初の緊急事態宣言が発令されました。ビットキーでも情勢に合わせてリモートワーク環境の整備を進めており、宣言と同時に原則フルリモートワークとなりました。
それに伴って、リモートワークによって気軽なコミュニケーションや文化、Quality of Work を損なうという問題が、会社全体、エンジニア組織、各プロダクトチーム、それぞれの振り返りで提起され、様々な改善活動（KPTのトライのような）が実施されて、社内が面白いことで溢れるお祭りのような状態になったのを覚えています。
施策の１例を挙げると、

- CEOと社内ゲストを呼んで、近況について対談する番組を社内向けに放送
- エンジニアリングマネージャーがお悩み相談ラジオを始める
- 総務（当時はカルチャー＆コミュニケーションチーム）が最近の出来事をほぼ毎日発信するSlackのマガジンチャンネル

などです。
このときの企画がブラッシュアップされて、2022年現在では定期イベント化しているものがあります。
こういった施策の一つとして、私の所属するビットキープラットフォームチーム(BKP)で実施したのが、バ美肉（バーチャル美少女受肉：見た目や声を美少女のように変化させること）して仕事をしようという案です。
どうしてそうなったのか、私も経緯は覚えていません。
経緯はともかく、2019年の9月頃からバーチャル美少女にドハマリしていた僕は、業務の間を縫ってどうやって実現するかを調べ、リモートワークが始まった１週間後には、バーチャル美少女として社内初のオンライン飲み会に参加していました。

<iframe width="415" height="737" src="https://www.youtube.com/embed/OAaKKqGjhW0" title="バ美肉した日 #shorts" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## バーチャル美少女の仕組み

バーチャル美少女になるためには、声と見た目を変化させる必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129363/012754ee-e12a-b977-36fd-a5cbe247366b.png)

声については、マイク(図中のMic)で拾って、ボイスチェンジャー(Voice Changer)を通し、仮想マイク(Virtual Mic)を通して出力する必要があります。
マイク(Mic)はアナログ-デジタル変換を本体から切り離して負荷を分散できる[USBマイク](https://amzn.asia/d/c2WBBSi)を選びました。
ボイスチェンジャー(Voice Changer)は[Gachikoe](https://sakuranesachi.fanbox.cc/)というソフトを使用しました。
仮想マイク(Virtual Mic)は[BlackHole](https://github.com/ExistentialAudio/BlackHole)。
ボイスチェンジャーの出力を仮想マイクと自分のヘッドフォン出力にルーティングするためのサウンドミキサー(Sound Mixer)として[LadioCast](https://apps.apple.com/jp/app/ladiocast/id411213048?mt=12)を使用しました。

*※このときは思いつきませんでしたが、GachikoeはVSTプラグインとしてOBSに組み込めるため、その場合はBlackHoleやLadioCast不要で使えそうです。*

ボイスチェンジャーに声を通すときには設定よりも、録音環境が大事だと感じました。この頃はMacBookProもM1チップではなかったのでファンの音がうるさく、ノイズとして拾ってしまうと変声処理後のノイズが増します。
また、いい声だなと感じる声を出すためには、地声ではなく少し高めのいわゆる「よそゆきの声」を出すほうが良かったです。
妻に相談したところ **「中学生女子みたいなこと言ってんな。みんなそのくらいの頃には自分の可愛い声を知るんだよ」** との金言をいただき、抵抗なく猫をかぶれるようになりました。

見た目については、カメラ(図中のVideo)に写った顔からフェイストラッキングして表情データを取得し、それを元に美少女モデルをレンダリング(Avater Rendering)して、仮想カメラ(Virtual Camera)を通して出力する必要があります。
フェイストラッキングやレンダリングについても負荷分散のため、MacBook ProではなくiPhoneに任せることにしました。
[カスタムキャスト](https://customcast.jp/)というアプリを使うと、美少女モデルを作成してカメラに合わせて動かすことができます。
そうして美少女の写ったiPhoneの画面をQuickTimeでMacにミラーリング(Mirroring)し、[OBS Studio](https://obsproject.com/ja)でウィンドウキャプチャして仮想カメラに出力しました。

色々と負荷分散をさせたにもかかわらず、この構成では負荷が高すぎて、10分ほど続けると声にノイズが乗り始めて声がきこえなくなってしまう問題がありました。
飲み会で少しだけ話したり、進捗MTGで少しだけ話すくらいの用途でしか使えませんでした。

# 第一章: リモートワークは終わるらしい

感染症の波も落ち着いたり、盛り返したりしながら、弊社はセミリモート体制へと推移していきました。

*※フルリモートを続けるべきかについては、諸説あると思いますが、ハードウェアの開発も行っている弊社では出社によるメリットも多く、いいとこ取りをする形でセミリモートとなりました。詳しくはここでは書きません。*

その間、 **「バーチャルライバーとしてMTGしてるびやさん、面白かったしいい声だったよ！」** みたいなフィードバックをちょくちょく貰えるため、なんとか仕事と両立させるために検討した結果、泣く泣くボイスチェンジャーを諦めることにしました。
妻から **「あなたの声、中学生の時から好きだったから、地声にも自信を持って」** と慰められました。
イコライザを使ったり、リバーブやコンプレッサーをかけたり試行錯誤していたら、またその負荷で声にノイズが載るようになってしまったので、[DSP内臓のオーディオインターフェース](https://www.soundhouse.co.jp/products/detail/item/268678/)を購入しました。
オーディオインターフェースに内蔵されているDSP(Digital Signal Processor)は、イコライザやリバーブ、コンプレッサーをハードウェア上で処理してくれます。
定期的にPCを変えることもあったので、ハードウェア上でイコライザなどの設定を保持してくれているのも嬉しいポイントでした。PCが変わってもつなぎ替えるだけでいつもの声が出せます。

久しぶりにバーチャル化を解いて出社すると、その頃チームにジョインしたメンバーからは **「びやさんとはアバターで会ってる時間のほうが長いので違和感がありますね」** とまで言われていました。

**「バーチャルだと優しい」**　というフィードバックも合ったので、バーチャル化を解いたときはことさら穏やかに話すように心がけたりしました。

出社して、バーチャル化を解く時間が増えたこと、事業の目標に合わせて別のプロダクトチームを転々とすることが多かったことから、バーチャル化する機会が減っていきました。
バーチャル化は主にプライベートの時間に検討するようになっていきます。

# 第二章: オンライン勉強会に登壇しよう

2022年に入り、BKPチームに戻ると、メンバーが足りないという問題が提起されていました。
メンバーが適度に流動的なことは良いことですが、流入が少なく、刺激が足りないと考えていました。
それから半年間、採用に関するトライを繰り返した結果、Goの勉強会でメンバーが登壇したのをきっかけに採用が決まるということがありました。
これによって、エンジニアコミュニティへの情報発信や貢献の価値が評価され、BKPチームがもっている知見や面白い文化をもっと発信していこうという流れが加速します。
この流れに乗る形で **「バーチャルエンジニアとして登壇したい！」** と提案したところ二つ返事でOKをもらいました。
僕もチームもノリノリです。

![Untitled.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129363/12c72a94-a32e-80ca-92e8-6927846d37ad.jpeg)

緊張した初登壇でしたが、肯定的な反応ばかりで、コメントも盛り上がってくれました。
登壇の内容に関してもコメントがもらえて、役に立つのであればもっと情報発信したいと思いました。

この登壇の際には、[IRIAM](https://www.live.iriam.com/)というアプリのプレビュー機能を利用してモデルをレンダリングしました。
IRIAMはいわゆる「立ち絵」と呼ばれる全身イラストを読み込ませることで、瞬きや口の開閉をした際の差分を補完してリアルタイムで表情を再現してくれる配信アプリです。
声に関してはイコライザなどをかけたのみで、変声はしていません。

# 第三章: Live2dモデルがほしい

登壇のモチベーションに比例して、バーチャルの姿をアップデートしたいというモチベーションも高まりました。
IRIAMのモデルでは目と口が開閉するだけですが、Live2dモデルであれば顔の向きや、首をかしげるなどの仕草、高度なものだと体の傾きや手の動きも表現できます。
また、Live2dモデルはお気に入りのイラストレーターさんに依頼すれば、その絵柄を自然な形でモデルにすることができます。
Live2dモデルで登壇したいという思いが高じて、お気に入りの姿で登壇したのが、つい先日の12月7日です。

<iframe width="560" height="315" src="https://www.youtube.com/embed/TOyuLiF4QUQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

Live2dモデルのレンダリングには[VTubeStudio](https://store.steampowered.com/app/1325860/VTube_Studio/?l=japanese)を利用しています。
IRIAMの場合と同じようにウィンドウキャプチャを使っても実現できますが、VTube StudioはNDIソースとして出力することができるので、OBS StudioにNDIのプラグインをインスールするとより低負荷で使うことができます（ただし、ネットワークの帯域を使うので職場のLANで使うときは専用のルータを用意したほうが良いかも）。
この構成なら、規模にもよりますがバーチャル化した状態でVisual Studio CodeのLiveShare機能をつかってGo言語のペアプロをしたりすることができます。

参考記事: [M1 Macでobs-ndiを使えるようにする](https://www.kilinbox.net/2021/01/m1-macobs-ndi.html)

モデルを選定したり、依頼するのには[Nizima](https://nizima.com/)というサイトを利用しました。
購入前にモデルをプレビューして、可動部を確認できるのが便利でした。

# エピローグ: バーチャルエンジニアの夢

Mac環境で普段使いできるバーチャルライバー環境を目指して来ましたが、登壇専用にするなら普段使いとは別のものを用意することも考えられます。
いわゆる一張羅というやつですね。

せっかくバーチャル空間に受肉できたのであれば、その空間ならではの見せ方を追求したいと思うところです。
この辺はおそらく、3Dモデルを嗜んでいる方々が詳しいと思うのですが、僕の観測範囲にも見習いたい先駆者が居ます。

<iframe width="560" height="315" src="https://www.youtube.com/embed/Q2B75Vd5QNM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

手足を動かして、資料をポインティングできるのは「ならでは」ですよね。
完全にこの方向に行くかはわかりませんが、表現を工夫して見栄えの良いコンテンツを提供し、ファンを増やしたいなという夢があります。
ただ、コンテンツに価値を付加できない部分にコストをかけるのは嫌なので、表現を工夫した結果、見栄えがよく、納得感があったり、理解の助けになったりするようなものを目指したいですね。

最後に宣伝させてください！ BKPチームでは面白いことを一緒に楽しめる仲間を募集しています。この話を面白いと感じたり、僕の夢に共感してくれる方がいれば、[Devトーク](https://jobs.qiita.com/employers/240/dev_talks/544)でお話ししたいです！
個人的には、バーチャルエンジニアとしてコラボしてくれる方も募集中です！

ここまでお読みいただきありがとうございました！
こちらは[株式会社ビットキー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/bitkey)の23日目ということで、明日24日は弊社のNo1スピードタイパーの白木さん([@tshiraki](https://qiita.com/tshiraki))が担当します。